CPU里的寄存器位数都是统一的
0、运算器的基本组成
包括如下几个寄存器:
- ACC:累加器,用于存放操作数,或运算结果
- MQ:乘商寄存器,在乘、除运算时,用于存放操作数或运算结果
- X:通用的操作数寄存器,用于存放操作数
- ALU:算术逻辑单元,通过内部复杂的电路实现算数运算、逻辑运算
一、原码一位乘法
设机器字长为n+1=5位(含1位符号位,n=4)。x=-0.1101,y=+0.1011
- 符号位:不参与运算,通过异或单独确定
- 数值位:通过被乘数和乘数绝对值的n轮加法、移位完成
- 根据当前乘数中参与运算的位确定(ACC)加什么
- 若当前运算位为1,则(ACC)+[∣x∣]原(ACC)+[|x|]_原(ACC)+[∣x∣]原
- 若当前运算位为0,则(ACC)+0(ACC)+0(ACC)+0
- 每轮加法后,ACC、MQ的内容统一逻辑右移
- 根据当前乘数中参与运算的位确定(ACC)加什么
二、补码一位乘法
设机器字长为n+1=5位(含1位符号位,n=4)。x=-0.1101,y=+0.1011。则[x]补=1.0011,[−x]补=0.1101,[y]补=0.1011[x]_补=1.0011,[-x]_补=0.1101,[y]_补=0.1011[x]补=1.0011,[−x]补=0.1101,[y]补=0.1011
- 寄存器中数的存放:被乘数采用双符号位补码,乘数采用单符号位补码(因为MQ的最后一位会用来存放“辅助位”)
- 辅助电路:被乘数所在的寄存器会连着一个辅助电路,用来将其中存放的x的补码转换成-x的补码,然后将其送往ALU
- 符号位:参与运算,详见下数值位
- 数值位:通过被乘数和乘数进行n轮加法、移位和多加一次加法,来完成的
- 根据当前辅助位- MQ“最低位”的值确定(ACC)加什么
- 辅助位- MQ“最低位”=1时:(ACC)+[x]补(ACC)+[x]_补(ACC)+[x]补
- 辅助位- MQ“最低位”=0时:(ACC)+0(ACC)+0(ACC)+0
- 辅助位- MQ“最低位”=-1时:(ACC)+[−x]补(ACC)+[-x]_补(ACC)+[−x]补
- 每轮加法后,ACC、MQ的内容统一进行“补码的算数右移”
- 最后再多来一次加法
- 根据当前辅助位- MQ“最低位”的值确定(ACC)加什么
三、原码、补码的除法运算
除法类型 | 符号位参与运算 | 加减次数 | 移位方向(被除数->余数) | 移位次数 | 上商、加减原则 | 说明 |
---|---|---|---|---|---|---|
原码加减交替法 | 否 | n+1或n+2 | 左 | n | 余数的正负 | 若最终余数为负,则需要恢复余数 |
补码加减交替法 | 是 | n+1 | 左 | n | 余数和除数是否同号 | 商末位恒置1 |