МИКРОКОНТРОЛЛЕР AVR - Страница 77

МИКРОКОНТРОЛЛЕР AVR - МИКРОКОНТРОЛЛЕР AVR

subi R26, Constant & $FF ; Вычитание из младшего байта

sbci R27, Constant » 8 ; Вычитание из старшего байта с

; учетом переноса

В начале описания команд «subi» и «sbci» было сказано, что нет аналогичных команд сложения. Но это не совсем так. Вы можете эмулировать сложение при помощи вычитания отрицательной константы, как это делается в следующем макросе:

MACRO addi Register, Value

subi Register, 0 – Value

ENDMACRO

В данном случае «ноль минус значение» дает отрицательное число в дополнительном коде, а вычитание отрицательного значения эквивалентно прибавлению положительного. Такая операция не может быть проделана для сложения непосредственного операнда с учетом флага переноса, так как значение этого флага будет вычитаться из результата.

После предыдущего примера надо указать, что есть простой способ для прибавления числа к содержимому индексных регистров или вычитания числа из него. Этим способом является использование команд «adiw» и «sbiw» (команды 36.24 и 36.25), которые позволяют прибавлять значение константы к содержимому 4-х старших пар РОН (в их число входят индексные регистры X, Y и Z) или вычитать их. Так как эти команды имеют длину в одно слово, значения констант, которые можно использовать, не должны превышать 63. Эти две команды хорошо подходят для программ, где индексные регистры являются указателями на стеки или структуры данных.

Go to Top