Сложение и вычитание

Сложение и вычитание

Как было сказано выше, существует полная симметрия между действиями сложения и вычитания беззнаковых и знаковых чисел (последние, естественно, должны быть представлены в дополнительном коде). Это означает, что для знаковых вычислений можно использовать те же самые инструкции процессора, что и для беззнаковых. Более того, сами арифметические действия оказываются взаимозаменяемыми.

Очевидно, что

X – Y = X + (-Y)  и  X + Y = X – (-Y).

Отыскание разности X – Y равносильно добавлению к X числа Y взятого с противоположным знаком, а отыскание суммы X – Y может быть сведено к вычитанию из X числа противоположного по знаку Y.

Это очень сильный вычислительный прием, который при программировании AVR чаще всего используется в следующем контексте.

В их системе команд имеются инструкции вычитания константы из регистра subi Rd,K и sbсi Rd,K (вычитание с заемом), но отсутствуют такие же инструкции сложения регистра с константой. Поэтому добавить число к регистру можно только следующим образом

ldi R17,10 ;R17 = 10 add R16,R17 ;R16 = R16 + R17 = R16 + 10.

Число 10 заносится в промежуточный регистр R17, после чего используется команда сложения двух регистров add Rd,Rr. Однако благодаря использованию дополнительного кода тоже действие будет выглядеть как

subi R16, -10 ;R16 = R16 – (-10) = R16 + 10

Точно также к регистровой паре можно добавить 2-байтовое смещение

subi XL,low(-0x1234) ; XH:XL + 0x1234 = XH:XL – (-0x1234) sbсi XH,high(-0x1234)

Перейти к следующей части:


Категория: Микроконтроллеры
Метки:

Написать коментарий

*
= 4 + 8

Добавить изображение

Последние статьи