(计算机组成原理)第二章数据的表示和运算-第二节5:定点数乘法运算(原码/补码一位乘法)
Posted 快乐江湖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(计算机组成原理)第二章数据的表示和运算-第二节5:定点数乘法运算(原码/补码一位乘法)相关的知识,希望对你有一定的参考价值。
一:乘法运算基本思想
关于定点数的乘法,其实我们在小学就学习过,就是经典列竖式相乘
其中,我们印象最深的应该就是计算过程中的错位问题了。
在计算机中,相乘时使用的二进制,其基本逻辑和竖式相乘一致。如下是两个二进制数相乘,其中被乘数为
0.1101
0.1101
0.1101,乘数为
0.1011
0.1011
0.1011
我们将乘数看作为位权之和,即
0.1011
=
1
×
2
−
1
+
0
×
2
−
2
+
1
×
2
−
3
+
1
×
2
−
4
0.1011=1×2^{-1}+0×2^{-2}+1×2^{-3}+1×2^{-4}
0.1011=1×2−1+0×2−2+1×2−3+1×2−4
,被乘数写成
a
a
a与
1
0
n
10^{n}
10n相乘的形式,即
0.1101
=
1101
×
2
−
4
0.1101=1101×2^{-4}
0.1101=1101×2−4
那么此乘法过程可以等价为下面的形式
把竖式写全也就是下面的这个样子
由于二进制的乘数每一位只可能出现0或1,因此每次运算的结果要么是全0,要么只是被乘数乘以
1
0
n
10^{n}
10n,实际结果只是小数点的不同,而计算机处理小数点位置非常方面,使用移位操作即可完成
二:原码一位乘法
(1)实现原理
逻辑看似很简单,但是如何让机器实现这是一个问题。如果要实现这一问题,必须解决以下三个问题
- 实际数字有正有负,符号位应当如何处理?
- 乘积运算时位数扩大很厉害,如何处理?
- 每次运算时的结果都要保存下来,如果相加?
其中符号位很方便处理,符号位 = x s ⊕ y s =x_{s}⊕y_{s} =xs⊕ys即可判断,让数值位取绝对值进行乘法运算即可。
c a s e : case : case:机器字长为 n + 1 = 5 n+1=5 n+1=5位, [ x ] 原 = 1.1101 , [ y ] 原 = 0.1011 [x]_{原}=1.1101,[y]_{原}=0.1011 [x]原=1.1101,[y]原=0.1011,采用原码一位乘法求 x y xy xy
还记得(计算机组成原理)第一章计算机系统概述-第二节:计算机硬件组成(存储器、运算器和控制器概述及计算机工作过程详解)这一节我们讲到过的运算器的组成吗,其中涉及乘法时会用到
A
C
C
ACC
ACC,
M
Q
MQ
MQ,
X
X
X这三个寄存器
接下来我们详细叙述一下这个过程。开始,
x
x
x是被乘数,
y
y
y是乘数,因此
x
x
x位于X寄存器中,
y
y
y位于MQ寄存器中,并且运算开始前要将ACC置为0
对应我们竖式乘法的逻辑,此时从低位到高位,依次用乘数的每一位乘被乘数,因此在这里进行第一次运算时我们把MQ寄存器中参与运算的那一位方块的颜色加深
如果当前参与运算的乘数的这一位是1,则
A
C
C
ACC
ACC加上被乘数;如果当前位是0,则
A
C
C
ACC
ACC加上0,也即(ACC)+(X)->(ACC)
在进行下一位竖式运算时,必须偏移一个位置,对应于计算机处理时则是让ACC和MQ中的数据统一逻辑右移一位
- 这样做本质实现的就是错误相加
接着次低位来到了最低位的位置,再次进行(ACC)+(X)->(ACC)
剩余的步骤均重复上述过程
(2)手算模拟
考试的时候,如果出到这样的题目,具体步骤如下
设
[
X
]
原
=
x
s
[X]_{原}=x_{s}
[X]原=xs,
[
Y
]
原
=
y
s
[Y]_{原}=y_{s}
[Y]原=ys
- 被乘数和乘数均取绝对值参与运算,符号位为 x s ⊕ y s x_{s}⊕y_{s} xs⊕ys
- 部分积的长度同被乘数,取 n + 1 n+1 n+1位,以便存放乘法过程中绝对值大于等于的值,初值为 0 0 0
- 从乘数的最低位 y n y_{n} yn开始判断:若 y n = 1 y_{n}=1 yn=1,则部分积加上被乘数 ∣ x ∣ |x| ∣x∣,然后右移一位;若 y n = 0 y_{n}=0 yn=0,则部分积加上0,然后右移一位。
- 重复步骤3,判断 n n n次
注意
- 由于乘积的数值部分是两数绝对值相乘的结果,因此原码一位乘法运算过程中的右移均为逻辑右移
- 考虑到运算时可能出现绝对值大于1的情况(但并非溢出),所以部分积和被乘数取双符号
c a s e : case: case:设机器字长为5位( n + 1 n+1 n+1), x = − 0.1101 x=-0.1101 x=−0.1101, y = 0.1011 y=0.1011 y=0.1011,采用原码一位乘法求解 x y xy xy
解:
∣
x
∣
=
00.1101
|x|=00.1101
∣x∣=00.1101,
∣
y
∣
=
00.1011
|y|=00.1011
∣y∣=00.1011,过程如下
因此符号位为 P s = x s ⊕ y s = 1 = 1 ⊕ 0 = 1 P_{s}=x_{s}⊕y_{s}=1=1⊕0=1 Ps=xs⊕ys=1=1⊕0=1,得 x ⋅ y = − 0.10001111 x·y=-0.10001111 x⋅y=−0.10001111
三:补码一位乘法( B o o t h Booth Booth算法,考察重点)
定点数乘法中最有可能考察的便是补码一位乘法。因为机器做加减法时采用的是补码,倘若做乘法前再将补码转为原码,计算完成之后再转化为补码,那就很麻烦了,还不如直接用补码计算。
补码一位乘法主要分为校正法和比较法,校正法了解即可,而比较法(又叫 B o o t h Booth Booth算法)则是考察的重点。具体规则如下:
①:被乘数与部分积一般取双符号位,并且符号位参与运算。
- 一个原因是一旦符号位参与运算就一定要使用多符号位,因为一旦溢出,单符号位就会出错
- 另一个原因是,补码的右移时要看符号位而定的,如果采用单符号位,一旦数值部分的进位把符号给移掉了,下次移位就不知道该怎么办了。
②:乘数取单符号位以决定最后一步是否需要校正,也即是否需要加
[
−
x
]
补
[-x]_{补}
[−x]补
③:乘数末尾增设辅助位,
y
n
+
1
y_{n+1}
yn+1,初始值为0
④:根据
y
n
y_{n}
yn,
y
n
+
1
y_{n+1}
yn+1判断位,进行运算,步骤和上面原码一位乘法一致
⑤:按上述算法进行n+1,其中最后一步也即n+1步不再一位,仅根据
y
0
,
y
1
y_{0},y_{1}
y0,y1比较结果决定是否需要加减
x
[
补
]
x_[补]
x[补]
从上面图中大家可以看出MQ中的最低位现在是辅助位,这里就和原码乘法的最低位不一致了,所以这里我们用带有双引号的——“最低位”表示运算时真正的最低位,而不是辅助位
- 辅助位减“最低位”=1时,
(
A
C
C
)
+
[
x
]
补
(ACC)+[x]_{补}
(ACC)<
以上是关于(计算机组成原理)第二章数据的表示和运算-第二节5:定点数乘法运算(原码/补码一位乘法)的主要内容,如果未能解决你的问题,请参考以下文章
(计算机组成原理)第二章数据的表示和运算-第二节4:定点数的加减运算和溢出判断
(计算机组成原理)第二章数据的表示和运算-第二节6:定点数除法运算(原码/补码一位除法)
(计算机组成原理)第二章数据的表示和运算-第二节3:定点数的移位运算(算数移位逻辑移位和循环移位)
(计算机组成原理)第二章数据的表示和运算-第二节1:定点数的表示(原码反码补码和移码)