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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
ranger93
Вымогатель припоя
Сообщения: 560
Зарегистрирован: Пт июл 02, 2010 19:30:22
Откуда: Новосибирск / Магнитогорск

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

Сообщение ranger93 »

FreshMan, ну и напоследок посоветую грызть datasheet, там ближе к концу есть список команд с расшифровкой сокращения или аббревиатуры :) , действием и временем, за которое действие выполняется.
Главное, чтоб был источник ЭДС, а с остальным разберемся :).
Реклама
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

Лучше все таки здесь
ranger93 писал(а):...действием и временем, за которое действие выполняется
Уточню, что время выражено в тактах.
Реклама
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

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

Сообщение Jack_A »

Alexeyslav писал(а): например "побитное И" и "логическое И" две разные вещи и работают совершенно по разному.


Вот с этого места ... "побитное И" -- это AND(ANDI), а логическое ? Случайно не перепутано с Си, где
z = x & y и if ( x && y ) -- действительно разные вещи ?
pimple2006
Первый раз сказал Мяу!
Сообщения: 20
Зарегистрирован: Ср фев 08, 2012 22:58:32
Откуда: Лебедянь

сравнить значение ацп с константой

Сообщение pimple2006 »

здравствуйте,подскажите как на ассемблере сравнить константу со значением,полученного с ацп на асме :))
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

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

Сообщение pyzhman »

Скорее всего коллега имел ввиду даже не сам язык, а алгоритм.
Docendo discimus
Реклама
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

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

Сообщение ploop »

pimple2006, CP, CPC, CPI
Реклама
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

Вот с этого места ... "побитное И" -- это AND(ANDI), а логическое ? Случайно не перепутано с Си, где
z = x & y и if ( x && y ) -- действительно разные вещи ?


А причем тут Си? Эта вещь касается компилятора, верней даже не компилятора а препроцессора. Все эти выражения вполне работают и для ассемблера - но только при вычислении констант и в директиве ".if" к примеру(хотя по большому счету там тоже константа).

подскажите как на ассемблере сравнить константу со значением,полученного с ацп на асме


Пользуюсь таким макросом:

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

.macro comparew_iflo ; AH, AL , C константа, метка для перехода когда число меньше константы
 
 mov   tempi, @1
 mov   tempih, @0
 SUBI   tempi, low(@2)
 SBCI   tempih, high(@2)
 BRLO   @3

.endmacro


Для него нужно чтобы регистры tempi и tempih были объявлены в области R16...R31.
Параметром макроса могут быть любые регистры, в которые надо будет загрузить значение с АЦП, либо сократить макрос и загружать значение АЦП непосредственно в tempi и tempih.
Последнюю инструкцию можно заменить на BRHI - для перехода на метку если значение БОЛЬШЕ, BREQ - для перехода когда значение строго РАВНО.
Так же можно внутрь макроса запихнуть считывание с АЦП, тогда количество параметров сократится - надо будет указать только константу с которой сравниваем, и куда перейти.
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

Нее. CP и CPC лучше. Например, сравнить не теряя значений

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

COMP:
   CP   R0,R10
   CPC   R1,R11
   CPC   R2,R12
   CPC   R3,R13
   RET
Ничего и никуда не надо переносить; просто работаем по флагам.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

Тогда константу придется переносить в регистры... один фиг.
Да и использование подпрограмм в данном случае слишком накладно - вызов подпрограммы сравним с временем её выполнения, даже больше. Макросы в данном случае более гибки, а сравнение при помощи CPI - к тому же экономит регистры, особенно когда в конкретных ситуациях сравниваемое значение находится всегда в определенных регистрах - отпадает необходимость их переносить.
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

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

Сообщение Jack_A »

Alexeyslav писал(а):
"побитное И" -- это AND(ANDI), а логическое ?


А причем тут Си? Эта вещь касается компилятора, верней даже не компилятора а препроцессора. Все эти выражения вполне работают и для ассемблера - но только при вычислении констант и в директиве ".if" к примеру(хотя по большому счету там тоже константа).



Я все-таки зануда и не позволю ускользнуть от ответа :) . Пожалуйста, дайте мнемонику команды "логическое И", которая отличалась бы от "побитное И" .
Аватара пользователя
Kavka
Мудрый кот
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

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

Сообщение Kavka »

Jack_A писал(а):Я все-таки зануда и не позволю ускользнуть от ответа :) . Пожалуйста, дайте мнемонику команды "логическое И", которая отличалась бы от "побитное И" .

Если считать, что любое число больше нуля есть "истина", число равное нулю есть "ложь", а рассматривать только единичные регистры, то мнемоника будет "add". Вот только на проверку результата надо будет ещё две команды.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

Причем тут мнемоники команд? Логические операции и арифметика о которой идет речь стоит вообще НАД компилятором - реализуется она на уровне препроцессора.
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

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

Сообщение Jack_A »

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

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

Сообщение FreshMan »

насколько я правильно понял, если шо то поправте, команды rjmp, rcall используются в МК с обемом флеша меньше или равно 8кБ,
в тех МК где обьем флеша перевалил за 8кБ мы должны использовать jmp, call.
мне вот жутко интерестно, а почему оно сделано именно так, почему идет такое деление до и после, почему нельзя просто использовать jmp,call или rjmp, rcall ? :dont_know:
Tell Me The Truth
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

FreshMan писал(а):почему нельзя просто использовать jmp,call

Используй, кто тебе не даёт. Только занимают такие команды 2 маш. слова (4 байта), а не 1.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

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

Сообщение Jack_A »

Потому что в RJMP под адрес перехода отведено 12 бит -- от -2k до +2k . Если камень маленький, этого хватает.
Кстати, в "толстых" МК RJMP-ом тоже никто не запроещает пользоваться. А вот наоборот -- облом-с. Маленькие камни просто не понимают команды JMP .
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

Gudd-Head писал(а):Только занимают такие команды 2 маш. слова (4 байта)

почему?
Jack_A писал(а):Кстати, в "толстых" МК RJMP-ом тоже никто не запроещает пользоваться.

если в них можна юзать RJMP то зачем тогда придумали JMP ?
запутался я вовсе...., ничего не понимаю :dont_know:
Tell Me The Truth
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

FreshMan писал(а):запутался я вовсе...., ничего не понимаю :dont_know:

Да потому что, бл., как ты запихнёшь 16-ти битный адрес метки (куда указывает jmp/call) чтобы прыгать в пределах 128 кбайт, если вся команда занимает 16 бит?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

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

Сообщение Jack_A »

FreshMan писал(а):если в них можна юзать RJMP то зачем тогда придумали JMP ?


Так для того, чтобы перескочить дальше, чем на +-2k ! Можно, конечно, через промежуточные точки :
RJMP L1
L1: RJMP L2 ...
но это было бы уж совсем "через Альпы" :)
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

Jack_A, а шо такое +-2k ?
Tell Me The Truth
Ответить

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