计算机组成原理 1
计 算 机 组 成 原 理
第六 -八讲
2009年 11月 10日
计算机算法和算法逻辑实现
计算机组成原理 2
1,定点数加减法运算及电路实现
补码的加减法运算, 全加器, 溢出, 快速加法
运算 ( 进位链 ), 74181ALU
2,定点数乘除运算和电路实现
原码, 补码, 布斯算法, 原码恢复余数, 不恢
复余数
3,快速乘除法运算技术和电路实现
布斯高基乘法, 阵列乘法器, 阵列除法器
4,浮点数四则运算以及实现
加减乘除
本讲安排
计算机组成原理 3
本讲将解决的主要问题
掌握计算机算法 。
加减乘除运算方法和运算器的构成,
原码和补码的加减乘除四则运算,
浮点数的四则运算 。
计算机组成原理 4
补码加、减法
溢出概念与检测方法
基本的二进制加法 /减法器
十进制加法器
计算机组成原理 5
加法规则:
先判符号位,若相同,绝对值相加,结果符号不变 ; 若不
同,则作减法,|大 | - |小 |,结果符号与 |大 |相同。
减法规则:
两个原码表示的数相减,首先将减数符号取反,然后将被
减数与符号取反后的减数按原码加法进行运算。
补码加法
1.原码加 /减法运算
计算机组成原理 6
补码加法的公式,
[ x ]补 + [ y ]补 = [ x+ y ]补 (mod 2)
在模 2意义下,任意两数的补码之和等于该两数之和的补码 。
这是补码加法的理论基础。
2.补码加法运算
特点,不需要事先判断符号,符号位与码值位一起参加运算。
符号位相加后若有进位,则舍去该进位数字。
计算机组成原理 7
假设采用定点小数表示,因此证明的先决条件是,
︱ x︱ ﹤ 1,︱ y︱ ﹤ 1,︱ x+ y︱ ﹤ 1。
(1) x﹥ 0,y﹥ 0,则 x+ y﹥ 0。
相加两数都是正数,故其和也一定是正数。正数的补码和原
码是一样的,可得:
[ x ]补 + [ y ]补 = x+ y= [ x+ y ]补 (mod 2)
公式证明,
计算机组成原理 8
(2) x﹥ 0,y﹤ 0,则 x+ y>0 或 x+ y<0。
相加的两数一个为正,一个为负,因此相加结果有正、负两种
可能。根据补码定义,
∵ [x]补 = x,[ y]补 = 2+ y
∴ [x]补 + [ y]补 = x+ 2+ y= 2+ (x+ y)
当 x+y>0 时,2+ (x+y) > 2,进位 2必丢失,又因 (x+y)>0,
故 [x]补 + [ y]补 = x+ y= [ x+ y]补 (mod 2)
当 x+ y<0时,2 + (x+ y) < 2,又因 (x+y)<0,
故 [x]补 + [y]补 = 2+ (x+ y)= [x+ y]补 (mod 2)
计算机组成原理 9
(3) x<0,y>0,则 x+ y>0 或 x+ y<0。
同 (2),把 x 和 y 的位置对调即可。
(4) x<0,y<0,则 x+ y<0。
相加两数都是负数,则其和也一定是负数。
∵ [x]补 = 2+ x,[ y]补 = 2+ y
∴ [x]补 + [ y]补 = 2+ x+ 2+ y= 2+ (2+ x+ y)
因为 |x+ y|<1,1<(2+ x+ y)<2,2+ (2+ x+ y) 进位 2
必丢失,又因 x+y<0
故 [x]补 + [ y]补 = 2+ (x+ y)= [ x+ y]补 (mod 2)
计算机组成原理 10
至此证明了在模 2意义下,任意两数的补码之和等于该两
数之和的补码。
其结论也适用于定点整数。
补码加法的特点:
( 1)符号位要作为数的一部分一起参加运算;
( 2)在模 2的意义下相加,即大于 2的进位要丢掉。
结论:
计算机组成原理 11
例, x= 0.1001,y= 0.0101,求 x+ y。
解, [x]补 = 0.1001,[y]补 = 0.0101
[x]补 0.1001
+ [y]补 0.0101
[x+ y ]补 0.1110
所以 x+ y=+ 0.1110
例, x=+ 0.1011,y=- 0.0101,求 x+ y。
所以 x+ y= 0.0110
解, [x]补 = 0.1011,[y]补 = 1.1011
[x]补 0.1011
+ [y]补 1.1011
[x+ y]补 10.0110
计算机组成原理 12
补码减法
减法运算要设法化为加法完成
补码减法运算的公式:
[ x- y ]补 = [ x ]补 - [ y ]补 = [ x ]补 + [- y ]补
公式证明,只要证明 [–y]补 = –[ y]补,上式即得证。
∵ [x+ y]补 = [x]补 + [ y]补 (mod 2)
令 y= - x
∴ [0]补 = [x]补 + [ - x]补
故 [- x]补 =- [ x]补 (mod 2)
证明:
计算机组成原理 13
例, x=+ 0.1101,y=+ 0.0110,求 x- y。
解, [x]补 = 0.1101
[ y]补 = 0.0110,[- y]补 = 1.1010
[x]补 0.1101
+ [- y]补 1.1010
[x- y]补 10.0111
x- y=+ 0.0111
解, [x]补 =1.0011
[y]补 =1.1010 [-y]补 =0.0110
[x]补 1.0 0 1 1
+ [-y]补 0.0 1 1 0
[x-y]补 1.1 0 0 1
例, x= -0.1101,y= -0.0110,求 x-y=?
∴ x--y = -0.0111
计算机组成原理 14
溢出及与检测方法
在定点小数机器中,数的表示范围为 |x |<1。在运算过程中
如出现大于 1的现象,称为, 溢出, 。
机器定点小数表示
上溢下溢
1,概念
计算机组成原理 15
解, [x]补 =0.1011 [y]补 =0.1001
[x]补 0,1 0 1 1
+ [y]补 0,1 0 0 1
[x+y]补 1,0 1 0 0
两个正数相加的结果成为负数,这显然是错误的。
例, x=+0.1011,y=+0.1001,求 x+y。
例, x= -0.1101,y= -0.1011,求 x+y。
解, [x]补 =1.0011 [y]补 =1.0101
[x]补 1,0 0 1 1
+ [y]补 1,0 1 0 1
[x+y]补 0,1 0 0 0
两个负数相加的结果成为正数,这同样是错误的。
计算机组成原理 16
发生错误的原因,是因为运算结果产生了溢出。
两个正数相加, 结果大于机器所能表示的最大正数,称为上溢;
两个负数相加:结果小于机器所能表示的最小负数,称为下溢。
机器定点小数表示
上溢下溢
[分析 ],
计算机组成原理 17
2.溢出的检测方法
[x]补 0,1 0 1 1
+ [y]补 0,1 0 0 1
[x+y]补 1,0 1 0 0
[x]补 1,0 0 1 1
+ [y]补 1,0 1 0 1
[x+y]补 0,1 0 0 0
溢出逻辑表达式为:
V= S1 S2 Sc + S1 S2 Sc
(1) 单符号位法
FA
V
z0
y0
x0
判 断
电 路
判断电路
计算机组成原理 18
一个符号位只能表示正、负两种情况,当产生溢出时,符号
位的含义就会发生混乱。如果将符号位扩充为两位 (Sf1,Sf2),
其所能表示的信息量将随之扩大,既能判别是否溢出,又能指
出结果的符号。
(2) 双符号位法
双符号位法 也称为“变形补码”或“模 4补码” 。
变形补码定义:
[x]补 =
x 0? x<2
4+x -2? x<0 ( mod 4)
计算机组成原理 19
? 任何小于 1的正数,两个符号位都是,0‖,即 00.x1x2...xn;
? 任何大于 -1的负数:两个符号位都是,1‖,即 11.x1x2…x n
两数变形补码之和等于两数和的变形补码,要求:
? 两个符号位都看做数码一样参加运算;
? 两数进行以 4为模的加法,即最高符号位上产生的进位要丢掉
模 4补码加法公式,[x]补 +[ y]补 =[x+y]补 ( mod 4)
采用变形补码后数的表示:
计算机组成原理 20
Sf1Sf2 = 00 结果为正数,无溢出
01 结果正溢
10 结果负溢
11 结果为负数,无溢出
即,结果的两个符号位的代码不一致时,表示溢出 ;
两个符号位的代码一致时,表示没有溢出。
不管溢出与否,最高符号位永远表示结果的正确符号。
溢出逻辑表达式为,V= Sf1⊕ Sf2
中 Sf1和 Sf2分别为最高符号位和第二符号位,此逻辑表达式
可用异或门实现。
双符号位的含义如下:
计算机组成原理 21
解, [x]补 =00.1100 [y]补 =00.1000
[x]补 0 0,1 1 0 0
+ [y]补 0 0,1 0 0 0
0 1,0 1 0 0
符号位出现,01‖,表示已溢出,正溢。即结果大于 +1
例 x= +0.1100,y= +0.1000,求 x+y。
解, [x]补 =11.0100 [y]补 =11.1000
[x]补 1 1.0 1 0 0
+ [y]补 1 1.1 0 0 0
1 0,1 1 0 0
符号位出现,10‖,表示已溢出,负溢出。即结果小于 -1
例 x= -0.1100,y= -0.1000,求 x+y。
计算机组成原理 22
从上面例中看到:
当最高有效位有进位而符号位无进位时,产生上溢;
当最高有效位无进位而符号位有进位时,产生下溢。
(简单地说是正数相加为负数或负数相加为正数则产生溢出)
故溢出逻辑表达式为,V= Cf⊕ Co
其中 Cf为符号位产生的进位,Co为最高有效位产生的进位。
此逻辑表达式也可用异或门实现。
(3) 利用进位值的判别法
[x]补 0 0,1 1 0 0
+[y]补 0 0,1 0 0 0
0 1,1 0 0 0
[x]补 1 1.0 1 0 0
+[y]补 1 1.1 0 0 0
1 0.1 1 0 0
计算机组成原理 23
FA
FA
z1
z0
V
c1
c0
y1
x1
y0
x0
FA
FA
V
z 1
c0
c1
z0
x1
y1
y0
x0
V= C1⊕ CoV= Sf1⊕ Sf2
判断电路
计算机组成原理 24
基本的二进制加法 /减法器
加法运算,Ai + Bi + Ci = Si (Ci+1)
加数 进位输入 和 进位输出一位全加器真值表
输入 输出
Ai Bi Ci Si Ci+ 1
0 0 0 0 0
0 0 1 1 0
0 1 0 1 0
0 1 1 0 1
1 0 0 1 0
1 0 1 0 1
1 1 0 0 1
1 1 1 1 1
?
逻辑方程
Si= Ai⊕ Bi⊕ Ci
Ci+ 1= AiBi+ BiCi+ CiAi
1.一位全加器
计算机组成原理 25
逻辑方程
Si= Ai⊕ Bi⊕ Ci
Ci+ 1= AiBi+ BiCi+ CiAi
? 逻辑电路(一位全加器)
常用的全加器逻辑电路
F AC i+1 C i
S i
A i B i 逻辑符号
计算机组成原理 26
2.n位的行波进位加减器 n个 1位的全加器 (FA)可级联
成一个 n位的行波进位加减器。
计算机组成原理 27
T被定
义为相应
于单级逻
辑电路的
单位门延
迟。
T通常
采用一个
,与非,
门或一个
,或非,
门的时间
延迟来作
为度量单
位。
3TXNOR异或非
3TXOT异或
2TOR或
2TAND与
TNOT非
TNOR或非
TNAND与非
时间延迟逻辑符号(正逻辑)门的功能门的名称
典型门电路的逻辑符号和延迟时间
接线逻辑
(与或非 ) AOI T+TRC
3.n位的行波进位加法器的问题
时间延迟
计算机组成原理 28
(1)对 一位全加器 (FA)来说, Si的时间延迟为 6T(每级
异或门延迟 3T); Ci+ 1的时间延迟为 5T。
3T
3TT
T
计算机组成原理 29
(2) n位行波进位加法器 的延迟时间 ta为,
? 9T为 最低位上的两极, 异或, 门再加上溢出, 异或, 门的总时
间;
? 2T为每级进位链的延迟时间。
ta= n·2T+ 9T= (2n+ 9)T考虑溢出检测时,有:
当不考虑溢出检测时,有,ta= (n-1)·2T+ 9T
ta为在加法器的输入端输入加数和被加数后,在最坏的情况
下加法器输出端得到稳定的求和输出所需要的最长时间。
ta越小越好。
计算机组成原理 30
缺点,
(1)串行进位,它的运算时间长;
(2)只能完成加法和减法两种操作而不能完成逻辑操作。
多功能算术 /逻辑运算单元 (ALU):
不仅 具有多种算术运算和逻辑运算 的功能;
而且具有 先行进位 逻辑。
从而能实现高速运算。
由一位全加器 (FA)构成的行波进位加法器,
计算机组成原理 31
1.基本思想
Si= Ai⊕ Bi⊕ Ci
一位全加器 (FA)的逻辑表达式为,
(1)将 Ai和 Bi先组合成由控制参数 S0,S1,S2,S3控制的组合函数 Xi和 Yi;
(2)然后再将 Xi,Yi和下一位进位数通过全加器进行全加。
这样,不同的控制参数可以得到不同的组合函数,因而能够实现多种
算术运算和逻辑运算。
解决方案:
多功能算术 /逻辑运算单元 (ALU)
将全加器的功能扩展以完成多种算术逻辑运算。
Ci+ 1= AiBi · (Ci · (Ai⊕ Bi))
= AiBi+ BiCi+ CiAi
计算机组成原理 32
S0
S1
S2
S3
X0 Y0
参数 S0,S1,S2,S3 分别控制输入 Ai 和 Bi,
产生 Y和 X的函数。其中:
Yi是受 S0,S1控制的 Ai和 Bi的组合函数;
Xi是受 S2,S3控制的 Ai和 Bi组合函数。
函数关系如表所示。
Xi= S2S3+ S2S3(Ai+ Bi )+ S2S3 (Ai+ Bi )+ S2S3Ai
Yi= S0S1Ai+ S0S1AiBi+ S0S1AiBi
? 核心部分是由两个半加器组成的全加器 。
? 由 M控制第二级半加器选择逻辑运算或
算术运算(所需的低位进位 Cn) 。
一位 ALU基本逻辑电路
计算机组成原理 33
S0 S1 Yi S2 S3 Xi
0 0
0 1
1 0
1 1
Ai
AiBi
AiBi
0
0 0
0 1
1 0
1 1
1
Ai+ Bi
Ai+ Bi
Ai
进一步化简,
Xi = S3AiBi + S2AiBi
Yi = Ai + S0Bi + S1Bi
Ai + S0Bi + S1BiS3AiBi + S2AiBi XiYi = ? = Yi
Fi= Yi⊕ Xi⊕ Cn+i
Cn+ i+ 1= Yi+ XiCn+ i
计算机组成原理 34
综上所述,ALU的 一位逻辑 表达式为:
Xi = S3AiBi + S2AiBi
Yi = Ai + S0Bi + S1Bi
Fi= Yi⊕ Xi⊕ Cn+i
Cn+ i+ 1= Yi+ XiCn+ i
计算机组成原理 35
4位之间采用先行进位(并行进位)公式。
根据 Cn+ i+ 1= Yi+ XiCn+ i, 每一位的进位公式可 递推 如下:
? 第 0位向第 1位的进位公式为,
Cn+ 1= Y0+ X0Cn (其中 Cn是向第 0位(末位)的进位 )
? 第 1位向第 2位的进位公式为,
Cn+ 2= Y1+ X1Cn+ 1= Y1+ Y0X1+ X0X1Cn
? 第 2位向第 3位的进位公式为,
Cn+ 3= Y2+ X2Cn+ 2= Y2+ Y1X1+ Y0X1X2+ X0X1X2Cn
? 第 3位的进位输出(即整个 4位运算进位输出)公式为,
Cn+ 4 =Y3+X3Cn+ 3
=Y3+Y2X3+Y1X2X3+Y0X1X2X3+X0X1X2X3Cn
4位 ALU的进位关系及逻辑电路
计算机组成原理 36
Cn+ 1= Y0+ X0Cn
Cn+ 2= Y1+ X1Cn+ 1= Y1+ Y0X1+ X0X1Cn
Cn+ 3= Y2+ X2Cn+ 2= Y2+ Y1X1+ Y0X1X2+ X0X1X2Cn
Cn+ 4 =Y3+X3Cn+ 3
=Y3+Y2X3+Y1X2X3+Y0X1X2X3+X0X1X2X3Cn
Cn+4是最后进位输出。
逻辑表达式表明,这是一个先行进位逻辑。换句话说,第 0位
的进位输入 Cn可以直接传送到最高位上去,因而可以实现高速
运算。
下图为用上述原始推导公式实现的 4位算术 /逻辑运算单元
(ALU)
——74181ALU
从进位关系上看
计算机组成原理 37
X0 Y0X1 Y1X
2 Y2X3 Y3
正逻辑表示的 74181
计算机组成原理 38
第 3位的进位输出(即整个 4位运算进位输出)公式为,
Cn+ 4 =Y3+X3Cn+ 3
=Y3+Y2X3+Y1X2X3+Y0X1X2X3+X0X1X2X3Cn
设 G= Y3+ Y2X3+ Y1X2X3+ Y0X1X2X3
P= X0X1X2X3
则 Cn+ 4= G+ PCn
其中 G称为 进位发生输出,P称为 进位传送输出 。
在电路中多加这两个进位输出的目的,是为了便于实现多片
(组) ALU之间的先行进位。
P和 G的含义
计算机组成原理 39
负逻辑表示的 74181
X0 Y0X1 Y1X
2 Y2X3 Y3
计算机组成原理 40
2.算术逻辑运算的实现
上图中控制端 M 用来控制 ALU进行算术运算还是进行逻辑运算,
M = 0时:
M 对进位信号没有任何影响。此时 Fi不仅与本位的被操作数
Yi 和操作数 Xi 有关,而且与向本位的进位值 Cn+i 有关,因此 M =
0时,进行 算术操作 。
M = 1时:
封锁了各位的进位输出,即 Cn+i = 0,因此各位的运算结果 Fi
仅与 Yi 和 Xi 有关,故 M = 1时,进行 逻辑操作 。
计算机组成原理 41
下图为工作于负逻辑和正逻辑操作方式的 74181ALU方框图。
两种操作是等效的。
? 对正逻辑操作数来说:
算术运算称高电平操作;
逻辑运算称正逻辑操作
(即高电平为,1‖,低电平为
,0‖)。
? 对于负逻辑操作数来说,
正好相反。
计算机组成原理 42
A
A+ B
A+ B
减 1
A加 AB
( A+B)加 AB
A减 B减 1
AB减 1
A加 AB
A加 B
( A+B)加 AB
AB减 1
A加 A*
( A+B)加 A
( A+B)加 A
A减 1
A
A+ B
A B
逻辑 0
A B
B
A B
A B
A+ B
A B
B
A B
逻辑 1
A+ B
A+ B
A
A减 1
AB减 1
AB减 1
减 1
A加( A+B) AB
加( A+B)
A减 B减 1
A+ B
A加( A+B)
A加 B
AB加( A+B)
A+ B
A加 A*
AB加 A
AB加 A
A
A
A B
A+ B
逻辑 1
A+ B
B
A B
A+ B
A B
A B
B
A+ B
逻辑 0
A B
A B
A
L L L L
L L L H
L L H L
L L H H
L H L L
L H L H
L H H L
L H H H
H L L L
H L L H
H L H L
H L H H
H H L L
H H L H
H H H L
H H H H
算术运算
M=L Cn =H
逻辑 M=H算术运算
M=L Cn =L
逻辑 M=H
正逻辑输入与输出负逻辑输入与输出工作方式
选择输入
S3 S2 S1 S0
计算机组成原理 43
(1) H=高电平,L=低电平;
(2) *表示每一位均移到下一个更高位,即 A*= 2A。
(3) 算术运算操作是用补码表示法来表示的,其中:
,加, 是指算术加,运算时要考虑进位;
符号, +, 是指, 逻辑加, 。
(4) 减法是用补码方法进行的,其中数的反码是内部产生的,
而结果输出, A减 B减 1‖,因此做减法时需在最末位产生一个强
迫进位 (加 1),以便产生, A减 B‖的结果。
(5) ―A= B‖输出端可指示两个数是否相等;
计算机组成原理 44
3.并行加法器的进位逻辑
74181ALU为 4位并行加法器,
组成 16位的并行加法器 ——怎么办?
4片 (组 )74181连接 ——怎样连?
? 组与组之间串行连接
? 组与组之间并行连接
计算机组成原理 45
(1)组间串行进位
C4= G0+ P0 C0
C8= G1+ P1 C4
C12= G2+ P2 C8
C16= G3+ P3 C12
进位关系
Cn+ 1= Y0+ X0Cn
Cn+ 2= Y1+ X1Cn+ 1= Y1+ Y0X1+ X0X1Cn
Cn+ 3= Y2+ X2Cn+ 2= Y2+ Y1X1+ Y0X1X2+ X0X1X2Cn
Cn+ 4 =Y3+X3Cn+ 3 =Y3+Y2X3+Y1X2X3+Y0X1X2X3+X0X1X2X3Cn
组内 组间
X0 Y0X1Y1X2Y
2
X3Y
3
X0 Y0X1Y1X2Y
2
X3Y
3
C4C8
C4 C00
0
1
1
G= Y3+ Y2X3+ Y1X2X3+ Y0X1X2X3
P= X0X1X2X3
计算机组成原理 46
(2)组间并行进位 ——两级先行进位的 ALU
由串行进位关系
C8 = G1+ P1 C4 = G1 + P1 (G0+ P0 C0 ) = G1+G0P1+P0P1C0
得:
C4= G0+ P0 C0
C8= G1+ P1 C4
C12= G2+ P2 C8
C16= G3+ P3 C12
C4 = G0+ P0 C0
C12= G2+ P2 C8 = G2 + P2 (G1+G0P1+P0P1Cn) = G2+G1P2+G0P1P2+P0P1P2C0
C16 = G3+P3C12 = G3+G2P3+G1P1P2+G0P1P2P3+P0P1P2P3C0 = G*+ P*C0
其中, P*= P0P1P2P3
G*= G3+ G2P3+ G1P1P2+ G0P1P2P3
根据上述公式实现逻辑电路,
计算机组成原理 47
X0
Y0
X1
Y1
X
2
Y
2
X
3
Y
3
C12 C8 C4
X0
Y0
X1
Y1
X2
Y2
X3
Y3
X0
Y0
X1
Y1
X
2
Y
2
X
3
Y
3
0
计算机组成原理 48
4.先行进位部件( CLA) ——74182
74182是一个并行进位部件,其内部结构图如下:
其中 G*称为 成组进位发生输出, P*称为 成组进位传送输出 。
计算机组成原理 49
Cn+x = G0+P0Cn
Cn+y = G1+P1Cn+x = G1+G0P1+P0P1Cn
Cn+z = G2+P2Cn+y = G2+G1P2+G0P1P2+P0P1P2Cn
Cn+ 4 = G3+P3Cn+z = G3+G2P3+G1P1P2+G0P1P2P3+P0P1P2P3Cn
= G*+ P*Cn
其中, P*= P0P1P2P3
G*= G3+ G2P3+ G1P1P2+ G0P1P2P3
先行进位部件 74182CLA所提供的进位逻辑关系如下:
计算机组成原理 50
74181ALU设置了 P和 G两个本组先行进位输出端。
如果将四片 74181的 P,G输出端送入到 74182先行进位部件
( CLA),又可实现第二级的先行进位,即组与组之间的先行进位。
例,16位字长 ALU的构成
G* P*
计算机组成原理 51
? C3,C7,C11是由 74182同时形成的;
? 其不同点是 74182还提供大组间的进位函数 G* 和大
组传递条件 P*,以便在位数更长时组成下一级先行进
位链。
由图可知:
计算机组成原理 52
用若干个 74181ALU位片,与配套的 74182先行进位部件 CLA
在一起,可构成一个全字长的 ALU。
例:全字长的 ALU的构成
用两个 16位全先行进位部件级联组成的 32位 ALU逻辑方框图。
计算机组成原理 53
十进制加法器
十进制加法器可由 BCD码 (二 -十进制码 )来设计,它可以在二
进制加法器的基础上加上适当的,校正”逻辑 来实现。
7 0 1 1 1
+ 6 + 0 1 1 0
1 3 1 1 0 1 ( = D)
+ 0 1 1 0
1 0 0 1 1 ( = 13)
3 0 0 1 1
+ 5 + 0 1 0 18 1 0 0 0 ( =8)X+Y+C<10不调整
X+Y+C>10
调整
计算机组成原理 54
故:
1,和为 10~ 15时,加 6校正;
2,和数有进位时,加 6校正。
和数 (4位 )
有进位
调整
28 0010 1000
+ 9 + 0000 1001
37 0011 0001 ( =31)
+ 0000 0110
0011 0111 (=37)
计算机组成原理 55
1.一位 BCD码行波式进位加法器一般结构:
0 1 1
1010
1011
1100
1101
1110
1111
计算机组成原理 56
2.n位 BCD码行波式进位加法器一般结构:
计算机组成原理 57
原码乘法
补码乘法
定点乘法运算
计算机组成原理 58
设 n位 被乘数和乘数用定点小数表示
被乘数 [x]原 = xf, xn- 1… x 1x0
乘数 [y]原 = yf, yn- 1… y 1y0
则乘积
[z]原 = (xf⊕ yf)+ (0,xn- 1… x 1x0)(0,yn- 1… y 1y0)
式中, xf为被乘数符号,
yf为乘数符号 。
原码一位乘法
1,乘法的手工算法
计算机组成原理 59
(2) 手工运算过程:
设 x = 0.1101,y = 0.1011
0,1 1 0 1 (x)
0,1 0 1 1 (y)
1 1 0 1
1 1 0 1
0 0 0 0
+ 1 1 0 1
0,1 0 0 0 1 1 1 1 (z)
(1)乘积符号的运算规则,同号相乘为正, 异号相乘为负 。
计算机组成原理 60
(1) 机器通常只有 n位长,两个 n位数相乘,乘积可能为 2n位。
(2) 只有两个操作数相加的加法器难以胜任将 n位积 一次相加
起来的运算。
机器与人们习惯的算法不同之处:
0.1 1 0 1 x
× 0.1 0 1 1 y
0.0 0 0 0 1 1 0 1 x共 4次右移
0.0 0 0 1 1 0 1 x共 3次右移
0.0 0 0 0 0 0 x共 2次右移
+ 0.0 1 1 0 1 x共 1次右移
0.1 0 0 0 1 1 1 1
2,适合定点机的形式
计算机组成原理 61
为了适合两个操作数相加的加法器,将 x?y 改写成下面形式:
x?y = x?(0.1011)
= 0.1?x + 0.00 ?x + 0.001 ?x + 0.0001 ?x
= 0.1 ? { x+0.1[ 0 + 0.1 ?(x+0.1 ?x) ] }
= 2-1 { x+ 2-1 [0 + 2-1(x+2-1x) ] }
根据此式,按式中括号可表达的层次,从内向外 逐次
进行移位累加。
计算机组成原理 62
一般而言,设被乘数 x,乘数 y都是小于 1的 n位定点正数,
x=0.x1x2......xn <1
y=0.y1y2......yn <1
其乘积为:
x·y=x(0.y1y2......yn )
=x(y12-1 +y22-2 +… + yn2-n )
= 2-1(y1x+2-1(y2x+2-1(… +2-1(yn-1x+2-1(ynx+0))… )))
计算机组成原理 63
形成 递推公式
令 zi表示第 i次部分积, 则根据从内到外的原则有:
z0 = 0,
z1 = 2-1(ynx+z0)
z2 = 2-1(yn-1x+z1)
┊
zi = 2-1(yn-i+1x+zi-1)
┊
zn = x?y = 2-1(y1x+ zn-1)
特点,每次只需要相加两个数, 然后右移一位 。 且相加的两个
数 ( 部分积和位积 ) 都只有 n位, 因而不需要 2n位的加法器 。
计算机组成原理 64
3.原码一位乘法
流程图
开始
zi = 0,i=0
yn= 1?
zi + 0 zi+ x
zi,y右移一位, i = i+1
i = n?
结束
y
y
n
n
计算机组成原理 65
部分积 乘数 说明
最后结果, x?y=0.10001111
0 0.0 0 0 0 yf 1 0 1 1 z0=0
+ 0 0.1 1 0 1 y4=1,+x
0 0.1 1 0 1
? 0 0.0 1 1 0 1 yf 1 0 1 右移, 得 z1
+ 0 0.1 1 0 1 y3=1,+x
0 1.0 0 1 1
? 0 0.1 0 0 1 1 1 yf 1 0 右移, 得 z2
+ 0 0.0 0 0 0 y2=0,+0
0 0.1 0 0 1
? 0 0.0 1 0 0 1 1 1 yf 1 右移, 得 z3
+ 0 0.1 1 0 1 y1=1,+x
0 1.0 0 0 1
? 0 0.1 0 0 0 1 1 1 1 yf 右移, 得 z4=x?y
例, x=0.1101,y=0.1011,求 x·y 。
计算机组成原理 66
4.原码一位乘硬件逻辑原理图
R0→ R1→ yn
R2
计数器 i
部分积 z
被乘数 x
乘数 y
LDR0 LDR1
T1,T2,…
Ti
QQ
加法器
R
S
启动yn Cx
计数器,对移位的次数进行计数,以便判断乘法运算是否结束。
当计数器 i=n时,计数器 i的溢出信号使控制触发器 Cx
置 0,关闭时序脉冲 T,乘法操作结束。
计算机组成原理 67
原码一位乘法的主要问题是,符号位不能参与运算,
而 补码乘法可以实现符号位直接参与运算 。
2 补码一位乘法
1.原码一位乘的缺点
2.补码一位乘法的规律推导
采用比较法。比较法是 Booth夫妇首先提出来的,
又称 Booth算法。
计算机组成原理 68
设 [x]补 = x0.x1x2… xn
当 x?0时,
x0=0,
Booth算法
?
?
?
n
i
i
ix
1
2
[x]补 =0.x1x2… xn = = x
?
?
?
n
i
i
ix
1
2
= -1+ 0.x1x2… xn= -1+
?
?
?
n
i
i
ix
1
2x = -x0 +
真值与补码的关系:
当 x?0时,
x0=1,[x]补 =1.x1x2… xn = 2 + x
x=1.x1x2… xn-2
(1)真值和补码之间的关系
计算机组成原理 69
在补码机器中, 一个数不论其正负, 连同符号位向右移一
位, 符号位保持不变, 就等于乘 1/2。
设 [x]补 = x0.x1x2… xn
?
?
?
n
i
i
ix
1
2
∵ x = -x0 +
∴ x = - x0 +12 12 12 ?
?
?
n
i
i
ix
1
2
= -x0 + x0 + 12 12 ?
?
?
n
i
i
ix
1
2
= -x0 + ?
?
??
n
i
)i(
ix
0
12
写成补码的形式, 即得:
要得到 [2-ix]补,连同符号位右移 i位即可
(2) 补码的右移
1
2[ x ]补 = x0.x0x1x2… xn
计算机组成原理 70
设被乘数 [x]补 = x0.x1x2… xn
乘数 [y]补 = y0.y1y2… yn
均为任意符号, 则有补码乘法算式:
[ x·y ]补 = [x]补 · y
或,[ x·y ]补 = [x]补 · ?
?
???
n
i
i
i ]yy[
1
0 2
(3) 补码乘法规则
计算机组成原理 71
1)、当被乘数 x符号任意,乘数 y符号为正时:
根据补码定义:
?? yyyy.]y[ nL210补
)(modxxxxx.x]x[ nn ????? ?L 1210 222补
yx)yyy(yxy]y[]x[ nn ???????? ? ?211 22补补∴
由于( y1y2… yn)是大于或等于 1的正整数,根据模运算性质(大于
2的部分全部丢掉)有,2 (y1y2… yn) = 2
补补补 ]yx[yx]y[]x[ ?????? 2
∴ (mod2)
即,y]x[]y[]x[]yx[ ?????
补补补补
公式证明
计算机组成原理 72
2),当被乘数 x符号任意,乘数 y符号为负时:
)(modyyyy.]y[ n 221 21 ??? L补
xxx.x]x[ n210? L补
10212 2121 ?????? nn yyy.yyy.]y[y LL补∵
x)yyy.(x)yyy.(xyx nn ????? LL 2121 010∴
补补补 ]x[)]yyy.0(x[]yx[ n21 ??? L
)yyy.(]x[)]yyy.(x[ nn LL 2121 00 补补 ?
补补补 ]x[)yyy.0(]x[]yx[ n21 ??? L
又因 ( 0.y1y2…y n )>0
所以:
计算机组成原理 73
补补补 ]x[)yyy.(]x[]yx[ n ???? ?210
)yyy.(]x[ n 10 21 ??? ?补
(mod2)
?
?
???
n
i
i
i ]yy[
1
0 2
= [x]补 ·
= [x]补 · y
计算机组成原理 74
为推导出逻辑实现的分步算法,将上式展开得到各项部分积
累加的形式。
( yn+1是增加的附加位,初值为 0 )
补][ yx?
)(][ nnyyyyx ??? ?????? 222 22110 ?补
)]()()([][ )( nnnn yyyyyyyx ?????? ????????? 22222 122121110 ?补
])()()()[(][ )( nnnnn yyyyyyyx ????? ????????? 2022 1111201 ?补
])()()[(][ nnn yyyyyyx ??? ??????? 22 111201 ?补
?
?
?
? ???
n
i
i
ii yyx
0
1 2)(][ 补
公式展开
计算机组成原理 75
将上式改为接近于分步运算逻辑实现的递推关系。
补]z[ 0 0?
补补补 }]x)[yy(]z{[]z[ nn 121
12 ???
?
?
补补补 }]x)[yy(]z{[]z[ ininii 121
12 ???
?????
?
补补补 }]x)[yy(]z{[]z[ nn 11
1
1 2 ??? ?
?
补补补 }]x)[yy(]z{[]z[ nn 10
1
1 2 ??? ?
?
M
M
递推公式
补补补补 ]x)[yy(]z[]z[]yx[ nn 011 ???? ?·
最后一步不移位
计算机组成原理 76
由此可见:
每次都是在前次部分积的基础上,由 ( yi+1-yi ) 决定对 [x]补
的操作,然后再右移一位,得到新的部分积;重复进行。
yn+1,yn的作用:
开始操作时,补充一位 yn+1,使其初始为 0。由 yn+1 yn 判断进
行什么操作;然后再由 ynyn-1 判断第二步进行什么操作 … 。
若 yn yn+ 1 =0 1 则 yi+ 1-yi =1 做加 [x]补运算;
ynyn+ 1 =10 则 yi+ 1-yi= -1 做加 [-x]补运算 ;
ynyn+ 1 =1 1
ynyn+ 1= 00
则 yi+ 1-yi= 0 [zi]加 0,即保持不变;
计算机组成原理 77
补码一位乘的运算规则
(1) 如果 yn=yn+1,则部分积 [zi] 加 0,再右移一位;
(2) 如果 yn yn+1=01,则部分积 [zi] 加 [x]补,再右移一位;
(2) 如果 yn yn+1=10,则部分积 [zi] 加 [-x]补,再右移一位;
如此重复 n + 1步, 但最后一步不移位 。
包括一位符号位, 所得 乘积为 2n+1位, 其中 n为尾数位数 。
计算机组成原理 78
算法流程图 开始
结束
[zi]补 +[x]补 → [zi]补 [zi]补 +[-x]补 → [zi]补
[z]补 =0,i=0
yn yn+1=?
[zi]补 不变
i=n+1
?
[zi]补,y右移一位, i=i+1
01 10
01或 11
Y
N
计算机组成原理 79
0 0.0 0 0 0 1,0 0 1 1 0 yn+1=0
+ 0 0.1 0 1 1 ynyn+1=10,加 [-x]补
0 0.1 0 1 1
?0 0.0 1 0 1 1 1 0 0 1 1 右移一位
+ 0 0.0 0 0 0 ynyn+1=11,加 0
0 0.0 1 0 1
?0 0.0 0 1 0 1 1 1 0 0 1 右移一位
+ 1 1.0 1 0 1 ynyn+1=01,加 [x]补
1 1.0 1 1 1
?1 1.1 0 1 1 1 1 1 1 0 0 右移一位
+ 0 0.0 0 0 0 ynyn+1=00,加 0
1 1.1 0 1 1
?1 1.1 1 0 1 1 1 1 1 1 0 右移一位
+ 0 0.1 0 1 1 ynyn+1=10,加 [-x]补
0 0.1 0 0 0 1 1 1 1 1 0 最后一位不移位
例, [x]补 =1.0101,[y]补 =1.0011,求 [x·y]补 =? [-x]补 =0.1011
[x·y]补 =0.10001111
部分积 乘数 yn yn+1 说明
计算机组成原理 80
0 0 0 0 0 0 1 0 1 1 0 0 yn+1=0
+ 0 0 0 0 0 0 ynyn+1=00,加 0
0 0 0 0 0 0
?0 0 0 0 0 0 0 1 0 1 1 0 右移一位
+ 1 1 0 0 1 1 ynyn+1=10,加 [-x]补
1 1 0 0 1 1
?1 1 1 0 0 1 1 0 1 0 1 1 右移一位
+ 0 0 0 0 0 0 ynyn+1=11,加 0
1 1.1 0 0 1
?1 1.1 1 0 0 1 1 0 1 0 1 右移一位
+ 0 0 1 1 0 1 ynyn+1=01,加 [x]补
0 0 1 0 0 1
?0 0 0 1 0 0 1 1 1 0 1 0 右移一位
+ 1 1 0 0 1 1 ynyn+1=10,加 [-x]补
1 1 0 1 1 1 1 1 1 0 1 0 最后一位不移位
[x]补 =001101,[y]补 =10110,[-x]补 =110011
[x·y]补 =101111110
部分积 乘数 yn yn+1 说明
例, x=13,y=-10 求 x·y =?
x·y = -01000 0010=-82H=-130
计算机组成原理 81
4.补码一位乘逻辑原理图
R0→ R1 → ynyn+1
R2
计数器 i
部分积 z
被乘数 x
乘数 y
+1
LDR0 LDR1 T1,T2,… +1
Ti
QQ
加法器
R
S
启动Cx
?f
+ -
yn+1
yn
yn+1
yn
多开关路
原 反 1001
QQ
计算机组成原理 82
[注 ]
(1) 被乘数寄存器 R2的每一位用原码(触发器 Q端)或
反码(触发器 Q端)经多路开关送出;送 [-x]补 时,
即送 R2反码且在加法器最末为加 1;
(2) R0保存部分积,其符号与加法器符号位 ?f始终一致。
(3) 当计数器 i=n+1时,封锁 LDR1,LDR0信号,使最后
一步不移位。
计算机组成原理 83
高基乘法
以上讨论的乘法都只是检查一位二进制位。
能否同时检查 K位二进制位?以 K=2,C=A × B为例
如果这两位二进制位为 00,则加 0
如果这两位二进制位为 01,则加 A
如果这两位二进制位为 10,则加 2A
如果这两位二进制位为 11,则加 3A
2A=4A —2A
3A=4A —A
如果这两位二进制位为 11,则减 A,4A待下一次补上,由
于部分积已右移两位,原来加 4A变成加 A
如何知道有 4A的操作哪?
两位二进制位为 10或 11,则加 4A
计算机组成原理 84
B的低两位 前次移出
的 位
运算 注释
2i+1 2i 2i-1
0 0 0 0 +0+0
0 0 1 +A +0+A
0 1 0 +A +A+0
0 1 1 +2A +A+A
1 0 0 -2A +4A-2A+0
1 0 1 -A +4A-2A+A
1 1 0 -A +4A-A+0
1 1 1 0 +4A-A+A
Booth 4基乘法算法
计算机组成原理 85
例,A=011011,B=011001,计算 C=A × B 。
0 0 0 0 0 0 0 1 0 1 0 0 1 0 010,加 [A]补
+ 1 1 1 0 0 1 0
1 1 1 0 0 1 0
?1 1 1 1 1 0 0 1 0 1 0 1 0 0 算术右移两位
+ 0 0 1 1 1 0 0 100,加 [-2A]补
0 0 1 1 0 0 0
?0 0 0 0 1 1 0 0 0 1 0 1 0 1 算术右移两位
+ 0 0 0 1 1 1 0 101,加 [-A]补
0 0 1 0 1 0 0
?0 0 0 0 1 0 1 0 0 0 0 1 0 1 算术右移两位
解,[A]补 =1 0010,[B]补 =1 1001,[-A]补 =0001110 [-2A]补 =0011100
[A·B]补 =0 0 0 0 1 0 1 0 0 0 0 1 0
部分积 乘数 yn-1 yn yn+1 说明
A·B =0 0001 0100 0010 =142H =322D
例,A=-14,B=-23,求 A·B =?
计算机组成原理 86
1.串行加法器的优劣分析
? 不需要很多器件,硬件结构简单;
? 速度太慢,执行一次乘法操作的时间至少是加法操
作的 n倍;
由于乘法操作大约占全部算术运算的 1/3,故采用高速乘法
部件是非常必要的。
高速乘法部件 ---阵列乘法器
计算机组成原理 87
2.不带符号的阵列乘法器
设有两个不带符号的二进制整数 A= am- 1…a 1a0,B= bn- 1…b 1b0
它们的数值分别为 a和 b,即:
? ? ? ?? ?
?
?
?
?
?
??
?
?
?
?
????
1
0
1
0
1
0
1
0
1
0
22)()2()2(
n
j
m
i
n
j
nm
k
k
k
ji
ji
j
j
m
i
i
i pbabaabp
m-1a = ∑ a
i2ii= 0
n-1b = ∑ b
j2jj= 0
在二进制乘法中,被乘数 A与乘数 B相乘,产生 m+ n位乘积 P:
P= pm+ n- 1…p 1p0 乘积 P 的数值为,
计算机组成原理 88
am-1 am-2 ·· a1 a0
?) bn-1 ·· b1 b0
am-1b0 am-2b0 ·· a1b0 a0b0
am-1b1 am-2b1 ·· a1b1 a0b1
.,.,
.,
+) am-1bn-1 am-2bn-1 ·· a1bn-1 a0bn-1
pm+n-1 pm+n-2 pm+n-3 ··· pn-1 ·· p1 p0
(1) 习惯方法运算过程:
计算机组成原理 89
计算机组成原理 90
3.带符号的阵列乘法器
(1) 对 2求补器电路
例 1,对 1010求补。
1 0 1 0 —— 0 1 0 1
1
0 1 1 0
例 2,对 1011求补。
1 0 1 1 —— 0 1 0 0
1
0 1 0 1
方法:
从数的最右端 a0开始,由右向左,直到找出第一个,1‖,例如 ai= 1,
0≤ i≤ n。这样,ai以左的每一个输入位都求反,即 1变 0,0变 1。
计算机组成原理 91
1 0 1 0
0 1 1 0
1
对 2求补电路
计算机组成原理 92
(2) 带符号的阵列乘法器
计算机组成原理 93
包括求补级的乘法器又称为 符号求补的阵列乘法器。
在这种逻辑结构中,共使用三个求补器,
? 两个算前求补器
作用是,将两个操作数 A和 B在被不带符号的乘法
阵列 (核心部件 )相乘以前,先变成正整数。
? 算后求补器
作用则是,当两个输入操作数的符号不一致时,
把运算结果变成带符号的数。
结构,
在必要的求补操作以后,A和 B的码值输送给 n× n
位不带符号的阵列乘法器,并由此产生 2n位的乘积,
A·B= P= p2n- 1… p1p0 p2n= an⊕ bn
其中 P2n为符号位。
计算机组成原理 94
原码一位除法
补码一位除法
并行除法器
定点除法运算
计算机组成原理 95
被除数 x,其原码为 [x]原 = xf, xn- 1… x 1 x0
除数 y,其原码为 [y]原 = yf, yn- 1… y 1 y0
则有商 q=x /y,其原码为
[q]原 = (xf⊕ yf) + (0,xn- 1…x 1x0 / 0.yn- 1… y 1y0)
? 商的符号运算 qf= xf⊕ yf 与原码乘法一样 ;
? 商的数值部分的运算,实质上是两个正数求商的运算。
原码一位除法
设有 n位定点小数:
计算机组成原理 96
1.手算运算步骤
例, 设被除数 x=0.1001,除数 y=0.1011,仿十进制除法运算,
手算求 x÷ y的过程。
0.1 1 0 1 商 q
0.1 0 1 1 0.1 0 0 1 0 x (r0) 被除数小于除数,商 0
- 0.0 1 0 1 1 2- 1y 除数右移 1位,减除数,商 1
0.0 0 1 1 1 0 r1 得余数 r1
- 0.0 0 1 0 1 1 2- 2y 除数右移 1位,减除数,商 1
0.0 0 0 0 1 1 0 r2 得余数 r2
- 0.0 0 0 1 0 1 1 2- 3y 除数右移 1位,不减除数,商 0
0.0 0 0 0 1 1 0 0 r3 得余数 r3
- 0.0 0 0 0 1 0 1 1 2- 4y 除数右移 1位,减除数,商 1
- 0.0 0 0 0 0 0 0 1 r4 得余数 r4
得 x ÷ y 的商 q= 0.1101,余数为 r= 0.00000001。
计算机组成原理 97
2.机器运算与手算的不同
(1) 在计算机中,小数点是固定的,不能简单地采用手算的办法。
为便于机器操作,除数 Y固定不变,被除数和余数进行 左移
(相当于乘 2)
计算机组成原理 98
原码一位除法
结果与手算相同, 但余数不是真正的余数, 多乘了 2n,故正确的余数应
为 2-n× rn,即,0.00000001
00.0001 第四次余数 r4
? 01.0010 被除数左移一位,2x>y,商 1
+ 11.0101 减 y,即 +[-y]补
00.0111 第一次余数 r1
? 00.1110 r1左移一位, 2r1>y,商 1
+ 11.0101 减 y
00.0011 第二次余数 r2
? 00.0110 r2左移一位, 2r2<y,商 0
? 00.1100 r3左移一位, 2r3=4r2>y,商 1
+ 11.0101 减 y
00.1011 00.1001 x<y,商 0
00.1101 x=0.1001,y=0.1011,[-y]补 =1.0101
计算机组成原理 99
(2) 机器不会心算,必须先作减法,若余数为正,才知道够减;若
余数为负,才知道不够减。不够减时必须恢复原来的余数,
以便再继续往下运算。这种方法称为 恢复余数法 。
(3) 要恢复原来的余数,只要当前的余数加上除数即可。但由于
要恢复余数,使除法进行过程的步数不固定,因此控制比较
复杂。
实际中常用不恢复余数法,又称 加减交替法 。其特点是
运算过程中如出现不够减,则不必恢复余数,根据余数符号,
可以继续往下运算,因此步数固定,控制简单。
机器运算与手算的不同
计算机组成原理 100
3.恢复余数法
被除数减除数,够减时,商 1;不够减时商 0。
由于商0时若不够减,即不能作减法,但现在在判断是否
商0时,已经减了除数,为了下次能正确运算,必须把已减掉
的除数加回去恢复余数。这就是, 恢复余数法, 。
【 例 1】 x=0.1001,y=0.1011,用恢复余数法求 x/y.
解,[x]原 =[x]补 = x=0,1001,
[y]补 =0.1011,[-y]补 =1.0101
计算机组成原理 101
0 0.1 0 0 1
+[-y]补 1 1.0 1 0 1 x减 y
1 1.1 1 1 0 余数 r0<0,商,0‖
+ [y]补 0 0.1 0 1 1 恢复余数
0 0.1 0 0 1 r0’
? 0 1.0 0 1 0 0 商 0移入 q,r0’左移
+[-y]补 1 1.0 1 0 1 减 y
0 0.0 1 1 1 r1>0,商,1‖
? 0 0.1 1 1 0 0,1 商 1移入 q,r1左移
+[-y]补 1 1.0 1 0 1 减 y
0 0.0 0 1 1 r2>0,商,1‖
? 0 0.0 1 1 0 0,1 1 商 1移入 q,r2左移
+[-y]补 1 1.0 1 0 1 减 y
1 1.1 0 1 1 r3<0,商,0‖
+[y]补 0 0.1 0 1 1 恢复余数
0 0.0 1 1 0 r3’=2r2
? 0 0.1 1 0 0 0,1 1 0 商 0移入 q,r3’左移
+[-y]补 1 1.0 1 0 1 减 y
0 0.0 0 0 1 r4>0,商,1‖
? 0 0.0 0 0 1 0,1 1 0 1 商 1移入 q,r4不左移
被除数 x / 余数 r 商 q 说明 [x]
原 =0,1001
[y]补 =0.1011
[-y]补 =1.0101
计算机组成原理 102
余数每次左移相当于乘以 2,在求得 n位商后,相当
于多乘了 2n,所以最后余数应乘以 2- n才是正确的值。
故,[q]原 =0,1 1 0 1
余数 [r4]原 =0.00000001
计算机组成原理 103
4.加减交替法
上述恢复余数法由于要恢复余数, 使得除法的步数不固定,
控制比较复杂 。 实际上常用的是 加减交替法 。
特点,当运算过程中出现不够减的情况, 不必恢复余数, 而是
根据余数的符号, 继续往下运算, 因此步数固定, 控制简单 。
运算规则:
当余数为正时, 商 1,余数左移一位, 减除数;
当余数为负时, 商 0,余数左移一位, 加除数 。
【 例 2】 x=0.1001,y=0.1011,用加减交替法求 x/y.
解,[x]原 =[x]补 = x =0,1001,[y]补 =0.1011,[- y]补 =1.0101
计算机组成原理 104
0 0.1 0 0 1
+[-y]补 1 1.0 1 0 1 x减 y
1 1.1 1 1 0 余数 r0<0,
? 1 1.1 1 0 0 0 商 0,r和 q左移一位
+[y]补 0 0,1 0 1 1 加 y
0 0,0 1 1 1 余数 r1>0
? 0 0,1 1 1 0 0.1 商 1,r和 q左移一位
+[-y]补 1 1,0 1 0 1 减 y
0 0,0 0 1 1 余数 r2>0
? 0 0,0 1 1 0 0.11 商 1,r和 q左移一位
+[-y]补 1 1,0 1 0 1 减 y
1 1,1 0 1 1 余数 r3<0
? 1 1,0 1 1 0 0.110 商 0,r和 q左移一位
+[y]补 0 0,1 0 1 1 加 y
0 0,0 0 0 1 余数 r4>0
0.1101 商 1,仅 q左移一位
被除数 x / 余数 r 商 q 说明
得,q = x/y =0.1101 余数 r = 2-4 r4 = 0.00000001
[x]原 = 0,1001,
[y]补 =0.1011,
[- y]补 =1.0101
计算机组成原理 105
原码加减交替法原理框图
计算机组成原理 106
(1)若被除数与除数同号, 被除数减去除数;
若被除数与除数异号, 被除数加上除数 。
(2)余数和除数同号,商 1,余数左移一位,下次减除数;
余数和除数异号,商 0,余数左移一位,下次加除数 。
(3) 重复步骤 (2),连同符号位在内, 共做 n+1步 。
1.补码加减交替算法
补码除法的被除数、除数用补码表示,符号位和数位一起参
与运算,商的符号位与数位由统一的算法求得。
补码一位除法
计算机组成原理 107
为统一并简化硬件电路:
一开始就根据 [x]补 和 [y]补 的符号位是否相同,上一位商 q0?,
但 q0?不是真正的商的符号,称其为假商。
? 如果 [x]补 和 [y]补 的符号位相同,假商为 1,控制下次做减法;
? 如果 [x]补 和 [y]补 的符号位不同,假商为 0,控制下次做加法。
按同样的规则,共做 n+1步运算后,假商 q0?移出了存放商的寄
存器,剩下 q0至 qn,即运算结果。
例 3,[x]补 =1.0111,[y]补 =0.1101,求 [x/y]补 。
计算机组成原理 108
1 1.0 1 1 1 0 [x]补,[y]补 异号,商 q0?=0
+[y]补 0 0,1 1 0 1 加除数
0 0.0 1 0 0 余数和除数同号
? 0 0.1 0 0 0 01 左移一位,商 1
+[-y]补 1 1.0 0 1 1 减除数
1 1.1 0 1 1 余数和除数异号
? 0 0,1 1 1 0 010 左移一位,商 0
+[y]补 1 1,0 1 0 1 加除数
0 0,0 0 1 1 余数和除数同号
? 0 0,0 1 1 0 0101 左移一位,商 1
+[-y]补 1 1,0 0 1 1 减除数
1 1,1 0 0 1 余数和除数异号
? 1 1,0 0 1 0 01010 左移一位,商 0
+[y]补 0 0,1 1 0 1 加除数
1 1,1 1 1 1 余数和除数异号
? 1 1,1 1 1 1 1.0100 仅 q左移一位,商 0,余数不左移
被除数 x / 余数 r 商 q 说明
得,[q]补 = x/y =1.0100+0.0001 (校正量 ) = 1.0101 [r]补 =1.1111
[x]补 =1.0111
[y]补 =0.1101
[-y]补 =1.0011
计算机组成原理 109
补码一位除法的算法是在商的末位, 恒置 1‖的舍入条件下推
导的, 故此算法存在误差, 这样引起的最大误差是 2-n。 在对计
算精度没有特殊要求的情况下, 一般就采用商的末位, 恒置 1‖的
办法, 这样操作比较简单, 而且易于实现 。
如果需要进一步提高商的精度, 可按上述方法多求一位, 再
用以下方法进行校正:
(1)刚好能除尽时, 若除数为正, 商不必校正;
若除数为负, 则商加 2-n。
2.商的校正
(2) 不能除尽时,若商为正,则不必校正;
若商为负, 则商加 2-n。
计算机组成原理 110
阵列式除法器是一种并行运算部件,采用大规模集成电路
制造。与早期的串行除法器相比,阵列除法器不仅所需的控制
线路少,而且能提供令人满意的高速运算速度。
阵列除法器有多种多样形式:
不恢复余数阵列除法器 ;
补码阵列除法器 等等。
3.阵列除法器
计算机组成原理 111
(1) 可控加法 /减法 (CAS)单元
用于并行除法流水逻辑阵列中。 P=0 做加法运算
P=1 做减法运算
计算机组成原理 112
Si= Ai⊕ (Bi⊕ P)⊕ Ci
Ci+ 1= (Ai+ Ci)·(Bi⊕ P)+ AiCi
? 当 P= 0时,即是我们熟悉的一位全加器 (FA)的公式:
Si= Ai⊕ Bi⊕ Ci
Ci+ 1= AiBi+ BiCi+ AiCi
CAS单元的输入与输出的关系可用如下一组逻辑方程来表示:
? 当 P= 1时,则得求差公式:
在减法情况下:
输入 Ci称为借位输入,而 Ci+ 1称为借位输出。
Si= Ai⊕ Bi⊕ Ci
Ci+ 1= AiBi+ BiCi+ AiCi
其中 Bi= Bi⊕ 1。
计算机组成原理 113
Si= Ai⊕ (Bi⊕ P)⊕ Ci
Ci+ 1= (Ai+ Ci)·(Bi⊕ P)+ AiCi
加以变换,可得如下形式:
在这两个表达式中,每一个都能用一个三级组合逻辑电路 (包括反向器 )来
实现。因此每一个基本的 CAS单元的延迟时间为 3T单元。
为说明 CAS单元的实际内部电路实现,将方程式
Si= Ai⊕ (Bi⊕ P)⊕ Ci
Ci+ 1= (Ai+ Ci)(Bi⊕ P)+ AiCi
= AiBiP+ AiBiP+ BiCiP+ BiCiP+ AiCi
( A?B=AB+AB )
= AiBiCiP+ AiBiCiP+ AiBiCiP+ AiBiCiP+ AiBiCiP
+ AiBiCiP+ AiBiCiP+ AiBiCiP
计算机组成原理 114
(2)不恢复余数的阵列除法器
不恢复余数阵列除法,也叫加减交替法。
在不恢复余数的除法阵列中,
? 当余数为正时( ri ≥ 0),商,1‖,下次做减法运算,
减法是用 2的补码运算来实现的,此时
[x-y]补 = [x ]补 + [-y]补 ;
? 当余数为负时( ri< 0),商,0‖,下次做加法运算 ;
? 每次运算完成后要将余数左移一位,再与除数做加或减运算 ;
? 商的符号由两数的符号按位相加求得。
计算机组成原理 115
例,x=0.101001,y=0.111,求 x÷ y。 [-y]补 =1.001
解, 被除数 x 0,1 0 1 0 0 1
减 y + 1,0 0 1 (相当于加 [-y]补 )
余数为负 1,1 1 0 0 0 1 < 0 → q0=0
余数左移 1,1 0 0 0 1
加 y + 0,1 1 1
余数为正 0,0 1 1 0 1 > 0 → q 1=1
余数左移 0,1 1 0 1
减 y + 1,0 0 1 (相当于加 [-y]补 )
余数为负 1,1 1 1 1 < 0 → q 2=0
余数左移 1,1 1 1
加 y + 0,1 1 1
余数为正 0,1 1 0 > 0 → q 3=1
故得 商 q=q0.q1q2q3=0.101 余数 r=(0.00r3r4r5r6)=0.000110
计算机组成原理 116
不恢复余数阵列除法器的逻辑原理
被除数 x= 0,x1 x2 x3 x4 x5 x6
除数 y= 0,y1 y2 y3
商数 q = 0.q1q2q3
余数 r = 0.00r3r4r5r6
计算机组成原理 117
? 被除数 x 是一个 6位的小数 (双倍长度值 ):
x = 0.x 1x 2x 3x 4x 5x 6
它是由顶部一行和最右边的对角线上的垂直输入线来提供的。
? 除数y是一个 3位的小数
y = 0.y 1y 2y 3
它沿对角线方向进入这个阵列。这是因为:
在除法中所需要的部分余数的左移,可以用下列等效的操作
来代替:即让余数保持固定,而将除数沿对角线右移。
? 最上面一行所执行的初始操作经常是减法。 因此最上面一行
的
控制线 P固定置成,1‖。
计算机组成原理 118
? 减法是用 2的补码运算来实现的,这时右端各 CAS单元上的反
馈线用作初始的进位输入。
? 每一行最左边的单元的进位输出决定着商的数值。
将当前的商反馈到下一行,我们就能确定下一行的操作。
由于进位输出信号指示出当前的部分余数的符号,因此,它将决
定下一行的操作将进行加法还是减法。
计算机组成原理 119
由图看出,该阵列除法器是用一个可控加法 /减法 (CAS)单元
所组成的流水阵列来实现的。
推广到一般情况:
一个 (n+1) 位除 (n+1)位的加减交替除法阵列由 (n
+ 1)2个 CAS单元组成,其中两个操作数 (被除数与除数 )
都是正的。
n为尾数位数。
计算机组成原理 120
对不恢复余数阵列除法器来说,在进行运算时:
? 沿着每一行都有进位 (或借位 )传播;
? 同时所有行在它们的进位链上都是串行连接;
? 而每个 CAS单元的延迟时间为 3T单元。
因此,对一个 2n位除以 n位的不恢复余数阵列除法器来说,
单元的数量为 (n+ 1)2,考虑最大情况下的信号延迟,其除法
执行时间为 td= 3(n+ 1)2T
其中 n为尾数位数。
计算机组成原理 121
浮点运算方法和浮点运算器
浮点加、减法运算
浮点乘、除法运算
计算机组成原理 122
尾数,用定点小数表示,给出有效数字的位数,
决定了浮点数的表示精度;
阶码,用整数形式表示,指明小数点在数据中的位
置,决定了浮点数的表示范围。
机器浮点数格式,浮点数的表示方法
阶符 阶码 数符 尾数
Es E1 E2 …… E m Ms M1 M2 …… M n
计算机组成原理 123
IEEE 标准:尾数用原码 ; 阶码用, 移码,; 基为 2。
浮点数的标准格式
按照 IEEE754 的标准,32位浮点数和 64位浮点数
的标准格式为,
31 30 23 22 0
S E M32位
S E M
63 62 52 51 0
64位
? 为便于软件移植,使用 IEEE标准
计算机组成原理 124
设有两个浮点数 x 和 y,它们分别为,
浮点加、减法运算
其中 Ex 和 Ey 分别为数x和y的阶码,
Mx 和 My为数x和y的尾数。
两浮点数进行加法和减法的运算规则是,
x ± y= (Mx2Ex- Ey± My)2Ey Ex <= Ey
x= 2Ex · Mx
y= 2Ey · My
计算机组成原理 125
完成浮点加减运算的操作过程大体分为四步:
(1) 0 操作数的检查;
(2) 比较阶码大小并完成对阶;
(3) 尾数进行加或减运算;
(4) 结果规格化。
(5) 舍入处理。
(6)溢出处理 。
计算机组成原理 126
使二数阶码相同(即小数点位置对齐),这个过程叫作 对阶 。
? 先 求两数阶码 Ex 和 Ey之差,即△ E = Ex- Ey
若 △ E = 0,表示 Ex=Ey
若 △ E > 0,Ex>Ey
若 △ E < 0,Ex<Ey 通过尾数的移动来改变E
x或 Ey,使其相等,
? 对阶原则
阶码小的数向阶码大的数对齐;
小阶的尾数右移,每右移一位,其阶码加 1(右 规 )。
(2) 对阶
(1) 0 操作数检查
计算机组成原理 127
例, x=201× 0.1101,y=211× (-0.1010),求 x+y=?
解,为便于直观了解, 两数均以 补码 表示, 阶码, 尾数均采用
双符号位 。
[x]补 =00 01,00.1101 [y]补 =00 11,11.0110
[△ E]补 = [ Ex]补 - [Ey]补 = 00 01+11 01 = 11 10
△ E = -2,表示 Ex比 Ey小 2,因此将 x的尾数右移两位,
右移一位,得 [x]补 =00 10,00.0110
再右移一位,得 [x]补 =00 11,00.0011
至此,△ E=0,对阶完毕,
计算机组成原理 128
尾数求和方法与定点加减法运算完全一样。
对阶完毕可得, [x]补 =00 11,00.0011
[y]补 =00 11,11.0110
对尾数求和, 00.0011
+ 11.0110
11.1001
即得, [x+y]补 =00 11,11.1001
(3) 尾数求和运算
计算机组成原理 129
(4) 结果规格化
求和之后得到的数可能不是规格化了的数,为了增加有效数
字的位数,提高运算精度,必须将求和的结果规格化,
① 规格化的定义, (二进制 )
121 ?? S
对正数, S=00.1××× … ×
对负数, S=11.0××× … ×
采用双符号位的补码:
采用原码:
正数, S=0.1 ××× … ×
负数,S=1.1 ××× … ×
计算机组成原理 130
若不是规格化的数,需要尾数 向左 移位,以实现规格化的过程,
我们称其为 向左规格化 。
② 向左规格化
前例中,00 11,11.1001不是规格化数,因而需要左规,即 左
移一位,阶码减 1,得,
[x+y]补 =00 10,11.0010
③ 向右规格化
浮点加减运算时,尾数求和的结果也可能得到:
01.××× … × 或 10.××× … ×,
即两符号位不等,即结果的绝对值大于 1。 向左破坏了规格化 。
此时,将尾数运算的结果右移一位,阶码加 1,称为 向右规格化。
计算机组成原理 131
例,两浮点数 x=0.1101 ?210,y=(0.1011) ?201,求 x+y。
解, [x]补 =00 10,00.1101 [y]补 =00 01,00.1011
对阶,[△ E]补 = [ Ex]补 - [Ey]补 =00 10+ 11 11= 00 01
y向 x对齐,将 y的尾数右移一位,阶码加 1。
[y]补 =00 10,00.0101
求和,00.1101
+ 00.0101
01.0010 [x+y]补 =00 10,01.0010
右归,运算结果两符号位不同,其绝对值大于 1,右归。
[x+y]补 = 00 11,00.1001
计算机组成原理 132
在对阶或向右规格化时,尾数要向右移位,这样,被右移的尾数
的低位部分会被丢掉,从而造成一定误差,因此要进行 舍入处理 。
? 简单的舍入方法有两种,
①, 0舍 1入, 法
即如果右移时被丢掉数位的最高位为 0则舍去,反之则将尾
数的末位加, 1‖。
②, 恒置 1‖法
即只要数位被移掉,就在尾数的末位恒置, 1‖。从概率上来
说,丢掉的 0和 1各为 1/2。
(5) 舍入处理
? IEEE754标准中,舍入处理提供了四种可选方法:
计算机组成原理 133
(6)溢出处理
与定点加减法一样,浮点加减运算最后一步也需判溢出。
在浮点规格化中已指出,当尾数之和 (差 )出现 01,×× … ×
或 10,×× … × 时,并不表示溢出,只有将此数 右规 后,再
根据 阶码 来判断浮点运算结果是否溢出。
计算机组成原理 134
若机器数为补码,尾数为规格化形式,并假设阶符取 2位,阶
码取 7位、数符取 2位,尾数取 n位,则它们能表示的补码在数轴
上的表示范围如图所示。
正负
计算机组成原理 135
图中 A,B,a,b分别对应最小负数、最大正数、最大负
数和最小正数。它们所对应的真值分别是:
A最小负数 2+127 ? (-1)
B最大正数 2+127 ? (1-2-n)
a最大负数 2-128 ? (-2-1-2-n)
b最小正数 2-128 ?2-1
正负
计算机组成原理 136
图中 a,b之间的阴影部分,对应阶码小于 128的情况,叫做浮点
数的下溢。下溢时.浮点数值趋于零,故机器不做溢出处理,
仅把它作为机器零。
图中的 A,B两侧阴影部分,对应阶码大于 127的情况,叫做
浮点数的上溢。此刻,浮点数真正溢出,机器需停止运算,
作溢出中断处理。 一般说浮点溢出,均是指上溢。
可见,浮点机的溢出与否可由阶码的符号决定:
阶码 [j]补 =01,?????为上溢,机器停止运算,做中断处理;
阶码 [j]补 =10,?????为下溢,按机器零处理。
计算机组成原理 137
例,若某次加法操作的结果为 [X+Y]补 =11.010,00.0000110111
则应对其进行向左规格化操作:
尾数为,00.1101110000, 阶码减 4:
11.010
+ 11.100 [-4]补
10.110
例,若某次加法操作的结果为 [X+Y]补 =00.111,10.1011100111
则应对其进行向右规格化操作:
尾数为,11.0101110011, 阶码加 1,01.000
阶码超出了它所能表示的最大正数( +7),表明本次浮
点运算产生了溢出。
阶码超出了它所能表示的最小负数( -8),表明本次浮点
运算产生了溢出。
计算机组成原理 138
在加, 减运算过程中要检查是否产生了溢出:若阶码正常,
加减运算正常结束;若阶码溢出, 则要进行相应的处理 。
阶码上溢 ——超过了阶码可能表示的最大值的正指数值,一般
将其认为是+ ∞ 和- ∞ 。
阶码下溢 ——超过了阶码可能表示的最小值的负指数值,一般
将其认为是 0。
? 浮点数的溢出是以其阶码溢出表现出来的
? 对尾数的溢出也需要处理 (上溢 —右归,下溢 —舍入)。
小结:
计算机组成原理 139
计算机组成原理 140
例 设x =2010?0.11011011,y =2100 ?(-0.10101100),求x +y。
解,阶码采用双符号位,尾数采用单符号位,则它们的浮点表
示分别为 [x]浮 = 00 010,0.11011011
[y]浮 = 00 100,1.01010100
(1) 求阶差并对阶
△ E = Ex- Ey= [Ex]补 + [-Ey]补 = 00 010 + 11 100 = 11 110
[x]浮 = 00 100,0.00110110(11)
其中 (11)表示 Mx 右移 2位后移出的最低两位数。
即△ E为 -2,x的阶码小,应使 Mx右移两位,Ex加 2,
计算机组成原理 141
(2)尾数求和
(4) 舍入处理
采用 0舍 1入法处理,则有,
1.00010101
+ 1
1.00010110
0.00110110(11)
+ 1.01010100
1.10001010(11)
(3) 规格化处理
尾数运算结果的符号位与最高数值位为同值, 应执行左规处
理, 结果为 1.00010101(10),阶码为 00 011。
(5) 判断溢出
阶码符号位为 00,不溢出, 故得最终结果为
x + y = 2011 × (-0.11101010)
计算机组成原理 142
例 两浮点数 x = 201× 0.1101,y = 211× (-0.1010)。假
设尾数在计算机中以补码表示,可存储 4位尾数,2位保护
位,阶码以原码表示,求 x+y。
解,将 x,y转换成浮点数据格式
[x]浮 = 00 01,00.1101
[y]浮 = 00 11,11.0110
步骤 1:对阶,阶差为 11-01=10,即 2,因此将 x的尾数右移两位,得
[x]浮 = 00 11,00.001101
步骤 2:对尾数求和,得,
[x+y]浮 = 00 11,11.100101
步骤 3:由于符号位和第一位数相等,不是规格化数,向左规格化,得
[x+y]浮 = 00 10,11.001010
步骤 4:截去。
[x+y]浮 = 00 10,11.0010
步骤 5,数据无溢出,因此结果为
x+y = 210× (-0.1110)
计算机组成原理 143
浮点运算电路
浮点加法器原理框图
MES MES
小 ALU
大 ALU控制
右移
左移或右移
舍入部件
阶码差
加 1 或减 1
MES
1 1
1
0 0
0
计算机组成原理 144
浮点乘、除法运算
1.浮点乘法、除法运算规则
设有两个浮点数x和y,x= 2Ex·M x
y= 2Ey·M y
浮点乘法运算的规则是,x ?y= 2(Ex+ Ey) · (Mx? My)
即,乘积的尾数是相乘两数的尾数之积 ;
乘积的阶码是相乘两数的阶码之和。
浮点除法运算的规则是, x ÷ y= 2(Ex- Ey) · (Mx÷ My)
即:商的尾数是相除两数的尾数之商 ;
商的阶码是相除两数的阶码之差。
计算机组成原理 145
2,浮点乘、除法运算步骤
浮点数的乘除运算大体分为四步:
(1) 0 操作数检查;
(2) 阶码加 /减操作;
(3) 尾数乘 /除操作;
(4) 结果规格化及舍入处理。
计算机组成原理 146
(2) 浮点数的阶码运算
? 对阶码的运算有+ 1、- 1、两阶码求和、两阶码求差四种,
运算时还必须检查结果是否溢出。
? 在计算机中,阶码通常用补码或移码形式表示。
① 移码的运算规则和判定溢出的方法
移码的定义为 [x]移 = 2n +x - 2n ≤ x < 2n
[x]移 + [y]移 = 2n +x + 2n +y
= 2n +[x +y ]移
按此定义,则有
= 2n +(2n +(x +y ))
[x +y ]移 = -2n + [x]移 + [y]移
计算机组成原理 147
考虑到移码和补码的关系:
对同一个数值,其数值位完全相同,而符号位正好完全相反。
[y]补 的定义为 [y]补 = 2n+1 +y
则求阶码和用如下方式完成:
= 2n+1 + (2n +(x +y ))
[x]移 +[y]补 = 2n +x + 2n+1 +y
即,[x +y ]移 = [x]移 +[y]补 (mod 2n+1)
同理,[x -y ]移 = [x]移 +[-y]补 (mod 2n+1)
② 混合使用移码和补码
计算机组成原理 148
使用双符号位的阶码加法器,并规定移码的第二个符号位,
即最高符号位恒用 0 参加加减运算,则溢出条件是结果的最高
符号位为 1:
? 当低位符号位为 0时,( 10) 表明结果上溢,
? 当低位符号位为 1时,( 11) 表明结果下溢。
? 当最高符号位为 0时,表明没有溢出,
低位符号位为 1,( 01) 表明结果为正 ;
为 0,( 00) 表明结果为负。
③ 阶码运算结果溢出处理
计算机组成原理 149
例,x = +011,y = +110,求 [x+y]移 和 [x-y]移,并判断是否溢出 。
解:阶码取 3位(不含符号位),其对应的真值范围是 -8~+7
[x]移 = 01 011,[y]补 = 00 110,[-y]补 =11 010
[x+y]移 = [x]移 + [y]补 =
[x-y]移 = [x]移 + [-y]补 =
01 011
+ 00 110
10 001 结果上溢。
结果正确,为 -3。
01 011
+ 11 010
00 101
计算机组成原理 150
(3) 尾数处理
浮点加减法对结果的规格化及舍入处理也适用于浮点乘除法。
第一种方法是:
无条件地丢掉正常尾数最低位之后的全部数值。
这种办法被称为截断处理,好处是处理简单,缺点是影响结果
的精度。
第二种办法是:
运算过程中保留右移中移出的若干高位的值,最后再按某种规
则用这些位上的值修正尾数。
这种处理方法被称为 舍入处理 。
计算机组成原理 151
? 当尾数用原码表示时,
最简便的方法是,只要尾数的最低位为 1,或移出
的几位中有为 1的数值位,就使最低位的值为 1。
另一种是 0舍 1入法,即当丢失的最高位的值为 1时,
把这个 1加到最低数值位上进行修正,否则舍去丢失的
的各位的值。这样处理时,舍入效果对正数负数相同,
入将使数的绝对值变大,舍则使数的绝对值变小。
舍入处理
计算机组成原理 152
? 当尾数是用补码表示时,
采用 0舍 1入法时,若丢失的位不全为 0时:
对正数来说,舍入的结果与原码分析相同;
对负数来说,舍入的结果与原码分析相反,即“舍”使绝对
值变大,“入”使绝对值变小;为使原、补码舍入处理后的结果
相同,对 负数 可采用如下规则进行舍入处理:
当丢失的各位均为 0时,不必舍入;
当丢失的最高位为 0,以下各位不全为 0 时,或者丢失的最
高位为 1,以下各位均为 0时,则舍去丢失位上的值;
当丢失的最高位为 1,以下各位不全为 0 时,则执行在尾数最低位入 1的修正操作。
计算机组成原理 153
例 设 [x1]补 = 11.01100000,[x2]补 = 11.01100001,
[x3]补 = 11.01101000,[x4]补 = 11.01111001,求执行只保留
小数点后 4位有效数字的舍入操作值。
解, 执行舍入操作后,其结果值分别为
[x1]补 = 11.0110 (不舍不入 )
[x2]补 = 11.0110 (舍 )
[x3]补 = 11.0110 (舍 )
[x4]补 = 11.1000 (入 )
计算机组成原理 154
例 设有浮点数x =2- 5 ?0.0110011,y = 23 ? (-0.1110010),阶码
用 4位移码表示,尾数 (含符号位 )用 8位补码表示。求 [x ?y ]浮 。
要求用补码完成尾数乘法运算,运算结果尾数保留高 8位 (含符
号位 ),并用尾数低位字长值处理舍入操作。
解, 移码采用双符号位,尾数补码采用单符号位,则有
[Mx]补 = 0.0110011,[My]补 = 1.0001110,
Ex]移 = 00 011,[Ey]移 = 01 011,[Ey]补 = 00 011,
[x]浮 = 00 011,0.0110011,[y]浮 = 01 011,1.0001110
计算机组成原理 155
(2) 尾数乘法运算
可采用补码阵列乘法器实现,即有
(1) 求阶码和
[Ex+ Ey]移 = [Ex]移 + [Ey]补 = 00 011+ 00 011= 00 110,
值为移码形式 -2。
[Mx]补 ? [My]补 = [0.0110011]补 ? [1.0001110]补
= [1.1010010,1001010]补
计算机组成原理 156
(4) 舍入处理
(3) 规格化处理
乘积的尾数符号位与最高数值位符号相同,不是规格化的数,
需要左规,阶码变为 00 101(-3),尾数变为 1.0100101,0010100。
尾数为负数,取尾数高位字长,按舍入规则,舍去低位字长,
故尾数为 1.0100101 。
最终相乘结果为
其真值为 x ?y= 2- 3 ? (- 0.1011011)
[x ?y ]浮 = 00 101,1.0100101
计 算 机 组 成 原 理
第六 -八讲
2009年 11月 10日
计算机算法和算法逻辑实现
计算机组成原理 2
1,定点数加减法运算及电路实现
补码的加减法运算, 全加器, 溢出, 快速加法
运算 ( 进位链 ), 74181ALU
2,定点数乘除运算和电路实现
原码, 补码, 布斯算法, 原码恢复余数, 不恢
复余数
3,快速乘除法运算技术和电路实现
布斯高基乘法, 阵列乘法器, 阵列除法器
4,浮点数四则运算以及实现
加减乘除
本讲安排
计算机组成原理 3
本讲将解决的主要问题
掌握计算机算法 。
加减乘除运算方法和运算器的构成,
原码和补码的加减乘除四则运算,
浮点数的四则运算 。
计算机组成原理 4
补码加、减法
溢出概念与检测方法
基本的二进制加法 /减法器
十进制加法器
计算机组成原理 5
加法规则:
先判符号位,若相同,绝对值相加,结果符号不变 ; 若不
同,则作减法,|大 | - |小 |,结果符号与 |大 |相同。
减法规则:
两个原码表示的数相减,首先将减数符号取反,然后将被
减数与符号取反后的减数按原码加法进行运算。
补码加法
1.原码加 /减法运算
计算机组成原理 6
补码加法的公式,
[ x ]补 + [ y ]补 = [ x+ y ]补 (mod 2)
在模 2意义下,任意两数的补码之和等于该两数之和的补码 。
这是补码加法的理论基础。
2.补码加法运算
特点,不需要事先判断符号,符号位与码值位一起参加运算。
符号位相加后若有进位,则舍去该进位数字。
计算机组成原理 7
假设采用定点小数表示,因此证明的先决条件是,
︱ x︱ ﹤ 1,︱ y︱ ﹤ 1,︱ x+ y︱ ﹤ 1。
(1) x﹥ 0,y﹥ 0,则 x+ y﹥ 0。
相加两数都是正数,故其和也一定是正数。正数的补码和原
码是一样的,可得:
[ x ]补 + [ y ]补 = x+ y= [ x+ y ]补 (mod 2)
公式证明,
计算机组成原理 8
(2) x﹥ 0,y﹤ 0,则 x+ y>0 或 x+ y<0。
相加的两数一个为正,一个为负,因此相加结果有正、负两种
可能。根据补码定义,
∵ [x]补 = x,[ y]补 = 2+ y
∴ [x]补 + [ y]补 = x+ 2+ y= 2+ (x+ y)
当 x+y>0 时,2+ (x+y) > 2,进位 2必丢失,又因 (x+y)>0,
故 [x]补 + [ y]补 = x+ y= [ x+ y]补 (mod 2)
当 x+ y<0时,2 + (x+ y) < 2,又因 (x+y)<0,
故 [x]补 + [y]补 = 2+ (x+ y)= [x+ y]补 (mod 2)
计算机组成原理 9
(3) x<0,y>0,则 x+ y>0 或 x+ y<0。
同 (2),把 x 和 y 的位置对调即可。
(4) x<0,y<0,则 x+ y<0。
相加两数都是负数,则其和也一定是负数。
∵ [x]补 = 2+ x,[ y]补 = 2+ y
∴ [x]补 + [ y]补 = 2+ x+ 2+ y= 2+ (2+ x+ y)
因为 |x+ y|<1,1<(2+ x+ y)<2,2+ (2+ x+ y) 进位 2
必丢失,又因 x+y<0
故 [x]补 + [ y]补 = 2+ (x+ y)= [ x+ y]补 (mod 2)
计算机组成原理 10
至此证明了在模 2意义下,任意两数的补码之和等于该两
数之和的补码。
其结论也适用于定点整数。
补码加法的特点:
( 1)符号位要作为数的一部分一起参加运算;
( 2)在模 2的意义下相加,即大于 2的进位要丢掉。
结论:
计算机组成原理 11
例, x= 0.1001,y= 0.0101,求 x+ y。
解, [x]补 = 0.1001,[y]补 = 0.0101
[x]补 0.1001
+ [y]补 0.0101
[x+ y ]补 0.1110
所以 x+ y=+ 0.1110
例, x=+ 0.1011,y=- 0.0101,求 x+ y。
所以 x+ y= 0.0110
解, [x]补 = 0.1011,[y]补 = 1.1011
[x]补 0.1011
+ [y]补 1.1011
[x+ y]补 10.0110
计算机组成原理 12
补码减法
减法运算要设法化为加法完成
补码减法运算的公式:
[ x- y ]补 = [ x ]补 - [ y ]补 = [ x ]补 + [- y ]补
公式证明,只要证明 [–y]补 = –[ y]补,上式即得证。
∵ [x+ y]补 = [x]补 + [ y]补 (mod 2)
令 y= - x
∴ [0]补 = [x]补 + [ - x]补
故 [- x]补 =- [ x]补 (mod 2)
证明:
计算机组成原理 13
例, x=+ 0.1101,y=+ 0.0110,求 x- y。
解, [x]补 = 0.1101
[ y]补 = 0.0110,[- y]补 = 1.1010
[x]补 0.1101
+ [- y]补 1.1010
[x- y]补 10.0111
x- y=+ 0.0111
解, [x]补 =1.0011
[y]补 =1.1010 [-y]补 =0.0110
[x]补 1.0 0 1 1
+ [-y]补 0.0 1 1 0
[x-y]补 1.1 0 0 1
例, x= -0.1101,y= -0.0110,求 x-y=?
∴ x--y = -0.0111
计算机组成原理 14
溢出及与检测方法
在定点小数机器中,数的表示范围为 |x |<1。在运算过程中
如出现大于 1的现象,称为, 溢出, 。
机器定点小数表示
上溢下溢
1,概念
计算机组成原理 15
解, [x]补 =0.1011 [y]补 =0.1001
[x]补 0,1 0 1 1
+ [y]补 0,1 0 0 1
[x+y]补 1,0 1 0 0
两个正数相加的结果成为负数,这显然是错误的。
例, x=+0.1011,y=+0.1001,求 x+y。
例, x= -0.1101,y= -0.1011,求 x+y。
解, [x]补 =1.0011 [y]补 =1.0101
[x]补 1,0 0 1 1
+ [y]补 1,0 1 0 1
[x+y]补 0,1 0 0 0
两个负数相加的结果成为正数,这同样是错误的。
计算机组成原理 16
发生错误的原因,是因为运算结果产生了溢出。
两个正数相加, 结果大于机器所能表示的最大正数,称为上溢;
两个负数相加:结果小于机器所能表示的最小负数,称为下溢。
机器定点小数表示
上溢下溢
[分析 ],
计算机组成原理 17
2.溢出的检测方法
[x]补 0,1 0 1 1
+ [y]补 0,1 0 0 1
[x+y]补 1,0 1 0 0
[x]补 1,0 0 1 1
+ [y]补 1,0 1 0 1
[x+y]补 0,1 0 0 0
溢出逻辑表达式为:
V= S1 S2 Sc + S1 S2 Sc
(1) 单符号位法
FA
V
z0
y0
x0
判 断
电 路
判断电路
计算机组成原理 18
一个符号位只能表示正、负两种情况,当产生溢出时,符号
位的含义就会发生混乱。如果将符号位扩充为两位 (Sf1,Sf2),
其所能表示的信息量将随之扩大,既能判别是否溢出,又能指
出结果的符号。
(2) 双符号位法
双符号位法 也称为“变形补码”或“模 4补码” 。
变形补码定义:
[x]补 =
x 0? x<2
4+x -2? x<0 ( mod 4)
计算机组成原理 19
? 任何小于 1的正数,两个符号位都是,0‖,即 00.x1x2...xn;
? 任何大于 -1的负数:两个符号位都是,1‖,即 11.x1x2…x n
两数变形补码之和等于两数和的变形补码,要求:
? 两个符号位都看做数码一样参加运算;
? 两数进行以 4为模的加法,即最高符号位上产生的进位要丢掉
模 4补码加法公式,[x]补 +[ y]补 =[x+y]补 ( mod 4)
采用变形补码后数的表示:
计算机组成原理 20
Sf1Sf2 = 00 结果为正数,无溢出
01 结果正溢
10 结果负溢
11 结果为负数,无溢出
即,结果的两个符号位的代码不一致时,表示溢出 ;
两个符号位的代码一致时,表示没有溢出。
不管溢出与否,最高符号位永远表示结果的正确符号。
溢出逻辑表达式为,V= Sf1⊕ Sf2
中 Sf1和 Sf2分别为最高符号位和第二符号位,此逻辑表达式
可用异或门实现。
双符号位的含义如下:
计算机组成原理 21
解, [x]补 =00.1100 [y]补 =00.1000
[x]补 0 0,1 1 0 0
+ [y]补 0 0,1 0 0 0
0 1,0 1 0 0
符号位出现,01‖,表示已溢出,正溢。即结果大于 +1
例 x= +0.1100,y= +0.1000,求 x+y。
解, [x]补 =11.0100 [y]补 =11.1000
[x]补 1 1.0 1 0 0
+ [y]补 1 1.1 0 0 0
1 0,1 1 0 0
符号位出现,10‖,表示已溢出,负溢出。即结果小于 -1
例 x= -0.1100,y= -0.1000,求 x+y。
计算机组成原理 22
从上面例中看到:
当最高有效位有进位而符号位无进位时,产生上溢;
当最高有效位无进位而符号位有进位时,产生下溢。
(简单地说是正数相加为负数或负数相加为正数则产生溢出)
故溢出逻辑表达式为,V= Cf⊕ Co
其中 Cf为符号位产生的进位,Co为最高有效位产生的进位。
此逻辑表达式也可用异或门实现。
(3) 利用进位值的判别法
[x]补 0 0,1 1 0 0
+[y]补 0 0,1 0 0 0
0 1,1 0 0 0
[x]补 1 1.0 1 0 0
+[y]补 1 1.1 0 0 0
1 0.1 1 0 0
计算机组成原理 23
FA
FA
z1
z0
V
c1
c0
y1
x1
y0
x0
FA
FA
V
z 1
c0
c1
z0
x1
y1
y0
x0
V= C1⊕ CoV= Sf1⊕ Sf2
判断电路
计算机组成原理 24
基本的二进制加法 /减法器
加法运算,Ai + Bi + Ci = Si (Ci+1)
加数 进位输入 和 进位输出一位全加器真值表
输入 输出
Ai Bi Ci Si Ci+ 1
0 0 0 0 0
0 0 1 1 0
0 1 0 1 0
0 1 1 0 1
1 0 0 1 0
1 0 1 0 1
1 1 0 0 1
1 1 1 1 1
?
逻辑方程
Si= Ai⊕ Bi⊕ Ci
Ci+ 1= AiBi+ BiCi+ CiAi
1.一位全加器
计算机组成原理 25
逻辑方程
Si= Ai⊕ Bi⊕ Ci
Ci+ 1= AiBi+ BiCi+ CiAi
? 逻辑电路(一位全加器)
常用的全加器逻辑电路
F AC i+1 C i
S i
A i B i 逻辑符号
计算机组成原理 26
2.n位的行波进位加减器 n个 1位的全加器 (FA)可级联
成一个 n位的行波进位加减器。
计算机组成原理 27
T被定
义为相应
于单级逻
辑电路的
单位门延
迟。
T通常
采用一个
,与非,
门或一个
,或非,
门的时间
延迟来作
为度量单
位。
3TXNOR异或非
3TXOT异或
2TOR或
2TAND与
TNOT非
TNOR或非
TNAND与非
时间延迟逻辑符号(正逻辑)门的功能门的名称
典型门电路的逻辑符号和延迟时间
接线逻辑
(与或非 ) AOI T+TRC
3.n位的行波进位加法器的问题
时间延迟
计算机组成原理 28
(1)对 一位全加器 (FA)来说, Si的时间延迟为 6T(每级
异或门延迟 3T); Ci+ 1的时间延迟为 5T。
3T
3TT
T
计算机组成原理 29
(2) n位行波进位加法器 的延迟时间 ta为,
? 9T为 最低位上的两极, 异或, 门再加上溢出, 异或, 门的总时
间;
? 2T为每级进位链的延迟时间。
ta= n·2T+ 9T= (2n+ 9)T考虑溢出检测时,有:
当不考虑溢出检测时,有,ta= (n-1)·2T+ 9T
ta为在加法器的输入端输入加数和被加数后,在最坏的情况
下加法器输出端得到稳定的求和输出所需要的最长时间。
ta越小越好。
计算机组成原理 30
缺点,
(1)串行进位,它的运算时间长;
(2)只能完成加法和减法两种操作而不能完成逻辑操作。
多功能算术 /逻辑运算单元 (ALU):
不仅 具有多种算术运算和逻辑运算 的功能;
而且具有 先行进位 逻辑。
从而能实现高速运算。
由一位全加器 (FA)构成的行波进位加法器,
计算机组成原理 31
1.基本思想
Si= Ai⊕ Bi⊕ Ci
一位全加器 (FA)的逻辑表达式为,
(1)将 Ai和 Bi先组合成由控制参数 S0,S1,S2,S3控制的组合函数 Xi和 Yi;
(2)然后再将 Xi,Yi和下一位进位数通过全加器进行全加。
这样,不同的控制参数可以得到不同的组合函数,因而能够实现多种
算术运算和逻辑运算。
解决方案:
多功能算术 /逻辑运算单元 (ALU)
将全加器的功能扩展以完成多种算术逻辑运算。
Ci+ 1= AiBi · (Ci · (Ai⊕ Bi))
= AiBi+ BiCi+ CiAi
计算机组成原理 32
S0
S1
S2
S3
X0 Y0
参数 S0,S1,S2,S3 分别控制输入 Ai 和 Bi,
产生 Y和 X的函数。其中:
Yi是受 S0,S1控制的 Ai和 Bi的组合函数;
Xi是受 S2,S3控制的 Ai和 Bi组合函数。
函数关系如表所示。
Xi= S2S3+ S2S3(Ai+ Bi )+ S2S3 (Ai+ Bi )+ S2S3Ai
Yi= S0S1Ai+ S0S1AiBi+ S0S1AiBi
? 核心部分是由两个半加器组成的全加器 。
? 由 M控制第二级半加器选择逻辑运算或
算术运算(所需的低位进位 Cn) 。
一位 ALU基本逻辑电路
计算机组成原理 33
S0 S1 Yi S2 S3 Xi
0 0
0 1
1 0
1 1
Ai
AiBi
AiBi
0
0 0
0 1
1 0
1 1
1
Ai+ Bi
Ai+ Bi
Ai
进一步化简,
Xi = S3AiBi + S2AiBi
Yi = Ai + S0Bi + S1Bi
Ai + S0Bi + S1BiS3AiBi + S2AiBi XiYi = ? = Yi
Fi= Yi⊕ Xi⊕ Cn+i
Cn+ i+ 1= Yi+ XiCn+ i
计算机组成原理 34
综上所述,ALU的 一位逻辑 表达式为:
Xi = S3AiBi + S2AiBi
Yi = Ai + S0Bi + S1Bi
Fi= Yi⊕ Xi⊕ Cn+i
Cn+ i+ 1= Yi+ XiCn+ i
计算机组成原理 35
4位之间采用先行进位(并行进位)公式。
根据 Cn+ i+ 1= Yi+ XiCn+ i, 每一位的进位公式可 递推 如下:
? 第 0位向第 1位的进位公式为,
Cn+ 1= Y0+ X0Cn (其中 Cn是向第 0位(末位)的进位 )
? 第 1位向第 2位的进位公式为,
Cn+ 2= Y1+ X1Cn+ 1= Y1+ Y0X1+ X0X1Cn
? 第 2位向第 3位的进位公式为,
Cn+ 3= Y2+ X2Cn+ 2= Y2+ Y1X1+ Y0X1X2+ X0X1X2Cn
? 第 3位的进位输出(即整个 4位运算进位输出)公式为,
Cn+ 4 =Y3+X3Cn+ 3
=Y3+Y2X3+Y1X2X3+Y0X1X2X3+X0X1X2X3Cn
4位 ALU的进位关系及逻辑电路
计算机组成原理 36
Cn+ 1= Y0+ X0Cn
Cn+ 2= Y1+ X1Cn+ 1= Y1+ Y0X1+ X0X1Cn
Cn+ 3= Y2+ X2Cn+ 2= Y2+ Y1X1+ Y0X1X2+ X0X1X2Cn
Cn+ 4 =Y3+X3Cn+ 3
=Y3+Y2X3+Y1X2X3+Y0X1X2X3+X0X1X2X3Cn
Cn+4是最后进位输出。
逻辑表达式表明,这是一个先行进位逻辑。换句话说,第 0位
的进位输入 Cn可以直接传送到最高位上去,因而可以实现高速
运算。
下图为用上述原始推导公式实现的 4位算术 /逻辑运算单元
(ALU)
——74181ALU
从进位关系上看
计算机组成原理 37
X0 Y0X1 Y1X
2 Y2X3 Y3
正逻辑表示的 74181
计算机组成原理 38
第 3位的进位输出(即整个 4位运算进位输出)公式为,
Cn+ 4 =Y3+X3Cn+ 3
=Y3+Y2X3+Y1X2X3+Y0X1X2X3+X0X1X2X3Cn
设 G= Y3+ Y2X3+ Y1X2X3+ Y0X1X2X3
P= X0X1X2X3
则 Cn+ 4= G+ PCn
其中 G称为 进位发生输出,P称为 进位传送输出 。
在电路中多加这两个进位输出的目的,是为了便于实现多片
(组) ALU之间的先行进位。
P和 G的含义
计算机组成原理 39
负逻辑表示的 74181
X0 Y0X1 Y1X
2 Y2X3 Y3
计算机组成原理 40
2.算术逻辑运算的实现
上图中控制端 M 用来控制 ALU进行算术运算还是进行逻辑运算,
M = 0时:
M 对进位信号没有任何影响。此时 Fi不仅与本位的被操作数
Yi 和操作数 Xi 有关,而且与向本位的进位值 Cn+i 有关,因此 M =
0时,进行 算术操作 。
M = 1时:
封锁了各位的进位输出,即 Cn+i = 0,因此各位的运算结果 Fi
仅与 Yi 和 Xi 有关,故 M = 1时,进行 逻辑操作 。
计算机组成原理 41
下图为工作于负逻辑和正逻辑操作方式的 74181ALU方框图。
两种操作是等效的。
? 对正逻辑操作数来说:
算术运算称高电平操作;
逻辑运算称正逻辑操作
(即高电平为,1‖,低电平为
,0‖)。
? 对于负逻辑操作数来说,
正好相反。
计算机组成原理 42
A
A+ B
A+ B
减 1
A加 AB
( A+B)加 AB
A减 B减 1
AB减 1
A加 AB
A加 B
( A+B)加 AB
AB减 1
A加 A*
( A+B)加 A
( A+B)加 A
A减 1
A
A+ B
A B
逻辑 0
A B
B
A B
A B
A+ B
A B
B
A B
逻辑 1
A+ B
A+ B
A
A减 1
AB减 1
AB减 1
减 1
A加( A+B) AB
加( A+B)
A减 B减 1
A+ B
A加( A+B)
A加 B
AB加( A+B)
A+ B
A加 A*
AB加 A
AB加 A
A
A
A B
A+ B
逻辑 1
A+ B
B
A B
A+ B
A B
A B
B
A+ B
逻辑 0
A B
A B
A
L L L L
L L L H
L L H L
L L H H
L H L L
L H L H
L H H L
L H H H
H L L L
H L L H
H L H L
H L H H
H H L L
H H L H
H H H L
H H H H
算术运算
M=L Cn =H
逻辑 M=H算术运算
M=L Cn =L
逻辑 M=H
正逻辑输入与输出负逻辑输入与输出工作方式
选择输入
S3 S2 S1 S0
计算机组成原理 43
(1) H=高电平,L=低电平;
(2) *表示每一位均移到下一个更高位,即 A*= 2A。
(3) 算术运算操作是用补码表示法来表示的,其中:
,加, 是指算术加,运算时要考虑进位;
符号, +, 是指, 逻辑加, 。
(4) 减法是用补码方法进行的,其中数的反码是内部产生的,
而结果输出, A减 B减 1‖,因此做减法时需在最末位产生一个强
迫进位 (加 1),以便产生, A减 B‖的结果。
(5) ―A= B‖输出端可指示两个数是否相等;
计算机组成原理 44
3.并行加法器的进位逻辑
74181ALU为 4位并行加法器,
组成 16位的并行加法器 ——怎么办?
4片 (组 )74181连接 ——怎样连?
? 组与组之间串行连接
? 组与组之间并行连接
计算机组成原理 45
(1)组间串行进位
C4= G0+ P0 C0
C8= G1+ P1 C4
C12= G2+ P2 C8
C16= G3+ P3 C12
进位关系
Cn+ 1= Y0+ X0Cn
Cn+ 2= Y1+ X1Cn+ 1= Y1+ Y0X1+ X0X1Cn
Cn+ 3= Y2+ X2Cn+ 2= Y2+ Y1X1+ Y0X1X2+ X0X1X2Cn
Cn+ 4 =Y3+X3Cn+ 3 =Y3+Y2X3+Y1X2X3+Y0X1X2X3+X0X1X2X3Cn
组内 组间
X0 Y0X1Y1X2Y
2
X3Y
3
X0 Y0X1Y1X2Y
2
X3Y
3
C4C8
C4 C00
0
1
1
G= Y3+ Y2X3+ Y1X2X3+ Y0X1X2X3
P= X0X1X2X3
计算机组成原理 46
(2)组间并行进位 ——两级先行进位的 ALU
由串行进位关系
C8 = G1+ P1 C4 = G1 + P1 (G0+ P0 C0 ) = G1+G0P1+P0P1C0
得:
C4= G0+ P0 C0
C8= G1+ P1 C4
C12= G2+ P2 C8
C16= G3+ P3 C12
C4 = G0+ P0 C0
C12= G2+ P2 C8 = G2 + P2 (G1+G0P1+P0P1Cn) = G2+G1P2+G0P1P2+P0P1P2C0
C16 = G3+P3C12 = G3+G2P3+G1P1P2+G0P1P2P3+P0P1P2P3C0 = G*+ P*C0
其中, P*= P0P1P2P3
G*= G3+ G2P3+ G1P1P2+ G0P1P2P3
根据上述公式实现逻辑电路,
计算机组成原理 47
X0
Y0
X1
Y1
X
2
Y
2
X
3
Y
3
C12 C8 C4
X0
Y0
X1
Y1
X2
Y2
X3
Y3
X0
Y0
X1
Y1
X
2
Y
2
X
3
Y
3
0
计算机组成原理 48
4.先行进位部件( CLA) ——74182
74182是一个并行进位部件,其内部结构图如下:
其中 G*称为 成组进位发生输出, P*称为 成组进位传送输出 。
计算机组成原理 49
Cn+x = G0+P0Cn
Cn+y = G1+P1Cn+x = G1+G0P1+P0P1Cn
Cn+z = G2+P2Cn+y = G2+G1P2+G0P1P2+P0P1P2Cn
Cn+ 4 = G3+P3Cn+z = G3+G2P3+G1P1P2+G0P1P2P3+P0P1P2P3Cn
= G*+ P*Cn
其中, P*= P0P1P2P3
G*= G3+ G2P3+ G1P1P2+ G0P1P2P3
先行进位部件 74182CLA所提供的进位逻辑关系如下:
计算机组成原理 50
74181ALU设置了 P和 G两个本组先行进位输出端。
如果将四片 74181的 P,G输出端送入到 74182先行进位部件
( CLA),又可实现第二级的先行进位,即组与组之间的先行进位。
例,16位字长 ALU的构成
G* P*
计算机组成原理 51
? C3,C7,C11是由 74182同时形成的;
? 其不同点是 74182还提供大组间的进位函数 G* 和大
组传递条件 P*,以便在位数更长时组成下一级先行进
位链。
由图可知:
计算机组成原理 52
用若干个 74181ALU位片,与配套的 74182先行进位部件 CLA
在一起,可构成一个全字长的 ALU。
例:全字长的 ALU的构成
用两个 16位全先行进位部件级联组成的 32位 ALU逻辑方框图。
计算机组成原理 53
十进制加法器
十进制加法器可由 BCD码 (二 -十进制码 )来设计,它可以在二
进制加法器的基础上加上适当的,校正”逻辑 来实现。
7 0 1 1 1
+ 6 + 0 1 1 0
1 3 1 1 0 1 ( = D)
+ 0 1 1 0
1 0 0 1 1 ( = 13)
3 0 0 1 1
+ 5 + 0 1 0 18 1 0 0 0 ( =8)X+Y+C<10不调整
X+Y+C>10
调整
计算机组成原理 54
故:
1,和为 10~ 15时,加 6校正;
2,和数有进位时,加 6校正。
和数 (4位 )
有进位
调整
28 0010 1000
+ 9 + 0000 1001
37 0011 0001 ( =31)
+ 0000 0110
0011 0111 (=37)
计算机组成原理 55
1.一位 BCD码行波式进位加法器一般结构:
0 1 1
1010
1011
1100
1101
1110
1111
计算机组成原理 56
2.n位 BCD码行波式进位加法器一般结构:
计算机组成原理 57
原码乘法
补码乘法
定点乘法运算
计算机组成原理 58
设 n位 被乘数和乘数用定点小数表示
被乘数 [x]原 = xf, xn- 1… x 1x0
乘数 [y]原 = yf, yn- 1… y 1y0
则乘积
[z]原 = (xf⊕ yf)+ (0,xn- 1… x 1x0)(0,yn- 1… y 1y0)
式中, xf为被乘数符号,
yf为乘数符号 。
原码一位乘法
1,乘法的手工算法
计算机组成原理 59
(2) 手工运算过程:
设 x = 0.1101,y = 0.1011
0,1 1 0 1 (x)
0,1 0 1 1 (y)
1 1 0 1
1 1 0 1
0 0 0 0
+ 1 1 0 1
0,1 0 0 0 1 1 1 1 (z)
(1)乘积符号的运算规则,同号相乘为正, 异号相乘为负 。
计算机组成原理 60
(1) 机器通常只有 n位长,两个 n位数相乘,乘积可能为 2n位。
(2) 只有两个操作数相加的加法器难以胜任将 n位积 一次相加
起来的运算。
机器与人们习惯的算法不同之处:
0.1 1 0 1 x
× 0.1 0 1 1 y
0.0 0 0 0 1 1 0 1 x共 4次右移
0.0 0 0 1 1 0 1 x共 3次右移
0.0 0 0 0 0 0 x共 2次右移
+ 0.0 1 1 0 1 x共 1次右移
0.1 0 0 0 1 1 1 1
2,适合定点机的形式
计算机组成原理 61
为了适合两个操作数相加的加法器,将 x?y 改写成下面形式:
x?y = x?(0.1011)
= 0.1?x + 0.00 ?x + 0.001 ?x + 0.0001 ?x
= 0.1 ? { x+0.1[ 0 + 0.1 ?(x+0.1 ?x) ] }
= 2-1 { x+ 2-1 [0 + 2-1(x+2-1x) ] }
根据此式,按式中括号可表达的层次,从内向外 逐次
进行移位累加。
计算机组成原理 62
一般而言,设被乘数 x,乘数 y都是小于 1的 n位定点正数,
x=0.x1x2......xn <1
y=0.y1y2......yn <1
其乘积为:
x·y=x(0.y1y2......yn )
=x(y12-1 +y22-2 +… + yn2-n )
= 2-1(y1x+2-1(y2x+2-1(… +2-1(yn-1x+2-1(ynx+0))… )))
计算机组成原理 63
形成 递推公式
令 zi表示第 i次部分积, 则根据从内到外的原则有:
z0 = 0,
z1 = 2-1(ynx+z0)
z2 = 2-1(yn-1x+z1)
┊
zi = 2-1(yn-i+1x+zi-1)
┊
zn = x?y = 2-1(y1x+ zn-1)
特点,每次只需要相加两个数, 然后右移一位 。 且相加的两个
数 ( 部分积和位积 ) 都只有 n位, 因而不需要 2n位的加法器 。
计算机组成原理 64
3.原码一位乘法
流程图
开始
zi = 0,i=0
yn= 1?
zi + 0 zi+ x
zi,y右移一位, i = i+1
i = n?
结束
y
y
n
n
计算机组成原理 65
部分积 乘数 说明
最后结果, x?y=0.10001111
0 0.0 0 0 0 yf 1 0 1 1 z0=0
+ 0 0.1 1 0 1 y4=1,+x
0 0.1 1 0 1
? 0 0.0 1 1 0 1 yf 1 0 1 右移, 得 z1
+ 0 0.1 1 0 1 y3=1,+x
0 1.0 0 1 1
? 0 0.1 0 0 1 1 1 yf 1 0 右移, 得 z2
+ 0 0.0 0 0 0 y2=0,+0
0 0.1 0 0 1
? 0 0.0 1 0 0 1 1 1 yf 1 右移, 得 z3
+ 0 0.1 1 0 1 y1=1,+x
0 1.0 0 0 1
? 0 0.1 0 0 0 1 1 1 1 yf 右移, 得 z4=x?y
例, x=0.1101,y=0.1011,求 x·y 。
计算机组成原理 66
4.原码一位乘硬件逻辑原理图
R0→ R1→ yn
R2
计数器 i
部分积 z
被乘数 x
乘数 y
LDR0 LDR1
T1,T2,…
Ti
加法器
R
S
启动yn Cx
计数器,对移位的次数进行计数,以便判断乘法运算是否结束。
当计数器 i=n时,计数器 i的溢出信号使控制触发器 Cx
置 0,关闭时序脉冲 T,乘法操作结束。
计算机组成原理 67
原码一位乘法的主要问题是,符号位不能参与运算,
而 补码乘法可以实现符号位直接参与运算 。
2 补码一位乘法
1.原码一位乘的缺点
2.补码一位乘法的规律推导
采用比较法。比较法是 Booth夫妇首先提出来的,
又称 Booth算法。
计算机组成原理 68
设 [x]补 = x0.x1x2… xn
当 x?0时,
x0=0,
Booth算法
?
?
?
n
i
i
ix
1
2
[x]补 =0.x1x2… xn = = x
?
?
?
n
i
i
ix
1
2
= -1+ 0.x1x2… xn= -1+
?
?
?
n
i
i
ix
1
2x = -x0 +
真值与补码的关系:
当 x?0时,
x0=1,[x]补 =1.x1x2… xn = 2 + x
x=1.x1x2… xn-2
(1)真值和补码之间的关系
计算机组成原理 69
在补码机器中, 一个数不论其正负, 连同符号位向右移一
位, 符号位保持不变, 就等于乘 1/2。
设 [x]补 = x0.x1x2… xn
?
?
?
n
i
i
ix
1
2
∵ x = -x0 +
∴ x = - x0 +12 12 12 ?
?
?
n
i
i
ix
1
2
= -x0 + x0 + 12 12 ?
?
?
n
i
i
ix
1
2
= -x0 + ?
?
??
n
i
)i(
ix
0
12
写成补码的形式, 即得:
要得到 [2-ix]补,连同符号位右移 i位即可
(2) 补码的右移
1
2[ x ]补 = x0.x0x1x2… xn
计算机组成原理 70
设被乘数 [x]补 = x0.x1x2… xn
乘数 [y]补 = y0.y1y2… yn
均为任意符号, 则有补码乘法算式:
[ x·y ]补 = [x]补 · y
或,[ x·y ]补 = [x]补 · ?
?
???
n
i
i
i ]yy[
1
0 2
(3) 补码乘法规则
计算机组成原理 71
1)、当被乘数 x符号任意,乘数 y符号为正时:
根据补码定义:
?? yyyy.]y[ nL210补
)(modxxxxx.x]x[ nn ????? ?L 1210 222补
yx)yyy(yxy]y[]x[ nn ???????? ? ?211 22补补∴
由于( y1y2… yn)是大于或等于 1的正整数,根据模运算性质(大于
2的部分全部丢掉)有,2 (y1y2… yn) = 2
补补补 ]yx[yx]y[]x[ ?????? 2
∴ (mod2)
即,y]x[]y[]x[]yx[ ?????
补补补补
公式证明
计算机组成原理 72
2),当被乘数 x符号任意,乘数 y符号为负时:
)(modyyyy.]y[ n 221 21 ??? L补
xxx.x]x[ n210? L补
10212 2121 ?????? nn yyy.yyy.]y[y LL补∵
x)yyy.(x)yyy.(xyx nn ????? LL 2121 010∴
补补补 ]x[)]yyy.0(x[]yx[ n21 ??? L
)yyy.(]x[)]yyy.(x[ nn LL 2121 00 补补 ?
补补补 ]x[)yyy.0(]x[]yx[ n21 ??? L
又因 ( 0.y1y2…y n )>0
所以:
计算机组成原理 73
补补补 ]x[)yyy.(]x[]yx[ n ???? ?210
)yyy.(]x[ n 10 21 ??? ?补
(mod2)
?
?
???
n
i
i
i ]yy[
1
0 2
= [x]补 ·
= [x]补 · y
计算机组成原理 74
为推导出逻辑实现的分步算法,将上式展开得到各项部分积
累加的形式。
( yn+1是增加的附加位,初值为 0 )
补][ yx?
)(][ nnyyyyx ??? ?????? 222 22110 ?补
)]()()([][ )( nnnn yyyyyyyx ?????? ????????? 22222 122121110 ?补
])()()()[(][ )( nnnnn yyyyyyyx ????? ????????? 2022 1111201 ?补
])()()[(][ nnn yyyyyyx ??? ??????? 22 111201 ?补
?
?
?
? ???
n
i
i
ii yyx
0
1 2)(][ 补
公式展开
计算机组成原理 75
将上式改为接近于分步运算逻辑实现的递推关系。
补]z[ 0 0?
补补补 }]x)[yy(]z{[]z[ nn 121
12 ???
?
?
补补补 }]x)[yy(]z{[]z[ ininii 121
12 ???
?????
?
补补补 }]x)[yy(]z{[]z[ nn 11
1
1 2 ??? ?
?
补补补 }]x)[yy(]z{[]z[ nn 10
1
1 2 ??? ?
?
M
M
递推公式
补补补补 ]x)[yy(]z[]z[]yx[ nn 011 ???? ?·
最后一步不移位
计算机组成原理 76
由此可见:
每次都是在前次部分积的基础上,由 ( yi+1-yi ) 决定对 [x]补
的操作,然后再右移一位,得到新的部分积;重复进行。
yn+1,yn的作用:
开始操作时,补充一位 yn+1,使其初始为 0。由 yn+1 yn 判断进
行什么操作;然后再由 ynyn-1 判断第二步进行什么操作 … 。
若 yn yn+ 1 =0 1 则 yi+ 1-yi =1 做加 [x]补运算;
ynyn+ 1 =10 则 yi+ 1-yi= -1 做加 [-x]补运算 ;
ynyn+ 1 =1 1
ynyn+ 1= 00
则 yi+ 1-yi= 0 [zi]加 0,即保持不变;
计算机组成原理 77
补码一位乘的运算规则
(1) 如果 yn=yn+1,则部分积 [zi] 加 0,再右移一位;
(2) 如果 yn yn+1=01,则部分积 [zi] 加 [x]补,再右移一位;
(2) 如果 yn yn+1=10,则部分积 [zi] 加 [-x]补,再右移一位;
如此重复 n + 1步, 但最后一步不移位 。
包括一位符号位, 所得 乘积为 2n+1位, 其中 n为尾数位数 。
计算机组成原理 78
算法流程图 开始
结束
[zi]补 +[x]补 → [zi]补 [zi]补 +[-x]补 → [zi]补
[z]补 =0,i=0
yn yn+1=?
[zi]补 不变
i=n+1
?
[zi]补,y右移一位, i=i+1
01 10
01或 11
Y
N
计算机组成原理 79
0 0.0 0 0 0 1,0 0 1 1 0 yn+1=0
+ 0 0.1 0 1 1 ynyn+1=10,加 [-x]补
0 0.1 0 1 1
?0 0.0 1 0 1 1 1 0 0 1 1 右移一位
+ 0 0.0 0 0 0 ynyn+1=11,加 0
0 0.0 1 0 1
?0 0.0 0 1 0 1 1 1 0 0 1 右移一位
+ 1 1.0 1 0 1 ynyn+1=01,加 [x]补
1 1.0 1 1 1
?1 1.1 0 1 1 1 1 1 1 0 0 右移一位
+ 0 0.0 0 0 0 ynyn+1=00,加 0
1 1.1 0 1 1
?1 1.1 1 0 1 1 1 1 1 1 0 右移一位
+ 0 0.1 0 1 1 ynyn+1=10,加 [-x]补
0 0.1 0 0 0 1 1 1 1 1 0 最后一位不移位
例, [x]补 =1.0101,[y]补 =1.0011,求 [x·y]补 =? [-x]补 =0.1011
[x·y]补 =0.10001111
部分积 乘数 yn yn+1 说明
计算机组成原理 80
0 0 0 0 0 0 1 0 1 1 0 0 yn+1=0
+ 0 0 0 0 0 0 ynyn+1=00,加 0
0 0 0 0 0 0
?0 0 0 0 0 0 0 1 0 1 1 0 右移一位
+ 1 1 0 0 1 1 ynyn+1=10,加 [-x]补
1 1 0 0 1 1
?1 1 1 0 0 1 1 0 1 0 1 1 右移一位
+ 0 0 0 0 0 0 ynyn+1=11,加 0
1 1.1 0 0 1
?1 1.1 1 0 0 1 1 0 1 0 1 右移一位
+ 0 0 1 1 0 1 ynyn+1=01,加 [x]补
0 0 1 0 0 1
?0 0 0 1 0 0 1 1 1 0 1 0 右移一位
+ 1 1 0 0 1 1 ynyn+1=10,加 [-x]补
1 1 0 1 1 1 1 1 1 0 1 0 最后一位不移位
[x]补 =001101,[y]补 =10110,[-x]补 =110011
[x·y]补 =101111110
部分积 乘数 yn yn+1 说明
例, x=13,y=-10 求 x·y =?
x·y = -01000 0010=-82H=-130
计算机组成原理 81
4.补码一位乘逻辑原理图
R0→ R1 → ynyn+1
R2
计数器 i
部分积 z
被乘数 x
乘数 y
+1
LDR0 LDR1 T1,T2,… +1
Ti
加法器
R
S
启动Cx
?f
+ -
yn+1
yn
yn+1
yn
多开关路
原 反 1001
计算机组成原理 82
[注 ]
(1) 被乘数寄存器 R2的每一位用原码(触发器 Q端)或
反码(触发器 Q端)经多路开关送出;送 [-x]补 时,
即送 R2反码且在加法器最末为加 1;
(2) R0保存部分积,其符号与加法器符号位 ?f始终一致。
(3) 当计数器 i=n+1时,封锁 LDR1,LDR0信号,使最后
一步不移位。
计算机组成原理 83
高基乘法
以上讨论的乘法都只是检查一位二进制位。
能否同时检查 K位二进制位?以 K=2,C=A × B为例
如果这两位二进制位为 00,则加 0
如果这两位二进制位为 01,则加 A
如果这两位二进制位为 10,则加 2A
如果这两位二进制位为 11,则加 3A
2A=4A —2A
3A=4A —A
如果这两位二进制位为 11,则减 A,4A待下一次补上,由
于部分积已右移两位,原来加 4A变成加 A
如何知道有 4A的操作哪?
两位二进制位为 10或 11,则加 4A
计算机组成原理 84
B的低两位 前次移出
的 位
运算 注释
2i+1 2i 2i-1
0 0 0 0 +0+0
0 0 1 +A +0+A
0 1 0 +A +A+0
0 1 1 +2A +A+A
1 0 0 -2A +4A-2A+0
1 0 1 -A +4A-2A+A
1 1 0 -A +4A-A+0
1 1 1 0 +4A-A+A
Booth 4基乘法算法
计算机组成原理 85
例,A=011011,B=011001,计算 C=A × B 。
0 0 0 0 0 0 0 1 0 1 0 0 1 0 010,加 [A]补
+ 1 1 1 0 0 1 0
1 1 1 0 0 1 0
?1 1 1 1 1 0 0 1 0 1 0 1 0 0 算术右移两位
+ 0 0 1 1 1 0 0 100,加 [-2A]补
0 0 1 1 0 0 0
?0 0 0 0 1 1 0 0 0 1 0 1 0 1 算术右移两位
+ 0 0 0 1 1 1 0 101,加 [-A]补
0 0 1 0 1 0 0
?0 0 0 0 1 0 1 0 0 0 0 1 0 1 算术右移两位
解,[A]补 =1 0010,[B]补 =1 1001,[-A]补 =0001110 [-2A]补 =0011100
[A·B]补 =0 0 0 0 1 0 1 0 0 0 0 1 0
部分积 乘数 yn-1 yn yn+1 说明
A·B =0 0001 0100 0010 =142H =322D
例,A=-14,B=-23,求 A·B =?
计算机组成原理 86
1.串行加法器的优劣分析
? 不需要很多器件,硬件结构简单;
? 速度太慢,执行一次乘法操作的时间至少是加法操
作的 n倍;
由于乘法操作大约占全部算术运算的 1/3,故采用高速乘法
部件是非常必要的。
高速乘法部件 ---阵列乘法器
计算机组成原理 87
2.不带符号的阵列乘法器
设有两个不带符号的二进制整数 A= am- 1…a 1a0,B= bn- 1…b 1b0
它们的数值分别为 a和 b,即:
? ? ? ?? ?
?
?
?
?
?
??
?
?
?
?
????
1
0
1
0
1
0
1
0
1
0
22)()2()2(
n
j
m
i
n
j
nm
k
k
k
ji
ji
j
j
m
i
i
i pbabaabp
m-1a = ∑ a
i2ii= 0
n-1b = ∑ b
j2jj= 0
在二进制乘法中,被乘数 A与乘数 B相乘,产生 m+ n位乘积 P:
P= pm+ n- 1…p 1p0 乘积 P 的数值为,
计算机组成原理 88
am-1 am-2 ·· a1 a0
?) bn-1 ·· b1 b0
am-1b0 am-2b0 ·· a1b0 a0b0
am-1b1 am-2b1 ·· a1b1 a0b1
.,.,
.,
+) am-1bn-1 am-2bn-1 ·· a1bn-1 a0bn-1
pm+n-1 pm+n-2 pm+n-3 ··· pn-1 ·· p1 p0
(1) 习惯方法运算过程:
计算机组成原理 89
计算机组成原理 90
3.带符号的阵列乘法器
(1) 对 2求补器电路
例 1,对 1010求补。
1 0 1 0 —— 0 1 0 1
1
0 1 1 0
例 2,对 1011求补。
1 0 1 1 —— 0 1 0 0
1
0 1 0 1
方法:
从数的最右端 a0开始,由右向左,直到找出第一个,1‖,例如 ai= 1,
0≤ i≤ n。这样,ai以左的每一个输入位都求反,即 1变 0,0变 1。
计算机组成原理 91
1 0 1 0
0 1 1 0
1
对 2求补电路
计算机组成原理 92
(2) 带符号的阵列乘法器
计算机组成原理 93
包括求补级的乘法器又称为 符号求补的阵列乘法器。
在这种逻辑结构中,共使用三个求补器,
? 两个算前求补器
作用是,将两个操作数 A和 B在被不带符号的乘法
阵列 (核心部件 )相乘以前,先变成正整数。
? 算后求补器
作用则是,当两个输入操作数的符号不一致时,
把运算结果变成带符号的数。
结构,
在必要的求补操作以后,A和 B的码值输送给 n× n
位不带符号的阵列乘法器,并由此产生 2n位的乘积,
A·B= P= p2n- 1… p1p0 p2n= an⊕ bn
其中 P2n为符号位。
计算机组成原理 94
原码一位除法
补码一位除法
并行除法器
定点除法运算
计算机组成原理 95
被除数 x,其原码为 [x]原 = xf, xn- 1… x 1 x0
除数 y,其原码为 [y]原 = yf, yn- 1… y 1 y0
则有商 q=x /y,其原码为
[q]原 = (xf⊕ yf) + (0,xn- 1…x 1x0 / 0.yn- 1… y 1y0)
? 商的符号运算 qf= xf⊕ yf 与原码乘法一样 ;
? 商的数值部分的运算,实质上是两个正数求商的运算。
原码一位除法
设有 n位定点小数:
计算机组成原理 96
1.手算运算步骤
例, 设被除数 x=0.1001,除数 y=0.1011,仿十进制除法运算,
手算求 x÷ y的过程。
0.1 1 0 1 商 q
0.1 0 1 1 0.1 0 0 1 0 x (r0) 被除数小于除数,商 0
- 0.0 1 0 1 1 2- 1y 除数右移 1位,减除数,商 1
0.0 0 1 1 1 0 r1 得余数 r1
- 0.0 0 1 0 1 1 2- 2y 除数右移 1位,减除数,商 1
0.0 0 0 0 1 1 0 r2 得余数 r2
- 0.0 0 0 1 0 1 1 2- 3y 除数右移 1位,不减除数,商 0
0.0 0 0 0 1 1 0 0 r3 得余数 r3
- 0.0 0 0 0 1 0 1 1 2- 4y 除数右移 1位,减除数,商 1
- 0.0 0 0 0 0 0 0 1 r4 得余数 r4
得 x ÷ y 的商 q= 0.1101,余数为 r= 0.00000001。
计算机组成原理 97
2.机器运算与手算的不同
(1) 在计算机中,小数点是固定的,不能简单地采用手算的办法。
为便于机器操作,除数 Y固定不变,被除数和余数进行 左移
(相当于乘 2)
计算机组成原理 98
原码一位除法
结果与手算相同, 但余数不是真正的余数, 多乘了 2n,故正确的余数应
为 2-n× rn,即,0.00000001
00.0001 第四次余数 r4
? 01.0010 被除数左移一位,2x>y,商 1
+ 11.0101 减 y,即 +[-y]补
00.0111 第一次余数 r1
? 00.1110 r1左移一位, 2r1>y,商 1
+ 11.0101 减 y
00.0011 第二次余数 r2
? 00.0110 r2左移一位, 2r2<y,商 0
? 00.1100 r3左移一位, 2r3=4r2>y,商 1
+ 11.0101 减 y
00.1011 00.1001 x<y,商 0
00.1101 x=0.1001,y=0.1011,[-y]补 =1.0101
计算机组成原理 99
(2) 机器不会心算,必须先作减法,若余数为正,才知道够减;若
余数为负,才知道不够减。不够减时必须恢复原来的余数,
以便再继续往下运算。这种方法称为 恢复余数法 。
(3) 要恢复原来的余数,只要当前的余数加上除数即可。但由于
要恢复余数,使除法进行过程的步数不固定,因此控制比较
复杂。
实际中常用不恢复余数法,又称 加减交替法 。其特点是
运算过程中如出现不够减,则不必恢复余数,根据余数符号,
可以继续往下运算,因此步数固定,控制简单。
机器运算与手算的不同
计算机组成原理 100
3.恢复余数法
被除数减除数,够减时,商 1;不够减时商 0。
由于商0时若不够减,即不能作减法,但现在在判断是否
商0时,已经减了除数,为了下次能正确运算,必须把已减掉
的除数加回去恢复余数。这就是, 恢复余数法, 。
【 例 1】 x=0.1001,y=0.1011,用恢复余数法求 x/y.
解,[x]原 =[x]补 = x=0,1001,
[y]补 =0.1011,[-y]补 =1.0101
计算机组成原理 101
0 0.1 0 0 1
+[-y]补 1 1.0 1 0 1 x减 y
1 1.1 1 1 0 余数 r0<0,商,0‖
+ [y]补 0 0.1 0 1 1 恢复余数
0 0.1 0 0 1 r0’
? 0 1.0 0 1 0 0 商 0移入 q,r0’左移
+[-y]补 1 1.0 1 0 1 减 y
0 0.0 1 1 1 r1>0,商,1‖
? 0 0.1 1 1 0 0,1 商 1移入 q,r1左移
+[-y]补 1 1.0 1 0 1 减 y
0 0.0 0 1 1 r2>0,商,1‖
? 0 0.0 1 1 0 0,1 1 商 1移入 q,r2左移
+[-y]补 1 1.0 1 0 1 减 y
1 1.1 0 1 1 r3<0,商,0‖
+[y]补 0 0.1 0 1 1 恢复余数
0 0.0 1 1 0 r3’=2r2
? 0 0.1 1 0 0 0,1 1 0 商 0移入 q,r3’左移
+[-y]补 1 1.0 1 0 1 减 y
0 0.0 0 0 1 r4>0,商,1‖
? 0 0.0 0 0 1 0,1 1 0 1 商 1移入 q,r4不左移
被除数 x / 余数 r 商 q 说明 [x]
原 =0,1001
[y]补 =0.1011
[-y]补 =1.0101
计算机组成原理 102
余数每次左移相当于乘以 2,在求得 n位商后,相当
于多乘了 2n,所以最后余数应乘以 2- n才是正确的值。
故,[q]原 =0,1 1 0 1
余数 [r4]原 =0.00000001
计算机组成原理 103
4.加减交替法
上述恢复余数法由于要恢复余数, 使得除法的步数不固定,
控制比较复杂 。 实际上常用的是 加减交替法 。
特点,当运算过程中出现不够减的情况, 不必恢复余数, 而是
根据余数的符号, 继续往下运算, 因此步数固定, 控制简单 。
运算规则:
当余数为正时, 商 1,余数左移一位, 减除数;
当余数为负时, 商 0,余数左移一位, 加除数 。
【 例 2】 x=0.1001,y=0.1011,用加减交替法求 x/y.
解,[x]原 =[x]补 = x =0,1001,[y]补 =0.1011,[- y]补 =1.0101
计算机组成原理 104
0 0.1 0 0 1
+[-y]补 1 1.0 1 0 1 x减 y
1 1.1 1 1 0 余数 r0<0,
? 1 1.1 1 0 0 0 商 0,r和 q左移一位
+[y]补 0 0,1 0 1 1 加 y
0 0,0 1 1 1 余数 r1>0
? 0 0,1 1 1 0 0.1 商 1,r和 q左移一位
+[-y]补 1 1,0 1 0 1 减 y
0 0,0 0 1 1 余数 r2>0
? 0 0,0 1 1 0 0.11 商 1,r和 q左移一位
+[-y]补 1 1,0 1 0 1 减 y
1 1,1 0 1 1 余数 r3<0
? 1 1,0 1 1 0 0.110 商 0,r和 q左移一位
+[y]补 0 0,1 0 1 1 加 y
0 0,0 0 0 1 余数 r4>0
0.1101 商 1,仅 q左移一位
被除数 x / 余数 r 商 q 说明
得,q = x/y =0.1101 余数 r = 2-4 r4 = 0.00000001
[x]原 = 0,1001,
[y]补 =0.1011,
[- y]补 =1.0101
计算机组成原理 105
原码加减交替法原理框图
计算机组成原理 106
(1)若被除数与除数同号, 被除数减去除数;
若被除数与除数异号, 被除数加上除数 。
(2)余数和除数同号,商 1,余数左移一位,下次减除数;
余数和除数异号,商 0,余数左移一位,下次加除数 。
(3) 重复步骤 (2),连同符号位在内, 共做 n+1步 。
1.补码加减交替算法
补码除法的被除数、除数用补码表示,符号位和数位一起参
与运算,商的符号位与数位由统一的算法求得。
补码一位除法
计算机组成原理 107
为统一并简化硬件电路:
一开始就根据 [x]补 和 [y]补 的符号位是否相同,上一位商 q0?,
但 q0?不是真正的商的符号,称其为假商。
? 如果 [x]补 和 [y]补 的符号位相同,假商为 1,控制下次做减法;
? 如果 [x]补 和 [y]补 的符号位不同,假商为 0,控制下次做加法。
按同样的规则,共做 n+1步运算后,假商 q0?移出了存放商的寄
存器,剩下 q0至 qn,即运算结果。
例 3,[x]补 =1.0111,[y]补 =0.1101,求 [x/y]补 。
计算机组成原理 108
1 1.0 1 1 1 0 [x]补,[y]补 异号,商 q0?=0
+[y]补 0 0,1 1 0 1 加除数
0 0.0 1 0 0 余数和除数同号
? 0 0.1 0 0 0 01 左移一位,商 1
+[-y]补 1 1.0 0 1 1 减除数
1 1.1 0 1 1 余数和除数异号
? 0 0,1 1 1 0 010 左移一位,商 0
+[y]补 1 1,0 1 0 1 加除数
0 0,0 0 1 1 余数和除数同号
? 0 0,0 1 1 0 0101 左移一位,商 1
+[-y]补 1 1,0 0 1 1 减除数
1 1,1 0 0 1 余数和除数异号
? 1 1,0 0 1 0 01010 左移一位,商 0
+[y]补 0 0,1 1 0 1 加除数
1 1,1 1 1 1 余数和除数异号
? 1 1,1 1 1 1 1.0100 仅 q左移一位,商 0,余数不左移
被除数 x / 余数 r 商 q 说明
得,[q]补 = x/y =1.0100+0.0001 (校正量 ) = 1.0101 [r]补 =1.1111
[x]补 =1.0111
[y]补 =0.1101
[-y]补 =1.0011
计算机组成原理 109
补码一位除法的算法是在商的末位, 恒置 1‖的舍入条件下推
导的, 故此算法存在误差, 这样引起的最大误差是 2-n。 在对计
算精度没有特殊要求的情况下, 一般就采用商的末位, 恒置 1‖的
办法, 这样操作比较简单, 而且易于实现 。
如果需要进一步提高商的精度, 可按上述方法多求一位, 再
用以下方法进行校正:
(1)刚好能除尽时, 若除数为正, 商不必校正;
若除数为负, 则商加 2-n。
2.商的校正
(2) 不能除尽时,若商为正,则不必校正;
若商为负, 则商加 2-n。
计算机组成原理 110
阵列式除法器是一种并行运算部件,采用大规模集成电路
制造。与早期的串行除法器相比,阵列除法器不仅所需的控制
线路少,而且能提供令人满意的高速运算速度。
阵列除法器有多种多样形式:
不恢复余数阵列除法器 ;
补码阵列除法器 等等。
3.阵列除法器
计算机组成原理 111
(1) 可控加法 /减法 (CAS)单元
用于并行除法流水逻辑阵列中。 P=0 做加法运算
P=1 做减法运算
计算机组成原理 112
Si= Ai⊕ (Bi⊕ P)⊕ Ci
Ci+ 1= (Ai+ Ci)·(Bi⊕ P)+ AiCi
? 当 P= 0时,即是我们熟悉的一位全加器 (FA)的公式:
Si= Ai⊕ Bi⊕ Ci
Ci+ 1= AiBi+ BiCi+ AiCi
CAS单元的输入与输出的关系可用如下一组逻辑方程来表示:
? 当 P= 1时,则得求差公式:
在减法情况下:
输入 Ci称为借位输入,而 Ci+ 1称为借位输出。
Si= Ai⊕ Bi⊕ Ci
Ci+ 1= AiBi+ BiCi+ AiCi
其中 Bi= Bi⊕ 1。
计算机组成原理 113
Si= Ai⊕ (Bi⊕ P)⊕ Ci
Ci+ 1= (Ai+ Ci)·(Bi⊕ P)+ AiCi
加以变换,可得如下形式:
在这两个表达式中,每一个都能用一个三级组合逻辑电路 (包括反向器 )来
实现。因此每一个基本的 CAS单元的延迟时间为 3T单元。
为说明 CAS单元的实际内部电路实现,将方程式
Si= Ai⊕ (Bi⊕ P)⊕ Ci
Ci+ 1= (Ai+ Ci)(Bi⊕ P)+ AiCi
= AiBiP+ AiBiP+ BiCiP+ BiCiP+ AiCi
( A?B=AB+AB )
= AiBiCiP+ AiBiCiP+ AiBiCiP+ AiBiCiP+ AiBiCiP
+ AiBiCiP+ AiBiCiP+ AiBiCiP
计算机组成原理 114
(2)不恢复余数的阵列除法器
不恢复余数阵列除法,也叫加减交替法。
在不恢复余数的除法阵列中,
? 当余数为正时( ri ≥ 0),商,1‖,下次做减法运算,
减法是用 2的补码运算来实现的,此时
[x-y]补 = [x ]补 + [-y]补 ;
? 当余数为负时( ri< 0),商,0‖,下次做加法运算 ;
? 每次运算完成后要将余数左移一位,再与除数做加或减运算 ;
? 商的符号由两数的符号按位相加求得。
计算机组成原理 115
例,x=0.101001,y=0.111,求 x÷ y。 [-y]补 =1.001
解, 被除数 x 0,1 0 1 0 0 1
减 y + 1,0 0 1 (相当于加 [-y]补 )
余数为负 1,1 1 0 0 0 1 < 0 → q0=0
余数左移 1,1 0 0 0 1
加 y + 0,1 1 1
余数为正 0,0 1 1 0 1 > 0 → q 1=1
余数左移 0,1 1 0 1
减 y + 1,0 0 1 (相当于加 [-y]补 )
余数为负 1,1 1 1 1 < 0 → q 2=0
余数左移 1,1 1 1
加 y + 0,1 1 1
余数为正 0,1 1 0 > 0 → q 3=1
故得 商 q=q0.q1q2q3=0.101 余数 r=(0.00r3r4r5r6)=0.000110
计算机组成原理 116
不恢复余数阵列除法器的逻辑原理
被除数 x= 0,x1 x2 x3 x4 x5 x6
除数 y= 0,y1 y2 y3
商数 q = 0.q1q2q3
余数 r = 0.00r3r4r5r6
计算机组成原理 117
? 被除数 x 是一个 6位的小数 (双倍长度值 ):
x = 0.x 1x 2x 3x 4x 5x 6
它是由顶部一行和最右边的对角线上的垂直输入线来提供的。
? 除数y是一个 3位的小数
y = 0.y 1y 2y 3
它沿对角线方向进入这个阵列。这是因为:
在除法中所需要的部分余数的左移,可以用下列等效的操作
来代替:即让余数保持固定,而将除数沿对角线右移。
? 最上面一行所执行的初始操作经常是减法。 因此最上面一行
的
控制线 P固定置成,1‖。
计算机组成原理 118
? 减法是用 2的补码运算来实现的,这时右端各 CAS单元上的反
馈线用作初始的进位输入。
? 每一行最左边的单元的进位输出决定着商的数值。
将当前的商反馈到下一行,我们就能确定下一行的操作。
由于进位输出信号指示出当前的部分余数的符号,因此,它将决
定下一行的操作将进行加法还是减法。
计算机组成原理 119
由图看出,该阵列除法器是用一个可控加法 /减法 (CAS)单元
所组成的流水阵列来实现的。
推广到一般情况:
一个 (n+1) 位除 (n+1)位的加减交替除法阵列由 (n
+ 1)2个 CAS单元组成,其中两个操作数 (被除数与除数 )
都是正的。
n为尾数位数。
计算机组成原理 120
对不恢复余数阵列除法器来说,在进行运算时:
? 沿着每一行都有进位 (或借位 )传播;
? 同时所有行在它们的进位链上都是串行连接;
? 而每个 CAS单元的延迟时间为 3T单元。
因此,对一个 2n位除以 n位的不恢复余数阵列除法器来说,
单元的数量为 (n+ 1)2,考虑最大情况下的信号延迟,其除法
执行时间为 td= 3(n+ 1)2T
其中 n为尾数位数。
计算机组成原理 121
浮点运算方法和浮点运算器
浮点加、减法运算
浮点乘、除法运算
计算机组成原理 122
尾数,用定点小数表示,给出有效数字的位数,
决定了浮点数的表示精度;
阶码,用整数形式表示,指明小数点在数据中的位
置,决定了浮点数的表示范围。
机器浮点数格式,浮点数的表示方法
阶符 阶码 数符 尾数
Es E1 E2 …… E m Ms M1 M2 …… M n
计算机组成原理 123
IEEE 标准:尾数用原码 ; 阶码用, 移码,; 基为 2。
浮点数的标准格式
按照 IEEE754 的标准,32位浮点数和 64位浮点数
的标准格式为,
31 30 23 22 0
S E M32位
S E M
63 62 52 51 0
64位
? 为便于软件移植,使用 IEEE标准
计算机组成原理 124
设有两个浮点数 x 和 y,它们分别为,
浮点加、减法运算
其中 Ex 和 Ey 分别为数x和y的阶码,
Mx 和 My为数x和y的尾数。
两浮点数进行加法和减法的运算规则是,
x ± y= (Mx2Ex- Ey± My)2Ey Ex <= Ey
x= 2Ex · Mx
y= 2Ey · My
计算机组成原理 125
完成浮点加减运算的操作过程大体分为四步:
(1) 0 操作数的检查;
(2) 比较阶码大小并完成对阶;
(3) 尾数进行加或减运算;
(4) 结果规格化。
(5) 舍入处理。
(6)溢出处理 。
计算机组成原理 126
使二数阶码相同(即小数点位置对齐),这个过程叫作 对阶 。
? 先 求两数阶码 Ex 和 Ey之差,即△ E = Ex- Ey
若 △ E = 0,表示 Ex=Ey
若 △ E > 0,Ex>Ey
若 △ E < 0,Ex<Ey 通过尾数的移动来改变E
x或 Ey,使其相等,
? 对阶原则
阶码小的数向阶码大的数对齐;
小阶的尾数右移,每右移一位,其阶码加 1(右 规 )。
(2) 对阶
(1) 0 操作数检查
计算机组成原理 127
例, x=201× 0.1101,y=211× (-0.1010),求 x+y=?
解,为便于直观了解, 两数均以 补码 表示, 阶码, 尾数均采用
双符号位 。
[x]补 =00 01,00.1101 [y]补 =00 11,11.0110
[△ E]补 = [ Ex]补 - [Ey]补 = 00 01+11 01 = 11 10
△ E = -2,表示 Ex比 Ey小 2,因此将 x的尾数右移两位,
右移一位,得 [x]补 =00 10,00.0110
再右移一位,得 [x]补 =00 11,00.0011
至此,△ E=0,对阶完毕,
计算机组成原理 128
尾数求和方法与定点加减法运算完全一样。
对阶完毕可得, [x]补 =00 11,00.0011
[y]补 =00 11,11.0110
对尾数求和, 00.0011
+ 11.0110
11.1001
即得, [x+y]补 =00 11,11.1001
(3) 尾数求和运算
计算机组成原理 129
(4) 结果规格化
求和之后得到的数可能不是规格化了的数,为了增加有效数
字的位数,提高运算精度,必须将求和的结果规格化,
① 规格化的定义, (二进制 )
121 ?? S
对正数, S=00.1××× … ×
对负数, S=11.0××× … ×
采用双符号位的补码:
采用原码:
正数, S=0.1 ××× … ×
负数,S=1.1 ××× … ×
计算机组成原理 130
若不是规格化的数,需要尾数 向左 移位,以实现规格化的过程,
我们称其为 向左规格化 。
② 向左规格化
前例中,00 11,11.1001不是规格化数,因而需要左规,即 左
移一位,阶码减 1,得,
[x+y]补 =00 10,11.0010
③ 向右规格化
浮点加减运算时,尾数求和的结果也可能得到:
01.××× … × 或 10.××× … ×,
即两符号位不等,即结果的绝对值大于 1。 向左破坏了规格化 。
此时,将尾数运算的结果右移一位,阶码加 1,称为 向右规格化。
计算机组成原理 131
例,两浮点数 x=0.1101 ?210,y=(0.1011) ?201,求 x+y。
解, [x]补 =00 10,00.1101 [y]补 =00 01,00.1011
对阶,[△ E]补 = [ Ex]补 - [Ey]补 =00 10+ 11 11= 00 01
y向 x对齐,将 y的尾数右移一位,阶码加 1。
[y]补 =00 10,00.0101
求和,00.1101
+ 00.0101
01.0010 [x+y]补 =00 10,01.0010
右归,运算结果两符号位不同,其绝对值大于 1,右归。
[x+y]补 = 00 11,00.1001
计算机组成原理 132
在对阶或向右规格化时,尾数要向右移位,这样,被右移的尾数
的低位部分会被丢掉,从而造成一定误差,因此要进行 舍入处理 。
? 简单的舍入方法有两种,
①, 0舍 1入, 法
即如果右移时被丢掉数位的最高位为 0则舍去,反之则将尾
数的末位加, 1‖。
②, 恒置 1‖法
即只要数位被移掉,就在尾数的末位恒置, 1‖。从概率上来
说,丢掉的 0和 1各为 1/2。
(5) 舍入处理
? IEEE754标准中,舍入处理提供了四种可选方法:
计算机组成原理 133
(6)溢出处理
与定点加减法一样,浮点加减运算最后一步也需判溢出。
在浮点规格化中已指出,当尾数之和 (差 )出现 01,×× … ×
或 10,×× … × 时,并不表示溢出,只有将此数 右规 后,再
根据 阶码 来判断浮点运算结果是否溢出。
计算机组成原理 134
若机器数为补码,尾数为规格化形式,并假设阶符取 2位,阶
码取 7位、数符取 2位,尾数取 n位,则它们能表示的补码在数轴
上的表示范围如图所示。
正负
计算机组成原理 135
图中 A,B,a,b分别对应最小负数、最大正数、最大负
数和最小正数。它们所对应的真值分别是:
A最小负数 2+127 ? (-1)
B最大正数 2+127 ? (1-2-n)
a最大负数 2-128 ? (-2-1-2-n)
b最小正数 2-128 ?2-1
正负
计算机组成原理 136
图中 a,b之间的阴影部分,对应阶码小于 128的情况,叫做浮点
数的下溢。下溢时.浮点数值趋于零,故机器不做溢出处理,
仅把它作为机器零。
图中的 A,B两侧阴影部分,对应阶码大于 127的情况,叫做
浮点数的上溢。此刻,浮点数真正溢出,机器需停止运算,
作溢出中断处理。 一般说浮点溢出,均是指上溢。
可见,浮点机的溢出与否可由阶码的符号决定:
阶码 [j]补 =01,?????为上溢,机器停止运算,做中断处理;
阶码 [j]补 =10,?????为下溢,按机器零处理。
计算机组成原理 137
例,若某次加法操作的结果为 [X+Y]补 =11.010,00.0000110111
则应对其进行向左规格化操作:
尾数为,00.1101110000, 阶码减 4:
11.010
+ 11.100 [-4]补
10.110
例,若某次加法操作的结果为 [X+Y]补 =00.111,10.1011100111
则应对其进行向右规格化操作:
尾数为,11.0101110011, 阶码加 1,01.000
阶码超出了它所能表示的最大正数( +7),表明本次浮
点运算产生了溢出。
阶码超出了它所能表示的最小负数( -8),表明本次浮点
运算产生了溢出。
计算机组成原理 138
在加, 减运算过程中要检查是否产生了溢出:若阶码正常,
加减运算正常结束;若阶码溢出, 则要进行相应的处理 。
阶码上溢 ——超过了阶码可能表示的最大值的正指数值,一般
将其认为是+ ∞ 和- ∞ 。
阶码下溢 ——超过了阶码可能表示的最小值的负指数值,一般
将其认为是 0。
? 浮点数的溢出是以其阶码溢出表现出来的
? 对尾数的溢出也需要处理 (上溢 —右归,下溢 —舍入)。
小结:
计算机组成原理 139
计算机组成原理 140
例 设x =2010?0.11011011,y =2100 ?(-0.10101100),求x +y。
解,阶码采用双符号位,尾数采用单符号位,则它们的浮点表
示分别为 [x]浮 = 00 010,0.11011011
[y]浮 = 00 100,1.01010100
(1) 求阶差并对阶
△ E = Ex- Ey= [Ex]补 + [-Ey]补 = 00 010 + 11 100 = 11 110
[x]浮 = 00 100,0.00110110(11)
其中 (11)表示 Mx 右移 2位后移出的最低两位数。
即△ E为 -2,x的阶码小,应使 Mx右移两位,Ex加 2,
计算机组成原理 141
(2)尾数求和
(4) 舍入处理
采用 0舍 1入法处理,则有,
1.00010101
+ 1
1.00010110
0.00110110(11)
+ 1.01010100
1.10001010(11)
(3) 规格化处理
尾数运算结果的符号位与最高数值位为同值, 应执行左规处
理, 结果为 1.00010101(10),阶码为 00 011。
(5) 判断溢出
阶码符号位为 00,不溢出, 故得最终结果为
x + y = 2011 × (-0.11101010)
计算机组成原理 142
例 两浮点数 x = 201× 0.1101,y = 211× (-0.1010)。假
设尾数在计算机中以补码表示,可存储 4位尾数,2位保护
位,阶码以原码表示,求 x+y。
解,将 x,y转换成浮点数据格式
[x]浮 = 00 01,00.1101
[y]浮 = 00 11,11.0110
步骤 1:对阶,阶差为 11-01=10,即 2,因此将 x的尾数右移两位,得
[x]浮 = 00 11,00.001101
步骤 2:对尾数求和,得,
[x+y]浮 = 00 11,11.100101
步骤 3:由于符号位和第一位数相等,不是规格化数,向左规格化,得
[x+y]浮 = 00 10,11.001010
步骤 4:截去。
[x+y]浮 = 00 10,11.0010
步骤 5,数据无溢出,因此结果为
x+y = 210× (-0.1110)
计算机组成原理 143
浮点运算电路
浮点加法器原理框图
MES MES
小 ALU
大 ALU控制
右移
左移或右移
舍入部件
阶码差
加 1 或减 1
MES
1 1
1
0 0
0
计算机组成原理 144
浮点乘、除法运算
1.浮点乘法、除法运算规则
设有两个浮点数x和y,x= 2Ex·M x
y= 2Ey·M y
浮点乘法运算的规则是,x ?y= 2(Ex+ Ey) · (Mx? My)
即,乘积的尾数是相乘两数的尾数之积 ;
乘积的阶码是相乘两数的阶码之和。
浮点除法运算的规则是, x ÷ y= 2(Ex- Ey) · (Mx÷ My)
即:商的尾数是相除两数的尾数之商 ;
商的阶码是相除两数的阶码之差。
计算机组成原理 145
2,浮点乘、除法运算步骤
浮点数的乘除运算大体分为四步:
(1) 0 操作数检查;
(2) 阶码加 /减操作;
(3) 尾数乘 /除操作;
(4) 结果规格化及舍入处理。
计算机组成原理 146
(2) 浮点数的阶码运算
? 对阶码的运算有+ 1、- 1、两阶码求和、两阶码求差四种,
运算时还必须检查结果是否溢出。
? 在计算机中,阶码通常用补码或移码形式表示。
① 移码的运算规则和判定溢出的方法
移码的定义为 [x]移 = 2n +x - 2n ≤ x < 2n
[x]移 + [y]移 = 2n +x + 2n +y
= 2n +[x +y ]移
按此定义,则有
= 2n +(2n +(x +y ))
[x +y ]移 = -2n + [x]移 + [y]移
计算机组成原理 147
考虑到移码和补码的关系:
对同一个数值,其数值位完全相同,而符号位正好完全相反。
[y]补 的定义为 [y]补 = 2n+1 +y
则求阶码和用如下方式完成:
= 2n+1 + (2n +(x +y ))
[x]移 +[y]补 = 2n +x + 2n+1 +y
即,[x +y ]移 = [x]移 +[y]补 (mod 2n+1)
同理,[x -y ]移 = [x]移 +[-y]补 (mod 2n+1)
② 混合使用移码和补码
计算机组成原理 148
使用双符号位的阶码加法器,并规定移码的第二个符号位,
即最高符号位恒用 0 参加加减运算,则溢出条件是结果的最高
符号位为 1:
? 当低位符号位为 0时,( 10) 表明结果上溢,
? 当低位符号位为 1时,( 11) 表明结果下溢。
? 当最高符号位为 0时,表明没有溢出,
低位符号位为 1,( 01) 表明结果为正 ;
为 0,( 00) 表明结果为负。
③ 阶码运算结果溢出处理
计算机组成原理 149
例,x = +011,y = +110,求 [x+y]移 和 [x-y]移,并判断是否溢出 。
解:阶码取 3位(不含符号位),其对应的真值范围是 -8~+7
[x]移 = 01 011,[y]补 = 00 110,[-y]补 =11 010
[x+y]移 = [x]移 + [y]补 =
[x-y]移 = [x]移 + [-y]补 =
01 011
+ 00 110
10 001 结果上溢。
结果正确,为 -3。
01 011
+ 11 010
00 101
计算机组成原理 150
(3) 尾数处理
浮点加减法对结果的规格化及舍入处理也适用于浮点乘除法。
第一种方法是:
无条件地丢掉正常尾数最低位之后的全部数值。
这种办法被称为截断处理,好处是处理简单,缺点是影响结果
的精度。
第二种办法是:
运算过程中保留右移中移出的若干高位的值,最后再按某种规
则用这些位上的值修正尾数。
这种处理方法被称为 舍入处理 。
计算机组成原理 151
? 当尾数用原码表示时,
最简便的方法是,只要尾数的最低位为 1,或移出
的几位中有为 1的数值位,就使最低位的值为 1。
另一种是 0舍 1入法,即当丢失的最高位的值为 1时,
把这个 1加到最低数值位上进行修正,否则舍去丢失的
的各位的值。这样处理时,舍入效果对正数负数相同,
入将使数的绝对值变大,舍则使数的绝对值变小。
舍入处理
计算机组成原理 152
? 当尾数是用补码表示时,
采用 0舍 1入法时,若丢失的位不全为 0时:
对正数来说,舍入的结果与原码分析相同;
对负数来说,舍入的结果与原码分析相反,即“舍”使绝对
值变大,“入”使绝对值变小;为使原、补码舍入处理后的结果
相同,对 负数 可采用如下规则进行舍入处理:
当丢失的各位均为 0时,不必舍入;
当丢失的最高位为 0,以下各位不全为 0 时,或者丢失的最
高位为 1,以下各位均为 0时,则舍去丢失位上的值;
当丢失的最高位为 1,以下各位不全为 0 时,则执行在尾数最低位入 1的修正操作。
计算机组成原理 153
例 设 [x1]补 = 11.01100000,[x2]补 = 11.01100001,
[x3]补 = 11.01101000,[x4]补 = 11.01111001,求执行只保留
小数点后 4位有效数字的舍入操作值。
解, 执行舍入操作后,其结果值分别为
[x1]补 = 11.0110 (不舍不入 )
[x2]补 = 11.0110 (舍 )
[x3]补 = 11.0110 (舍 )
[x4]补 = 11.1000 (入 )
计算机组成原理 154
例 设有浮点数x =2- 5 ?0.0110011,y = 23 ? (-0.1110010),阶码
用 4位移码表示,尾数 (含符号位 )用 8位补码表示。求 [x ?y ]浮 。
要求用补码完成尾数乘法运算,运算结果尾数保留高 8位 (含符
号位 ),并用尾数低位字长值处理舍入操作。
解, 移码采用双符号位,尾数补码采用单符号位,则有
[Mx]补 = 0.0110011,[My]补 = 1.0001110,
Ex]移 = 00 011,[Ey]移 = 01 011,[Ey]补 = 00 011,
[x]浮 = 00 011,0.0110011,[y]浮 = 01 011,1.0001110
计算机组成原理 155
(2) 尾数乘法运算
可采用补码阵列乘法器实现,即有
(1) 求阶码和
[Ex+ Ey]移 = [Ex]移 + [Ey]补 = 00 011+ 00 011= 00 110,
值为移码形式 -2。
[Mx]补 ? [My]补 = [0.0110011]补 ? [1.0001110]补
= [1.1010010,1001010]补
计算机组成原理 156
(4) 舍入处理
(3) 规格化处理
乘积的尾数符号位与最高数值位符号相同,不是规格化的数,
需要左规,阶码变为 00 101(-3),尾数变为 1.0100101,0010100。
尾数为负数,取尾数高位字长,按舍入规则,舍去低位字长,
故尾数为 1.0100101 。
最终相乘结果为
其真值为 x ?y= 2- 3 ? (- 0.1011011)
[x ?y ]浮 = 00 101,1.0100101