Материал: 1755

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Команда 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