page36
1.
При 8-битных арифметических и логических операциях флаг устанавливается в 1,
если результат выполнения команды равен нулю. Если результат не равен нулю, флаг Z
обнуляется.
2.
При командах поиска и сравнения флаг Z устанавливается в 1. когда содержимое
ячейки памяти адресуемой регистровой парой HL, совладает с содержимым аккумулятора.
3.
После
выполнения
команды
тестирования
отдельного
бита
во
флаг
Z
записывается инвертированное значение проверенного бита.
4.
Если при выполнении команд INI, IND, OUTI, OUTD результат декремента (В-1)
не равен нулю, то флаг Z=0. Когда результат (В-1)=0, флаг Z устанавливается.
5.
Флаг Z устанавливается в 1, когда в результате выполнения команд IN r,(C)
содержимое регистра r обнуляется.
При программировании этот флаг следует условно кодировать как Z (Zero, результат
равен нулю, Z=1) и NZ (No Zero, результат не равен нулю, Z=0)
C (F0) Carry - Флаг переноса
На состояние этого флага влияют следующие команды:
1.
Команды сложения устанавливают флаг C, когда есть Перенос от бита 7 к биту 8
результата
сложения
однобайтных
чисел,
или
от
бита
15
к
биту
16
при
сложении
двухбайтных чисел. Иначе C=0.
2.
Команды вычитания устанавливают флаг, если есть заём, и сбрасывают, когда его
нет.
3.
Команды RLA, RRA, RL t и RR t используют флаг C как бит связи между 7 и 0
битами.
4.
После выполнения команд RLCA, RLC t, SLA t флаг C копирует значение бита 7
операнда.
5.
После выполнения команд RRCA, RRC t, SRA t, SRL t флаг C копирует значение
бита 0 операнда.
6.
Логические команды AND s, OR s и XOR s обнуляют флаг C.
7.
Команда SCF устанавливает флаг C, а команда CCF его инвертирует.
При программировании флаг кодируется как C (Carry, был перенос, C=1) и NC (No
Carry, не было переноса, С=0).
P/V (F2) Parity/Overflow - Флаг чётности/переполнения
Этот флаг имеет несколько функций:
1.
При арифметических операциях над числами со знаком он действует как флаг
переполнения V. т.к. диапазон представления чисел со знаком от -128 до +127, то при
операциях над ними возможен выход результата за эти пределы - переполнение. В этом
случае
флаг,
устанавливается
в
1,
сигнализируя
об
ошибочности
результата.
Логика
установки флага V в 1 такова:
а) если был перенос из 6-го бита в 7-ой, и не было переноса из 7-го бита во флаг C.
б) не было переноса из 6-го бита в 7-ой, но есть перенос из 7-го бита во флаг C.
Примеры:
1. Сложение
+76=
01001100
-114= 10001110
C=0
11011010 = -38 верно
V=0
2. Сложение
-1=
11111111
-1=
11111111
С=1
11111110 = -2 верно
V=0
3. Сложение
+82=
01010010
+94=
01011110
C=0
10110000 = -80 неверно!
V=1
В последнем примере произошла установка флага V. Это означает, что ошибка
должна быть программно учтена при анализе результата.