Команда 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: Предварительнo декрементирован |
(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 0 < q < 63 |
PC<-- + 1 |
16-разрядный код операции:
(i) |
1000 |
000d |
dddd |
1000 |
(ii) |
1001 |
000d |
dddd |
1001 |
(iii) |
1001 |
000d |
dddd |
1010 |
(iv) |
10q0 |
qq0d |
dddd |
1qqq |
Булевы выражения регистра статуса (SREG)
Пример:
clr r29 ;Очистить старший байт Y
ldi r28, $20 ;Установить $20 в младший байт Y
ld r0, Y+ ;Загрузить в r0 содерж. SRAM по адресу $20 (Y постинкрементируется)
ld r1, Y ;Загрузить в r1 содержимое SRAM по адресу $21
ldi r28, $23 ;Установить $23 в младший байт Y
ld r2, Y ;Загрузить в r2 содержимое SRAM по адресу $23
ld r3, -Y ;Загрузить в r3 содерж. SRAM по адресу $22 (Y преддекрементируется)
ldd r4, Y+2 ;Загрузить в r4 содержимое SRAM по адресу $24
Слов: 1 (2 байта)
Циклов: 2
|