Флаги в Z80 всегда относятся к последней операции, которая их изменила. Такое поведение может быть полезным или не очень полезным. Просто чтобы дать вам несколько конкретных примеров:
ld l,0 ; L is non-zero, but loading does not affect flags,
; so their state is undefined at this stage
xor a ; this resets A to 0; affected flags are NC, Z
ld h,a ; we still have NC, Z
inc hl ; HL is now equal to 1, but inc/dec of register pairs does
; not affect any flags at all
dec a ; A is now 255 (i.e. -1). we have NZ (expectedly),
; however flag C is still off (intuitively unexpectedly),
; because DEC of individual registers does not affect state of flag C
add a,1 ; at the same time, addition modifies both Z and C,
; so after this A=0 again and we have flags Z and C both on
Вообще говоря, это означает, что иногда вы можете создавать более сложные условия, которые отслеживают состояние флага C, в то же время выполняя другие операции, которые изменяют флаг Z без изменения флага C. Это также означает, что вы должны помнить для каждой операции, какие флаги он изменяет.
Лучший из известных мне онлайн-столов со всей этой информацией расположен по адресу http://clrhome.org/table/