Код
Команда
06
MVI B, xx
0E
MVI C, xx
16
MVI D, xx
1E
MVI E, xx
26
MVI H, xx
2E
MVI L, xx
36
MVI [HL], xx
3E
MVI A, xx
Например, после выполнения команды MVI E,37h в регистре E будет содержаться байт 37h. Этот третий метод обращения к памяти называется непосредственной адресацией.
Набор из 32 кодов команд выполняет четыре основные арифметические операции, с которыми мы познакомились, когда собирали процессор (глава 17). К ним относятся сложение (ADD), сложение с переносом (ADC), вычитание (SUB) и вычитание с заимствованием (SBB). Во всех случаях аккумулятор является одним из двух операндов, а также местом назначения для результата.
Код
Команда
Код
Команда
80
ADD A, B
90
SUB A, B
81
ADD A, C
91
SUB A, C
82
ADD A, D
92
SUB A, D
83
ADD A, E
93
SUB A, E
84
ADD A, H
94
SUB A, H
85
ADD A, L
95
SUB A, L
86
ADD A,[HL]
96
SUB A,[HL]
87
ADD A, A
97
SUB A, A
88
ADC A, B
98
SBB A, B
89
ADC A, C
99
SBB A, C
8A
ADC A, D
9A
SBB A, D
8B
ADC A, E
9B
SBB A, E
8C
ADC A, H
9C
SBB A, H
8D
ADC A, L
9D
SBB A, L
8E
ADC A,[HL]
9E
SBB A,[HL]
8F
ADC A, A
9F
SBB A, A
Предположим, что в аккумуляторе А содержится байт 35h, а в регистре B — байт 22h. После выполнения команды SUB A, B в аккумуляторе будет содержаться байт 13h.
Если в A содержится байт 35h, в регистре H — 10h, в регистре L — 7Ch, в ячейке памяти 107Ch — 4Ah, то при выполнении команды ADD A,[HL] байт в аккумуляторе (35h) прибавляется к байту в ячейке, к которой обращается пара регистров HL (4Ah), а результат (7Fh) сохраняется в аккумуляторе.
Команды ADC и SBB позволяют процессору 8080 складывать и вычитать 16-, 24-, 32-битные числа, а также числа большей разрядности. Предположим, что пары регистров BC и DE содержат 16-битные числа. Вы хотите сложить их и поместить результат в пару регистров BC. Это можно сделать так.
MOV A, C ; младший байт
ADD A, E
MOV C, A
MOV A, B ; старший байт
ADC A, D
MOV B, A
Для сложения используются две команды: ADD — для младшего байта, ADC — для старшего. Любой бит переноса, возникающий в результате первого сложения, участвует во втором сложении. Поскольку прибавлять можно только к значению в аккумуляторе, в этом небольшом фрагменте кода команда MOV используется не менее четырех раз. Команды MOV очень часто встречаются в программном коде для процессора 8080.
Пришло время поговорить о флагах микросхемы 8080. В процессоре из главы 17 использовались флаг переноса и флаг нуля. Микросхема 8080 предусматривает еще три флага: знака, четности и вспомогательного переноса. Все флаги хранятся в 8-битном регистре, который называется словом состояния программы (Program Status Word, PSW). Такие команды, как LDA, STA или MOV, не влияют на эти флаги. Однако команды ADD, SUB, ADC и SBB изменяют флаги следующим образом:
флаг знака устанавливается в 1, если старший бит результата равен 1, то есть если результат отрицательный;
флаг нуля устанавливается в 1, если результат равен 0;
флаг четности устанавливается в 1, если результат четен, то есть выраженный в двоичном формате результат содержит четное количество 1; флаг четности устанавливается в 0, если результат нечетен; флаг четности иногда используется для грубой проверки результата на наличие ошибок; при написании программ для процессора 8080 этот флаг используется редко;
флаг переноса устанавливается в 1, если в результате выполнения команды ADD или ADC возникает бит переноса либо в результате выполнения команд SUB и SBB бит переноса не возникает (такая реализация флага переноса отличается от того, как он был реализован в компьютере из главы 17);
флаг вспомогательного переноса устанавливается в 1, если в результате выполнения команды возникает перенос из младшей тетрады в старшую; этот флаг используется только для команды DAA (Decimal Adjust Accumulator — десятичная коррекция аккумулятора).
На флаг переноса непосредственно влияют две команды.
Код
Команда
Значение
37
STC
Установить флаг переноса в 1
3F
CMC
Дополнить флаг переноса до 1 или инвертировать флаг переноса
В отличие от компьютера из главы 17, который тоже выполнял команды ADD, ADC, SUB и SBB (хотя и не с такой же степенью гибкости), процессор 8080 способен еще и на булевы операции И, ИЛИ и исключающее ИЛИ. За выполнение арифметических и логических операций отвечает арифметико-логическое устройство процессора.
Код
Команда
Код
Команда
A0
AND A, B
B0
OR A, B
A1
AND A, C
B1
OR A, C
A2