реклама на сайте
подробности

 
 
> Как пользоваться парными регистрами?, Кто знает подскажите......
Potter
сообщение Jul 2 2006, 20:35
Сообщение #1


Частый гость
**

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



Компилятор AVRStudio.... Задача состоит в том что-б отнимать и прибавлять к двух байтному числу 1, 10 и 100. Использую парные регистры YL и YН. Прибавляю к YL два раза по 100.... есть YL равно 200 прибавляю к нему же еще одну сотню YL уже рано 44. Всеравно если работать с обычным регистром..... прибавляю командой add .... может другой синтаксис? Заранее спасибо....
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Nanobyte
сообщение Jul 4 2006, 08:13
Сообщение #2


За битами по регистрам гоняюсь
***

Группа: Свой
Сообщений: 457
Регистрация: 24-04-06
Из: Таганрог
Пользователь №: 16 446



Да, это так. Но мне, например, при расчёте смещений в Ethernet-UDP-TCP заголовках было удобнее вначале рассчитывать константы именно так. После отладки даже не стал исправлять, так как в дальнейшем, при модификации программы, так легче вспомнить и разобраться, и это несмотря на подробные комментарии (ASM всё таки) smile.gif


--------------------
Курсор влево, курсор вправо - считается хакерством. FORMAT C: производится без предупреждения
Go to the top of the page
 
+Quote Post
_Bill
сообщение Jul 4 2006, 11:13
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(Nanobyte @ Jul 4 2006, 11:13) *
Да, это так. Но мне, например, при расчёте смещений в Ethernet-UDP-TCP заголовках было удобнее вначале рассчитывать константы именно так. После отладки даже не стал исправлять, так как в дальнейшем, при модификации программы, так легче вспомнить и разобраться, и это несмотря на подробные комментарии (ASM всё таки) smile.gif

Это, конечно, так. Но лучше расчет смещений возложить на ассемблер. Нужно только написать соответствующе макроопределение. Это делается только один раз. Например, так:
Код
;
; ** 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
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 16:13
Рейтинг@Mail.ru


Страница сгенерированна за 0.01377 секунд с 7
ELECTRONIX ©2004-2016