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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Z80汇编语言 - INC r后的标志标志相关的知识,希望对你有一定的参考价值。

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

答案

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

另一答案

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

Check Z80 datasheet page 160 for inc r affected flags.

另一答案

符号标志并不总是表示A.溢出(inc on 255),按位运算(shift等),逻辑运算符影响所有标志。

但是,Zilog以不同方式设置每个寄存器,因此某些操作会影响具有特定寄存器的标志而不会影响另一个寄存器。常见的优化是“XOR A”,它设置符号标志并有效地将A与零进行比较。我很确定它只适用于reg A.

前面提到的Icarus doc解释了这些标志,曾经有另一个更小的文本文档来解释标志。但是上次我看到那是10多年前,我不知道它会在哪里。

另一答案

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/

以上是关于Z80汇编语言 - INC r后的标志标志的主要内容,如果未能解决你的问题,请参考以下文章

汇编语言——标志寄存器

为啥 INC 和 DEC 指令*不*影响进位标志 (CF)?

汇编中的inc和dec

在 x86 汇编代码(GAS 语法)中有效乘以 2 的幂而不影响标志

汇编--算术运算类指令

实验4 8086标志寄存器及中断