Материал: 1755

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

В регистре статуса (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