加法器的原理



补码的加减运算

由于此时实现的是减法,所以sub的这根线也会控制Cin使Cin的值为1


无符号数的减法运算


标志位的生成


ZF对有符号and无符号都有意义
CF只对无符号数的加减法有意义
CF=Cout异或Sub,当然其实也是Cout异或Cin
判断溢出(无:CF 有:OF)
其他

无符号乘法电路基本结构(前n比特全为0)


- 控制逻辑检查到最后一位是1,那么接下来前面绿色的部分需要加上被乘数1101
- 起始,绿色部分为0000,然后进行一次加法之后,
- 控制逻辑发出一个写使能的信息,将结果写入到绿色部分
- 1101+0000往最高位的进位应该是0,也就是C=0
- 完成一次加法之后,所有的比特全部右移一位,刚才的进位信息C的值会移到最高位,同时舍去最低位。(右移是为了实现错位相加)
- 此时计数器应该减1(计数器的初值=被乘数or乘数的位数)

有符号数的乘法(前n+1位全0or全1)
- 不需要记录加法产生的进位,也就是说不需要C这个寄存器,因为有符号数中最高位通常是符号位,不会把他看做是进位
- 需要增加一个辅助位,设置为0

- 辅助位刚开始设置为0,Cn的值为4
- 每一轮的处理都要看辅助位和乘数Y的最末一位
- 0-1=-1,所以用P-X也就是P+(-X)的补码
- 0000-1101,减法他在底层是用加法实现的,也就是0000+0011=0011
- 把加得的结果写入P
- 把所有位算术右移,空出来的位置用原来的符号位(也就是P的最高位)填充
- 之后,计数器Cn的值减1,变为3
判断溢出(用10进制算更加方便)

有符号数:前n+1位全0or全1则不溢出
补码一位乘

- 补码一位乘中,我们使用了双符号的运算方式,所以在n轮的加法和移位之后,确实还需要多一次加法
- 上面的乘法使用的是单符号位的补码进行运算
除法电路的基本结构







发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/178745.html原文链接:https://javaforall.net
