定点补码加减法运算
补码加减法运算方法
- 补码加法:
[x]补 + [y]补 = [x + y]补 mod M
- 补码减法:
[x]补 - [y]补 = [x - y]补 mod M
溢出及检测
运算结果超出数据类型所能表示数据范围的现象称为溢出
溢出检测
操作数与运算结果的符号位是否一致
只有符号相同的数相加,才有可能产生溢出,因此检测运算结果的符号位,是否与操作数一致
设操作数为S1XXXX和S2XXXX,其中S1和S2为他们的符号位,结果为SXXXX,S是结果的标志位,V是溢出标志位,那么
V = S1 && S2 && !S + !S1 && !S2 && S
如果符号位不同,则S1和S2必定是0和1的组合,其结果V一定为0
如果符号位相同,则可能同时为0或者同时为1,这时就要看结果的符号位S了
最高位的进位和符号位的进位是否一致
最高位C和符号位S的进位,如果不同步,则发生了溢出
V = C ^ S
变形补码
变形补码就是用两个位来表示符号位,正数符号位00,负数符号位11
如果运算后的结果为01,则上溢,10则下溢
补码加减法的逻辑实现
- 利用一位全加器(FA)作为基本的加法单元,低位FA的进位,直接送到相邻高位FA的进位输入,构成一个串行进位链
- 进行加法运算时,直接送入全加器,进行减法运算时,减数先求补
- 采用基于变形补码的双符号位溢出检测方法
- 不支持逻辑运算
移码加减运算及实现逻辑
移码的加法运算
- 公式1:
[x]移 + [y]移 = [x + y]移 + 2^n
- 公式2:
[x]移 + [y]移 = [x + y]补
- 公式3:
[x]移 + [y]补 = [x + y]移 mod 2^(n+1)
求移码的加法有三种方式
- 直接对两数的移码求和,然后将高位取反
- 直接求出两数和的补码,然后将高位取反
- 用一个数的移码,加另一个数的补码
移码加减法的溢出判断
直接采用移码运算的溢出判断方法
只有符号相同的加法,才会溢出
正数的移码,符号位为1,如果两个正数的移码相加,符号位1+1=0,结果的符号位变成0
因此,移码相加后,符号位与操作数相同,则发生了溢出
采用双符号判断
- S1S2 = 00,结果为负,未溢出
- S1S2 = 01,结果为正,未溢出
- S1S2 = 10,上溢
- S1S2 = 11,下溢
定点乘法运算
机器数的移位操作
移位操作是乘法实现过程的基本操作,又分为逻辑移位和算术移位
逻辑移位:左移和右移,空出来的位置都补0
算术移位:左移时低位补0,右移时高位补符号位
原码一位乘法
原码一位乘法
符号位的确定
两个乘数符号位的异或
乘积的数值
- 由于符号位已经单独处理了