《计算机组成与结构》
——本科生课程教学计算机学院计算机学院
(
(
XBXU)
XBXU)
计算机学院(XBXU)
计算机组成与结构计算机组成与结构
?本课程主要讲授计算机系统的硬件和软件构成方法,包括硬件系统中运算器、控制器、存储器、输入设备和输出设备和总线系统的构成原理等;并与当代先进的计算机技术相结合。是计算机科学与技术本科专业核心课程。
?本课程着重计算机系统组成与结构方面的教学和研究。
?计算机结构定义为系统程序员所能见到的计算机硬件特性;
?计算机组成是指计算机硬件的具体实现。
计算机学院(XBXU)
第三章第三章运算方法和运算部件运算方法和运算部件
?数据的表示方法和转换
?带符号数的表示方法及加减运算
?二进制乘法运算
?二进制除法运算
?浮点数的运算方法
?运算部件
?数据校验码计算机学院(XBXU)
3.3
3.3
二进制乘法运算二进制乘法运算一、定点数一位乘法
1、定点原码一位乘法
?用原码实现乘法运算十分方便,在定点运算中,完成两个原码表示得数相乘时,乘积得符号由两数得符号位按位相加(异或)得到,而乘积得数值部分则是两个数得绝对值之积。可以表示为:
?被除数[X]原=Xs.X1X2……Xn
?乘数[Y]原=Ys.Y1Y2……Yn
?乘积[Z]原=(Xs⊕Ys).(0.X1X2….Xn)(0.Y1Y2….Yn)
计算机学院(XBXU)
3.3
3.3
二进制乘法运算二进制乘法运算
?符号法则:同号相乘为正(0),异号相乘为负(1),
(XsYs=00,01,10,11),
所以积得符号可按“异或”运算得到。
?数值部分运算法则:与普通十进制小数乘法相似。
计算机学院(XBXU)
3.3
3.3
二进制乘法运算二进制乘法运算
?例,X=0.1101,Y=0.1011,求X*Y=?
手工方法机器方法
0.1101(X) 0.1101
×0.1011(Y) ×0.1011
1101……P1 0.0000 1101
1101……..P2 0.0001 101
0000………P3 0.0000 00
+ 1101………..P4 + 0.0110 1
10001111……P 0.1000 1111
计算机学院(XBXU)
3.3
3.3
二进制乘法运算二进制乘法运算
?机器运算与手工运算方法区别在于:
(1) 机器一次只能进行两个数相加,所以P1+P2+P3+P4必须分步进行:P1+P2; (P1+P2)+P3; [(P1+P2)+P3]+P4。
(2) 每做完一次加运算,把部分积右移一位(相当于把被加数右移,而不是左移),移出得数码不参加运算,故机器的位数可以固定。
?由此可以分析出机器乘法运算得基本规律。
计算机学院(XBXU)
3.3
3.3
二进制乘法运算二进制乘法运算
?原码机器乘法规律:
当所乘得乘数为1时,则上次所得的部分积(最初为0)加被乘数右移一位,而得新的次一部分积;若所乘的乘数为0
时,则上次所得的部分积加0右移一位后就是新的次一部分积。如此反复,直到乘数各位都乘完为止。
计算机学院(XBXU)
3.3
3.3
二进制乘法运算二进制乘法运算
?例,X=0.1101,Y=0.1011,求X*Y=?机器算法如下:
0000 初始化值
y=1 + 1101
1101
110 1………..P1
y=1 + 1101
10011 1
1001 11………P2
y=0 + 0000
1001 11
100 111……..P3
y=1 + 1101
10001 111
1000 1111……P4=P
计算机学院(XBXU)
3.3
3.3
二进制乘法运算二进制乘法运算
?一般而言,设被乘数X,乘数Y都是小于1的n位定点正数:
X=0,X
1
X
2
………,X
n
Y=0,Y
1
Y
2
………,Y
n
其乘积为:
X*Y=X(0,Y
1
Y
2
……Y
n
)
=X(Y
1
2
-1
+Y
2
2
-2
+…….+Y
n
2
-n
)
=2
-1
(Y
1
X+2
-1
(Y
2
X+2
-1
(……+2
-1
(Y
n-1
X+2
-1
(Y
n
X+0))……)))
计算机学院(XBXU)
3.3
3.3
二进制乘法运算二进制乘法运算
?令Pi表示第i次的部分积,则上式可写成如下递推公式:
P
0
=0,
P
1
=2
-1
(Y
n
X+P
0
),
P
2
=2
-1
(Y
n-1
X+P
1
),
P
i
=2
-1
(Y
n-i+1
X+Z
i-1
),
P
n
=X*Y=2
-1
(Y
1
X+P
n-1
)
此处的P
0
,P
1
…P
n-1
为部分积,P
n
为最终的乘积P。
计算机学院(XBXU)
3.3
3.3
二进制乘法运算二进制乘法运算
?上述乘法运算的递推算法可用流程图来表示:(P74图3.6)
开始
Pi=0,i=0
Yn=1
Pi+0 Pi+X
Pi,Y右移一位,i=i+1
i=n?
结束
YN
N
Y
计算机学院(XBXU)
3.3
3.3
二进制乘法运算二进制乘法运算
?实现原码一位乘法的逻辑电路图(P73图3.5)。
计算机学院(XBXU)
3.3
3.3
二进制乘法运算二进制乘法运算
2、定点补码一位乘法
?原码乘法的主要问题是符号位不能参加运算。补码乘法可以实现符号位直接参加运算。
(1) 补码与真值的转换关系设[X]补=X0.X1X2……..Xn
当X>=0时,X0=0(符号位为0)
尾数部分为真值X
XXXXXX
n
i
i
in
==

=
1
21
2.0][LL=
补计算机学院(XBXU)
3.3
3.3
二进制乘法运算二进制乘法运算
?当X<0时,X0=1(符号位为1)
[X]补=1.X1X2…….Xn=2+X
所以真值X为:
X=1.X1X2…..Xn-2
=-1+0.X1X2……Xn
所以,

=
+?=
n
i
i
i
X
1
21

=
+?=
n
i
i
i
XXX
1
0
2
计算机学院(XBXU)
3.3
3.3
二进制乘法运算二进制乘法运算
(2) 补码的右移
?正数右移一位,相当于乘1/2,负数用补码表示,右移一位也相当于乘1/2。因此在补码运算的机器中,一个数不论其正负,连同符号位向右移一位,符号位保持不变,就等于乘1/2。
?设[X]补=X0.X1X2…..Xn,因为
?所以

=
+?=
n
i
i
i
XXX
1
0
2
∑∑∑
=
+?
=
=
+?=++?=+?=
n
i
i
i
n
i
i
i
n
i
i
i
XXXXXXXX
0
)1(
0
1
00
1
0
22
2
1
2
1
2
2
1
2
1
2
1
计算机学院(XBXU)
3.3
3.3
二进制乘法运算二进制乘法运算
?写成补码形式,得:
?所以,若要得,只要将[X]补连同符号位右移I位即可。
(3) 补码的乘法规则
?设被乘数为[X]补=X0.X1X2….Xn,
乘数[Y]补=Y0.Y1Y2….Yn均为任意符号,
则补码乘法算式:[X*Y]补=[X]补*Y
?证明参见(P75-76)。
n
XXXXX,........]
2
1
[
210

补补
]2[ X
i?
计算机学院(XBXU)
3.3
3.3
二进制乘法运算二进制乘法运算
(4) BOOTH算法
?根据相邻两位比较结果决定运算操作的方法称为“比较法”,
是由BOOTH夫妇提出的,也称BOOTH算法。
? BOOTH算法流程:
开始时,部分积为0,即[P0]补=0,然后每一步都是在前次部分积的基础上由(Yi+1-Yi)(i=0,1,2…n)决定对[X]补的操作
,再右移一位,得到新的部分积。如此重复n+1步,最后一步不移位,便得到[X]补*[Y]补。
?参见流程图。
计算机学院(XBXU)
3.3
3.3
二进制乘法运算二进制乘法运算
(5) 补码一位乘法的运算规则根据BOOTH算法流程图,可得到补码一位乘法的运算规则。
?运算规则:
?如果Yn=Yn+1,部分积[Pi]加0,再右移一位;
?如果YnYn+1=01,部分积加[x]补,再右移一位;
?如果YnYn+1=10,部分积加[-X]补,再右移一位。
?如此重复进行n+1步,最后一步不移位;包括一位符号位,
所得乘积为2n+1位,其中n为尾数位数。
计算机学院(XBXU)
3.3
3.3
二进制乘法运算二进制乘法运算
?例,[X]补=1.0101,[Y]补=1.0011,求[X*Y]补=?
解:[-X]补=0.1011,采用双符号位表示后,运算过程如下:
部分积乘数操作
00.0000 1.00110 Yn+1=0,YnYn+1=10;
+ 00.1011 加[-X]补
00.1011
00.0101 110011 YnYn+1=11;
+ 00.0000 加0
00.0101
00.0010 111001 YnYn+1=01;
+ 11.0101 加[X]补
11.0111
11.1011 111100 YnYn+1=00;
+ 00.0000 加0
11.1011
11.1101 111110 YnYn+1=10
+ 00.1011 加[-X]补
00.1000 1111 最后一步不移位计算机学院(XBXU)
3.3
3.3
二进制乘法运算二进制乘法运算
(6) 实现补码一位乘法的逻辑图(p95)
计算机学院(XBXU)
3.3
3.3
二进制乘法运算二进制乘法运算
?补码一位乘法逻辑图与原码一位乘法逻辑图的差异:
(1)被乘数、乘数的符号位X0,Y0都参加运算;
(2)乘数寄存器有附加位Yn+1,其初始状态为0,并有右移功能;
(3)被乘数寄存器的每一位用原码或反码的多路开关输入,
多路开关由YnYn+1控制;
(4)部分积寄存器具有移位功能,其符号位与加法器的符号位始终一致;
(5)当计数器i=n+1时,封锁移位信号,保证最后一步不移位

计算机学院(XBXU)
3.3
3.3
二进制乘法运算二进制乘法运算二、定点数二位乘法
1、原码两位乘
?两位乘数有四种可能组合及相应的操作:
00-相当于0*X;部分积Pi+X,右移2位;
01-相当于1*X;部分积Pi+X,右移2位;
10-相当于2*X;部分积Pi+2X,右移2位;
11-相当于3*X;部分积Pi+3X,右移2位。
?与一位乘法比较,多出了+2X和3X两种情况。把X左移一位即得2X;+3X可以用(4X-X)来实现。
?原码两位乘法规则(P79表3.4)
计算机学院(XBXU)
3.3
3.3
二进制乘法运算二进制乘法运算
?例,X=0.100111,Y=0.100111,则:[-X]补=1.011001
部分积乘数欠位C
00.000000 100111 0
+[-X]补11.011001
11.011001
右移2位11.110110 011001 1
+2X 01.001110
01.000100
右移2位00.010001 000110 0
+2X 01.001110
01.011111
右移2位00.010111 110001 0
计算机学院(XBXU)
3.3
3.3
二进制乘法运算二进制乘法运算
2、补码两位乘
?根据BOOTH算法,将两步合并成一步,可以推导除编码两位乘法公式:
?上一步部分积:
?本步部分积:
?下一步部分积:
1
111i
2}])[(]{[][
+?+
补补
+=XYYPP
nini
][
i
P
1
1112
2]})[(]{[][
++
+
补补补
=XYYPP
innii
计算机学院(XBXU)
3.3
3.3
二进制乘法运算二进制乘法运算
?上式表明,产生部分积之后,可以加上乘数寄存器最低两位和附加位的组合值与的积,再右移2位,可得到
?三位组合值的关系参加p80表3.5
公式中,则:代入将补
][][
21 ++ ii
PP
1
1
1
12
2}])[(2}][)(]{[][

+?+
++=
补补补补XYYXYYPP
ininininii
2
111
2])[(2}][][]{[
+?
++=
补补补
XYYXYYP
ininnini
2
11
2}])[2(]{[
+?
++=
补补
XYYYP
ininini

][
i
P

][X

][
2+i
P
计算机学院(XBXU)
3.3
3.3
二进制乘法运算二进制乘法运算
?例,两位补码乘法,假设X=+0.0110011,Y=-0110010
则:[X]补=00110011,[Y]补=11001110;
[-X]补=11001101,
2[X]补=01100110,
2[-X]补=10011010;
?其两位补码乘法实现过程如下:
计算机学院(XBXU)
3.3
3.3
二进制乘法运算二进制乘法运算部分积乘数附加位说明
0000000000 11001110 0组合值为100,+2[-X]补
1110011010
1111100110 10110011 1 右移2位,组合值为111
1111111001 10101100 1 右移2位,组合值为001,+[X]补
0000110011
0000101100
0000001011 00101011 0 右移2位,组合值为110,+[-X]补
1111001101
1111011000
1111110110 00001010 右移1位运算结果为:11111011000001010
即为:-0.00100111110110
计算机学院(XBXU)
3.3
3.3
二进制乘法运算二进制乘法运算三、阵列乘法器参加P.82.图3.7
计算机学院(XBXU)
3.3
3.3
二进制乘法运算二进制乘法运算计算机学院(XBXU)
3.4
3.4
二进制除法运算二进制除法运算一、定点除法运算定点除法所占整个指令的执行频度很小,约0.2%,但它是不可少的。除法运算的方法很多,如原码除法、补码除法、
跳0跳1法、迭代法等等。
1、定点原码一位除法
ns
XXXXXX,......][
21
=

,被除数
ns
YYYYYY,......][
21
=

,除数
),商原nnss
YYYXXXYXQQ,...../......).((][
2121
⊕=
计算机学院(XBXU)
3.4
3.4
二进制除法运算二进制除法运算
?例,X=0.1001,Y=0.1011,求X/Y=?
常规手工算法笔算算法过程
01101 01101
0.1011)0.10010 0.1011)0.10010 X(r0)
- 1011 - 0.01011
01110 0.001110
- 1011 - 0.001011
00110 0.0000110
- 0000 - 0.0000000
01100 0.00001100
- 1011 - 0.00001011
0001 0.00000001
计算机学院(XBXU)
3.4
3.4
二进制除法运算二进制除法运算
?恢复余数法(还原法)
?规则:每次余数ri(最初是被除数X不移位)左移一位减除数,
得到新的余数ri+1,ri+1=2ri+(-y)补;如果ri+1>=0,表示够减
,商上“1”;如果ri+1<0,表示不够减,商上“0”,还要加除数y,然后左移一位再作减除数y的运算。
?例,X=0.1001,Y=0.1011,用恢复余数法秋X/Y=?
[X]原=[X]补=0.1001
[Y]原=[Y]补=0.1011
[-Y]补=1.0101
采用双符号位,恢复余数法运算过程如下:
计算机学院(XBXU)
3.4
3.4
二进制除法运算二进制除法运算
X/Y Q
00.1001
+[-y]补11.0101 q0=0
11.1110 r0<0
+[y]补00.1011 恢复余数
00.1001
01.0010
+[-y]补11.0101 q1=1
00.0111 r1>0
00.1110
+[-y]补11.0101 q2=1
00.0011 r2>0
00.0110
+[-y]补11.0101 q3=1
11.1011 r3<0
+[y]补00.1011 恢复余数
00.0110 r3’
00.1100
+[-y]补11.0101 q4=1
00.0001 r4>0
计算机学院(XBXU)
3.4
3.4
二进制除法运算二进制除法运算
?不恢复余数法(加减交替法)
?基本规则:
当余数为正时,商上“1”,余数左移一位,减除数;
当余数为负时,商上“0”,余数左移一位,加除数。
?恢复余数法与不恢复余数法的区别:
当余数ri为正时:恢复余数法为,+ri*2-y,商为“1”
不恢复余数法为,+ri*2-y,商为“1”
当余数ri为负时:恢复余数法为,(-ri+y)*2-y=-2ri+y,商为“1”
不恢复余数法为,-ri*2+y,商为“0”
计算机学院(XBXU)
3.4
3.4
二进制除法运算二进制除法运算例,X=0.1001,Y=0.1011,用不恢复余数法求X/Y=?
[X]原=[X]补=0.1001,[Y]原=[Y]补=0.1011,[-Y]补=1.0101
X/Y Q
00.1001
+[-Y]补11.0101 q0=0
11.1110 r0<0
11.1100
+[Y]补00.1011 q1=1
00.0111 r1>0
00.1110
+[-Y]补11.0101 q2=1
00.0011 r2>0
00.0110
+[-Y]补11.0101 q3=0
11.1011 r3<0
11.0110
+[Y]补00.1011 q4=1
00.0001 r4>0
计算机学院(XBXU)
3.4
3.4
二进制除法运算二进制除法运算
2、定点补码一位除法
?补码加减交替法
?法则:
(1) 被除数与除数同号,被除数减去除数;被除数与除数异号
,被除数加上除数。
(2) 余数与除数同号,商为“1”,余数左移一位,下次减除数;
余数与除数异号,商为“0”,余数左移一位,下次加除数。
(3) 重复步骤(2),包括符号位在内,共做n+1步。
计算机学院(XBXU)
3.4
3.4
二进制除法运算二进制除法运算
?商的校正:
?补码一位除法的算法是在商的末位“恒置1”的舍入条件下推导的,按照这种算法所得到的有限位商为负数时,是反码形式,而正确需要得到商是补码形式,两者之间相差末位的一个“1”,所以最后加校正量“1”。
?例,X=-0.1001,Y=+0.1101,求[X/Y]补=?
?解:[X]补=1.0111,[Y]补=0.1101,[-Y]补=1.0011
计算机学院(XBXU)
3.4
3.4
二进制除法运算二进制除法运算
X/Y Q 操作说明
11.0111
+[Y]补00.1101 q0=0 [X]补与[Y]补异号
00.0100 r1 余数r1与除数同号
00.1000 左移,商1,减除数
+[-Y]补11.0011 q1=1
11.1011 r2 余数r2与除数异号
11.0110 左移,商0,加除数
+[Y]补00.1101 q2=0
00.0011 r3 余数r3与除数同号
00.0110 左移,商1,减除数
+[-Y]补11.0011 q3=1
11.1001 r4 余数r4与除数异号
11.0010 左移,商0,加除数
+[Y]补00.1101 q4=0
11.1111 r5 余数r5与除数异号,商左移,
商0,余数不左移。
所以,[Q]补=1.0100+0.0001=1.0101,[R]补=1.1111
计算机学院(XBXU)
3.4
3.4
二进制除法运算二进制除法运算二、提高除法运算速度的方法
?跳0跳1除法根据余数前几位代码值再次求得几位同位1或0得商。
?规则:
(1) 余数R>=0,且R的高K个数位均为0,则本次直接得商1
,后跟K-1个0,R左移K位后,减除数Y,得新得余数。
(2) 余数R<0,且R的高K个数位均为1,则本次直接得商0,
后跟K-1个1,R左移K位后,加除数Y,得新得余数。
(3) 不满足(1)、(2)中条件时,按一位除法上商。
参见P88例3.43。
计算机学院(XBXU)
3.4
3.4
二进制除法运算二进制除法运算计算机学院(XBXU)
3.5
3.5
浮点数的运算方法浮点数的运算方法一、浮点加法和减法
?设有两个浮点数x和y,它们分别为
? x=2
m
·M
x
? y=2
n
·M
y
?其中m和n分别为数x和y的阶码,M
x
和M
y
为数x和y的尾数。
计算机学院(XBXU)
3.5
3.5
浮点数的运算方法浮点数的运算方法
? (1)对阶对阶的原则:小阶向大阶看齐。
若m>n则将操作数y的尾数右移一位,y的阶码n加1,直到m=n。
若m<n则将操作数x的尾数右移一位,x的阶码m加1,直到m=n。
? (2)尾数相加尾数相加与定点数的加、减法相同计算机学院(XBXU)
3.5
3.5
浮点数的运算方法浮点数的运算方法
? (3)结果规格化当运算结果的尾数部分不是11.0××…×或00.1××…×的形式时,则应进行规格化处理。
?当尾数符号位01或10需要右规。
右规的方法是尾数连同符号位右移一位、和的阶码加1,
右规处理后就可得到11.0××…×或00.1××…×的形式,
即成为规格化的数.
?当运算结果的符号位和最高有效位为11.1或00.0时需要左规

左规的方法是尾数连同符号位一起左移一位、和的阶码减1,直到尾数部分出现11.0或00.1的形式为止。
计算机学院(XBXU)
3.5
3.5
浮点数的运算方法浮点数的运算方法
? (4)溢出判断在阶码的符号位出现01或10时,表示溢出,而尾数的符号位为01或10时,给出的是运算结果需要右规的信号。
?见书P90,例3.45
计算机学院(XBXU)
3.5
3.5
浮点数的运算方法浮点数的运算方法
?例:
x=101.10010=2
3
×0.10110010
y=1100.1000=2
4
×0.11001000
x

=0011,0.1011001 y

=0100,0.1100100
? (1) 对阶[ΔE]=[m]

-[n]

=0011+1100=1111,其真值位-1,即:x的阶码比y的阶码小1,x的尾数应右移1位
,阶码加1得:x

=0100,0.0101101 (0舍1入)
计算机学院(XBXU)
3.5
3.5
浮点数的运算方法浮点数的运算方法
? (2) 尾数相加减[ 用双符号],即:[ x

]

±[ y

]

00.0101101 00.0101101
+ 00.1100100 +11.0011100
01.0010001 11.1001001
计算机学院(XBXU)
3.5
3.5
浮点数的运算方法浮点数的运算方法
? (3) 结果规格化由于加运算结果的尾数为01.×……×的形式,所以应右规,尾数右移一位,阶码加1,所以结果为:[x+y]


0101,0.1001001 [ 0舍1入]
x+y=2
101
×[ 0.1001001]
由于减运算结果的尾数为11.1×……×的形式,所以应左规,尾数左移一位,阶码减1,所以结果为:[x-y]


0011,1.0010010 x-y=2
011
×[-0.1101110]
计算机学院(XBXU)
3.5
3.5
浮点数的运算方法浮点数的运算方法二、浮点数的乘除法
1,浮点数的阶码运算
? (X+Y)

=[x]

+[y]

? (X-Y)

=[x]

+[-Y]

?使用双符号位的阶码加法器,并规定移码的第二个符号位,即最高符号位恒用0参加加减运算,则溢出条件是结果的最高符号位为
1。此时,当低位符号位为0时,表明结果上溢,为1时,表明结果下溢。当最高符号位为0时,表明没有溢出,低位符号位为1,表明结果为正,为0时,表明结果为负。
?见书P92例题。
计算机学院(XBXU)
3.5
3.5
浮点数的运算方法浮点数的运算方法
2,浮点乘法运算设x=2
m
·M
x
,y=2
n
·M
y
则x·y=2
m+n
(M
x
·M
y
) 其中,M
x
、M
y
分别为x和y的尾数。
浮点乘法运算也可以分为3个步骤:
? (1) 阶码相加
? (2) 尾数相乘尾数相乘可按定点乘法运算的方法进行运算。
? (3) 结果规格化计算机学院(XBXU)
3.5
3.5
浮点数的运算方法浮点数的运算方法
3,浮点除法运算设x=2
m
·M
x
,y=2
n
·M
y
,则x÷y=2
m-n
(M
x
÷M
y
)
浮点除法运算也可以分3步进行:
? (1) 如果被除数的尾数大于除数的尾数,则将被除数的尾数右移一位并相应调整阶码。
? (2) 阶码求差
? (3) 尾数相除两个尾数相除与定点除法相同。
计算机学院(XBXU)
3.5
3.5
浮点数的运算方法浮点数的运算方法
4.浮点数的底的问题
?浮点数的底一般为2,为了用相同位数的阶码表示更大范围的浮点数,在一些计算机中也有选用阶码的底为8或16的。此时浮点数N被表示成
? N=8
E
×M 或N=16
E
×M
?当阶码以8为底时,只要尾数满足l/8≤M<1或-l≤M<-1/8
就是规格化数。执行对阶和规格化操作时,每当阶码的值增或减
1,尾数要相应右移或左移三位。
?当阶码以16为底时,只要尾数满足1/16≤M<1或-1≤M<-1
/16就是规格化数。执行对阶和规格化操作时,阶码的值增或减
1,尾数必须移四位。
?判别为规格化数或实现规格化操作,均应使数值的最高三位(以
8为底)或四位(以16为底)中至少有一位与符号位不同。
计算机学院(XBXU)
3.5
3.5
浮点数的运算方法浮点数的运算方法