[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则下溢
[x]移 + [y]移 = [x + y]移 + 2^n
[x]移 + [y]移 = [x + y]补
[x]移 + [y]补 = [x + y]移 mod 2^(n+1)
求移码的加法有三种方式
只有符号相同的加法,才会溢出
正数的移码,符号位为1,如果两个正数的移码相加,符号位1+1=0,结果的符号位变成0
因此,移码相加后,符号位与操作数相同,则发生了溢出
移位操作是乘法实现过程的基本操作,又分为逻辑移位和算术移位
逻辑移位:左移和右移,空出来的位置都补0
算术移位:左移时低位补0,右移时高位补符号位
两个乘数符号位的异或
Y(n+1) - Yn | 操作 |
---|---|
0 | 部分积右移一位 |
1 | 部分积加[x]补 后,右移一位 |
-1 | 部分积加[-x]补 后,右移一位 |
一位乘法通过逐位判断、右移、循环累加来实现,速度较慢,为了提高乘法速度,可以采用硬件方式实现阵列乘法器,其基本思想是采用类似手工乘法运算的方法,用大量与门产生手工乘法中的各乘积项,同时将大量一位全加器按照手工乘法算式中需要进行加运算的各相关项的排列方式组成加法器阵列
除法运算与乘法运算的处理思想相似,通常是将n位数的除操作转换成若干次的加减和移位来实现
被除数(余数)减去除数,如果为正则够减商1,如果为负则不够减商0,而且被除数(余数)要恢复到减之前的值,这就叫恢复余数法
为了防止溢出,除法运算(x / y)
一定要满足(|x| < |y|)
,保证商的绝对值不超过1,因此第一次上商的值,要放在商的符号位,后面上的商,从小数点后依次排列,商的位数一般与除数相等,因此最后一次上商后,就不用做减法和移位了
与恢复余数法相比,进行比较后,如果商1则算法不变,如果商0则不恢复余数,先移位再加上除数
算法规则如下
一般情况下,对于商的精度没有特殊要求,商的末位“恒置1”
如果要求提高精度,则多求一位商,再用校正的办法对商进行处理
求得n位商后,得到的余数往往是不正确的,正确的余数常需要根据具体情况做适当的处理
浮点数常用规格化数进行运算
IEEE 754浮点数的阶码采用移码表示,尾数采用原码表示,且尾数的最高位隐藏,因此算法与之前都采用补码的形式不同
逻辑非:求反
逻辑乘:求与
逻辑加:求或
逻辑异:异或
运算器是对数据进行加工处理的部件,它具体实现数据的算术运算和逻辑运算,所以又称做算术逻辑运算部,记为ALU(Arithmetic logic unit)
,它是中央处理器CPU的重要组成部分
对数据进行加工处理的部件,主要完成算术运算和逻辑运算,也常作为数据传送的通路
运算器内通用寄存器组的作用大致可以分为3类:
输入数据选择控制是对送入运算器的数据进行选择和控制,起作用包括:
是连接各个部件的信息通道
运算器的基本结构与运算器中总线结构以及运算器各部件与总线的连接方式紧密相关,不同的连接构成不同的数据通路,形成不同结构的运算器
可以看出,所有部件与总线IB连接,因此需要在ALU输入端设置缓冲器LA和LB,单总线结构运算器的主要缺点是操作速度慢
ALU与通用寄存器都连接在总线IB1和IB2上,因此可以同时通过两组总线传输数据
在执行双操作数运算时,可同时通过三组总线传输数据,不仅速度快,而且不需要设置缓冲器,图中的旁路器作用是不通过ALU实现通用寄存器之间的数据传输
如图是浮点加法运算部件的逻辑结构图,最上面是两个浮点数据寄存器,左上部是一个用于对阶的ALU,它将两个浮点数的阶码相减,并将结果存入阶差寄存器中
浮点运算控制器部件根据阶差,选择阶码小的浮点数的位数进行右移操作,同时选择较大的阶码送入阶码加1或减1寄存器中
阶码大的浮点数的尾数和经过右移后的浮点数的尾数,进入尾数运算ALU进行尾数的加减运算,运算的结果送入尾数规格化部件,规格化时对运算结果的尾数进行左移或右移规格化,同时对阶码进行加一或减一操作,规格化的结果又送入舍入部件,控制部件根据规格化后的结果进行舍入操作
与门、或门、非门、二路选择器、一位全加器
通过之前基本算术逻辑单元的设计,可以拿4个直接构成串行进位的加法器
此加法器的低位进位,直接送到高位,只有拿到低位的进位数据,高位才能进行运算,这种由低位向高位逐步产生进位的方式成为串行进位,也称为行波进位,串行加法器运算速度较慢
并行进位方式下,高位ALU的进位输入不再直接来自于低位ALU的进位输出,而是来自于并行进位产生电路的相应进位输出