page37
2.
При
выполнении
логических
операций,
команд
вращения
и
сдвига,
а
также
команды IN r,(C) флаговый бит 2 действует как флаг чётности P. Он устанавливается, когда
регистр
содержит
четное
количество
единиц,
и
обнуляется
при
нечетном
количестве
единиц.
3.
При выполнении команд LD A,I и LD A,R флаг P/V копирует состояние триггера
прерываний IFF2, что позволяет в любое время узнать состояние процессора.
4.
Во время выполнения команд поиска CPI, CPIR, CPD и CPDR, а также команд
пересылки блоков LDI, LPIR, LDD и LDDR флаг P/V=1, пока содержимое счётчика байтов
(регистр BC) отлично от нуля. Когда BC=0, флаг P/V сбрасывается.
При программировании этот флаг условно кодируется как PO (Parity Odd, нечётно,
P/V=0) и PE (Parity Even, чётно, P/V=1).
H (F4) Halfoarry - Флаг полупереноса
Команды
сложения,
вычитания,
инкремента,
декремента
и
сравнения
8-битных
операндов
устанавливают
флаг
H
когда
был
перенос
из
третьего
бита
результата
в
четвертый, или был заём от четвёртого бита к третьему. Этим он указывает команде DAA
требует ли результат десятичной коррекции.
N (F1) Addition/Subtraction - Флаг сложения/вычитания
Команды сложение, инкремента и логические команды обнуляют флаг N, а команды
вычитания, декремента, сравнения и инвертирования его устанавливают.
Состояние
флага
N
используется
командой
DAA.
Т.к.
алгоритм
корректировки
результата двоично-десятичных операций различен при сложении и вычитании, этот флаг
показывает, какое именно действие происходило перед этим.
В таблице 5.2 показано как выполнение команд влияет на регистр флагов. Команды,
которые здесь не представлены, не влияют ни на один флаг.
Таблица 5.2. Флаги признаков.
Регистр Флагов
F7
F6
F5
F4
F3
F2
F1
F0
Группа команд
S
Z
H
P/V
N
С
Пояснения
LD A,I; LD A,R
?
?
X
0
X
IF
0
P/V ← IFF2
LDI; LDD
X
X
X
0
X
?
0
Если BC≠0, то P/V=1
LDIR; LDDR
X
X
X
0
X
0
0
Если BC=0, то P/V=0
CPI; CPD; CPIR; CPDR
X
?
X
X
X
?
1
Если BC≠0, то P/V=1
Если BC=0, то P/V=0
Если A≠(HL), то Z=0
Если A=(HL), то Z=1
ADD s; ADC s
?
?
X
?
X
V
0
?
8-битовые арифметические
SUB s; SBC s; CP s; NEG
?
?
X
?
X
V
1
?
команды
AND s
?
?
X
1
X
P
0
0
Логические
OR s; XOR s
?
?
X
0
X
P
0
0
команды
INC t
?
?
X
?
X
V
0
Только 8-битовые
DEC t
?
?
X
?
X
V
1
команды
ADD HL,dd; ADD IX,pp; ADD IY,rr
X
X
X
0
?
16-битовые –
ADC HL,dd
?
?
X
X
X
V
0
?
арифметические
SBC HL,dd
?
?
X
X
X
V
1
?
команды
DAA
?
?
X
?
X
P
?
CPL
X
1
X
1
CCF
X
X
X
0
?
SCF
X
0
X
0
1
RLCA; RLA; RRCA; RRA
X
0
X
0
?
Вращение аккумулятора
RLC t; RRC t; RL t; RR t; SLA t;
SRA t; SRL t
?
?
X
0
X
P
0
?
Группа команд вращения и
сдвига
RLD; RRD
?
?
X
0
X
P
0
Перестановка тетрад
BIT b,t
X
?
X
1
X
X
1
Z ← инверсия s
b
IN r,(C); INF
?
?
X
?
X
P
0
INI; IND; OUTI; OUTD
X
?
X
X
X
X
1
Блочные команды
ввода-вывода:
INIR; INDR; OTIR; OTDR
X
1
X
X
X
X
1
Если B≠0, то Z=0
Если В=0, то Z=1