汇编语言笔记7

标志寄存器

8086CPU的标志寄存器有16位,其中存储的信息称为程序状态字。

flag寄存器是按位起作用,每一位都有专门的含义。

ZF标志

ZF标志是零标志位。它记录相关指令执行之后,其结果是否为0。

  • 如果结果为0,则ZF=1(逻辑真)
  • 如果结果不为0,则ZF=0(逻辑假)

PF标志

PF标志是奇偶标志位。它记录相关指令执行后,结果的所有bit位中的1的个数是否为偶数个

  • 如果1的个数为偶数个,则PF=1
  • 如果1的个数为奇数个,则PF=0

例:

1
2
3
mov al,1
or al,2
;执行后,结果为00000011,1有偶数个,则PF=1

SF标志

SF标志为符号标志位,记录相关指令执行后,其结果是否为负。

  • 结果为负,则SF=1
  • 结果不为负,则SF=0

SF标志是CPU对有符号数运算结果的一种记录。它记录数据的正负。我们将数据看成有符号数来计算的时候,可以通过SF标志来判断其结果正负。对无符号数,我们不用理会SF的值,虽然相关指令会影响SF的值。

CF标志

CF标志是进位标志位。一般情况下,在进行无符号数运算时,记录了运算结果最高有效位向更高位的进位值,或者向更高位的借位值

  • 两个数据相加,可能产生进位。CPU并不会丢掉进位值,而是使CF=1来记录
  • 两个数据相减,可能会产生借位,CF=1
  • adc和sbb指令是带有借位的加减法指令,会受到CF值的影响

OF标志

在进行有符号数运算的时候,结果超出了机器所能表示的范围称为溢出

  • 8位有符号数表示的范围为:-128~127
  • 16为有符号数表示的范围为:-32768~32767

OF标志为溢出标志位。一般情况下,OF记录了有符号数运算是否发生了溢出

  • 溢出,OF=1
  • 没有溢出,OF=0

CF是针对无符号数的运算;OF是针对有符号数的运算。两者没有任何关系