Команда MOVW – копировать регистровую пару
Описание:
Команда копирует регистровую пару Rr+1:Rr в регистровую пару Rd+1:Rd. Содержание исходной регистровой пары Rr+1:Rr остается неизменным.
Операция: Rd+1: Rd <-- Rr+1:Rr
Синтаксис: |
Операнды: |
Счетчик программ: |
MOVW Rd+1:Rd,Rr+1:Rr |
0 < d < 31, 0 < r <31 |
PC<-- + 1 |
Пример:
movw r17:r16,r1:r0 ; Копировать r1:r0 в r17:r16. call check ; Вызвать подпрограмму.
. . .
сheck: cpi r16, $11 ; Сравнить r16 с $11.
cpi |
r17, $32 |
; |
Сравнить r17 |
с $32. |
. . . |
; |
Вернуться из |
подпрограммы. |
|
ret |
|
|||
Слов: 1 (2 байта). Циклов: 1.
Команда MUL – перемножить
Описание:
Команда перемножает две 8-разрядные величины без знаков с получением 16-разрядного результата без знака. Множимое и множитель – два регистра Rr и Rd соответственно. 16-разрядное произведение размещается в регистрах R1 (старший байт) и R0 (младший байт). Отметим, что если в качестве множимого и множителя выбрать R0 или R1, то результат заместит прежние значения сразу после выполнения операции.
Операция: R1,R0 <-- Rr Rd
Синтаксис: |
Операнды: |
Счетчик программ: |
MUL Rd,Rr |
0 < d < 31,0 < r < 31 |
PC <- PC + 1 |
CУстанавливается, если установлен бит 15 результата, в ином случае очищается.
Пример:
mul r6, r5 ; Перемножить r6 и r5.
mov r6, r1 ; Вернуть результат обратно в r6:r5. mov r5, r1 ; Вернуть результат обратно в r6:r5.
Слов: 1 (2 байта). Циклов: 2.
Команда NEG – выполнить дополнение до двух
Описание:
Заменяет содержимое регистра Rd его дополнением до двух. Значение $80 остается неизменным.
90
Операция: Rd <-- $00 - Rd. |
|
|
Синтаксис: |
Операнды: |
Счетчик программ: |
NEG Rd |
0 < d < 31 |
PC <- PC + 1 |
H Устанавливается, если есть заем из бита 3, в ином случае очищается.
S N V, для проверок со знаком.
V Устанавливается при переполнении дополнения до двух от подразумеваемого вычитания из нуля, в ином случае очищается. Переполнение дополнения до двух произойдет, если содержимое регистра после операции (результат) будет $80.
NУстанавливается, если в результате установлен MSB, в ином случае очищается.
Z Устанавливается, если результат $00, в ином случае очищается.
CУстанавливается, если есть заем в подразумеваемом вычитании из нуля, в ином случае очищается. Флаг C будет устанавливаться во всех случаях, за исключением случая, когда содержимое регистра после выполнения операции будет $80.
Пример: |
r11, r0 |
;Вычесть r0 из r11. |
sub |
||
brpl positive ;Перейти, если результат |
||
neg |
r11 |
;положительный. |
;Выполнить дополнение до двух r11. |
||
positive: |
nop |
; Перейти по назначению (пустая |
;операция).
Слов: 1 (2 байта). Циклов: 1.
Команда NOP – выполнить холостую команду
Описание:
Команда выполняется за один цикл без выполнения операции.
|
Операнды: |
Счетчик программ: |
|
нет |
PC<- РС + 1 |
Пример: |
r16 |
; Очистить r16. |
clr |
||
ser |
r17 |
; Установить r17. |
out |
$18, r16 ; Записать ноль в Порт B. |
|
nop |
|
; Ожидать (пустая операция). |
out |
$18, r17 ; Записать 1 в Порт B. |
|
Слов: 1 (2 байта). Циклов: 1.
91
Команда OR – выполнить логическое ИЛИ
Описание:
Команда выполняет логическое ИЛИ содержимого регистров Rd и Rr и размещает результат в регистре назначения Rd.
Операция: Rd <-- Rd Rr. |
|
|
Синтаксис: |
Операнды: |
Счетчик программ: |
OR Rd,Rr |
0 < d < 31,0 < r <31 |
PC <- PC + 1 |
S N V, для проверок со знаком.
V 0, очищен.
NУстанавливается, если в результате установлен MSB, в ином случае очищается.
Z Устанавливается, если результат $00, в ином случае очищается.
Пример: |
; Выполнить поразрядное ИЛИ. |
or r15, r16 |
|
bst r15, 6 |
; Сохранить бит 6 регистра 15 во |
brst ok |
;флаге T. |
; Перейти, если флаг T установлен. |
|
. . . |
; Пустая операция. |
ok: nop |
Слов: 1 (2 байта). Циклов: 1.
Команда ORI – выполнить логическое ИЛИ с непосредственным значением
Описание:
Команда выполняет логическое ИЛИ между содержимым регистра Rd и константой и размещает результат в регистре назначения Rd.
Операция: Rd <-- Rd v K
Синтаксис: |
Операнды: |
Счетчик программ: |
ORI Rd,K |
16 < d < 31,0 < K <255 |
PC <- PC + 1 |
S N V, для проверок со знаком.
V 0, очищен.
NУстанавливается, если в результате установлен MSB, в ином случае очищается.
Z Устанавливается, если результат $00, в ином случае очищается.
Пример:
ori r16, $F0 ; Установить старший полубайт r16. ori r17, 1 ; Установить бит 0 регистра r17.
Слов: 1 (2 байта). Циклов: 1.
92
Команда OUT – записать данные из регистра в порт ввода/вывода
Описание:
Команда сохраняет данные регистра Rr в регистровом файле пространства ввода/вывода (порты, таймеры, регистры конфигурации и т.п.).
Операция: P <-- Rr
Синтаксис: |
Операнды: |
Счетчик программ: |
|
OUT P,Rr |
0 < r <31, 0 < P <63 |
PC<-- + 1 |
|
Пример: |
r16 |
; Очистить r16. |
|
clr |
|
||
ser |
r17 |
; Установить r17. |
|
out |
$18, r16 ; Записать нули в порт B. |
||
nop |
|
; Ожидать (пустая операция). |
|
out |
$18, r17 ; Записать единицы в порт B. |
||
Слов: 1 (2 байта). Циклов: 1. |
|
||
Команда POP – записать регистр из стека
Описание:
Команда загружает регистр Rd байтом содержимого стека.
Операция: Rd <-- STACK
Синтаксис: |
Операнды: |
Счетчик программ: |
|
POP Rd |
0 < d <31 |
PC<-- + 1. SP<-- SP + 1 |
|
Пример: |
routine |
; Вызвать подпрограмму. |
|
call |
|||
. . . |
r14 |
; Сохранить r14 в стеке. |
|
routine: push |
|||
push |
r13 |
; Сохранить r13 в стеке. |
|
. . . |
r13 |
; Восстановить r13. |
|
pop |
|||
pop |
r14 |
; Восстановить r14. |
|
ret |
|
; Вернуться из подпрограммы. |
|
Слов: 1 (2 байта). Циклов: 2. |
|
|
|
Команда PUSH – поместить регистр в стек
Описание:
Команда помещает содержимое регистра Rd в стек.
Операция: STACK <-- Rr
Синтаксис: |
Операнды: |
Счетчик программ: |
PUSH Rr |
0 < d <31 |
PC<-- + 1. SP<-- SP - 1 |
Пример:
call routine ; Вызвать подпрограмму.
. . .
93
routine: push r14 |
; Сохранить r14 в стеке |
||
push r13 |
; Сохранить r13 в стеке. |
||
. . . |
r13 |
; Восстановить |
r13. |
pop |
|||
pop |
r14 |
; Восстановить |
r14. |
ret |
|
; Вернуться из |
подпрограммы. |
Слов: 1 (2 байта). Циклов: 2.
Команда RCALL – вызвать подпрограмму относительно
Описание:
Команда вызывает подпрограмму в пределах +2 Кслов (4 Кбайт). Адрес возврата (после выполнения команды RCALL) сохраняется в стеке (см. также команду CALL).
Операция: PC <-- PC + k + 1 |
|
|
|
Синтаксис: |
Операнды: |
Счетчик программ: |
Стек: |
RCALL k |
-2K < k <2K |
PC <-- PC + k + 1 |
STACK <-- PC + 1 |
|
|
|
SP <-- SP-2 |
|
|
|
(2 байта, 16 бит) |
Пример: |
routine |
; Вызвать подпрограмму. |
rcall |
||
. . . |
r14 |
; Сохранить r14 в стеке. |
routine: push |
||
. . . |
r14 |
; Восстановить r14. |
pop |
||
ret |
|
; Вернуться из подпрограммы. |
Слов: 1 (2 байта). Циклов: 3.
Команда RET – вернуться из подпрограммы
Описание:
Команда возвращает из подпрограммы. Адрес возврата загружается из стека.
Операция: PC(15-0) <-- STACK |
|
|
|||
Синтаксис: |
Операнды: |
Счетчик программ: |
Стек: |
||
RET |
|
нет |
См. операцию |
SP <-- SP+2 |
|
Пример: |
|
|
|
(2 байта, 16 бит) |
|
call routine ; Вызвать подпрограмму. |
|||||
|
|||||
routine: |
. . . |
r14 |
; Сохранить r14 в стеке. |
||
push |
|||||
|
pop |
r14 |
; Восстановить r14. |
||
|
ret |
|
; Вернуться из подпрограммы. |
||
Слов: 1 (2 байта). Циклов: 4.
94