Система команд процессора Z-80 довольно обширна и потому
наилучший способ ее изучения состоит в том, чтобы сгруппировать похожие по
своему действию команды и осваивать их по группам.
Мы выделим 19 основных групп команд, но некоторые из этих
групп будут иметь подгруппы.
Начиная освоение машинных кодов, в главе 1 мы
использовали десятичную систему для записи кодов операций, операндов и адресов.
Это делалось для более быстрой адаптации читателей к особенностям
программирования на уровне процессора. Теперь же, когда мы установили, что
профессионально эффективнее работать в шестнадцатеричной системе, мы будем применять
ее. Указывать суффикс «H» в записи чисел и адресов уже не будем.
5.1.1. Загрузка одиночного регистра.
Эти команды существуют для всех одиночных регистров.
Команды - двухбайтные. Сначала следует код операции, за
ним - само число n. При засылке числа в регистр,
старое значение, находившееся в нем, утрачивается.
Мнемоника
|
Код
|
Мнемоника
|
Код
|
LD A,n
|
3E
n
|
LD B,n
|
06
n
|
LD C,n
|
0E
n
|
LD D,n
|
16
n
|
LD E,n
|
1E
n
|
LD H,n
|
26
n
|
LD L,n
|
2E
n
|
|
|
5.1.2. Загрузка регистровой пары.
В регистровую пару может быть загружено двухбайтное
число, т.е. от 0 до 65535. Эти команды для всех регистров, кроме IX и IY
- трехбайтные. За кодом операции следуют два байта, задающие число. Для операций
с индексными регистрами IX и IY эти команды - четырехбайтные,
т.к. код операции включает в себя префикс DD (для регистра IX) или FD
(для регистра IY).
Наиболее часто двухбайтное число, засылаемое в
регистровую пару, является адресом, но это может быть и просто целое число.
Следует помнить, что всегда первый байт числа загружается в младший регистр
пары, а второй - в старший.
Мнемоника
|
Код
|
Мнемоника
|
Код
|
LD HL,nn
|
21
n n
|
LD BC,nn
|
01
n n
|
LD DE,nn
|
11
n n
|
LD IX,nn
|
DD
21 n n
|
LD IY,nn
|
FD
21 n n
|
LD SP,nn
|
31
n n
|
5.2.1. Копирование одиночных регистров.
Для аккумулятора и шести регистров общего назначения
существуют 49 команд, позволяющих копировать содержимое одного регистра в
другой. Ни одна из этих команд на флаги не влияет.
Все эти команды - однобайтные. Коды этих команд приведены
в таблице ниже.
|
LD A,r
|
LD H,r
|
LD L,r
|
LD B,r
|
LD C,r
|
LD D,r
|
LD E,r
|
A
|
7F
|
67
|
6F
|
47
|
4F
|
57
|
5F
|
H
|
7C
|
64
|
6C
|
44
|
4C
|
54
|
5C
|
L
|
7D
|
65
|
6D
|
45
|
4D
|
55
|
5D
|
B
|
78
|
60
|
68
|
40
|
48
|
50
|
58
|
C
|
79
|
61
|
69
|
41
|
49
|
51
|
59
|
D
|
7A
|
62
|
6A
|
42
|
4A
|
52
|
5A
|
E
|
7B
|
63
|
6B
|
43
|
4B
|
53
|
5B
|
Для регистров I и R существуют команды
копирования только в паре с аккумулятором.
Мнемоника
|
Код
|
Мнемоника
|
Код
|
LD A,I
|
ED
57
|
LD A,R
|
ED
5F
|
LD I,A
|
ED
47
|
LD R,A
|
ED
4F
|
5.2.2. Копирование содержимого регистровых пар.
Эти команды работают только с указателем стека. В этой
группе только три команды. Они также не изменяют содержимого флагов.
Мнемоника
|
Код
|
Мнемоника
|
Код
|
LD SP,HL
|
F9
|
LD SP,IX
|
DD
F9
|
LD SP,IY
|
FD
F9
|
|
|
В тех случаях, когда Вам надо скопировать содержимое
произвольной регистровой пары в другую произвольную, например из BC в DE,
Вы можете воспользоваться двумя командами копирования одиночных регистров - LD
D,B и LD E,C.
Второй способ для этой цели - произвести переброску через
стек, но для этого надо воспользоваться командами для работы со стеком см.
раздел 5.11.
5.2.3. Команды обмена.
В этой подгруппе три команды:
EX DE, HL (код ED) - обмен между собой
содержимым регистров HL и DE.
На флаги не влияет.
EXX (код D9) - переключить основной набор
регистров на
альтернативный.
EX AF,A'F' (код 08) - переключить аккумулятор и
флаговый
регистры
на альтернативные.
Эти команды требуют указания адреса, откуда данные могут
быть загружены в регистр. Существуют три основных метода адресации:
·
прямая адресация;
·
косвенная адресация;
·
индексная адресация.
В соответствии с этими тремя методами мы и рассмотрим три
подгруппы в этой группе.
5.3.1. Загрузка регистра прямой адресацией.
После кода команды следует двухбайтный адрес ячейки nn, содержимое которой загружается в данный регистр.
Единственный случай, когда такой командой загружается одиночный регистр - это
загрузка аккумулятора, во всех остальных случаях загружаются два байта в
регистровую пару. Предполагается, что второй байт берется из ячейки nn+1. При этом содержимое указанного адреса идет в
младший регистр, а следующего - в старший. Интересно отметить, что загрузка
пары HL может выполняться двумя способами.
Мнемоника
|
Код
|
Мнемоника
|
Код
|
LD A,(nn)
|
3A
n n
|
LD SP,(nn)
|
ED
7B n n
|
LD HL,(nn)
|
2A
n n
|
Вторая
форма
|
ED
6B n n
|
LD BC,(nn)
|
ED
4B n n
|
LD DE,(nn)
|
ED
5B n n
|
LD IX,(nn)
|
DD
2A n n
|
LD IY,(nn)
|
FD
2A n n
|
5.3.2. Загрузка регистра косвенной адресацией.
Здесь не указывается, из какого адреса надо взять данные,
зато указывается, в какой регистровой паре находится этот адрес. Еще раз
напомним, что загружается не этот адрес, а то, что в нем находится.
Пример:
LD A,(HL) - код 7E загрузить в регистр A то число, которое
находится в ячейке памяти, адрес которой находится в регистре HL.
Остальные этой подгруппы.
Мнемоника
|
Код
|
Мнемоника
|
Код
|
LD A,(BC)
|
0A
|
LD A,(DE)
|
1A
|
LD H,(HL)
|
66
|
LD L,(HL)
|
6E
|
LD B,(HL)
|
46
|
LD C,(HL)
|
4E
|
LD D,(HL)
|
56
|
LD E,(HL)
|
5E
|
5.3.3. Загрузка регистра
индексной адресацией.
Этим методом из памяти могут загружаться однобайтные данные
в аккумулятор или в регистры общего назначения. Адрес требуемого байта задается
следующим образом:
·
в регистре IX или IY находится базовый адрес
таблицы или массива данных;
·
в команде после кода операции указывается операнд «смещение» s требуемого адреса относительно базового. Величина s может быть только однобайтной от 0 до 255.
Обратите внимание на возможную ошибку: если Вам надо
загрузить в регистр общего назначения тот байт, который находится по базовому
адресу таблицы, хранящемуся в IX или в IY, то смещение все
равно указывать надо. Просто в этом случае s=0.
Мнемоника
|
Код
|
Мнемоника
|
Код
|
LD A,(IX+s)
|
DD
7E s
|
LD A,(IY+s)
|
FD
7E s
|
LD H,(IX+s)
|
DD
66 s
|
LD H,(IY+s)
|
FD
66 s
|
LD L,(IX+s)
|
DD
6E s
|
LD L,(IY+s)
|
FD
6E s
|
LD B,(IX+s)
|
DD
46 s
|
LD B,(IY+s)
|
FD
46 s
|
LD C,(IX+s)
|
DD
4E s
|
LD C,(IY+s)
|
FD
4E s
|
LD D,(IX+s)
|
DD
56 s
|
LD D,(IY+s)
|
FD
56 s
|
LD E,(IX+s)
|
DD
5E s
|
LD E,(IY+s)
|
FD
5E s
|
Ни одна из команд загрузки регистров из памяти не меняет
флаги. В Справочнике (часть 3) указано время исполнения команд в тактовых
циклах. При частоте 3,5 МГц один тактовый импульс длится - 0,000000286 сек.
Минимальная продолжительность команды в процессоре Z-80 - 4 тактовых цикла. Из
рассмотренных в данной группе команд самыми быстрыми являются команды загрузки
регистров косвенной адресацией. Они занимают в основном 7 циклов. Команды
загрузки прямой адресацией длятся 16 - 20 циклов, а при индексной адресации -
19 циклов.
Команды этой группы прямо противоположны командам
предыдущей группы. Также как и там, здесь можно выделить три подгруппы в
зависимости от метода адресации.
5.4.1. Запись в память при прямой адресации.
Мнемоника
|
Код
|
Мнемоника
|
Код
|
LD (nn),A
|
32
n n
|
LD (nn),SP
|
ED
73 n n
|
LD (nn),HL
|
22
n n
|
Вторая
форма
|
ED
63 n n
|
LD (nn),BC
|
ED
43 n n
|
LD (nn),DE
|
ED
53 n n
|
LD (nn),IX
|
DD
22 n n
|
LD (nn),IY
|
FD
22 n n
|
Обратите внимание на то, что в этой подгруппе нет команд
на запись в память целых чисел. Когда необходимо выполнить такую операцию, ее
делают поэтапно. Сначала число заносят в регистр командой 1-ой группы, а затем
отправляют из регистра в память командой 4-й группы.
Поскольку эти команды являются противоположными командами
3-й группы, они часто употребляются совместно. Командами 4-й группы программные
переменные отправляются на временное хранение в отведенное им в памяти место, а
командами 3-й группы - вызываются из памяти в процессор для обработки.
5.4.2. Запись в память при косвенной адресации.
Мнемоника
|
Код
|
Мнемоника
|
Код
|
LD (HL),A
|
77
|
LD (BC),A
|
02
|
LD (DE),A
|
12
|
LD (HL),H
|
74
|
LD (HL),L
|
75
|
LD (HL),B
|
70
|
LD (HL),C
|
71
|
LD (HL),D
|
72
|
LD (HL),E
|
73
|
LD (HL),n
|
36
n
|
5.4.3. Запись в память при индексной адресации.
Команды этой подгруппы существуют для всех одиночных
регистров общего назначения и аккумулятора. Базовый адрес может находиться как
в регистровой паре IX, так и в IY.
Мнемоника
|
Код
|
Мнемоника
|
Код
|
LD (IX+s),A
|
DD
77 s
|
LD (IY+s),A
|
FD
77 s
|
LD (IX+s),H
|
DD
74 s
|
LD (IY+s),H
|
FD
74 s
|
LD (IX+s),L
|
DD
75 s
|
LD (IY+s),L
|
FD
75 s
|
LD (IX+s),B
|
DD
70 s
|
LD (IY+s),B
|
FD
70 s
|
LD (IX+s),C
|
DD
71 s
|
LD (IY+s),C
|
FD
71 s
|
LD (IX+s),D
|
DD
72 s
|
LD (IY+s),D
|
FD
72 s
|
LD (IX+s),E
|
DD
73 s
|
LD (IY+s),E
|
FD
73 s
|
LD (IX+s),n
|
DD
36 s n
|
LD (IY+s),n
|
FD
36 s n
|