CF和OF的区别
有符号数和⽆符号数只是认为的进⾏区分,计算机从来不区分有符号数和⽆符号数。对于运算的数来说,只要符合进位的情况,CF就置1.只要符合溢出的情况,OF就置1.但是后续的进⾏的⼀些数值判断等操作,⽆符号数多依据CF标志进⾏,有符号数多依据OF标志进⾏。如⽐较两个数的⼤⼩,⽆符号数根据CF标志进⾏,有符号数依据OF标志进⾏。
• 计算机硬件判断溢出的⽅法如下:
最⾼位有进位但次⾼位没有进位,或者最⾼位⽆进位但次⾼位有进位;也就是最⾼位和次⾼位⼀个有进位⼀个⽆进位。(最⾼位和次⾼位进位不⼀致的时候溢出)
• 我们不是机器不使⽤这么机械的⽅法,可以使⽤如下规则(汇编教材第⼆版第19页):
只有当两个相同符号数相加(含两个不同符号数相减),⽽运算结果的符号与原数据符号相反时,产⽣溢出。
• 例如:3AH+7CH=00111010B+01111100B=10110110B=B6H
次⾼位⼀个是0⼀个是1,但还有⼀个低位进位1,所以次⾼位有进位;最⾼位两个0,还有次⾼位进位,结果只是1没有进位,所以计算机判断有溢出。cf怎么进不去
我们判断,看最⾼位,两个数最⾼位相同为0,相加后结果最⾼位为1,所以有溢出。
再如:3AH+8DH,我们可以马上判断出没有溢出。因为这是两个不同符号数相加。
利⽤调试程序可以帮助你验证。
将数据按有符号数进⾏补码变换求出对应⼗进制真值,然后判断也可以,但⽐较⿇烦,不如上述规则简单明了
参考资料:
发布评论