Ассемблер (ASM) для AVR в вопросах и ответах
- ranger93
- Вымогатель припоя
- Сообщения: 560
- Зарегистрирован: Пт июл 02, 2010 19:30:22
- Откуда: Новосибирск / Магнитогорск
Re: Ассемблер (ASM) для AVR в вопросах и ответах
FreshMan, ну и напоследок посоветую грызть datasheet, там ближе к концу есть список команд с расшифровкой сокращения или аббревиатуры
, действием и временем, за которое действие выполняется.
Главное, чтоб был источник ЭДС, а с остальным разберемся
.
- Реклама
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Лучше все таки здесь
Уточню, что время выражено в тактах.ranger93 писал(а):...действием и временем, за которое действие выполняется
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Alexeyslav писал(а): например "побитное И" и "логическое И" две разные вещи и работают совершенно по разному.
Вот с этого места ... "побитное И" -- это AND(ANDI), а логическое ? Случайно не перепутано с Си, где
z = x & y и if ( x && y ) -- действительно разные вещи ?
-
pimple2006
- Первый раз сказал Мяу!
- Сообщения: 20
- Зарегистрирован: Ср фев 08, 2012 22:58:32
- Откуда: Лебедянь
сравнить значение ацп с константой
здравствуйте,подскажите как на ассемблере сравнить константу со значением,полученного с ацп на асме 
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Скорее всего коллега имел ввиду даже не сам язык, а алгоритм.
Docendo discimus
- Реклама
Re: Ассемблер (ASM) для AVR в вопросах и ответах
pimple2006, CP, CPC, CPI
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Вот с этого места ... "побитное И" -- это 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 - для перехода когда значение строго РАВНО.
Так же можно внутрь макроса запихнуть считывание с АЦП, тогда количество параметров сократится - надо будет указать только константу с которой сравниваем, и куда перейти.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Нее. 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 в вопросах и ответах
Тогда константу придется переносить в регистры... один фиг.
Да и использование подпрограмм в данном случае слишком накладно - вызов подпрограммы сравним с временем её выполнения, даже больше. Макросы в данном случае более гибки, а сравнение при помощи CPI - к тому же экономит регистры, особенно когда в конкретных ситуациях сравниваемое значение находится всегда в определенных регистрах - отпадает необходимость их переносить.
Да и использование подпрограмм в данном случае слишком накладно - вызов подпрограммы сравним с временем её выполнения, даже больше. Макросы в данном случае более гибки, а сравнение при помощи CPI - к тому же экономит регистры, особенно когда в конкретных ситуациях сравниваемое значение находится всегда в определенных регистрах - отпадает необходимость их переносить.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Alexeyslav писал(а):"побитное И" -- это AND(ANDI), а логическое ?
А причем тут Си? Эта вещь касается компилятора, верней даже не компилятора а препроцессора. Все эти выражения вполне работают и для ассемблера - но только при вычислении констант и в директиве ".if" к примеру(хотя по большому счету там тоже константа).
Я все-таки зануда и не позволю ускользнуть от ответа
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Jack_A писал(а):Я все-таки зануда и не позволю ускользнуть от ответа. Пожалуйста, дайте мнемонику команды "логическое И", которая отличалась бы от "побитное И" .
Если считать, что любое число больше нуля есть "истина", число равное нулю есть "ложь", а рассматривать только единичные регистры, то мнемоника будет "add". Вот только на проверку результата надо будет ещё две команды.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Причем тут мнемоники команд? Логические операции и арифметика о которой идет речь стоит вообще НАД компилятором - реализуется она на уровне препроцессора.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Да, когда вчитался, понял, что речь идет о вычислении выражений в константах, макросах и т.п. , а не машинных командах. Так что зря я полез в полемику ни о чем. Примите мои уверения и пр. и пр. 
Re: Ассемблер (ASM) для AVR в вопросах и ответах
насколько я правильно понял, если шо то поправте, команды rjmp, rcall используются в МК с обемом флеша меньше или равно 8кБ,
в тех МК где обьем флеша перевалил за 8кБ мы должны использовать jmp, call.
мне вот жутко интерестно, а почему оно сделано именно так, почему идет такое деление до и после, почему нельзя просто использовать jmp,call или rjmp, rcall ?
в тех МК где обьем флеша перевалил за 8кБ мы должны использовать jmp, call.
мне вот жутко интерестно, а почему оно сделано именно так, почему идет такое деление до и после, почему нельзя просто использовать jmp,call или rjmp, rcall ?

Tell Me The Truth
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
FreshMan писал(а):почему нельзя просто использовать jmp,call
Используй, кто тебе не даёт. Только занимают такие команды 2 маш. слова (4 байта), а не 1.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Потому что в RJMP под адрес перехода отведено 12 бит -- от -2k до +2k . Если камень маленький, этого хватает.
Кстати, в "толстых" МК RJMP-ом тоже никто не запроещает пользоваться. А вот наоборот -- облом-с. Маленькие камни просто не понимают команды JMP .
Кстати, в "толстых" МК RJMP-ом тоже никто не запроещает пользоваться. А вот наоборот -- облом-с. Маленькие камни просто не понимают команды JMP .
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Gudd-Head писал(а):Только занимают такие команды 2 маш. слова (4 байта)
почему?
Jack_A писал(а):Кстати, в "толстых" МК RJMP-ом тоже никто не запроещает пользоваться.
если в них можна юзать RJMP то зачем тогда придумали JMP ?
запутался я вовсе...., ничего не понимаю

Tell Me The Truth
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
FreshMan писал(а):запутался я вовсе...., ничего не понимаю
Да потому что, бл., как ты запихнёшь 16-ти битный адрес метки (куда указывает jmp/call) чтобы прыгать в пределах 128 кбайт, если вся команда занимает 16 бит?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: Ассемблер (ASM) для AVR в вопросах и ответах
FreshMan писал(а):если в них можна юзать RJMP то зачем тогда придумали JMP ?
Так для того, чтобы перескочить дальше, чем на +-2k ! Можно, конечно, через промежуточные точки :
RJMP L1
L1: RJMP L2 ...
но это было бы уж совсем "через Альпы"


