在计算机组成原理学习标志位加法器时对OF为什么是Cn异或Cn-1有疑问,解决后记录一下
标志位加法器的图和一些符号解释
标志位加法器就是在并行加法器的基础上添加了一些标志位
Cn是表示是否进位
Sn是一位加法器计算出来的结果
An Bn是被加数本位和加数本位
四个标志位分别表示什么
1. OF(溢出标志):反映带符号数加减运算是否溢出
2. SF(符号标志):反映带符号数加减运算的正负
3. ZF(零标志):反映运算结果是否为0
4. CF(进位/借位标志):反映无符号数加减运算是否溢出
四个标志位的判断过程
OF
- OF溢出标志,用于判断带符号数加减运算是否溢出。OF=1 溢出;OF=0 未溢出
- 两异号数相加或两同号数相减绝不会产生溢出 (两同号相减也可以变为两异号相加)
- 只有两同号数相加或两异号数相减时才有可能产生溢出,符号位改变则溢出
- 通过上述推出
- 符号位相同的情况
- 如果最高位的进位Cn=1,这种情况只能是两个符号位都为1
- 当Cn-1 = 1时,向前进位后符号位变为1,所以未溢出
- 当Cn-1 = 0是,符号位为0,符号相反,所以溢出
- 如果次高位的进位Cn-1=1
- 当Cn=0时,说明两个符号位都为0,则次高位进位加上后,符号位变为1,相反,则溢出
- 当Cn=1时,说明两符号位都为1,则次高位进位加上后,符号位还为1,相同,未溢出
- 如果最高位的进位Cn=1,这种情况只能是两个符号位都为1
- 符号位相反的情况
- 溢出是指运算结果超过了机器数能表示的范围。(结果应为正,结果变负)
- 如果符号位相反的情况相加,假设这台机器的范围是(-127~128),就算负数是-127,加上一个正数,永远不可能超出范围,所以两异号相加不可能溢出
- 如果最高位的进位Cn=1,则次高位进位Cn-1 = 1
- 如果次高位的进位Cn-1 = 1,则最高位进位Cn=1
- 如果最高位的进位Cn=0,则次高位的进位Cn-1 = 0
- 如果次高位的进位Cn-1=0,则最高位进位Cn=0
- 这些情况全部未溢出
- 整合上面两种情况可以发现OF = Cn异或Cn-1
- 符号位相同的情况
SF
- SF符号标志,用于判断带符号数加减运算结果的正负。 SF=1 结果为负; SF=0 结果为正
- 取nbit补码的最高位即为正负,SF=Sn
ZF
- ZF零标志,用于判断加减运算结果是否为0。 ZF=1 结果为0 ZF=0 结果不为0
- nbit补码的所有位全为0,即ZF=Sn+······S2+S1
CF
- CF进位/借位标志,用于判断无符号数加减运算是否溢出。CF=1 溢出;CF=0 未溢出
- 如果两无符号数相加,最高位进位为1(即有进位)则溢出
- 如果两无符号数相减,最高位借位为1(即有借位)则溢出
- 也就是CF = Cn异或C0