В регистре статуса (SREG):
S Для проверок со знаком, S= N V.
V 0, очищен.
NУстанавливается, если в результате установлен MSB, в ином случае очищается.
Z Устанавливается, если результат $00, в ином случае очищается.
C 1, установлен.
Пример:
com r4 ; Выполнить дополнение до единицы r4. breq zero ; Перейти, если ноль.
zero: |
nop |
. . . |
операция. |
; Пустая |
Слов: 1 (2 байта). Циклов: 1.
Команда CP сравнить
Описание:
Команда выполняет сравнение содержимого двух регистров Rd и Rr. Содержимое регистров не изменяется. После этой команды можно выполнять любые условные переходы.
Операция: Rd = Rr
Синтаксис: |
Операнды: |
Счетчик программ: |
Cp Rd, Rr |
0 < d < 31,0 < r < 31 |
PC <- PC + 1 |
В регистре статуса (SREG):
H Устанавливается, если есть заем из бита 3, в ином случае очищается.
S Для проверок со знаком.
VУстанавливается, если в результате операции образуется переполнение дополнения до двух, в ином случае очищается.
NУстанавливается, если в результате установлен MSB, в ином случае очищается.
Z Устанавливается, если результат $00, в ином случае очищается.
CУстанавливается, если абсолютное значение Rr больше абсолютного значения Rd, в ином случае очищается.
Пример:
cp r4, r19 ; Сравнить r4 с r19.
brne noteq ; Перейти, если r4 <> r19.
. . .
noteq: nop
Слов: 1 (2 байта). Циклов: 1.
75
Команда CPC сравнить с учетом переноса
Описание:
Команда выполняет сравнение содержимого двух регистров Rd и Rr и учитывает также предшествовавший перенос. Содержимое регистров не изменяется. После этой команды можно выполнять любые условные переходы.
Операция: Rd = Rr = C
Синтаксис: |
Операнды: |
Счетчик программ: |
CPC Rd, Rr |
0 < d < 31,0 < r < 31 |
PC <- PC + 1 |
H Устанавливается, если есть заем из бита 3, в ином случае очищается.
S Для проверок со знаком.
VУстанавливается, если в результате операции образуется переполнение дополнения до двух, в ином случае очищается.
NУстанавливается, если в результате установлен MSB, в ином случае очищается.
ZПредшествующее значение остается неизменным, если результатом является ноль, в ином случае очищается.
C Устанавливается, если абсолютное значение Rr плюс предшествовавший перенос больше абсолютного значения Rd, в ином случае очищается.
Пример:
; Сравнить r3 : r2 с r1 : r0. cp r2, r0 ; Сравнить старший байт.
cpc r3, r1 ; Сравнить младший байт. brne noteq ; Перейти, если не равно.
. . .
noteq: nop
Слов: 1 (2 байта). Циклов: 1.
Команда CPI сравнить c константой
Описание:
Команда выполняет сравнение содержимого регистра Rd с константой. Содержимое регистра не изменяется. После этой команды можно выполнять любые условные переходы.
Операция: Rd = K
Синтаксис: |
Операнды: |
Счетчик программ: |
CPI Rd, K |
16 =< d =< 31, 0 < K <255 |
PC <- PC + 1 |
76
H Устанавливается, если есть заем из бита 3, в ином случае очищается.
S Для проверок со знаком.
V Устанавливается, если в результате операции образуется переполнение дополнения до двух, в ином случае очищается.
NУстанавливается, если в результате установлен MSB, в ином случае очищается.
Z Устанавливается, если результат $00, в ином случае очищается.
CУстанавливается, если абсолютное значение K больше абсолютного значения Rd, в ином случае очищается.
Пример:
cpi r19, 3 ; Сравнить r19 с 3. brne error ; Перейти, если r4 <> 3.
. . .
error: nop
Слов: 1 (2 байта), Циклов: 1.
Команда CPSE – сравнить и пропустить, если равно
Описание:
Команда выполняет сравнение содержимого регистров Rd и Rr и пропускает следующую команду, если Rd = Rr.
Операция: If Rd = Rr then PC <-- PC + 2 (or 3), else PC <-- PC +1
Синтаксис: |
Операнды: |
CPSE Rd,Rr |
0 < d < 31, |
|
0 < r < 31 |
Счетчик программ:
PC<-- PC + 1, если условия не соблюдены, то пропуска нет.
PC<-- PC + 2, пропуск одного слова команды.
PC<-- PC + 3, пропуск двух слов команды.
Пример: |
; Увеличить на 1 r4. |
|
||
inc r4 |
|
|||
cpse r4, r0 |
; Сравнить r4 с r0. |
<> r0. |
||
neg r4 |
; |
Выполнить, |
если r4 |
|
nop |
; |
Продолжать |
(пустая операция). |
|
Слов: 1 (2 байта). Циклов: 1.
Команда DEC декрементировать
Описание:
Вычитание единицы из содержимого регистра Rd и размещение результата в регистре назначения Rd. Флаг переноса регистра статуса данной командой не активируется, что позволяет использовать команду DEC при
77
реализации счетчика циклов для вычислений с повышенной точностью. При обработке чисел без знаков за командой могут выполняться переходы BREQ и BRNE. При обработке значений в форме дополнения до двух допустимы все учитывающие знак переходы.
Операция: Rd <-- Rd - 1
Синтаксис: |
Операнды: |
Счетчик программ: |
DEC Rd |
0 < d < 31 |
PC <- PC + 1 |
S Для проверок со знаком, S= N V.
VУстанавливается, если в результате получено переполнение дополнения до двух, в ином случае очищается. Переполнение дополнения до двух будет, если и только если перед операцией содержимое Rd было $80.
NУстанавливается, если в результате установлен MSB, в ином случае очищается.
Z Устанавливается, если результат $00, в ином случае очищается.
Пример: |
ldi r17, $10 ; Загрузить константу в r17. |
||
loop: |
|||
add r1, r2 |
; Сложить r2 с r1. |
||
|
dec r17 |
; Уменьшить на 1 r17. |
|
|
brne loop |
; Перейти, если r17 <> 0. |
|
|
nop |
; Продолжать (пустая операция). |
|
Слов: 1 (2 байта). Циклов: 1.
ELPM – расширенная загрузка данных из памяти
Описание:
Загружает один байт из адресного пространства памяти программ в регистр общего назначения Rd. Адрес ячейки памяти, к которой производится обращение, в регистре ввода/вывода RAMPZ и индексном регистре Z.
Операция: R0 <- (RAMPZ:Z)
Синтаксис: |
Операнды: |
Счетчик программ: |
|
ELPM |
|
нет |
PC <- PC + 1 |
Пример: |
byte3(Table_1<<1) |
; Initialize Z pointer |
|
ldi ZL, |
|||
out RAMPZ, ZL |
|
|
|
ldi ZH, |
byte2(Table_1<<1) |
|
|
ldi ZL, |
byte1(Table_1<<1) |
|
|
elpm r16, Z+ |
; Загрузка константы из ячейки |
||
;памяти |
программ, указанной регистрами RAMPZ:Z. |
||
78
...
Table_1:
.dw 0x3738 ; 0x38 адресуется, когда ZLSB = 0. ; 0x37 адресуется, когда ZLSB = 1.
...
Слов: 1 (2 байта). Циклов: 3.
Команда EOR выполнить исключающее ИЛИ
Описание:
Выполнение логического исключающего OR между содержимым регистра Rd и регистром Rr и помещение результата в регистр назначения Rd.
Операция: Rd <- Rd Rr
Синтаксис: |
Операнды: |
Счетчик программ: |
EOR Rd,Rr |
0 < d < 31,0 < r < 31 |
PC <- PC + 1 |
S Для проверок со знаком, S= N V.
V 0.
NУстанавливается, если в результате установлен MSB, в ином случае очищается.
Z Устанавливается, если результат $00, в ином случае очищается.
Пример:
eor r4, r4 ; Очистить r4.
eor r0, r22 ; Поразрядно выполнить исключающее ИЛИ
;между r0 и r22.
Слов: 1 (2 байта). Циклов: 1.
FMUL – умножение дробных беззнаковых чисел
Описание:
Осуществляет умножение беззнаковых дробных чисел, находящихся в регистрах Rd и Rr. Формат чисел – 1.7 (старший разряд – целая часть, 7 младших – дробная). Результат умножения (формат результата – 2.14) сдвигается влево на один разряд для приведения к формату 1.15 и заносится в регистровую пару R1: R0.
Операция: R1:R0 <- Rd × Rr
Синтаксис: |
Операнды: |
Счетчик программ: |
FMUL Rd,Rr |
0 < d < 31,0 < r < 31 |
PC <- PC + 1 |
C Устанавливается, если 15 бит результата установлен до сдвига влево.
Z Устанавливается, если результат равен нулю.
79