Пример:
fmul r23,r22 ; Умножить r23 и r22?
movw г22,г0 ; копировать результат обратно в r23:r22/
Слов: 1 (2 байта). Циклов: 2.
FMULS – умножение дробных чисел со знаком
Описание:
Осуществляет умножение дробных чисел со знаком, находящихся в регистрах Rd и Rr. Формат чисел – 1.7 (старший разряд – целая часть, 7 младших разрядов – дробная). Результат умножения (формат результата – 2.14) сдвигается влево на один разряд для приведения к формату 1.15 и заносится в регистровую пару R1:R0.
Операция: R1:R0 <- Rd × Rr
Синтаксис: |
Операнды: |
Счетчик программ: |
FMULS Rd,Rr |
0 < d < 31,0 < r < 31 |
PC <- PC + 1 |
C Устанавливается, если 15 бит результата установлен до сдвига влево.
Z Устанавливается, если результат равен нулю.
Пример:
fmuls r23,r22 ; Умножение чисел со знаком в r23 и ;r22 в формате (1.7), результат в формате(1.15).
movw r23:r22,r1:r0 ;Копирование результата в r23:r22.
Слов: 1 (2 байта). Циклов: 1.
FMULSU – умножение дробного беззнакового числа и дробного числа со знаком
Описание:
Осуществляет умножение дробных чисел, находящихся в регистрах Rd (число со знаком) и Rr (число без знака). Формат чисел – 1.7 (старший разряд – целая часть, 7 младших разрядов – дробная). Результат умножения (формат результата соответствует 2.14) сдвигается влево на один разряд для приведения к формату 1.15 и заносится в регистровую пару R1:R0.
Операция: R1:R0 <- Rd × Rr
Синтаксис: |
Операнды: |
Счетчик программ: |
FMULS Rd,Rr |
0 < d < 31,0 < r < 31 |
PC <- PC + 1 |
C Устанавливается, если 15 бит результата установлен до сдвига влево.
Z Устанавливается, если результат равен нулю.
80
Пример:
fmulsu r23,r22 ; Умножение чисел в r23 и r22.` movw r22,r0 ;Копирование результата в r23:r22.
Слов: 1 (2 байта). Циклов: 2.
Команда ICALL вызвать подпрограмму косвенно
Описание:
Косвенный вызов подпрограммы, указанной регистром-указателем Z (16 разрядов) в регистровом файле. Регистр-указатель Z (16-разрядного формата) позволяет вызвать подпрограмму из текущей секции пространства памяти программ объемом 64К слов (128 Кбайт).
Операция: PC(15-0) <-- Z(15-0)
Синтаксис: |
Операнды: |
Счетчик программ: |
Стек: |
ICALL |
нет |
См. Операция |
STACK<-- PC + 1 |
|
|
|
SP<-- SP-2, (2 байта, |
|
|
|
16 битов) |
Пример:
mov r30, r0 ; Задать смещение.
icall ;Вызвать подпрограмму (адрес указан в r31:r30).
Слов: 1 (2 байта). Циклов: 3.
Команда IJMP перейти косвенно
Описание:
Выполняется косвенный переход по адресу, указанному регистром-указа- телем Z (16 разрядов) в регистровом файле. Регистр-указатель Z (16разрядного формата) позволяет вызвать подпрограмму из текущей секции пространства памяти программ объемом 64К слов (128 Кбайт).
Операция: PC<-- Z(15-0)
|
Синтаксис: |
Операнды: |
Счетчик программ: |
|
IJMP |
нет |
См. Операция |
Пример: |
|
|
|
mov r30,r0 ; Задать смещение. |
|
||
ijmp |
; Перейти по адресу, указанному r31 : r30. |
||
Слов: 1 (2 байта). Циклов: 2. |
|
||
Команда LD загрузить косвенно из ОЗУ в регистр с использованием индекса X
Описание:
Загружает косвенно один байт из ОЗУ в регистр. Положение байта в ОЗУ указывается 16-разрядным регистром-указателем X в регистровом файле. Обращение к памяти ограничено текущей страницей объемом 64 Кбайта.
81
Для обращения к другой странице ОЗУ необходимо изменить регистр RAMPX в I/O области. Регистр-указатель X может остаться неизменным после выполнения команды, но может быть инкрементирован или декрементирован. Использование регистра-указателя X обеспечивает удобную возможность обращения к матрицам, таблицам, указателю стека. Использование X-указателя:
|
Операция: |
Комментарий: |
|
|
(i) |
Rd <-- (X) |
|
X: Неизменен |
|
(ii) |
Rd <-- (X) |
X <-- X + 1 |
X: Инкрементирован впоследствии |
|
(iii) |
X <-- X - 1 |
Rd <-- (X) |
X: Предварительнo декрементирован |
|
|
Синтаксис: |
Операнды: |
|
Счетчик программ: |
(i) |
LD Rd,X |
0 < d < 31 |
|
PC<-- + 1 |
(ii) |
LD Rd,X+ |
0 < d < 31 |
|
PC<-- + 1 |
(iii) |
LDD Rd,-X |
0 < d < 31 |
|
PC<-- + 1 |
Пример: |
;Очистить старший байт X. |
|||
clr r27 |
||||
ldi |
r26, $20 ;Установить $20 |
в младший байт X. |
||
ld |
r0, X+ ; Загрузить в r0 |
содержимое SRAM по |
||
ld |
r1, X |
;адресу $20 (X постинкрементируется). |
||
;Загрузить в r1 |
содержимое SRAM по |
|||
ldi |
|
;адресу $21. |
|
в младший байт X. |
r26, $23 ;Установить $23 |
||||
ld |
r2, X |
;Загрузить в r2 |
содержимое SRAM по |
|
ld |
r3, -X |
;адресу $23. |
|
|
;Загрузить в r3 содержимое SRAM по |
||||
|
|
;адресу $22 (X преддекрементируется). |
||
Слов: 1 (2 байта). Циклов: 2. |
|
|
||
Команда IN загрузить данные из порта ввода/вывода в регистр
Описание:
Команда загружает данные из пространства входа/выхода (порты, таймеры, регистры конфигурации и т.п.) в регистр Rd регистрового файла.
Операция: Pd <-- P
Синтаксис: |
Операнды: |
Счетчик программ: |
IN Rd,P |
0 < d < 31, 0 < P < 63 |
PC<-- PC + 1 |
Пример:
in r25, $16 ; Считать порт B.
cpi r25, 4 ;Сравнить считанное значение с константой.
breq exit |
; Перейти, если r25=4. |
82
. . .
exit: nop ; Перейти по назначению (пустая операция).
Слов: 1 (2 байта). Циклов: 1.
Команда INC инкрементировать
Описание:
Добавление единицы к содержимому регистра Rd и размещение результата в регистре назначения Rd. Флаг переноса регистра статуса данной командой не активируется, что позволяет использовать команду INC при реализации счетчика циклов для вычислений с повышенной точностью. При обработке чисел без знаков за командой могут выполняться переходы BREQ и BRNE. При обработке значений в форме дополнения до двух допустимы все учитывающие знак переходы.
Операция: Rd <-- Rd + 1
Синтаксис: |
Операнды: |
Счетчик программ: |
INC Rd |
0 < d < 31 |
PC <- PC + 1 |
S Для проверок со знаком, S =N V.
VУстанавливается, если в результате получено переполнение дополнения до двух, в ином случае очищается. Переполнение дополнения до двух будет, если перед операцией содержимое Rd было $7F.
NУстанавливается, если в результате установлен MSB, в ином случае очищается.
Z Устанавливается, если результат $00, в ином случае очищается.
Пример: |
clr |
r22 |
; Очистить r22. |
|
loop: |
||||
inc |
r22 |
; Увеличить на 1 r22. |
||
|
. . . |
r22, $4F ; Сравнить r22 с $4F. |
||
|
cpi |
|||
|
brne loop |
; Перейти, если не равно. |
||
|
nop |
|
; Продолжать (пустая операция). |
|
Слов: 1 (2 байта). Циклов: 1. |
|
|||
Команда JMP перейти
Описание:
Выполняется переход по адресу внутри всего объема (4М слов) памяти программ. См. также команду RJMP.
Операция: Pd<-- k
Синтаксис: |
Операнды: |
Счетчик программ: |
JMP k |
-2047 < k < 4M |
PC<-- k |
83
Пример:
mov r1, r0 ; Копировать r0 в r1.
jmp |
farplc ; Безусловный переход. |
. . . |
|
farplc: nop |
; Пустая операция. |
Слов: 2 (4 байта). Циклов: 3.
Команда LD загрузить косвенно из СОЗУ в регистр с использованием индекса X
Описание:
Загружает косвенно один байт из СОЗУ в регистр. Положение байта в СОЗУ указывается 16-разрядным регистром-указателем X в регистровом файле. Обращение к памяти ограничено текущей страницей объемом 64 Кбайта. Для обращения к другой странице СОЗУ необходимо изменить регистр RAMPX в I/O области. Регистр-указатель X может остаться неизменным после выполнения команды, но может быть инкрементирован или декрементирован. Использование регистра-указателя X обеспечивает удобную возможность обращения к матрицам, таблицам, указателю стека. Использование X-указателя:
|
Операция: |
Комментарий: |
|
(i) |
Rd <-- (X) |
|
X: Неизменен |
(ii) |
Rd <-- (X) |
X <-- X + 1 |
X: Инкрементирован впоследствии |
(iii) X <-- X - 1 |
Rd <-- (X) |
X: Предварительно декрементирован |
|
|
Синтаксис: |
Операнды: |
Счетчик программ: |
(i) |
LD Rd,X |
0 < d < 31 |
PC<-- + 1 |
(ii) |
LD Rd,X+ |
0 < d < 31 |
PC<-- + 1 |
(iii) |
LDD Rd,-X |
0 < d < 31 |
PC<-- + 1 |
Пример: |
;Очистить старший байт X. |
||
clr |
r27 |
||
ldi |
r26, $20 ;Установить $20 |
в младший байт X. |
|
ld r0, X+ |
;Загрузить в r0 содержимое SRAM по |
||
ld r1, X |
;адресу $20 (X постинкрементируется). |
||
;Загрузить в r1 |
содержимое SRAM по |
||
ldi |
|
;адресу $21. |
в младший байт X. |
r26, $23 ;Установить $23 |
|||
ld |
r2, X |
;Загрузить в r2 |
содержимое SRAM по |
ld |
r3, -X |
;адресу $23. |
содержимое SRAM по |
;Загрузить в r3 |
|||
|
|
;адресу $22 (X преддекрементируется). |
|
Слов: 1 (2 байта). Циклов: 2. |
|
||
84