溢出OF和进位CF标志位的判定
溢出OF和进位CF标志位的判定
⼀、学习CF与OF,要始终牢记⼀点。CF是⽆符号数溢出标志,OF是有符号数溢出标志。
通俗⼀点说就是,即使有符号数相加/相减导致了CF=1也没什么意义,不能说明结果的正确与否。此时,OF=1,则说明结果溢出,出现错误;OF=0,说明结果正确。这个过程根本和CF没关系,CF=1/0,都不会影响。同理也可以得出OF对⽆符号数也⽆影响。
举个例⼦:
[9-6]补=[9]补-[6]补=[9]补+[-6]补
[9]补-[6]补
00001001
-  00000110
——————
00000011
此时,OF=0,CF=0
[9]补+[-6]补
00001001
+  11111010
——————
1  00000011
此时,OF=0,CF=1
⼤家可能已经发现了,通过公式将减法转换成加法,貌似不完全等价,因为CF不同。
其实不然,CF的值不影响结果,此时不论是加法还是减法都是有符号数。不论CF=1/0,只要OF=0,
结果都是正确的。当然,还有⼀点值得注意。毕竟CF在两种计算⽅法中取值不同,如果有条件跳转
指令的话,程序的执⾏可能会受到影响。
⼆、简单介绍下CF与OF的计算⽅法
1、CF的判断
①加法
⼗进制⾓度,如果两⽆符号数相加,结果⼤于2^n-1(n为位数),则CF=1,否则CF=0;
⼆进制⾓度,如果两⽆符号数相加,最⾼位向前有进位,则CF=1,否则CF=0。
②减法
⼗进制⾓度,如果两⽆符号数相减,减数⼤于被减数(也即结果不在0—2^n-1内),则CF=1,否则CF=0;
cf名字能用的符号⼆进制⾓度,如果两⽆符号数相减,最⾼位向前游借位,则CF=1,否则CF=0。
2、OF的判断
①加法
⼗进制⾓度,如果两有符号数相加,结果不在-2^(n-1)~2^(n-1)-1内,则OF=1,否则OF=0;
⼆进制⾓度,如果两有符号数同号,⽽相加结果与之异号,则OF=1,否则OF=0。
②减法
⼗进制⾓度,如果有符号数相减结果在-2^(n-1)~2^(n-1)-1内,则OF=1,否则OF=0;
⼆进制⾓度,如果两个数异号,⽽相减结果与被减数符号相反,则OF=1,否则OF=0。
三、这⾥值得⼀提的是,在第⼆部分介绍的计算规则,说⽩了都是为了⽅便⼈的计算。⽽在计算机中,CPU根本不知道参与运算的数是有符号的还是⽆符号的。它只是按照⼀定的指令、⼀定的规则来计算,然后设置标志、运⽤标志。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。