算术逻辑单元ALU
作用
算术运算:加、减、乘、除等
逻辑运算:与、或、非、异或等
辅助功能:移位、求补等
一般ALU多少位,寄存器就多少位
加法器实现
一位全加器
串行加法器
串行加法器:
只有一个全加器,数据逐位串行送入加法器中进行运算。
进位触发器用来寄存进位信号,以便参与下一次运算。
如果操作数长n位,加法分n次进行,每次产生一位和,并且串行逐位地送回寄存器。
串行进位的并行加法器
串行进位的并行加法器:把n个全加器串接起来,就可进行两个n位数的相加
串行进位又称为行波进位,每一级进位直接依赖于前一级的进位,即进位信号是逐级形成的。
并行进位加法器
补码加减运算器
有符号和无符号的加减运算都可以用这套逻辑电路
标志位生成
除了相加结果以外还有就是四个标志位
移位运算
算术移位
1、原码的算数移位
符号位保持不变,仅对数值位进行移位。
右移:高位补0,低位舍弃。
若舍弃的位0,则相当于/2
若舍弃的位1,则会丢失精度
左移:低位补0,高位舍弃。
若舍弃的位0,则相当于*2
若舍弃的位1,则会出现严重误差
2、反码的算数移位
正数的反码和原码相同
因此正数反码的移位运算也和原码相同
右移:高位补0,低位舍弃。
左移:低位补0,高位舍弃。
负数的反码和原码相反:
右移:高位补1,低位舍弃。
左移:低位补1,高位舍弃。
3、补码的算术运算
正数的补码与原码相同,
因此对正数补码的移位运算也和原码相同。
右移:高位补0,低位舍弃。
左移:低位补0,高位舍弃。
补码的算数移位规则如下:
右移(同反码):高位补1,低位舍弃。
左移(同原码):低位补0,高位舍弃。
逻辑移位
可以看做无符号数的移位操作
右移:高位补0,低位舍弃。
左移:低位补0,高位舍弃。
循环移位
原码乘法
原码一位乘法:符号位通过异或确定,数值位由被乘数和乘数的绝对值进行n轮加法、移位
每次加法可能 +0 、+[|x|]原
每次移位是“逻辑右移”
乘数的符号位不参与运算
MQ中最低位=1时,(ACC)+[|x|]
原MQ中最低位=0时,(ACC)+0
补码乘法
补码一位乘法(Booth算法)符号位、数值位都是由被乘数和乘数进行n轮加法、移位,
最后再多来一次加法
每次加法可能 +0、+[x]补、+[-x]补
每次移位是“补码的算数右移”
乘数的符号位参与运算
辅助位-MQ中“最低位”=1时,(ACC)+[x]补
辅助位-MQ生“最低位”=0时,(ACC)+0
辅助位-MQ中“最低位”=-1时,(ACC)+[-x] 补
原码除法
恢复余数法
先默认上商1,如果搞错了再改上商0。并“恢复余数”
ACC、MQ逻辑左移:ACC高位丢弃、MQ低位补0
结果:MQ商 ACC余数
左移n次,上商n+1次,最后一次上商余数不左移
加减交替法
若余数为负需商0,并+[y]补得到正确余数