Команды логической обработки
В составе группы 4 двухместных логических операций над байтами:
ANA, ANI Логическое И
XRA, XRI Логическое ИСКЛЮЧАЮЩЕЕ ИЛИ
ORA, ORI Логическое ИЛИ
CMP, CPI Сравнение
В этих командах один из операндов содержится в аккумуляторе А, который одновременно служит приемником результата. Источником второго операнда служат:
1) регистр src;
2) ячейка памяти (HL);
3) константа, заданная непосредственно в команде.
Мнемоника | Код | Число циклов | Число тактов | Флаги: CY, Z, M, P, C, AC | Содержание |
ANA src | 10100SSS | 0+++0 | A <- A & src | ||
XRA src | 10101SSS | 0+++0 | A <- A ^ src | ||
ORA src | 10110SSS | 0+++0 | A <- A | src | ||
CMP src | 10111SSS | +++++ | A == src | ||
ANA M | A6 | 0+++0 | A <- A & (HL) | ||
XRA M | AE | 0+++0 | A <- A ^ (HL) | ||
ORA M | B6 | 0+++0 | A <- A | (HL) | ||
CMP M | BE | +++++ | A == (HL) | ||
ANI data | E6 | 0+++0 | A <- A & data | ||
XRI data | EE | 0+++0 | A <- A ^ data | ||
ORI data | F6 | 0+++0 | A <- A | data | ||
CPI data | FE | +++++ | A == data | ||
RLC | +---- | A7<-A6<-...<-A0<-A7 | |||
RRC | 0F | +---- | A0<-A1<-...<-A7<-A0 | ||
RAL | +---- | A7<-A6<-...<-A0<-CY<-A7 | |||
RAR | 1F | +---- | A0<-A1<-...<-A7<-CY<-A0 | ||
CMA | 2E | ----- | A <-!A | ||
CMS | 3E | +---- | CY <-!CY | ||
STC | 1---- | CY <- 1 |
Логические операции выполняются поразрядно. Операция сравнения выполняется методом вычитания, но результат вычитания никуда не заносится, а операнды сохраняются без изменения.
Две команды STC и CMC дают возможность манипулировать флагом CY, устанавливая и инвертируя его.
Сброс флага CY может быть выполнен командой (При этом состояние флагов тоже изменяется):
ORA A; A <- A | A
Логические команды включают также и подгруппу сдвигов вправо (RRC, RAR) и влево (RLC, RAL). Определены операции циклического (RRC, RLC) и расширенного (RAR, RAL) сдвигов.
В группе определены команды:
ADD, ADC, ADI, ACI, DAD | Сложение |
SUB, SBB, SUI, SBI | Вычитание |
INR, INX | Инкремент на 1 |
DCR, DCX | Декремент на 1 |
DAA | Десятичная коррекция |
Предусмотрены операции как над байтами, так и над словами.
Во всех байтовых операциях сложения и вычитания аккумулятор используется как источник операнда и приемник результата. В качестве источника второго операнда применяется либо регистр src, либо ячейка памяти М, либо литерал data. В команде сложения DAD роль аккумулятора выполняет регистровая пара HL. Эта команда очень важна при организации таблиц и списков.
С помощью команд инкремента/декремента довольно просто реализовать счетчики, часто необходимые в практике программирования.
Мнемоника | Код | Число циклов | Число тактов | Флаги: CY, Z, M, P, C, AC | Содержание |
ADD src | 10000SSS | +++++ | A <- A + src | ||
ADC src | 10001SSS | +++++ | A <- A + src + CY | ||
SUB src | 10010SSS | +++++ | A <- A - src | ||
SBB src | 10011SSS | +++++ | A <- A - src - CY | ||
ADD M | +++++ | A <- A + (HL) | |||
ADC M | 8E | +++++ | A <- A + (HL) + CY | ||
SUB M | +++++ | A <- A - (HL) | |||
SBB M | 9E | +++++ | A <- A - (HL) - CY | ||
ADI data | C6 | +++++ | A <- A + data | ||
ACI data | CE | +++++ | A <- A + data + CY | ||
SUI data | D6 | +++++ | A <- A - data | ||
SBI data | DE | +++++ | A <- A - data - CY | ||
INR dst | 00DDD100 | -++++ | dst <- dst + 1 | ||
DCR dst | 00DDD101 | -++++ | dst <- dst - 1 | ||
INR M | -++++ | (HL) <- (HL) + 1 | |||
DCR M | -++++ | (HL) <- (HL) - 1 | |||
DAA | +++++ | A <- 2/10 корр-я A | |||
DAD B/D/H/SP | 09/19/29/39 | +---- | HL <- HL+BC/DE/HL/SP | ||
INX B/D/H/SP | 03/13/23/33 | ----- | R16 <- R16 + 1 | ||
DCX B/D/H/SP | 0B/1B/2B/3B | ----- | R16 <- R16 - 1 |