Z80汇编语言 - INC r后的标志标志

时间:2011-02-19 14:12:45

标签: assembly z80

Z80汇编语言的一件事困扰着我。符号标志是否始终代表A寄存器的值的符号?我的意思是,当我运行'INC B'时,结果返回到B,那么从A或B寄存器的值中取出的符号标志是什么?提前致谢

4 个答案:

答案 0 :(得分:1)

此页面:http://icarus.ticalc.org/articles/z80_faq.html似乎表明符号标志代表任何计算的结果,而不仅仅是A寄存器上的计算结果。

答案 1 :(得分:1)

在Z80下,所有寄存器(A,B,C,D,E,H,L)都是独立的,因此任何arithemtic或二进制操作都会影响F寄存器中的标志。

Check Z80 datasheet page 160 for inc r affected flags.

答案 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/