adw (04.06.2005 23:55, просмотров: 1) ответил nestandart на и тут спрошу: avr asm. как элегантно проверить r29:r28 на нуль ? (а ещё на FFFF)
вдогонку к ответам двух уважаемых господ Проверка на ноль:
sbiw R28,0
breq is_zero
Если "sbiw" не поддерживается, то:
cpi R28,0 ;здесь можно использовать sub вместо cpi
sbci R29,0
breq is_zero
Если исходного содержимого не жалко, то:
or R28,R29
breq is_zero
Проверка на $FFFF:
В этом варианте исходное слово увеличивается на 1:
adiw R28,1
breq is_ffff
В этом, требуется свободный верхний регистр:
mov R16,R29
cpi R28,$FF
sbci R16,$FF
breq is_ffff
В этом требуется любой регистр:
mov R16,R28
and R16,R29
inc R16
breq is_ffff
Если лишнего свободного регистра нет вааще, а исходное содержимое нужно сохранить, то остается только cpi и куча прыжков.