Пример:
;Сложить два шестнадцатеричных числа,
;находящихся в регистровых парах
;R1 : R0 и R3 : R2. add r2, r0 ; Сложить младший байт.
adc r3, r1 ; Сложить старший байт с переносом.
;Результат будет находиться в регистровой
;паре R1 : R0.
Слов: 1 (2 байта). Циклов: 1.
Команда ADD сложить без переноса
Описание:
Сложение двух регистров без добавления содержимого флага переноса (С), размещение результата в регистре назначения Rd.
Операция: Rd <– Rd + Rr
Синтаксис |
Операнды: |
Счетчик программ: |
ADD Rd,Rr |
0 < d < 31, 0 < r < 31 |
PC < PC + 1 |
H Устанавливается, если есть перенос из бита 3, в ином случае очищается.
S Для проверок со знаком.
VУстанавливается, если в результате операции образуется переполнение дополнения до двух, в ином случае очищается.
NУстанавливается, если в результате установлен MSB, в ином случае очищается.
Z Устанавливается, если результат $00, в ином случае очищается.
CУстанавливается, если есть перенос из MSB результата, в ином случае очищается.
Пример:
add r1,r2 ; Сложить r2 с r1 (r1=r1+r2).
adc r28,r28 ; Сложить r28 с самим собой(r28=r28+r28).
Слов: 1 (2 байта). Циклов: 1.
Команда ADIW (Add Immediate to Word) сложить непосредственное значение со словом
Описание:
Сложение непосредственного значения (0 – 63) с парой регистров и размещение результата в паре регистров. Команда работает с четырьмя верхними парами регистров, удобна для работы с регистрами-указателями.
Операция: Rdh:Rdl <- Rdh:Rdl + K
55
Синтаксис: |
Операнды: |
Счетчик программ: |
ADIW Rdl,K |
dl {24,26,28,30}, 0 < K < 63 |
PC < PC + 1 |
S Для проверок со знаком.
VУстанавливается, если в результате операции образуется переполнение дополнения до двух, в ином случае очищается.
NУстанавливается, если в результате установлен MSB, в ином случае очищается.
Z Устанавливается, если результат $0000, в ином случае очищается.
CУстанавливается, если есть перенос из MSB результата, в ином случае очищается.
Пример:
adiw r24, 1 ; Сложить 1 с r25:r24
adiw r30, 63 ; Сложить 63 с Z указателем (r31 : r30)
Слов: 1 (2 байта). Циклов: 2
Команда AND – выполнить логическое AND
Описание:
Выполнение логического AND между содержимым регистров Rd и Rr и помещение результата в регистр назначения Rd.
Операция: Rd <- Rd*Rr
Синтаксис: |
Операнды: |
Счетчик программ: |
AND Rd,Rr |
0 < d < 31,0 < r < 31 |
PC <- PC + 1 |
S Для проверок со знаком.
V 0, очищен.
NУстанавливается, если в результате установлен MSB, в ином случае очищается.
Z Устанавливается, если результат $00, в ином случае очищается.
Пример: |
; Поразрядное and r2 и r3, результат |
|||
and r2, r3 |
||||
поместить в |
r2 |
0000 0001 в r16 |
||
ldi |
r16, 1 |
; |
Установить маску |
|
and |
r2, r16 |
; |
Выделить бит 0 в |
r2 |
Слов: 1 (2 байта). Циклов: 1.
56
Команда ANDI – выполнить логическое AND c непосредственным значением
Описание:
Выполнение логического AND между содержимым регистра Rd и константой и помещение результата в регистр назначения Rd.
Операция: Rd <- Rd*K
Синтаксис: |
Операнды: |
Счетчик программ: |
ANDI Rd,K |
16 < d <31, 0 < K <255 |
PC <- PC + 1 |
S Для проверок со знаком.
V Очищен.
NУстанавливается, если в результате установлен MSB, в ином случае очищается.
Z Устанавливается, если результат $00, в ином случае очищается.
Пример:
andi r17, $0F ; Очистить старший полубайт r17. andi r18, $10 ; Выделить бит 4 в r18.
andi r19, $AA ; Очистить нечетные биты r19.
Слов: 1 (2 байта). Циклов: 1.
Команда ASR – арифметически сдвинуть вправо
Описание:
Выполнение сдвига всех битов Rd на одно место вправо. Состояние бита 7 не изменяется. Бит 0 загружается во флаг переноса (С) регистра состояния (SREG). Эта команда эффективно делит значение дополнения до двух на два без изменения знака. Флаг переноса может быть использован для округления результата.
Операция: |
|
|
|
|
|
|
|
|
|
b7…………………..b0 |
|
c |
|
||
|
|
|
|||||
Синтаксис: |
|
Операнды: |
Счетчик программ: |
||||
ASR Rd |
|
0 < d <31 |
|
|
PC <- PC + 1 |
||
S Для проверок со знаком.
VУстанавливается, если (N устанавливается и C очищается) или (N очищается, а C устанавливается). В ином случае очищается (при наличии значений N и C после сдвига).
NУстанавливается, если в результате установлен MSB, в ином случае очищается.
57
Z Устанавливается, если результат $00, в ином случае очищается.
CRd0. Устанавливается, если перед сдвигом были установлены LSB или
Rd.
Пример:
ldi r16, $10 ; Загрузить $10 (десятичное 16) в r16. asr r16 ; r16 = r16/2.
ldi r17, $FC ; Загрузить -4 в r17. asr r17 ; r17 = r17/2.
Слов: 1 (2 байта). Циклов: 1.
Команда BCLR – очистить бит в регистре статуса (SREG)
Описание:
Очистка одного флага в регистре статуса.
Операция: |
SREG(s) <- 0 |
|
Синтаксис: |
Операнды: |
Счетчик программ: |
BCLR s |
0 < S < 7 |
PC <- PC + 1 |
I 0, если s = 7: в ином случае не изменяется.
T 0, если s = 6: в ином случае не изменяется.
H 0, если s = 5: в ином случае не изменяется.
S 0, если s = 4: в ином случае не изменяется.
V 0, если s = 3: в ином случае не изменяется.
N 0, если s = 2: в ином случае не изменяется.
Z 0, если s = 1: в ином случае не изменяется.
C 0, если s = 0: в ином случае не изменяется.
Пример:
bclr 0 ; Очистить флаг переноса. bclr 7 ; Запретить прерывания.
Слов: 1 (2 байта). Циклов: 1.
Команда BLD – загрузить содержимое T флага регистра статуса (SREG) в бит регистра
Описание:
Копирование содержимого T флага регистра статуса в бит b регистра Rd.
Операция: Rd(b) <- T
Синтаксис: |
Операнды: |
Счетчик программ: |
BLD Rd,b |
0 < d < 31, 0 < b < 7 |
PC <- PC + 1 |
58
Пример:
; Скопировать бит.
bst r1, 0 ; Сохранить бит 2 регистра r1 во флаге T. bld r0, 4 ; Загрузить T в бит 4 регистра r0.
Слов: 1 (2 байта). Циклов: 1
Команда BRBC – перейти, если бит в регистре статуса очищен
Описание:
Условный относительный переход. Тестируется один из битов регистра статуса и, если бит очищен, выполняется переход относительно состояния счетчика программ. Данная команда выполняет переход в любом направлении относительно состояния счетчика программ (PC - 64 < назначение < PC + 63). Параметр k является смещением относительно состояния счетчика программ и представлен в форме дополнения до двух.
Операция: If SREG(s) = 0 then PC <- PC + k +1, else PC <- PC +1
Синтаксис: Операнды: Счетчик программ:
PC <- PC + k + 1
BRBC s, k 0 < s <7, -64 < k <+63 PC <- PC + 1, если условия не соблюдены.
Пример:
cpi r20, 5 ; Сравнить r20 со значением 5. brbc 1,noteq ; Перейти, если флаг нуля очищен.
.....
noteq: nop ;Перейти по назначению (пустая операция).
Слов: 1 (2 байта). Циклов: 1, если условия не соблюдены, 2 при соблюдении правильных условий.
Команда BRBS – перейти, если бит в регистре статуса установлен
Описание:
Условный относительный переход. Тестируется один из битов регистра статуса и, если бит установлен, выполняется переход относительно состояния счетчика программ. Данная команда выполняет переход в любом направлении относительно состояния счетчика программ (PC - 64 < назначение < PC + 63). Параметр k является смещением относительно счетчика программ и представлен в форме дополнения до двух.
Операция: If SREG(s) = 1 then PC <- PC + k +1, else PC <- PC +1
Синтаксис: |
Операнды: |
Счетчик программ: |
|
|
PC <- PC + k + 1 |
BRBS s, k |
0 < s <7, -64 < k <+63 |
PC <- PC + 1, если условия |
|
|
не соблюдены. |
59