Ассемблер (ASM) для AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
coredumped
Опытный кот
Сообщения: 838
Зарегистрирован: Вт апр 12, 2011 18:38:19
Откуда: с Земли

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение coredumped »

Engineer_Keen писал(а):Ну кстати не факт что эти именно то, что находится внутри AVRок, просто идентичная функциональность, ведь способов сделать одно и тоже разными методами множество :)
Ясное дело, что это не оригинальное ядро, но понять как это работает можно :) Самый простой путь :)))
где бы посмотреть принципиальную схему ядра AVR ? а то в даташитах только структурная :)
Я вам ссылку выше дал - это и есть схема. Хотите квадратиков и проводочков - соберите это в Quartus, запустите RTL Viewer и наслаждайтесь красотой :)
На самом деле, многие вещи на Verilog или VHDL выглядят более понятно, чем схема с тысячами триггеров и логических вентилей.

Если опустить шутки - то действительно познавательная штука и оформлена очень грамотно.
1) у нас МК 8 разрядный, а длина машинного слова равна 2 байтам......,

Это разрядность его шины данных. Те он оперирует с 8-битными данными, и это не связано с длинной его команд. Память программ у AVR 16-битная, что позволяет делать выборку кода за один такт.
завтра создам контору под названием рога да копыта которая будет штамповвать МК под названием кошачий хвост.
Это - пожалуйста. Создать новую архитектуру вполне реально, создать компиляторы и прочий софт - то же. А вот заставить производителей ее внедрять - тут нужны какие-то особые изюмины, чтоб привлечь разработчиков. Вот чем сейчас берет ARM - низкая цена при неплохой производительности, малое потребление итп. Но переломить сознание разработчиков и производителей непросто. Нужны веские аргументы. Вот тут сколько холиваров прошло AVR vs ARM? Тем не менее приверженцы AVR не сдались, но задумались (кмк). Допустим, что Вас поддержат и начнется массовое внедрение "кошачих хвостов" - вот Вы и создали новый стандарт. Стандарты создаются, нарушаются, становятся не актуальными, обновляются и исчезают. Был TTL 5V - сейчас TTL 3.3V, 2.5V, 1.8V. 5V скоро станет историей, как ламповые ЭВМ. Вот так.
Простите за многабукв.
Все будет только лучше, в крайнем случае - хуже.
Реклама
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3871
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Engineer_Keen »

FreshMan писал(а):1) у нас МК 8 разрядный, а длина машинного слова равна 2 байтам......, получается какая то неувязочка.....,
В чем неувязочка? В машинном слове, которое тут подразумевается данных как раз 8 бит максимум (забудем пока про команды перехода), а остальное это можно скорее назвать синалами управления. Читаются за такт естественно все 16 бит, я просто выразился не совсем верно...
FreshMan писал(а):зачем же тогда человечество придумамло всевозможные стандарты когда их не придерживаются ?
А есть стандарт на ассемблер?
Нет стандарта на внутреннее устройство контроллера, и нет стандарта на ассемблер. Каждый делает так как считает правильно. Но никто не мешает сделать универсальный компилятор, например у меня в авр-студии есть куча макросов, которые делают авр-ассемблер похожим на mcs51, и наоборот. Это привычно, а следовательно удобно.
Реклама
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ploop »

зачем же тогда человечество придумало всевозможные стандарты когда их не придерживаются ?
Ассемблер - это прямая трансляция машинных команд в более понятный вид. Прямая значит без изменений вообще. Так что "стандарт на ассемблер" звучит так же, как и "стандарт на архитектуру". А они у нас, как известно, разные.

Если подняться на уровень выше, всего на один уровень, уже есть стандарт - Си.
petrenko
Друг Кота
Сообщения: 5322
Зарегистрирован: Вт фев 21, 2012 13:51:55
Откуда: Начинающий
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение petrenko »

Вообще то Форт "цуть цуть", капельку ближе к asm чем C . 8)
Во всяком случае BIOS некоторых машин писали на Форт. :wink:
Но это непринципиально.
Просто маленкое лирическое отступление, уж извините.. :oops:

ps А в некоторых системах можно даже в микрокоде написать процедуры ! :o
( прямо в "binary" - управляющие поля задавать ! выполнение таких процедур похоже на EMT но без занесения счётчика в стек.. ) :music:
< виртуальная "кнопочка" >--( WWW ) <- Убедительная просьба интересующимся старыми компьютерами типа РК86 - не пишите в теме в барахолке, пишите Ваши вопросы в ( лс ) пожалуйста
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение FreshMan »

ploop писал(а):Если подняться на уровень выше, всего на один уровень, уже есть стандарт - Си.
вот именнно это удивляет и будоражит мой разум......, всего одна ступень и такие отличия :roll:
ploop писал(а):"стандарт на ассемблер" звучит так же, как и "стандарт на архитектуру". А они у нас, как известно, разные.
выходит при разных архитектурах, тоесть, припустим, если у вас ядро состоит только из т-торов N-P-N, а у меня только из P-N-P то для вашей архитектуры команда LDI будет транслироваться как 1111 а для моей как 0000
отсюда выходит что для каждой архитектуры свой компилятор и соответственно команды я могу там называть как мне заблагорассудится
ход моих мыслей правильный ?
Tell Me The Truth
Реклама
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ploop »

отсюда выходит что для каждой архитектуры свой компилятор
Надо же, какой прогресс! :)
Да, именно так.
и соответственно команды я могу там называть как мне заблагорассудится
Разумеется, если это твой компилятор. Только не компилятор, правильнее будет ассемблер, компилятор - это для ЯВУ.
Реклама
Аватара пользователя
coredumped
Опытный кот
Сообщения: 838
Зарегистрирован: Вт апр 12, 2011 18:38:19
Откуда: с Земли

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение coredumped »

FreshMan писал(а): отсюда выходит что для каждой архитектуры свой компилятор и соответственно команды я могу там называть как мне заблагорассудится
ход моих мыслей правильный ?
Правильный ход мысли. Вы разрабатываете архитектуру, продумываете систему команд и, соответстенно, их кодировку. А потом уже пишете компиляторы под сложившуюся систему команд.
Все будет только лучше, в крайнем случае - хуже.
petrenko
Друг Кота
Сообщения: 5322
Зарегистрирован: Вт фев 21, 2012 13:51:55
Откуда: Начинающий
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение petrenko »

ploop писал(а):...
и соответственно команды я могу там называть как мне заблагорассудится
Разумеется, если это твой ... ассемблер...
Вспомнил .. из "древности" - времена "динозавров", так сказать..
С помощью назначения "сининимов"- была такая возможность - русифицировали мнемоники... "как заблагорассудится".. :)
Получалось нечто оригинальное :
СчВх
ЗпР
Обм
и т.п. Впрочем на принципиальных схемах подобные обозначения до сих пор можно увидеть..
< виртуальная "кнопочка" >--( WWW ) <- Убедительная просьба интересующимся старыми компьютерами типа РК86 - не пишите в теме в барахолке, пишите Ваши вопросы в ( лс ) пожалуйста
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ploop »

Кстати, недостаток компиляторов под некоторые архитектуры является довольно большой проблемой.
Например взять GCC - GNU Compiler Collection, это набор компиляторов под различные языки и различные архитектуры, в рамках проекта GNU (свободное ПО). Проблема в том, что некоторые архитектуры им не поддерживаются, так как производитель предлагает свой компилятор на своих условиях. Например - STM8, очень завидная архитектура, но GCC нет под него.
Аватара пользователя
coredumped
Опытный кот
Сообщения: 838
Зарегистрирован: Вт апр 12, 2011 18:38:19
Откуда: с Земли

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение coredumped »

Это жлобство. Отчасти поэтому STM8 не получила такого распространения, как, например, AVR. На компиляторах много не заработаешь, лучше дать их на халяву и пожать плоды от продаж микросхем в больших количествах.
Все будет только лучше, в крайнем случае - хуже.
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ploop »

лучше дать их на халяву и пожать плоды от продаж микросхем в больших количествах.
Их и отдавать не надо, просто открыть спецификации, народ быстро портирует.
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение FreshMan »

я вот тут слыхал, интерестно правла ди это, что в IDE компаниии IAR при написании программы для той платформы которую она поддерживает программисту не надо заморачиваться со "стандартами" языков разных компиляторов......., там все приведено под общий знаменатель........ и пррограммист выбирает платформу и просто пишет прогу.
Tell Me The Truth
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3871
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Engineer_Keen »

ploop писал(а):Только не компилятор, правильнее будет ассемблер, компилятор - это для ЯВУ.
Годный ассемблер позволяет такое, что из него можно сделать даже некое подобие ЯВУ :)))
Спойлер

Код: Выделить всё

	WARP_TO	EARTH
	.org ORBIT3
EARTH:	LOAD_CARGO CORE,FUEL_CELL
	LOAD_TO_SHIP REACTOR,CORE
	ON ENGINE,POWER
	OFF LANDING_GEAR,POWER
SATURN:	ON WARP,POWER
	VOYAGE_TO MOON
	WARP_TO	SATURN
MOON:	LOAD_CARGO FOOD,OMNOMNOM
DINNING_ROOM: EAT FOOD
	GO_IF_NOT_ZERO_GRAVITY_TO DINNING_ROOM
	GO_BACK
Это мигает светодиодом (PB0 на TINY2313), при условии, что в начале воткнуть это:
Спойлер

Код: Выделить всё

	.include "tn2313def.inc"
	.def	CORE=R16
	.def	FOOD=R17
	.equ	ORBIT3=INT_VECTORS_SIZE
	.equ	FUEL_CELL=Low(RAMend)	
	.equ	OMNOMNOM=0xFF
	.equ	POWER=PB0
	.equ	REACTOR=SPL
	.equ	ENGINE=DDRB
	.equ	LANDING_GEAR=PORTB
	.equ	WARP=PINB
	.macro	WARP_TO
	RJMP	@0
	.endm
	.macro	VOYAGE_TO
	RCALL	@0
	.endm
	.macro ON
	SBI	@0,@1
	.endm
	.macro	OFF
	CBI	@0,@1
	.endm
	.macro	LOAD_CARGO
	LDI	@0,@1
	.endm
	.macro	EAT
	DEC	@0
	.endm
	.macro GO_BACK
	RET
	.endm
	.macro	LOAD_TO_SHIP
	OUT	@0,@1
	.endm
	.macro	GO_IF_NOT_ZERO_GRAVITY_TO
	BRNE	@0
	.endm
FreshMan писал(а):в IDE компаниии IAR при написании программы для той платформы которую она поддерживает программисту не надо заморачиваться со "стандартами" языков разных компиляторов.......
ИМХО это не сложно сделать, с Си вопросов нет, там и так стандарт, а с ассемблером тоже не проблема - IDE же знает ассемблер каждой архитектуры с которой работает, поэтому можно сделать так, что если например при компиляции кода для AVR попадется команда MOV R16,0xFF, то он переведет ее в LDI, а если для MCS51, то так и оставит MOV, другой вопрос, а что из них считать стандартом? :dont_know:
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ploop »

что в IDE компаниии IAR при написании программы для той платформы которую она поддерживает программисту не надо заморачиваться со "стандартами" языков разных компиляторов
Со стандартами нигде не надо заморачиваться, на то они и стандарты. IAR хорош тем, что у него во-первых дофига компиляторов для разных архитектур, во-вторых тем, что всё это собрано в одну IDE, и в третьих - с хорошим отладчиком под всё это дело.
Плох - ценой.
Аватара пользователя
GRafGRay
Прорезались зубы
Сообщения: 223
Зарегистрирован: Вт окт 02, 2007 14:43:23
Откуда: Ростов-на-Дону
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение GRafGRay »

Доброго времени суток!
имеется вот такой кусочек кода:
ldi XH,High(9876)
ldi XL,Low(9876)

ldi ZL,Low(1000)
ldi ZH,High(1000)

clr R16
cp XL,ZL
cpc XH,ZH
brlo PC+5
sub XL,ZL
sbc XH,ZH
inc R16
rjmp PC-6
sts Digit,R16

собственно прога компилируется но выполняется не так как мне бы хотелось, в Digit не записывается значение R16
что я не так делаю?
При наличии отсутствия пропитанных шпал - это будет не трамвай а одно горе!
Аватара пользователя
ILYAUL
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ILYAUL »

Код: Выделить всё

ldi XH,High(9876)
	ldi XL,Low(9876)

                 ldi ZL,Low(1000)
	ldi ZH,High(1000)

	clr R16
MET2:	cp XL,ZL
	cpc XH,ZH
	brlo MET1
	sub XL,ZL
	sbc XH,ZH
	inc R16
	rjmp MET2
MET1:	sts Digit,R16
А так
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение akl »

GRafGRay Хотя, Ваш код заменяется

Код: Выделить всё

	.equ	digit	=$70
	LDI	R16,(9876/1000)
	sts Digit,R16
но, понимая, что это обучающая программа и она у меня выполняется в AVRSTUDIO 3.21, следует помечать точки переходов как показано выше уважаемым ILYAUL. Возможностями "препроцессора" ассемблера тоже не следует пренебрегать.
Аватара пользователя
vek
Вымогатель припоя
Сообщения: 563
Зарегистрирован: Чт апр 16, 2009 04:53:41

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение vek »

на данном примере ему наверное хочется в перспективе научиться заменять не как у вас,а LDI на что то типа LDS :)
В первый раз меня ударило током - и я подумал что ни черта не соображаю в электричестве. Во второй раз был аккуратнее и меня не ударило - теперь я возомнил из себя крутого микроэлектронщика.
Аватара пользователя
vek
Вымогатель припоя
Сообщения: 563
Зарегистрирован: Чт апр 16, 2009 04:53:41

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение vek »

Помогите разобраться с командами subi,sbci. Чего-то недогоняю конкретно со сложением,совсем путаюсь как там происходит все.
Как контроллер отличает 255 от -1? Если можно,подскажите в столбик и с яркими картинками :) про дополнительный код.Наверное чего-то упускаю из виду,а что не пойму.
В первый раз меня ударило током - и я подумал что ни черта не соображаю в электричестве. Во второй раз был аккуратнее и меня не ударило - теперь я возомнил из себя крутого микроэлектронщика.
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение akl »

Обратите внимание на разницу мнемоник этих замечательных команд.
Разберите в картинках пример, обращая внимание на флаг переноса C
Спойлер

Код: Выделить всё

GO:
	LDI	R20,BYTE4(6666666)
	LDI	R21,BYTE3(6666666)
	LDI	R22,HIGH(6666666)
	LDI	R23,LOW(6666666)
	
	SUBI	R23,LOW(-6666666)
	SBCI	R22,HIGH(-6666666)
	SBCI	R21,BYTE3(-6666666)
	SBCI	R20,BYTE4(-6666666)

	STS	$63,R23
	STS	$62,R22
	STS	$61,R21
	STS	$60,R20
	RJMP	GO
Используя различные сочетания значений R20...R23 и констант, убедитесь, что если значения в R20...R23, констант и результата находятся в области определения разрядной сетки (для 4-х байт от -2147483648 до +2147483647) результат будет правильным.
vek писал(а):Как контроллер отличает 255 от -1?
Ему пофиг. Контроллер выполняет действия в зависимости от используемых условий, которые определяются состоянием флагов регистра SREG.
Спойлер
переходы.GIF
Ответить

Вернуться в «AVR»