2.并行进位加法器
串行进位的并行加法器是逐级传递C,但第 i 个加法器输出的C可以通过电路的方式直接送到第 n - (i + 1)个加法器,如此就可以在输出C的时候直接越级传给后面的加法器,而不需要一级一级传递
3.补码加减运算器
3.1.加法器原理
设AB为4bit
cin输入的进位:和AB的第1位(最低位)相加,生成结果的最低位
cout输出的进位:AB的第4位(最高位)和第三位的进位相加生成的进位,后输出到下一个加法器
3.2.补码加/减运算方法
3.3.补码加减运算器电路图
1.若进行的是X + Y,则X直接输入,Y经过多路选择器的0输入,sub的输入为0→cin为0
2.若进行的是X - Y,则X直接输入,Y经过多路选择器的1输入,此时,Y的数据需要经过非门(按位取反),sub的输入为1(末位+1)→cin为1
3.此电路也可以适用于无符号整数,但判断溢出的方式不同
4.标志位的生成
加法器在输出时,还会输出OF、SF、ZF和CF:设有n个bit
1.OF、SF仅对有符号数有意义,CF仅对无符号数有意义,ZF都有意义
2.有符号数溢出:OF = 1;无符号数溢出:CF = 1(发生借位/进位)
OF(Overflow)溢出:最高位(n + 1位)的进位和次高位(第n 位)的进位进行异或
SF(Sign)符号:输出结果的最高位(第n位) ,用途:判断正负
ZF(Zero)零:结果为0,则为1;结果非0,则为0
CF(Carry)进位/借位:最高位(n + 1位)的进位和sub(1为减法,0为加法)进行异或
5.定点数的移位运算
5.1.算术移位
1.算术移位可以等价实现乘法(左移)和除法(右移)
2.原码的算术移位:
①符号位保持不变,仅对数值位进行移位
②右移1位:高位补0,低位舍弃。若舍弃0,则等价于除以2;若舍弃1,则丢失精度
③左移1位:低位补0,高位丢弃。若丢弃0,则等价于乘以2;若舍弃1,则严重误差
3.反码的算术移位:
①若为正数:因为反码正数和原码相同,因此,算术移位操作相同
②若为负数(补0改为补1):
A.右移:高位补1,低位舍弃
B.左移:低位补1,高位舍弃
4.补码的算术移位:
①若为正数:因为反码正数和原码相同,因此,算术移位操作相同
②若为负数:从左往右数,第一个1的左边和反码相同,第一个1的和其右边和原码相同
A.右移:高位补1,低位舍弃(同反码)
B.左移:低位补0,高位舍弃(同原码)
5.小结:
5.2. 逻辑移位(补0)
1.逻辑移位将操作数视为无符号数
2.逻辑左移,高位丢弃,低位补0;逻辑右移,低位丢弃,高位补0
5.3.循环移位
6.原码的乘法运算
1.原理:符号位使用异或单独处理(不参与运算),数值位取绝对值进行乘法运算
2.操作过程:
①取乘数和被乘数符号位进行异或
②加法:若当前位为1,ACC加上被乘数;若当前位为0,ACC加0(通过ALU加法电路完成)
③逻辑右移:ALU的最低位成为MQ的最高位,MQ的最低位直接丢弃(错位)
③若n bit的乘法,则进行n - 1轮的加法和移位(重复n - 1轮②③),最终得到结果的绝对值
④替换符号位为①中异或的结果
3.初始化:通用寄存器X存放被乘数,MQ存放乘数,ACC归零
取符号位进行异或得到结果的符号位为1
①当前位为1,ACC加被乘数:(ACC)+(X)→ACC。00000 + 01101 = 01101②进行错位:逻辑右移1位(高位补0),ACC的最低位移到MQ的最高位,MQ最低位丢弃
③当前位为1,ACC加被乘数:(ACC)+(X)→ACC。00110 + 01101 = 10011
④进行错位:逻辑右移1位(高位补0),ACC的最低位移到MQ的最高位,MQ最低位丢弃
⑤当前位为0,ACC加0:(ACC)+(X)→ACC。01001 + 00000 = 01001
⑥进行错位:逻辑右移1位(高位补0),ACC的最低位移到MQ的最高位,MQ最低位丢弃
⑦当前位为1,ACC加被乘数:(ACC)+(X)→ACC。00100 + 01101 = 10001
⑧进行错位:逻辑右移1位(高位补0),ACC的最低位移到MQ的最高位,MQ最低位丢弃
⑨数值为为4,需要进行4次加法和移位,现在进行完毕,也就完成了乘法运算;定点小数的小数点隐含在符号位后,因此,乘法的绝对值的结果为0.1000 1111,替换异或得到的符号位,得到最后的结果1.1000 1111