答案 0 :(得分:1)
此页面:http://icarus.ticalc.org/articles/z80_faq.html似乎表明符号标志代表任何计算的结果,而不仅仅是A寄存器上的计算结果。
答案 1 :(得分:1)
在Z80下,所有寄存器(A,B,C,D,E,H,L)都是独立的,因此任何arithemtic或二进制操作都会影响F寄存器中的标志。
答案 2 :(得分:0)
符号标志并不总是表示A.溢出(inc on 255),按位运算(shift等),逻辑运算符影响所有标志。
但是,Zilog以不同的方式设置每个寄存器,因此某些操作会影响具有特定寄存器的标志而不会影响另一个寄存器。常见的优化是“XOR A”,它设置符号标志并有效地将A与零进行比较。我很确定它只对reg A有用。
前面提到的Icarus doc解释了旗帜,曾经有另一个更小的文本文档来解释旗帜。但是上次我看到那是10多年前,我不知道它会在哪里。
答案 3 :(得分:0)
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/