【计算机组成原理】标志位产生的原理个人理解

关于王道考研课程里边讲到标志位这节时,发现此处争议较大,对于up没有讲到的这几个加法器标志位原理,以个人的理解来解释一下如果有错误欢迎指出。谢谢大家

OF :overflow 溢出1 没有0 仅适用有符号数加减
硬件计算方法:补码计算时最高位进位和次高位进位的异或结果。
注意:OF位对无符号数加减无意义

那么OF为啥这么算呢?
我们首先需要清楚的是溢出的含义是什么:溢出指的是有符号数的计算结果的绝对值(即不包含符号位)在计算机中存不下了。
如在4位寄存器中,计算结果超出了(-8)~(7)了,从而造成溢出,OF=1。
知道了溢出是超出寄存器能表示的范围这一含义后,接着也需要清楚的是,容易造成溢出的情况有哪些? 
1.两符号数异号,那么异号的情况下二者之和只会比原本的二者更小,所以不会造成溢出。 
2.两符号数同号,在该条件下,可能会造成二者之和会比原本的二者更大,可能造成溢出,或者可能计算结果与原二者异号从而造成溢出。 
 对于同号: 
 A.两者同正,即最高位的符号位均为0,所以在计算结果的最高位的符号位也为0,即最高位的进位为0,但是如果次高位,进位了一个1,
 这就造成了原本该为0的最高位因为次高位的进位而变成了1,即两个正数相加却得到了一个负数,换一种说法就是原本数值位的数因为相加进位而影响了符号位。
 但是这种情况加法器是识别不出来的,所以就引用了OF将次高位与最高位相异或就能识别出这种情况。 
 如二者同正情况下,计算结果最高位进位已经为0,接下来只需要判断次高位是否有进位,有进位就是溢出的情况,因为有进位则为1,与最高位进位异或OF=1。

B.两者同负同理,那么最高位进位即为1,如果次高位中没有进位那么就会造成次高位进位为0,相异或的结果为OF=1,溢出。 
总而言之,在有符号数中相加(相减可以转换成相加),计算结果的最高位可能会因为次高位的进位而造成与原二加数符号相异
(同正相加得负数,同负相加得正数),从而造成溢出,所以就需要最高位的进位与次高位的进位相异或来判定。

【此段为引用他人所作】

SF SignFlag 含义:有符号数加减运算结果的正负性SF=0代表运算结果为正,1代表负数
硬件计算方法:SF = 最高位的本位和
注意:SF对无符号数加减法无意义

这又是什么原因呢?
-5 + 4 = -1
1101 原码
1010 + 1 补码 
1011 + 0100 = 1111 
              1000 + 1 = 1001 = -1 
正加负 
-3 + 4
1011
1100 + 1
1101 + 0100 = 1 0001 = 0001 = 1

因为补码无论是正还是负数的补码,最终转换成原码的时候符号位都是不变的。因此补码的最高位本位和就是最终的符号位。

以上OF,SF仅对有符号加减法有意义

ZF 表示运算结果是否为0,ZF = 1表示运算结果为0,0代表结果非0
硬件计算方法:两个数的运算结果是n bit,只有n bit全是 0 时, zf = 1
通用于有符号和无符号的情况

举例理解:
例1:-4 + 4  
正加负 
1100 原码-4
1011 + 1 = 1100 补码-4 
1100 + 0100 = 10000 刚好全0符合预期

例2:-1 + 1 
1001 原码-1
1110 + 1 补码-1
1111 + 0001 = 10000 刚好全0符合预期。
由此可验证有符号没啥问题

CF 含义:进位、借位标志位,表示无符号数的加减法是否发生了进位或者借位。CF=1时代表发生了借位或者进位即发生了溢出。
注意:仅适用于无符号数的加减,有符号的无意义。
硬件计算方法:CF = 最高位产生的进位 异或 sub位。sub为1时减法,sub为0加法。

如何理解硬件计算方法?无符号都是正数
   若两正数相加产生溢出时,最高位的进位必然是1。
   普通加法:
   A + B + 0 产生溢出则, 最高位进位必为 1。 1与sub(0)异或可得1 
   若是减法,两个正数相减只会将结果变小,因此不会产生向上的数字溢出,只会产生向下的数字借位。即被减数不够减了
   实际运算:则减法变加法 
   当减法转换成加法后 
   即A + 反(B) + 1 
   我个人的理解以4 Bit数字为例
   反(B)+ B = 1111的
   例如数字4=0100,0100 + 1011 = 1111 
   若A + 反(B) + 1 还没有大于1111的话说明 A 肯定是小于 B的。那么A - B 是必然小于0,计算是要借位的。此时最高位没有溢出进位为0,
   因此 回到一开始 "sub(1) 异或 数字最高位进位(0)" 即1时产生了借位,
   反过来当A大于B,
   A + 反(B) + 1 必然大于1111,产生了溢出。
   同时 A - B 又不需要借位。
   那么 sub(1) 异或 数字最高位进位(1)结果 0,刚好对应了不用借位的结果。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值