计算机组成原理 第4讲_乘法
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
The second problem is that the basic school method handles the sign with a separate rule ("+ with + yields +", "+ with - yields -", etc.).
原码两位乘法 按照乘数每两位的情况,一次求出对应于该2位的部分积。 增加少量逻辑电路,可使乘法的速度提高一倍。
|X*Y| = 0. 111000000111 X*Y= -0.111000000111
[X*Y]原 =1. 111000000111
§3.7 数据校验码
在计算机系统内,由于电路故障或电磁干扰等原因,数据在存取 或传送过程中可能产生错误。为了能发现或纠正这类错误,常采 用具有能发现某些错误,或具有能确定错误的性质和准确的出错 位置乃至能自动纠正错误的能力的编码方法,即数据校验码。 Most codes are "systematic": the transmitter sends a fixed number of original data bits, followed by fixed number of check bits (usually referred to as redundancy in the literature) which are derived from the data bits by some deterministic algorithm. 其实现原理是在合法的数据编码之间加进一些不允许出现的非法 编码,使合法编码的码距增大。当合法的数据编码出现错误时, 就变成非法编码。这就可以用检测编码的合法性来发现错误。 The receiver applies the same algorithm to the received data bits and compares its output to the received check bits; if the values do not match, an error has occurred at some point during the transmission.
乘数 欠帐触发器C
1110 0 1 0
初始状态 Yi-1Yi C=010,加|X|,0→C
11111 0
0
右移2位 Yi-1Yi C=100,加|2X| ,0→C 右移2位 Yi-1Yi C=110,加[-|X|]补,1→C
0111 1 1
0
000 11 1
000 11 1
1
右移2位 C=1,加|X|
[例1] X=+0.1011B,Y=-0.1101B, 用原码一位乘法计算X· Y 解: 原码运算,必须把符号位与数值部分分开进行。 符号位做异或运算,数值部分做无符号数相乘。 [X]原 = [Y]原 = 0.1011 1.1101 |X|= |Y|= 0.1011 0.1101
乘积的符号位
Xs of Computer Organization
广义双语教学课程 青岛理工大学 校级精品课程
http://211.64.192.109/skyclass25/
/ec/C84/
第3章 运算方法和运算部件
(3)
A binary multiplier is an electronic circuit used in digital electronics, such as a computer, to multiply two binary numbers. It is built using binary adders. Until the late 1970s, most minicomputers did not have a multiply instruction, and so programmers used a "multiply routine” which repeatedly shifts and accumulates partial results, often written using loop unwinding. Early microprocessors also had no multiply instruction.
设计乘法逻辑
移位电路
F/2→A
…
F A→F A & 加法器 & B→F B 被乘数 计数器 C 乘数
无符号数乘法 逻辑原理图
C/2→C
部分积
Cd
CPA
运算前,先将被乘数送寄存器B,乘数送寄存器C,计数器的初值为N, 部分积寄存器A清零。若乘数末位Yi=1,部分积与被乘数在加法器相 加。若乘数末位Yi=0,则加法器输出的是部分积与0的和。寄存器A和 C中的部分积和乘数都右移一位形成新的部分积,部分积的最低位移入 C空出的最高位。如此重复N次,乘法计算完毕。乘积的高N位在A中, 低N位在C中,原来在C中的乘数在移位中丢失。
Most computers use a "shift and add" algorithm for multiplying small integers.
|X|= 0.1011, |Y|= 0.1101
高位部分积
00000 +) 01011 01011 右移 0 0 1 0 1 +) 00000 00101 右移 0 0 0 1 0 +) 01011 01101 右移 0 0 1 1 0 +) 01011 10001 右移 0 1 0 0 0 |X· Y|=0.10001111
低位部分积 / 乘数
1101
初始状态 乘数最低位为1,加|X| 乘数最低位为0,加0
1101 1110
1110 1111 1111 1111 1111 1111 [X· Y]原=1.10001111
乘数最低位为1,加|X|
乘数最低位为1,加|X|
X· Y=-0.10001111B
原码一位乘法流程图 Flowchart 部分积 被乘数 如果乘数的数值部分是 N位,则共需做N次加 法,N次右移。乘积的 数值部分是2N位。 右移按逻辑右移进行。
原码一位乘法
补码一位乘法
原码两位乘法
补码两位乘法
§3. 3 二进制乘法运算
Binary Multiplication
Unsigned Binary Multiplication 无符号数乘法 两个尾数为n位的数相乘,乘积的尾数为2n位。
手算乘法的过程:
对应于乘数的位,将被乘数 逐次左移一位加在左下方。 最后将n个位积相加,得到乘积。 需要n个寄存器保存位积 需要2n位的加法器 计算机不能照搬手算的算法。 ×
原码二位乘法的运算规则: 符号位单独处理, P0 X 0 Y0 乘数的数值部分必须是偶数位。相乘的是两数的绝对值。
减X用加[-X]补实现。
右移按补码右移规则进行。 当乘数的数值部分是N位(N必须是偶数),则共需做N/2次 加法和N/2次右移。最后如果还有欠帐,再做一次+X。 欠帐触发器C的初值为0。 由于在运算中有+2|X|,产生的进位可能侵占符号位,所以被 乘数和部分积应该取3符号位。 例2:X= -0.111111,Y= +0.111001,用原码二位乘法计算X*Y
开始 A←0,Cd←n B←X,C←Y Cn=1?
Y
N
计数器 乘数
A←(A)+(B) (A),(C)右移一位 Cd←(Cd)—1
N
原码乘法做的是绝对 值相乘,相当于无符 号数相乘。
缺点:需做N次加法, N次右移,时间太长。
Cd=0?
Y
PS X S YS
结束
乘积的符号位
X S YS
原码运算,必须把符号位与数值部分分开进行。 符号位做异或运算,数值部分做无符号数相乘。
乘数的相邻两位Yi-1Yi有4种状态组合,分别对应一种操作:
Yi-1Yi 操 作
0 0
0 1 1 0 1 1
相当于0· X
相当于1· X 相当于2· X 相当于3· X
部分积Pi +0后右移2位
部分积Pi +X后右移2位 部分积Pi +2X后右移2位 部分积Pi +3X后右移2位
Yi-1Yi 0 0 0 1 相当于0· X 相当于1· X
例2:X= -0.111111,Y= +0.111001,用原码二位乘法计算X*Y 解: [X] 原=1.111111 乘积的符号位 | X |=0.111111 | 2X |=001.111110 [Y] 原=0.111001
P0 X 0 Y0 1 0 1
| Y |=0.111001 [-|X |]补=1.000001
1011 被乘数 1101 乘数 位积 1011
0000 1011 1011 10001111 乘积
被乘数左移,根据 乘数每个位做不同 运算,都不便于计 算机实现
运算器一次只能完成两数的求和操作。 Binary (Fixed-Point) Multiplication Arithmetic
计算机的算法: 只能把每一个新位积与部分积(部分积的初值为零)相加, 总共做n次加法(累加)。 部分积与位积相加时,只有n位与位积相加,其余部分并不 参加运算。因此用n位的加法器就可完成乘法了。 被乘数左移一位的操作改为部分积右移一位后与被乘数相加。 部分积 被乘数1011 只需用1个n位的寄存器存放 0000 部分积的高位,部分积的低 1101 乘数 1011 位与乘数共用一个n位的寄存 + 器,在乘数右移一位(计算 1011 该位位积后自动丢失)的同 01011 110 右移一位 时将部分积最低一位移入。 + 0000 乘法完成后,原来存放乘数 的寄存器中是乘积的低n位, 乘数全部丢失,而硬件则节 省了一个寄存器。 01011 + 001011 1011 11 右移一位
|X|= 0.111111, |Y|= 0.111001, | 2X |=001.111110, [-|X |]补=1.000001
高位部分积
+
+
+
+
000. 0 0 0 0 0 0 000. 1 1 1 1 1 1 000. 1 1 1 1 1 1 000. 0 0 1 1 1 1 001. 1 1 1 1 1 0 010. 0 0 1 1 0 1 000. 1 0 0 0 1 1 111. 0 0 0 0 0 1 111. 1 0 0 1 0 0 111. 1 1 1 0 0 1 000. 1 1 1 1 1 1 000. 1 1 1 0 0 0
操 作 部分积Pi +0后右移2位 部分积Pi +X后右移2位
1 0 1 1
相当于2· X 相当于3· X
部分积Pi +2X后右移2位 部分积Pi +3X后右移2位
加2X很容易实现。把X左移一位,或者把X向左斜传送一位。 加3X一般不能一次完成。分两次(3X=X+2X)又降低了速度。如 果令 3X=4X—X, 形式上看好象需要2次。实际上可以这样: 本次运算只做减X,用一个欠帐触发器C记下欠加4X,下一步 操作时补上。 由于本次累加后,部分积要右移2位,相当于乘数相对左移2位。 此时做+X相当于前一步+4X。所以,3X=4X—X只需要做一次。 欠帐触发器C的初值为0。
原码二位乘法的运算规则: 当欠帐触发器C=0时, Yi-1 Yi 0 0 0 1 1 0 1 1 C 0 0 0 0 操 作 部分积Pi +0后右移2位 部分积Pi +X后右移2位 部分积Pi +2X后右移2位 部分积Pi —X后右移2位
0→C 0→C 0→C 1→C
当欠帐触发器C=1时, Yi-1 Yi 0 0 0 1 1 0 1 1 C 1 1 1 1 操 作 部分积Pi +X后右移2位 部分积Pi +2X后右移2位 部分积Pi +[-X]补后右移2位 部分积Pi +0后右移2位 0→C 0→C 1→C 1→C
两个原码表示的数(无论小数或整数)相乘,乘积的值是两数 绝对值之积,符号是相乘两数符号位的异或值。两个尾数为n位 的数相乘,乘积的尾数为2n位。 This method is mathematically correct, but it has two serious engineering problems. The first is that it involves 32 intermediate additions in a 32-bit computer, or 64 intermediate additions in a 64-bit computer. These additions take a lot of time.
原码两位乘法 按照乘数每两位的情况,一次求出对应于该2位的部分积。 增加少量逻辑电路,可使乘法的速度提高一倍。
|X*Y| = 0. 111000000111 X*Y= -0.111000000111
[X*Y]原 =1. 111000000111
§3.7 数据校验码
在计算机系统内,由于电路故障或电磁干扰等原因,数据在存取 或传送过程中可能产生错误。为了能发现或纠正这类错误,常采 用具有能发现某些错误,或具有能确定错误的性质和准确的出错 位置乃至能自动纠正错误的能力的编码方法,即数据校验码。 Most codes are "systematic": the transmitter sends a fixed number of original data bits, followed by fixed number of check bits (usually referred to as redundancy in the literature) which are derived from the data bits by some deterministic algorithm. 其实现原理是在合法的数据编码之间加进一些不允许出现的非法 编码,使合法编码的码距增大。当合法的数据编码出现错误时, 就变成非法编码。这就可以用检测编码的合法性来发现错误。 The receiver applies the same algorithm to the received data bits and compares its output to the received check bits; if the values do not match, an error has occurred at some point during the transmission.
乘数 欠帐触发器C
1110 0 1 0
初始状态 Yi-1Yi C=010,加|X|,0→C
11111 0
0
右移2位 Yi-1Yi C=100,加|2X| ,0→C 右移2位 Yi-1Yi C=110,加[-|X|]补,1→C
0111 1 1
0
000 11 1
000 11 1
1
右移2位 C=1,加|X|
[例1] X=+0.1011B,Y=-0.1101B, 用原码一位乘法计算X· Y 解: 原码运算,必须把符号位与数值部分分开进行。 符号位做异或运算,数值部分做无符号数相乘。 [X]原 = [Y]原 = 0.1011 1.1101 |X|= |Y|= 0.1011 0.1101
乘积的符号位
Xs of Computer Organization
广义双语教学课程 青岛理工大学 校级精品课程
http://211.64.192.109/skyclass25/
/ec/C84/
第3章 运算方法和运算部件
(3)
A binary multiplier is an electronic circuit used in digital electronics, such as a computer, to multiply two binary numbers. It is built using binary adders. Until the late 1970s, most minicomputers did not have a multiply instruction, and so programmers used a "multiply routine” which repeatedly shifts and accumulates partial results, often written using loop unwinding. Early microprocessors also had no multiply instruction.
设计乘法逻辑
移位电路
F/2→A
…
F A→F A & 加法器 & B→F B 被乘数 计数器 C 乘数
无符号数乘法 逻辑原理图
C/2→C
部分积
Cd
CPA
运算前,先将被乘数送寄存器B,乘数送寄存器C,计数器的初值为N, 部分积寄存器A清零。若乘数末位Yi=1,部分积与被乘数在加法器相 加。若乘数末位Yi=0,则加法器输出的是部分积与0的和。寄存器A和 C中的部分积和乘数都右移一位形成新的部分积,部分积的最低位移入 C空出的最高位。如此重复N次,乘法计算完毕。乘积的高N位在A中, 低N位在C中,原来在C中的乘数在移位中丢失。
Most computers use a "shift and add" algorithm for multiplying small integers.
|X|= 0.1011, |Y|= 0.1101
高位部分积
00000 +) 01011 01011 右移 0 0 1 0 1 +) 00000 00101 右移 0 0 0 1 0 +) 01011 01101 右移 0 0 1 1 0 +) 01011 10001 右移 0 1 0 0 0 |X· Y|=0.10001111
低位部分积 / 乘数
1101
初始状态 乘数最低位为1,加|X| 乘数最低位为0,加0
1101 1110
1110 1111 1111 1111 1111 1111 [X· Y]原=1.10001111
乘数最低位为1,加|X|
乘数最低位为1,加|X|
X· Y=-0.10001111B
原码一位乘法流程图 Flowchart 部分积 被乘数 如果乘数的数值部分是 N位,则共需做N次加 法,N次右移。乘积的 数值部分是2N位。 右移按逻辑右移进行。
原码一位乘法
补码一位乘法
原码两位乘法
补码两位乘法
§3. 3 二进制乘法运算
Binary Multiplication
Unsigned Binary Multiplication 无符号数乘法 两个尾数为n位的数相乘,乘积的尾数为2n位。
手算乘法的过程:
对应于乘数的位,将被乘数 逐次左移一位加在左下方。 最后将n个位积相加,得到乘积。 需要n个寄存器保存位积 需要2n位的加法器 计算机不能照搬手算的算法。 ×
原码二位乘法的运算规则: 符号位单独处理, P0 X 0 Y0 乘数的数值部分必须是偶数位。相乘的是两数的绝对值。
减X用加[-X]补实现。
右移按补码右移规则进行。 当乘数的数值部分是N位(N必须是偶数),则共需做N/2次 加法和N/2次右移。最后如果还有欠帐,再做一次+X。 欠帐触发器C的初值为0。 由于在运算中有+2|X|,产生的进位可能侵占符号位,所以被 乘数和部分积应该取3符号位。 例2:X= -0.111111,Y= +0.111001,用原码二位乘法计算X*Y
开始 A←0,Cd←n B←X,C←Y Cn=1?
Y
N
计数器 乘数
A←(A)+(B) (A),(C)右移一位 Cd←(Cd)—1
N
原码乘法做的是绝对 值相乘,相当于无符 号数相乘。
缺点:需做N次加法, N次右移,时间太长。
Cd=0?
Y
PS X S YS
结束
乘积的符号位
X S YS
原码运算,必须把符号位与数值部分分开进行。 符号位做异或运算,数值部分做无符号数相乘。
乘数的相邻两位Yi-1Yi有4种状态组合,分别对应一种操作:
Yi-1Yi 操 作
0 0
0 1 1 0 1 1
相当于0· X
相当于1· X 相当于2· X 相当于3· X
部分积Pi +0后右移2位
部分积Pi +X后右移2位 部分积Pi +2X后右移2位 部分积Pi +3X后右移2位
Yi-1Yi 0 0 0 1 相当于0· X 相当于1· X
例2:X= -0.111111,Y= +0.111001,用原码二位乘法计算X*Y 解: [X] 原=1.111111 乘积的符号位 | X |=0.111111 | 2X |=001.111110 [Y] 原=0.111001
P0 X 0 Y0 1 0 1
| Y |=0.111001 [-|X |]补=1.000001
1011 被乘数 1101 乘数 位积 1011
0000 1011 1011 10001111 乘积
被乘数左移,根据 乘数每个位做不同 运算,都不便于计 算机实现
运算器一次只能完成两数的求和操作。 Binary (Fixed-Point) Multiplication Arithmetic
计算机的算法: 只能把每一个新位积与部分积(部分积的初值为零)相加, 总共做n次加法(累加)。 部分积与位积相加时,只有n位与位积相加,其余部分并不 参加运算。因此用n位的加法器就可完成乘法了。 被乘数左移一位的操作改为部分积右移一位后与被乘数相加。 部分积 被乘数1011 只需用1个n位的寄存器存放 0000 部分积的高位,部分积的低 1101 乘数 1011 位与乘数共用一个n位的寄存 + 器,在乘数右移一位(计算 1011 该位位积后自动丢失)的同 01011 110 右移一位 时将部分积最低一位移入。 + 0000 乘法完成后,原来存放乘数 的寄存器中是乘积的低n位, 乘数全部丢失,而硬件则节 省了一个寄存器。 01011 + 001011 1011 11 右移一位
|X|= 0.111111, |Y|= 0.111001, | 2X |=001.111110, [-|X |]补=1.000001
高位部分积
+
+
+
+
000. 0 0 0 0 0 0 000. 1 1 1 1 1 1 000. 1 1 1 1 1 1 000. 0 0 1 1 1 1 001. 1 1 1 1 1 0 010. 0 0 1 1 0 1 000. 1 0 0 0 1 1 111. 0 0 0 0 0 1 111. 1 0 0 1 0 0 111. 1 1 1 0 0 1 000. 1 1 1 1 1 1 000. 1 1 1 0 0 0
操 作 部分积Pi +0后右移2位 部分积Pi +X后右移2位
1 0 1 1
相当于2· X 相当于3· X
部分积Pi +2X后右移2位 部分积Pi +3X后右移2位
加2X很容易实现。把X左移一位,或者把X向左斜传送一位。 加3X一般不能一次完成。分两次(3X=X+2X)又降低了速度。如 果令 3X=4X—X, 形式上看好象需要2次。实际上可以这样: 本次运算只做减X,用一个欠帐触发器C记下欠加4X,下一步 操作时补上。 由于本次累加后,部分积要右移2位,相当于乘数相对左移2位。 此时做+X相当于前一步+4X。所以,3X=4X—X只需要做一次。 欠帐触发器C的初值为0。
原码二位乘法的运算规则: 当欠帐触发器C=0时, Yi-1 Yi 0 0 0 1 1 0 1 1 C 0 0 0 0 操 作 部分积Pi +0后右移2位 部分积Pi +X后右移2位 部分积Pi +2X后右移2位 部分积Pi —X后右移2位
0→C 0→C 0→C 1→C
当欠帐触发器C=1时, Yi-1 Yi 0 0 0 1 1 0 1 1 C 1 1 1 1 操 作 部分积Pi +X后右移2位 部分积Pi +2X后右移2位 部分积Pi +[-X]补后右移2位 部分积Pi +0后右移2位 0→C 0→C 1→C 1→C
两个原码表示的数(无论小数或整数)相乘,乘积的值是两数 绝对值之积,符号是相乘两数符号位的异或值。两个尾数为n位 的数相乘,乘积的尾数为2n位。 This method is mathematically correct, but it has two serious engineering problems. The first is that it involves 32 intermediate additions in a 32-bit computer, or 64 intermediate additions in a 64-bit computer. These additions take a lot of time.