Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как работать с парными регистрами?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Potter
Работаю с мегой 16.... Пишу программу на асме. Существуют парные регистры YH,YL. Если в YL хранится значение 0xFF и к нему прибавить 0x1 занесется ли 0x1 в YH? Если не занесется как вообще можно работать с двухбайтными числами если нужно прибавлять к двухбайтному числу и отнимать от него некоторые константы?
defunct
Цитата(Potter @ Jun 7 2006, 17:52) *
Работаю с мегой 16.... Пишу программу на асме. Существуют парные регистры YH,YL. Если в YL хранится значение 0xFF и к нему прибавить 0x1 занесется ли 0x1 в YH?

нет.

Цитата
Если не занесется как вообще можно работать с двухбайтными числами если нужно прибавлять к двухбайтному числу и отнимать от него некоторые константы?


Учитывать перенос..

add/adc (сложение)
sub/sbc (вычитание)
cp/cpc (сравнение)

если константы небольшие (до 64) можно использовать команды
adiw/sbiw
Yura_K
Цитата
Если в YL хранится значение 0xFF и к нему прибавить 0x1 занесется ли 0x1 в YH?

В зависимости от используемой команды. Если это вроде:
Код
ldi r16,1
add YL,r16

то нет, т.к. необходимо учитывать флаг переноса:
Код
ldi r16,1
clr r17
add YL,r16
adc YH,r17

можно еще и так:
Код
subi YL,low(-1)
sbci YH,high(-1)

а лучше так:
Код
adiw YL,1

только команда adiw (add immediate to word) работает не со всеми регистровыми парами (последние четыре) sad.gif
add
Сложение двух пар регистров
add r16,r18
adc r17,r19
Вычитание двух пар регистров
sub r17,r18
sbc r16,r19
Соответственно с константой можно так
clr r19
ldi r18,const
sub r17,r18
sbc r16,r19

и так

clr r19
ldi r18,const
add r16,r18
adc r17,r19

А так инкремент:
subi zl,255
sbci zh,255
А так денкремент:
subi zl,1
sbci zh,0
Вопросы есть?
:-) удачи.

зы: чуток опоздал с ответом...уже опередили..:-)
Potter
Цитата(defunct @ Jun 7 2006, 18:01) *
Цитата(Potter @ Jun 7 2006, 17:52) *

Работаю с мегой 16.... Пишу программу на асме. Существуют парные регистры YH,YL. Если в YL хранится значение 0xFF и к нему прибавить 0x1 занесется ли 0x1 в YH?

нет.

Цитата
Если не занесется как вообще можно работать с двухбайтными числами если нужно прибавлять к двухбайтному числу и отнимать от него некоторые константы?


Учитывать перенос..

add/adc (сложение)
sub/sbc (вычитание)
cp/cpc (сравнение)



Извените... незаметил остальных ответов щас поробую разобраться...
Potter
Цитата(add @ Jun 7 2006, 18:06) *
clr r19
ldi r18,const
add r16,r18
adc r17,r19



Допустим в r16 хранится значение 0xFF, в r17 0x00 а в r18 мы занесли 0x05 то после этих команд в r16 будет хранится значение 0x04 а в r17 0x01?
defunct
Цитата(Potter @ Jun 7 2006, 18:27) *
Допустим в r16 хранится значение 0xFF, в r17 0x00 а в r18 мы занесли 0x05 то после этих команд в r16 будет хранится значение 0x04 а в r17 0x01?

На этот вопрос вам может достоверно ответить AvrStudio. Выполните интересующий вас код в режиме отладки, войдите во вкладку I/O View выберите R16-R31 и посмотрите чему равен r16 и r17
BVU
Если Вы программируете на ASM, то для целочисленной и плавающей арифметики лучше написать макросы. Либо взять готовую библиотеку. Тогда подобных проблем не будет за исключением ресурсов памяти и быстродействия выполнения операций.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.