标志寄存器FLAGS----小总结

学习汇编语言程序设计,不可能不涉及到各种寄存器的知识。8086cpu有14个16位寄存器,而标志寄存器FLAGS又是其中非常复杂的一个。


首先简单总结一下8086cpu的14个16位寄存器。


8086cpu寄存器分类:

   一,8个通用寄存器。

                1,    4个数据寄存器      AX,BX,CX,DX

                2, 两个指针寄存器       SP,BP

                3, 两个变址寄存器       SI,DI

  二,4个段寄存器         CS,DS,SS,ES

  三,两个控制寄存器      IP,FLAGS


我觉得在这些寄存器中,FLAGS最难学。其九个标志位都代表着不同的含义,用以表现微处理器当前状态和某些控制。

标志寄存器FLAGS----小总结_第1张图片

一,状态标志:

CF:进位位。

如果运算结果的最高位产生一个进位或错位,则CF置1,否则CF清零。

PF:奇偶位。

如果运算结果低8位中“1”的个数为偶数时,则PF置。

否则PF清0。

AF:辅助进位位。

反应运算结果低四位产生进位或错位的情况。

ZF:零值位。

如果运算结果为零则ZF置1。否则清零。

SF:符号位。

如果运算结果为负,即一个数的最高位为1,则SF置1,否则SF清零。

OF:溢出位。

若运算结果超出补码表示范围(8位-128~+127,16位-32768~+32767)。若溢出,OF置1,否则OF清0。

二,控制标志

TF:单步标志位

用于程序跟踪调试。当TF=1,CPU进入单步方式。

IF:中断允许位

当IF=1时,CPU为开中断。

当IF=0时,CPU为关中断。

DF:方向位

决定串操作指令执行时的指针寄存器的调整方向。至今我还没接触过。




另外,可以用debug来查看寄存器中各位的值。

输入r指令。得到右下角的字母就是状态寄存器各位的值。



这个是符号值对应表:

溢出标志OF(Over flow flag)                             OV(1)                         NV(0)

方向标志DF(Direction flag)                             DN(1)                         UP(0)

中断标志IF(Interrupt flag)                             EI(1)                         DI(0)

符号标志SF(Sign flag)                                  NG(1)                         PL(0)

零标志ZF(Zero flag)                                    ZR(1)                         NZ(0)

辅助标志AF(Auxiliary carry flag)                       AC(1)                         NA(0)

奇偶标志PF(Parity flag)                                PE(1)                         PO(0)

进位标志CF(Carry flag)                                 CY(1)                         NC(0)




你可能感兴趣的:(汇编)