Материал: 1755

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

Команда LD (LDD) загрузить косвенно из ОЗУ в регистр с использованием индекса Y

Описание:

Загружает косвенно, со смещением или без смещения, один байт из ОЗУ в регистр. Положение байта в ОЗУ указывается 16-разрядным регистромуказателем Y в регистровом файле. Обращение к памяти ограничено текущей страницей объемом 64 Кбайта. Для обращения к другой странице ОЗУ необходимо изменить регистр RAMPY в I/O области. Региструказатель Y может остаться неизменным после выполнения команды, но может быть инкрементирован или декрементирован. Использование регистра-указателя Y обеспечивает удобную возможность обращения к матрицам, таблицам, указателю стека.

Использование Y-указателя:

 

Операция:

Комментарий:

 

(i)

Rd <-- (Y)

 

Y: Неизменен

(ii) Rd <-- (Y)

Y <-- Y + 1

Y: Инкрементирован впоследствии

(iii)Y <-- Y + 1

Rd <-- (Y)

Y: Предварительно декрементирован

(iv) Rd <-- (Y + q)

 

Y: Неизменен, q: смещение

 

Синтаксис:

Операнды:

Счетчик программ:

(i)

LD Rd,Y

0 < d < 31

PC<-- + 1

(ii) LD Rd,Y+

0 < d < 31

PC<-- + 1

(iii)LD Rd,-Y

0 < d < 31

PC<-- + 1

(iv) LDD Rd, Y + q

0 < d < 31

PC<-- + 1

Пример:

0 < q < 63

 

;Очистить старший байт Y.

clr

r29

ldi

r28, $20 ;Установить $20 в младший байт Y.

ld

r0, Y+

;Загрузить в r0 содерж. SRAM по адресу

ld

r1, Y

;$20 (Y постинкрементируется).

;Загрузить в r1 содержимое SRAM по

ldi

 

;адресу $21.

 

r28, $23 ;Установить $23 в младший байт Y.

ld

r2, Y

;Загрузить в r2 содержимое SRAM по

ld

r3, -Y

;адресу $23.

 

;Загрузить в r3 содержимое SRAM по

 

 

;адресу $22 (Y преддекрементируется).

ldd r4, Y+2 ;Загрузить в r4 содержимое SRAM по ;адресу $24.

Слов: 1 (2 байта). Циклов: 2.

85

Команда LD (LDD) загрузить косвенно из ОЗУ в регистр с использованием индекса Z

Описание:

Загружает косвенно, со смещением или без смещения, один байт из ОЗУ в регистр. Положение байта в ОЗУ указывается 16-разрядным регистромуказателем Z в регистровом файле. Обращение к памяти ограничено текущей страницей объемом 64 Кбайта. Для обращения к другой странице ОЗУ необходимо изменить регистр RAMPZ в I/O области. Региструказатель Z может остаться неизменным после выполнения команды, но может быть инкрементирован или декрементирован. Эта особенность очень удобна при использовании регистра-указателя Z в качестве указателя стека, однако, поскольку регистр-указатель Z может быть использован для косвенного вызова подпрограмм, косвенных переходов и табличных преобразований, более удобно использовать в качестве указателя стека регистры-указатели X и Y. Об использовании указателя Z для просмотра таблиц в памяти программ см. команду LPM.

Использование Z-указателя:

 

Операция:

Комментарий:

 

 

(i)

Rd <-- ()

 

Z: Неизменен

(ii)

Rd <-- (Z)

Z <-- Z + 1

Z: Инкрементирован впоследствии

(iii)Z <-- Z + 1

Rd <-- (Z)

Z: Предварительно декрементирован

(iv) Rd <-- (Z + q)

 

Z: Неизменен, q: смещение

 

Синтаксис:

Операнды:

 

Счетчик программ:

(i)

LD Rd,Z

0 < d < 31

 

PC<-- + 1

(ii) LD Rd,Z+

0 < d < 31

 

PC<-- + 1

(iii)LD Rd,-Z

0 < d < 31

 

PC<-- + 1

(iv) LDD Rd, Z + q

0 < d < 31

 

PC<-- + 1

Пример:

0 < q < 63

 

 

;Очистить старший байт Z.

clr

r31

ldi r30, $20

;Установить $20

в младший байт Z.

ld

r0, Z+

;Загрузить в r0

содерж. SRAM по адресу

ld

r1, Y

;$20 (Z постинкрементируется).

;Загрузить в r1

содержимое SRAM по

ldi

r30, $23

;адресу $21.

 

в младший байт Z.

;Установить $23

ld

r2, Z

;Загрузить в r2

содержимое SRAM по

 

 

;адресу $23.

 

 

86

ld r3, -Z ;Загрузить в r3 содержимое SRAM по ;адресу $22 (Z преддекрементируется).

ldd r4, Z+2 ;Загрузить в r4 содержимое SRAM по ;адресу $24.

Слов: 1 (2 байта). Циклов: 2.

Команда LDI загрузить непосредственное значение

Описание:

Загружается 8-разрядная константа в регистр от 16 по 31

Операция: Rd <-- K

Синтаксис:

Операнды:

Счетчик программ:

LDI Rd, K

16 < d < 31, 0 < K < 255

PC<-- + 1

Пример:

; Очистить старший байт Z.

clr r31

ldi

r30, $F0 ;

Установить $F0 в младший байт Z.

lpm

;

Загрузить константу из программы.

 

;

Память отмечена в Z.

Слов: 1 (2 байта). Циклов: 1.

Команда LDS – загрузить непосредственно из СОЗУ

Описание:

Выполняется загрузка одного байта из СОЗУ в регистр. Можно использовать 16-разрядный адрес. Обращение к памяти ограничено текущей страницей СОЗУ объемом 64 Кбайта. Команда LDS использует для обращения к памяти выше 64 Кбайт регистр RAMPZ.

Операция: Rd <-- (k)

Синтаксис:

Операнды:

Счетчик программ:

LDS Rd,k

0 < d < 31,0 < k < 65535

PC<-- + 2

Пример:

r2, $FF00 ; Загрузить r2 содержимым SRAM

lds

add

r2, r1

;по адресу $FF00.

 

; Сложить r1 с r2.

 

sts

$FF00, r2 ; Записать обратно.

Слов: 2 (4 байта). Циклов: 3.

 

Команда LPM – загрузить байт памяти программ

Описание:

Загружает один байт, адресованный регистром Z, в регистр 0 (R0). Команда обеспечивает эффективную загрузку констант или выборку постоянных данных. Память программ организована из 16-разрядных слов, и младший значащий разряд (LSB) 16-разрядного указателя Z выбирает

87

или младший (0) или старший (1) байт. Команда может адресовать первые 64 Кбайта (32 Кслов) памяти программ.

Операция:

 

Комментарий:

R0<-- (Z)

 

Z указывает на память программ

Синтаксис:

Операнды:

Счетчик программ:

LPM

нет

PC<-- + 1

Пример:

; Очистить старший байт Z.

clr r31

ldi r30, $F0 ; Установить младший байт Z.

lpm

; Загрузить константу из памяти

 

;программ, отмеченную Z (r31 : r30).

Слов: 1 (2 байта). Циклов: 3.

 

Команда LSL – логически сдвинуть влево

Описание:

Выполнение сдвига всех битов Rd на одно место влево. Бит 0 стирается. Бит 7 загружается во флаг переноса (С) регистра состояния (SREG). Эта команда эффективно умножает на два значение величины без знака.

Операция:

 

 

 

 

 

c

b7…………………..b0

 

0

 

 

 

 

Синтаксис:

Операнды:

Счетчик программ:

LSL Rd

0 < d < 31

PC <-- PC + 1

H: Rd3.

S: N V, для проверок со знаком.

V:N C (Для N и C после сдвига). Устанавливается, если (N устанавливается и C очищается) или (N очищается, а C устанавливается). В ином случае очищается (при наличии значений N и C после сдвига).

N:Устанавливается, если в результате установлен MSB, в ином случае очищается.

Z: Устанавливается, если результат $00, в ином случае очищается.

C:Rd7 Устанавливается, если перед сдвигом был установлен MSB регистра Rd, в ином случае очищается.

Пример:

add r0, r4 ; Сложить r4 с r0. lsl r0 ; Умножить r0 на 2.

Слов: 1 (2 байта). Циклов: 1.

88

Команда LSR – логически сдвинуть вправо

Описание:

Сдвиг всех битов Rd на одно место вправо. Бит 7 очищается. Бит 0 загружается во флаг переноса (С) регистра состояния (SREG). Эта команда эффективно делит на два число без знака. Флаг переноса может быть использован для округления результата.

Операция: 0

b7…………………..b0

c

Синтаксис:

Операнды:

Счетчик программ:

LSR Rd

0 < d < 31

PC <- PC + 1

S N V, для проверок со знаком.

VN C (Для N и C после сдвига). Устанавливается, если (N устанавливается и C очищается) или (N очищается, а C устанавливается). В ином случае очищается (при наличии значений N и C после сдвига).

N 0.

Z Устанавливается, если результат $00, в ином случае очищается

CRd0. Устанавливается, если перед сдвигом был установлен LSB регистра Rd, в ином случае очищается.

Пример:

add r0, r4 ; Сложить r4 с r0. lsr r0 ; Разделить r0 на 2.

Слов: 1 (2 байта). Циклов: 1.

Команда MOV - копировать регистр

Описание:

Команда создает копию одного регистра в другом регистре. Исходный регистр Rr остается неизменным, в регистр назначения Rd загружается

копия содержимого регистра.

 

Операция:

Rr. Rd <-- Rr

 

 

Синтаксис:

Операнды:

Счетчик программ:

MOV Rd,Rr

0 < d < 31, 0 < r <31

PC<-- + 1

Пример:

r16, r0

; Копировать r0 в r16.

mov

call

check

; Вызвать подпрограмму.

. . .

check: cpi r16, $11 ; Сравнить r16 с $11.

. . .

; Вернуться из подпрограммы.

ret

Слов: 1 (2 байта). Циклов: 1.

 

89