溢出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=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根本不知道参与运算的数是有符号的还是无符号的。它只是按照一定的指令、一定的规则来计算, 然后设置标志、运用标志。 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |