补码的加减及溢出判断、加法器
补码的加减法:
加法:
整数: [A]补 + [B]补 = [A+B]补 (mod 2^(n+1))
小数: [A]补 + [B]补 = [A+B]补 (mod 2)
减法:
整数: [A-B]补 = [A]补 + [-B]补 (mod 2^(n+1))
小数: [A-B]补 = [A]补 + [-B]补(mod 2)
补码加法运算溢出判断三种方法:
[方法一]
Xf、Yf分别两个数的符号位,Zf为运算结果符号位。
当Xf =Yf =0(两数同为正),而Zf=1(结果为负)时,负溢出;
当出现Xf =Yf =1(两数同为负),而Zf=0(结果为正),正溢出.
[方法二](就是下文加法器里的溢出标志OF判断:OF=Cn (异或) Cn-1)
Cs表示符号位的进位,Cp表示最高数值位进位,⊕表示异或。
若 Cs⊕Cp =0 ,无溢出;
若 Cs⊕Cp =1 ,有溢出。
[方法三]
用变形补码进行双符号位运算(正数符为00,负数符号以11)
若运算结果的符号位为"01",则正溢;
若结果双符号为10,则负溢出;
若结果的双符号位为00或11,无溢出
加法器:
溢出标志OF:OF=Cn (异或) Cn-1
符号标志SF:SF=Fn-1
零标志ZF=1 当且仅当F=0;
进位/借位标志CF:CF=Cout (异或) SUB / CF=Cout (异或) Cin
做加法时,主要判断是否溢出
无符号加法溢出条件:CF=1
带符号加法溢出条件:OF=1
带符号溢出判断: ( OF=1 )
(1) 最高位和次高位的进位不同
(2) 和的符号位和加数的符号位不同