Материал: 1755

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

Пример:

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