Описание:
Записывается косвенно, со смещением или без смещения, один байт из регистра в СОЗУ. Положение байта в СОЗУ указывается 16-разрядным регистром-указателем Z в регистровом файле. Обращение к памяти ограничено текущей страницей объемом 64 Кбайта. Для обращения к другой странице СОЗУ необходимо изменить регистр RAMPZ в I/O области. Регистр-указатель Z может остаться неизменным после выполнения команды, но может быть инкрементирован или декрементирован. Эта особенность очень удобна при использовании регистра-указателя Z в качестве указателя стека, однако, поскольку регистр-указатель Z может быть использован для косвенного вызова подпрограмм, косвенных переходов и табличных преобразований, более удобно использовать в качестве указателя стека регистры-указатели X и Y.
Использование Z-указателя:
Операция: | Комментарий: | ||
(i) | (Z) <-- Rr | Z: Неизменен | |
(ii) | (Z) <-- Rr | Z <-- Y + 1 | Z: Инкрементирован впоследствии |
(iii) | Z <-- Z - 1 | (Z) <-- Rr | Z: Предварительно декрементирован |
(iv) | ( Z + q) <-- Rr | Z: Неизменен, q: смещение | |
Синтаксис | Операнды: | Счетчик программ: | |
(i) | ST Z,Rr | 0 < d < 31 | PC <-- PC + 1 |
(ii) | ST Z+,Rr | 0 < d < 31 | PC <-- PC + 1 |
(iii) | ST -Z,Rr | 0 < d < 31 | PC <-- PC + 1 |
(iv) | STD Z+q,Rr | 0 < d < 31, 0 < q < 63 |
PC <-- PC + 1 |
16-разрядный код операции:
(i) | 1000 | 001r | rrrr | 0000 |
(ii) | 1001 | 001r | rrrr | 0001 |
(iii) | 1001 | 001r | rrrr | 0100 |
(iv) | 10q0 | qq1r | rrrr | 0qqq |
Булевы выражения регистра статуса (SREG)
|
||||||||
|
Пример:
clr r31 ; Очистить старший байт Z ldi r30, $20 ; Установить $20 в младший байт Z st Z+,r0 ;Сохранить в r0 содерж. SRAM по адр. $20 (Z постинкрементируется) st Z, r1 ; Сохранить в r1 содержимое SRAM по адресу $21 ldi r30, $23 ; Установить $23 в младший байт Z st Z, r2 ; Сохранить в r2 содержимое SRAM по адресу $23 st -Z, r3 ; Сохранить в r3 содерж.SRAM по адр. $22 (Z преддекрементируется) std Z+2, r4 ; Сохранить в r4 содержимое SRAM по адресу $24
Слов: 1 (2 байта)
Циклов: 2