AND A, D
B2
OR A, D
A3
AND A, E
B3
OR A, E
A4
AND A, H
B4
OR A, H
A5
AND A, L
B5
OR A, L
A6
AND A,[HL]
B6
OR A,[HL]
A7
AND A, A
B7
OR A, A
A8
XOR A, B
B8
CMP A, B
A9
XOR A, C
B9
CMP A, C
AA
XOR A, D
BA
CMP A, D
AB
XOR A, E
BB
CMP A, E
AC
XOR A, H
BC
CMP A, H
AD
XOR A, L
BD
CMP A, L
AE
XOR A,[HL]
BE
CMP A,[HL]
AF
XOR A, A
BF
CMP A, A
Команды AND, OR и XOR выполняются побитово, то есть отдельно над каждой парой битов. Например, в результате выполнения следующих команд значение в аккумуляторе будет равно 05h.
MVI A,0Fh
MVI B,55h
AND A, B
Если бы последней была команда OR, то результат был бы равен 5Fh; если бы последней была команда XOR — 5Ah.
Команда CMP (Compare — сравнить) аналогична команде SUB, за исключением того, что результат не сохраняется в аккумуляторе. Другими словами, команда CMP выполняет вычитание, а затем удаляет результат. В чем же смысл? Во флагах! Флаги говорят о том, как два сравниваемых байта соотносятся. Рассмотрим, например, следующие команды.
MVI B,25h
CMP A, B
После их выполнения содержимое аккумулятора (А) остается прежним. Если значение в A равно 25h, будет установлен флаг нуля, а если значение в A меньше 25h — флаг переноса.
Для восьми арифметических и логических операций также существуют версии, которые выполняются непосредственно над байтами.
Код
Команда
Код
Команда
C6
ADI A, xx
E6
ANI A, xx
CE
ACI A, xx
EE
XRI A, xx
D6
SUI A, xx
F6
ORI A, xx
DE
SBI A, xx
FE
CPI A, xx
Например, две приведенные выше строки можно заменить следующей.
CPI A,25h
Вот еще две команды для процессора 8080.
Код
Команда
27
DAA
2F
CMA
Команда CMA (Complement Accumulator — дополнить аккумулятор) выполняет дополнение значения в аккумуляторе до 1. Каждый 0 обращается в 1, а 1 — в 0. Если в аккумуляторе содержится значение 01100101, то после исполнения команды CMA в нем будет содержаться значение 10011010. Этого же результата можно достичь и с помощью следующей команды.
XRI A, FFh
Упомянутая выше команда DAA (Decimal Adjust Accumulator — десятичная коррекция аккумулятора), вероятно, является самой сложной в наборе команд процессора 8080. Специально для нее в микропроцессоре предусмотрено небольшое устройство.
DAA помогает программисту выполнять арифметические операции над десятичными числами в кодировке BCD (binary-coded decimal — десятичное в двоичной кодировке), где каждая тетрада может принимать значение только в диапазоне от 0000 до 1001, то есть от 0 до 9 в десятичном выражении. В формате BCD в восьми битах байта могут храниться две десятичные цифры.
Предположим, что в аккумуляторе содержится BCD-значение 27h, которое фактически соответствует десятичному значению 27, а в регистре B содержится BCD-значение 94h. (Обычно шестнадцатеричное значение 27h эквивалентно десятичному значению 39.) В результате выполнения следующих команд в аккумуляторе будет содержаться значение BBh, которое, разумеется, не является BCD-значением, поскольку в кодировке BCD-значение тетрады не может превышать 9.
MVI A,27h
MVI B,94h
ADD A, B
Однако при выполнении команды DAA в аккумулятор помещается значение 21h и устанавливается флаг переноса, поскольку сумма десятичных чисел 27 и 94 равна 121. Эта команда может пригодиться для арифметических операций над числами в кодировке BCD.
Часто возникает необходимость в прибавлении 1 к значению или в вычитании 1 из значения. В программе для выполнения умножения, описанной в главе 17, нужно вычесть из значения 1, и мы делали это, прибавляя значение FFh, которое является дополнением до 2 числа –1. Процессор 8080 предусматривает специальные команды для увеличения на 1 (инкрементирования) и уменьшения на 1 (декрементирования) значения в регистре или в ячейке памяти.
Код
Команда
Код
Команда
04
INR B
05
DCR B
0С
INR C
0D
DCR C
14
INR D
15
DCR D
1С
INR E
1D
DCR E
24
INR H
25
DCR H
2C
INR L
2D
DCR L
34
INR [HL]
35
DCR [HL]
3C
INR A
3D
DCR A
Однобайтовые команды INR и DCR влияют на все флаги, кроме флага переноса.
Набор команд процессора 8080 также включает четыре команды циклического сдвига, которые сдвигают содержимое аккумулятора на один бит влево или вправо.