CPU的标志寄存器

1.ZF

零标志位,执行指令后结果为0,ZF=1,否则ZF=0


2.PF

奇偶标识位,它记录相关指令执行后,其结果的所有二进制位中1的个数是否为偶数,如果是偶数,PF=1,否则PF=1。


3.SF

符号标识位,它记录相关指令执行后,其结果是否为负,如果是负数SF=1,否则,SF=0

SF是CPU对有符号数进行运算结果的一种记录,它记录数据的正负。在我们将数据当做有符号数来运算的时候,可以通过它得知结果的正负。如果我们将数据当做无符号数运算,SF的值则没有意思,虽然相关的指令影响了它的值。也就说,CPU执行add等指令事,是必然要影响到SF的,至于我们需不需要这种影响,那就看我们如何看待指令所进行的运算了。比如:

mov al,10000001B

add al,1

执行后,结果为10000010B,SF=1,表示:如果指令进行有符号数运算,那么结果为负;

mov al,10000001B

add al,01111111B

执行后,结果为0,SF=0,表示:如果指令进行的是有符号书运算,那么结果非负。


4.CF

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

比如两个8位数据,98H+98H,将产生进位。由于这个进位值在8位数中无法保存,我们在前面的课程中,就只简单地说这个进位丢失了。其实CPU在运算的时候,并不丢弃这个进位值,而是记录在一个特殊的寄存器的某一位上。8086CPU就用了CF位来记录进位值。

mov al,98H

add al,al ;执行后(al)=30H,CF=1

add al,al ;执行后(al)=60H,CF=0


5.OF标志

在进行有符号运算时,结果超过机器所能表示的范围将溢出。OF=1,溢出,否则无溢出。


总结一下CF和OF的区别:

CF是对无符号数运算有意义的标志位,而OF是对有符号数运算有意义的标志位,比如:

mov al,98

add al,99

add指令执行后,CF=0,OF=1。CPU在执行add等指令时,包含两种意义:无符号运算和有符号运算。对于无符号运算,CPU用CF记录是否进位;对于有符号运算,CPU用OF记录是否溢出,当然,还要用SF记录结果的符号。对于无符号运算,98+99没有进位,CF=0;对于有符号运算98+99发生溢出,OF=1。

mov al,0F0H

add al,088H

add指令执行后,CF=,OF=1。对于无符号数运算,0F0H+88H有进位,CF=1;对于有符号位运算,0F0H+88H发生溢出,OF=1。


我们可以看出,CF和OF所表示的进位和溢出,是分别对无符号数和有符号数而言,他们没有一点关系。






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值