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

Обсуждаем контроллеры компании Atmel.
Ответить
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

FreshMan писал(а):мы можем использовать 2 слова
Можем конечно, например CALL/JMP, но вот в чем беда 2х словные команды занимают больше памяти и считываются в 2 раза дольше. Не знаю как это кратко объяснить, может чем-то поможет эта статья... Смысл в том, чтобы максимум команд, которые используются чаще всего закодировать минимумом бит (в данном случае 16-ю или 32-я). Так вот, если для решения того, будет ли команды 16 или 32 разрядная, использовать 1 бит, то для всех возможных сочетаний команд и операторов остается 15 бит, 32768, вроде много, но если посмотреть все коды операций AVR станет понятно что это предел, сюда не поместились даже так необходимые на первый взгляд операции с константой для младших регистров. Но зато они все выполняются за 1 такт (не считая умножения и переходов) и занимают одно слово, а для редко используемых CALL/JMP не жалко и 2 слов.
Для одной только LDI R15,XX пришлось бы задействовать 256 кодов, если пихать ее в однословные команды.
Можно было запихнуть в 2-словные команды не 2 а 4 команды, но большого толку от этого не было бы, а увеличение таких команд в 2 раза 1) уменьшает адресное пространство CALL/JMP в 2 раза 1) делает эти команды в 2 раза медленнее и длиннее. Вы готовы ради универсальности команд заплатить быстродействием в 2 раза?
Чтобы определить сколько команд должно быть 2х словными достаточно статистически посчитать количество используемых команд в программах и построить дерево кодирования Хаффмана, предполагаю что пути до команд CALL/JMP были самые длинные, а остальные гораздо короче, поэтому их оставили 2-словными.
Ну и не стоит забывать тот факт, что в младших AVR-ках 2-словных команд вообще нет!

FreshMan, вы лезите в глубокие дебри процессорной архитектуры, я понимаю что это интересно, но чтобы ответить приходится писать посты на пол-страницы. Если так интересно, лучше найдите какой-нибудь ресурс по устройству микропроцессорных систем.
Реклама
Опытный кот
Аватара пользователя
Сообщения: 838
Зарегистрирован: Вт апр 12, 2011 18:38:19
Откуда: с Земли

Сообщение coredumped »

Engineer_Keen писал(а):Если так интересно, лучше найдите какой-нибудь ресурс по устройству микропроцессорных систем.
Вот ядро AVR в исходниках http://opencores.org/project,avr_core Глубже копать уже не куда :)
Все будет только лучше, в крайнем случае - хуже.
Реклама
Мудрый кот
Аватара пользователя
Сообщения: 1812
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Сообщение Kavka »

FreshMan, если не знакомы, то ознакомьтесь с материалами дающими представление о ключевых идеях CISC и RISC архитектур процессоров. Если знакомы, то перечитайте и подумайте. Надеюсь, что вопросы отпадут сами собой...
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

coredumped писал(а):Вот ядро AVR в исходниках http://opencores.org/project,avr_core Глубже копать уже не куда :)
Данный путь мною указан уже был однажды... :)))
Ну кстати не факт что эти именно то, что находится внутри AVRок, просто идентичная функциональность, ведь способов сделать одно и тоже разными методами множество :)
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Сообщение FreshMan »

Engineer_Keen писал(а):FreshMan, вы лезите в глубокие дебри процессорной архитектуры,
прошу прощения что ткнул свой нос куда не следует........, осознаю что моего багажа знаний еще не достаточно дабы поднимать подобные вопросы :oops:
с вашего разрешения задам вопросы по проще
1) где бы посмотреть принципиальную схему ядра AVR ? а то в даташитах только структурная :)
2)разрядность МК определяется разрядностью его шиной данных или АЛУ ?
3)почему нету единого стандарта в языке ассемблер ? к примеру, мне приходилось смотреть прогу написанную на асме для контроллера фирмы сименс ......, так там L - это аналог LDI, а Т - это аналог OUT
почему все это дело не стандартизировано......, чтобы LDI был и в Африке LDI :))
Tell Me The Truth
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

FreshMan писал(а):прошу прощения что ткнул свой нос куда не следует........, осознаю что моего багажа знаний еще не достаточно дабы поднимать подобные вопросы :oops:
Уж лучше совать нос в контроллер, чем например, в бутылку с водкой :wink:
FreshMan писал(а):1) где бы посмотреть принципиальную схему ядра AVR ? а то в даташитах только структурная :)
Так вам производитель ее и открыл, ага :))) Можете как уже сказано выше залезть на OPENCores, и скачать оттуда проект для ПЛИС, но вам придется немного освоить Quartus (или другую среду для разработки систем на ПЛИС)
FreshMan писал(а):2)разрядность МК определяется разрядностью его шиной данных или АЛУ ?
Вроде обычно эти размерности одинаковые...
FreshMan писал(а):3)почему нету единого стандарта в языке ассемблер ? к примеру, мне приходилось смотреть прогу написанную на асме для контроллера фирмы сименс ......, так там L - это аналог LDI, а Т - это аналог OUT
почему все это дело не стандартизировано......, чтобы LDI был и в Африке LDI :))
Потому мы говорим по русски, а англичане по английски, так получилось исторически, ну и просто особенности ассемблеров такие, что иногда бывает удобнее команду обозвать по своему.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Сообщение FreshMan »

Engineer_Keen писал(а):Так вам производитель ее и открыл, ага
а че боятся то ? если технология, схема, запатентована то пускай выложат ее на всеобщее обозрение....., пущай народ полюбуется....., а может они боятся того что разузнаю что и атмел не чиста наруку и скопипастила свою схему ? :))
короче выходит что там все шито, крыто :tea:
1) у нас МК 8 разрядный, а длина машинного слова равна 2 байтам......, получается какая то неувязочка....., вы тут постом выше говорили о быстродейсьтвии....., так вот выходит чтоб достичь максимальной быстродействии надо чтобы длина машинного слова соответствовала разрядности МК, тогда за один такт МК будет полностью все переваривать...., у атмела в этом плане маленькое несоответствие......., странно как то :roll:
Engineer_Keen писал(а):Потому мы говорим по русски, а англичане по английски, так получилось исторически, ну и просто особенности ассемблеров такие, что иногда бывает удобнее команду обозвать по своему.
зачем же тогда человечество придумало всевозможные стандарты когда их не придерживаются ?
выходит если я завтра создам контору под названием рога да копыта которая будет штамповвать МК под названием кошачий хвост......., мы напишем свой компилятор....., перековеркаем название команд из асма, но их функцию оставим, то это все-равно будет асм только в ином виде........, зачем тогда стандарты то и что тогда понимать под ассемблером ? :dont_know:
Tell Me The Truth
Опытный кот
Аватара пользователя
Сообщения: 838
Зарегистрирован: Вт апр 12, 2011 18:38:19
Откуда: с Земли

Сообщение 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 скоро станет историей, как ламповые ЭВМ. Вот так.
Простите за многабукв.
Все будет только лучше, в крайнем случае - хуже.
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

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

Сообщение ploop »

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

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

Сообщение petrenko »

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

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

Сообщение FreshMan »

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

Сообщение ploop »

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

Сообщение coredumped »

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

Сообщение petrenko »

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

Сообщение ploop »

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

Сообщение coredumped »

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

Сообщение ploop »

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

Сообщение FreshMan »

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

Сообщение 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:
Ответить

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