计算机组成原理:定点原码、补码一位乘
移位操作对于任何计算机来说都是不可缺少的操作,各种计算机指令系统中都含有移位指令。
这里首先给大家介绍一下移位操作中的算术移位(原码右移、补码右移)
算术原码右移:符号位不变,各位右移,最高有效位补0,末位移出。
列如:1.1001 右移 1.0100 ; 0.1101 右移 0.0110
算术补码右移:符号位不变,同时移至最高有效为,各位右移,最低位移出。
列如:11.01 右移 11.11 ; 00.1011 右移 00.0101
定点原码一位乘 x*y算法:
-
位数 n=max(x,y)
-
一律用变形码
-
加和右移移位完成,符号位不参与运算
-
开始部分积00.000…0(n个0)
-
yn = 0 : +0
yn = 1 :+x -
右移一位,判断新的yn ,一次重复做n次,得2n位积
-
用异或配积的符号位:Ux=Xf ⊕Yf
变形码指的是:符号位采用两位。
列如 1.001 变形码为 11.001
移位操作是将部分积的最后一位移动到 y中
原码乘法中的符号位本参加运算,需要单独用以个异或门产生乘积的符号位。故人们自然地思考能否让符号数字化后产假乘法运算,补码乘法就可以实现符号位直接参加运算
定点补码一位乘算法(Booth算法):
- 准备[x]补,[-x]补,[y]补;增加乘数y的“补充位”Yn+1=0
- 位数 n = max(x,y)
- 开始部分积:00.0…0(n个0)
- 判断 ynyn+1。
ynyn+1={00:+011:+001:+[x]补10+[−x]补 y_ny_{n+1}=\left\{ \begin{array}{rcl} 00 & & :+0\\ 11 & & :+0\\ 01 & &:+[x]_补\\ 10 & & +[-x]_补 \end{array} \right. ynyn+1=⎩⎪⎪⎨⎪⎪⎧00110110:+0:+0:+[x]补+[−x]补 - 右移一位
- 对4,5步重复n+1次,最后一次只加不移位,2n位的结果是补码如果需要原码,结果还得补一次。
总结
如果大家有啥不懂的地方,可以在下方评论留言,我看到之后会解答。之后我会更新定点除法运算和浮点算术运算。欢迎大家批评指正!!!