|
|
  |
Как пользоваться парными регистрами?, Кто знает подскажите...... |
|
|
|
Jul 2 2006, 21:04
|

Частый гость
 
Группа: Участник
Сообщений: 151
Регистрация: 27-05-06
Из: Харьков
Пользователь №: 17 508

|
Цитата(aaarrr @ Jul 2 2006, 23:54)  Для парных регистров есть команды adiw и sbiw, но они работают только с immediate. Спасибо все заработало..... а что значит immediate?
|
|
|
|
|
Jul 3 2006, 12:04
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(Potter @ Jul 2 2006, 23:35)  Компилятор AVRStudio.... Задача состоит в том что-б отнимать и прибавлять к двух байтному числу 1, 10 и 100. Использую парные регистры YL и YН. Прибавляю к YL два раза по 100.... есть YL равно 200 прибавляю к нему же еще одну сотню YL уже рано 44. Всеравно если работать с обычным регистром..... прибавляю командой add .... может другой синтаксис? Заранее спасибо.... Если требуется прибавлять константу, то можно так: Код subi yl, low(-CONST) ; Приабавить младший байт, sbci yh, high(-CONST) ; затем старший
|
|
|
|
|
Jul 4 2006, 06:38
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(Nanobyte @ Jul 4 2006, 01:06)  Если нужно прибавить 100, то кто мешает добавить 2 раза по 50, дополнительная команда программу сильно не утяжелит. Зачем делать сложнее, если можно сделать проще?
|
|
|
|
|
Jul 4 2006, 11:13
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(Nanobyte @ Jul 4 2006, 11:13)  Да, это так. Но мне, например, при расчёте смещений в Ethernet-UDP-TCP заголовках было удобнее вначале рассчитывать константы именно так. После отладки даже не стал исправлять, так как в дальнейшем, при модификации программы, так легче вспомнить и разобраться, и это несмотря на подробные комментарии (ASM всё таки)  Это, конечно, так. Но лучше расчет смещений возложить на ассемблер. Нужно только написать соответствующе макроопределение. Это делается только один раз. Например, так: Код ; ; ** STK$ALC -- выделение стека ; ; Описание: ; Макрокоманда производит выделение необходимой стекой памяти. ; Поскольку данная макрокоманда устанавливает начальное значение ; текущего уровня стека, она ДОЛЖНА ВЫПОЛНЯТЬСЯ ПЕРВОЙ независимо ; от того, требуется ли фактическое выделение стека в данный момент ; или нет. ; ; Вызов: STK$ALC value ; STK$ALC macro value; Stack allocation
STACK$ var value ; Текущий уровень стека if STACK$ == 0 ; Стековая область не требуется, exitm ; то выход endif ; ; ; Выделить стек ; if STACK$ < 64 ; Достаточно одной команды sbiw r29:r28, STACK$ else ; требуется две команды subi r28, LOW(STACK$) sbci r29, HIGH(STACK$) endif endm
|
|
|
|
|
Jul 5 2006, 16:14
|

Частый гость
 
Группа: Участник
Сообщений: 151
Регистрация: 27-05-06
Из: Харьков
Пользователь №: 17 508

|
Цитата(_Bill @ Jul 3 2006, 15:04)  Если требуется прибавлять константу, то можно так: Код subi yl, low(-CONST) ; Приабавить младший байт, sbci yh, high(-CONST); затем старший А отнять получается тоже самое только без минуса - subi yl, low(CONST),sbci yh, high(CONST)?
Сообщение отредактировал Potter - Jul 5 2006, 16:14
|
|
|
|
|
Jul 5 2006, 17:31
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(Potter @ Jul 5 2006, 19:14)  Цитата(_Bill @ Jul 3 2006, 15:04)  Если требуется прибавлять константу, то можно так: Код subi yl, low(-CONST); Приабавить младший байт, sbci yh, high(-CONST); затем старший А отнять получается тоже самое только без минуса - subi yl, low(CONST),sbci yh, high(CONST)? Само собой.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|