Оставшиеся два байта #DD и #FD префиксируют команды, работа-
ющие соответственно с индексными регистрами IX и IY.
Коды команд, использующих в качестве операндов индексные реги-
стры IX и IY, получаются добавлением префиксного байта к кодам команд,
оперирующих с регистровой парой HL (но не префиксированных байтом
#ED).
Коды команд, использующих индексный метод адресации, образуются
аналогично, только префиксируются команды, оперирующие с ячейкой
памяти, адресуемой (HL). При этом код смещения d (см. «Система команд
Z80»j всегда является третьим байтом получающегося кода.
Коды недокументированных команд, работающих с частями индекс-
ных регистров, образуются из префикса #DD или #FD и кода команды,
оперирующей с регистрами Н и L. Причем регистру Н соответствуют
старшие байты индексных регистров (IXh и IYh), а регистру L — младшие
(1X1 и IY1).
В табл. 6 приведены примеры построения кодов команд, использую-
щих индексные регистры. Слева приведена исходная команда, которую
можно найти в таблице символов, справа — команда, получаемая в результа-
те.
Таблица 8. Пример построения кодов команд Z80.
Исходная |
команда |
Получаемая команда |
Мнемоника |
Код |
Мнемоника |
Код |
ADO HL.BC |
#09 |
ADD IX.BC |
#DD #09 |
JP (HL) |
#E9 |
JP (IY) |
#FD #E9 |
LD B,(HL) |
#46 |
LD B,(IX+1) |
#PD #46 #01 |
BIT 0,(HL) |
#CB #46 |
BIT 0,(IY—1) |
#FD #CB #FF #46 |
LD A,H |
#7C |
LD A,IXh |
#DD #7C |
LD H,L |
#65 |
LD IXhJXi |
#DD #65 |
LD L,1 |
#2E #01 |
LD IYI.1 |
#FD #2E #01 |
XOR H |
#AC |
XOR IXh |
#DD #AC |
1 Last In First Out — первым пришел — последним вышел (англ!).
2 Необходимо учитывать, что код смещения, содержащийся в коде команды
и записанный в тексте ассемблера, будет различным. Ассемблер отсчи-
тывает смещения относительно счетчика адресов $, хранящего адрес
команды, тогда как микропроцессор использует содержимое регистра PC,
увеличивающееся каждый раз при выборе очередного байта команды из
памяти.
3 В двоично-десятичных числах цифры от 0 до 9 кодируются четырьмя
битами, причем комбинации I010...1 II) не нгпольэуютгя. Таким обра-
юм в одном байте может бытн записано только две цифры. Это расточи-
тельно с точки зрения экономии памяти, но гарантирует отсутствие
ошибки «машинного- округления.
4 Более подробно о командах, обслуживающих прерывания, см. «Архитек-
тура ZX Spectrum».
5 Следует отметить, что при выполнении команды В запрещаются маски-
руемые прерывания на время между этой и следующей командами.
6 битами