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

 
 
 
Reply to this topicStart new topic
> Как работать с парными регистрами?
Potter
сообщение Jun 7 2006, 14:52
Сообщение #1


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

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



Работаю с мегой 16.... Пишу программу на асме. Существуют парные регистры YH,YL. Если в YL хранится значение 0xFF и к нему прибавить 0x1 занесется ли 0x1 в YH? Если не занесется как вообще можно работать с двухбайтными числами если нужно прибавлять к двухбайтному числу и отнимать от него некоторые константы?
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 7 2006, 15:01
Сообщение #2


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Potter @ Jun 7 2006, 17:52) *
Работаю с мегой 16.... Пишу программу на асме. Существуют парные регистры YH,YL. Если в YL хранится значение 0xFF и к нему прибавить 0x1 занесется ли 0x1 в YH?

нет.

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


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

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

если константы небольшие (до 64) можно использовать команды
adiw/sbiw
Go to the top of the page
 
+Quote Post
Yura_K
сообщение Jun 7 2006, 15:05
Сообщение #3


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

Группа: Свой
Сообщений: 185
Регистрация: 5-05-06
Из: Ekaterinburg, Russia
Пользователь №: 16 821



Цитата
Если в 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


--------------------
Чудес не бывает - бывает мало знаний и опыта!
Go to the top of the page
 
+Quote Post
add
сообщение Jun 7 2006, 15:06
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 345
Регистрация: 10-10-05
Пользователь №: 9 459



Сложение двух пар регистров
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
Вопросы есть?
:-) удачи.

зы: чуток опоздал с ответом...уже опередили..:-)


--------------------
Если задачу можно решить, то не надо тревожиться. А если нельзя решить, то тревожиться бесполезно.
Go to the top of the page
 
+Quote Post
Potter
сообщение Jun 7 2006, 15:16
Сообщение #5


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

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



Цитата(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 - Jun 7 2006, 15:20
Go to the top of the page
 
+Quote Post
Potter
сообщение Jun 7 2006, 15:27
Сообщение #6


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

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



Цитата(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?
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 7 2006, 15:40
Сообщение #7


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



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

На этот вопрос вам может достоверно ответить AvrStudio. Выполните интересующий вас код в режиме отладки, войдите во вкладку I/O View выберите R16-R31 и посмотрите чему равен r16 и r17
Go to the top of the page
 
+Quote Post
BVU
сообщение Jun 8 2006, 07:04
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264



Если Вы программируете на ASM, то для целочисленной и плавающей арифметики лучше написать макросы. Либо взять готовую библиотеку. Тогда подобных проблем не будет за исключением ресурсов памяти и быстродействия выполнения операций.


--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 04:02
Рейтинг@Mail.ru


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