第三章 CPU子系统运算部件寄存器寄存器控制部件运算器 控制器本章主要讨论:
运算器控制器数据通路结构与外部的连接指令的执行过程
CPU组成
CPU工作原理第一节 运算器组织独立结构小型存储器结构单口双口寄存器组独立 R、双口 RAM用 多路选择器 作为 ALU的输入逻辑,
单口 RAM用 锁存器 作为 ALU的输入逻辑。
3.1.1 带多路选择器的运算器移位器
ALU
多路选择器多路选择器
R0 Rn
R0.,,Rn R0.,,Rn
内部总线(单向)
特点:
R各自独立;
可同时向 ALU提供两个操作数;
采用单向内总线。
3.1.2 带输入锁存器的运算器特点:
单口 RAM不能同时向 ALU提供两个操作数;
用锁存器暂存操作数;
采用双向内总线。
移位器
ALU
锁存器锁存器内部总线(双向)
R0
Rn
通用寄存器组(小型存储器)
3.1.3 位片式运算器特点:
用双口 RAM(两地址端、两数据端)作通用寄存器组,可同时提供数据;
用多路选择器作输入逻辑,不需暂存操作数;
ALU增加乘、除功能,
用乘商寄存器存放乘数、乘积或商。
例,4位片运算器粗框移位器
ALU
多路选择器多路选择器
DO
RAM
Di
B 地址A 地址
Cn
DBDA
G,P
控制信息
Cn+4
乘商寄存器
4
4
4
4
44
4
4
4
4
4 4
第二节 运算方法
3.2.1.1 补码加减法数用补码表示,符号位参加运算。
实际操作能否只取决于操作码?
结果需不需修正?
如何将减法转换为加法?
3.2.1 定点加减运算
1,基本关系式
( X + Y )补 = X补 + Y补 ( 1)
( X - Y )补 = X补 + (-Y)补 ( 2)
式( 1),操作码为,加,时,两数直接相加。
3) X= 3
Y= –2
X补 =0 0011
Y补 =1 1110
0 0001( +1补码)
2) X= –3
Y= –2
X补 =1 1101
Y补 =1 1110
1 1011( – 5补码)
1) X=3
Y=2
X补 =0 0011
Y补 =0 0010
0 0101( +5补码)
4) X= –3
Y= 2
X补 =1 1101
Y补 =0 0010
1 1111( –1补码)
例,求 (X+Y)补
( X + Y )补 = X补 + Y补 ( 1)
( X - Y )补 = X补 + (-Y)补 ( 2)
式( 2),操作码为,减,时,将减转换为加。
1) X= 4
Y= –5
X补 =0 0100
Y补 =1 1011
(-Y)补 =0 0101
0 1001( +9补码)
2) X= –4
Y= 5
X补 =1 1100
Y补 =0 0101
(-Y)补 =1 1011
1 0111( –9补码)
例,求 (X – Y)补
Y补 (–Y)补,将 Y补 变补 不管 Y补 为正或负,将其符号连同尾数一起各位变反,末位加 1。
即将减数变补后与被减数相加。
补补补补注意:某数的 补码表示 与某数 变补 的区别。
例,1 0101原 1 1011补码表示
1 0011补 0 1101变补
0 0101原 0 0101补码表示符号位不变;
负数尾数改变,
正数尾数不变。
0 0011补 1 1101变补符号位改变,
尾数改变。
补码的机器负数
2,算法流程操作数用补码表示,
符号位参加运算结果为补码表示,符号位指示结果正负
X补 +Y补 X补 +(-Y)补
ADD SUB
3,逻辑实现
A(X补 ) B(Y补 )
+A A BB
+B
+B
+1
CPA
∑ A
( 1) 控制信号加法器输入端:
+A:打开控制门,将 A送 ∑ 。
+B:打开控制门,将 B送 ∑ 。
+1:控制末位加 1 。
+B:打开控制门,将 B送 ∑ 。
加法器输出端:
∑ A,打开控制门,将结果送 A输入端。
CPA:将结果打入 A。
( 2) 补码加减运算器粗框

3.2.1.2 溢出判断在什么情况下可能产生溢出?
例,数 A有 4位尾数,1位符号 SA
数 B有 4位尾数,1位符号 SB
符号位参加运算结果符号 Sf
符号位进位 Cf
尾数最高位进位 C
正确
0 0011
0 0010
( 1) A=3 B=2
3+2:
0 0101
( 2) A=10 B=7
10+7,0 1010
0 0111
1 0001 正溢正确 负溢正确 正确
( 3) A= -3 B= -2
-3+(-2):
1 1011
1 1101
1 1110
( 4) A= -10 B= -7
-10+(-7):
0 1111
1 0110
1 1001
( 5) A=6 B= -4
6+(-4):
0 0010
0 0110
1 1100
( 6) A= -6 B=4
-6+4:
1 1110
1 1010
0 0100
( 2) A=10 B=7
10+7,0 1010
0 0111
1 0001
( 4) A= -10 B= -7
-10+(-7):
0 1111
1 0110
1 1001
1,硬件判断逻辑一 ( SA,SB与 Sf的关系)
溢出 = SASBSf SA SfSB
2,硬件判断逻辑二 ( Cf与 C的关系)
正确
0 0011
0 0010
( 1) A=3 B=2
3+2:
0 0101
( 2) A=10 B=7
10+7,0 1010
0 0111
1 0001 正溢正确 负溢正确 正确
( 3) A= -3 B= -2
-3+(-2):
1 1011
1 1101
1 1110
( 4) A= -10 B= -7
-10+(-7):
0 1111
1 0110
1 1001
( 5) A=6 B= -4
6+(-4):
0 0010
0 0110
1 1100
( 6) A= -6 B=4
-6+4:
1 1110
1 1010
0 0100
Cf=0
C =0
Cf=0
C =1
Cf=1
C =1
Cf=1
C =0
Cf=1
C =1
Cf=0
C =0
1
1
1 11
1
( 2) A=10 B=7
10+7,0 1010
0 0111
1 0001
( 4) A= -10 B= -7
-10+(-7):
0 1111
1 0110
1 1001
1,硬件判断逻辑一 ( SA,SB与 Sf的关系)
溢出 = SASBSf SA SfSB
2,硬件判断逻辑二 ( Cf与 C的关系)
溢出 = Cf C
3,硬件判断逻辑三 (双符号位 )
( 1) 3+2:
正确
00 0011
00 0010
00 0101
( 2) 10+7:
00 1010
00 0111
01 0001 正溢正确 负溢正确 正确
( 3) -3+(-2):
11 0111
11 1101
11 1110
( 4) -10+(-7):
10 1111
11 0110
11 1001
( 5) 6+(-4):
00 0010
00 0110
11 1100
( 6) -6+4:
11 1110
11 1010
00 0100
第一符号位 Sf1
第二符号位 Sf2
溢出 = Sf1 Sf2
( 2) A=10 B=7
10+7,0 1010
0 0111
1 0001
( 4) A= -10 B= -7
-10+(-7):
0 1111
1 0110
1 1001
1,硬件判断逻辑一 ( SA,SB与 Sf的关系)
溢出 = SASBSf SA SfSB
2,硬件判断逻辑二 ( Cf与 C的关系)
溢出 = Cf C
3,硬件判断逻辑三 (双符号位 )
3.2.1.3 移位操作逻辑移位,数码位置变化,数值 不变 。
1,移位类型算术移位
1 0 0 0 1 1 1 1
循环左移,0
:数码位置变化,数值 变化,
符号位不变。
1 0 0 1 1 1 1
算术左移,1
0 0 1 1 1 1 1
0 1 1 1 1 0
(-15)
(-30)
( 1)单符号位,
0 0111
0 1110
( 2)双符号位:
00 1110
00 0111
2.正数补码移位规则
( 3)移位规则左移右移右移
0 0111
0 0011
左移左移右移右移
01 1100
00 1110
00 0111
数符不变 (单:符号位不变;双:第一符号位不变)。
空位补 0(右移时第二符号位移至尾数最高位)。
( 1)单符号位,
1 1011
1 0110
( 2)双符号位:
10 1100
11 0110
3.负数补码移位规则
( 3)移位规则左移右移右移
1 1011
1 1101
左移右移右移
11 0110
11 1011
数符不变 (单:符号位不变;双:第一符号位不变)。
左移空位补 0
(第二符号位移至尾数最高位)。右移空位补 1
3.2.1.4 舍入方法
1,0舍 1入(原码、补码)
0 00100原
1 00101原
1 11011补
2,末位恒置 1(原码、补码)
0 00100原
1 11011补
1 00101原
0 0010原
1 0011原
1 1110补
0 0011原
1 0011原
1 1101补原
101补例,保留 4位尾数:
例,保留 4位尾数:
3.2.2 定点乘法运算
3.2.2.1 原码一位乘法每次用一位乘数去乘被乘数。
1.算法分析乘法 部分积累加、移位。
例,0.1101× 1.1011
乘积 P = X × Y
积符 SP= SX SY
X原 Y原
( 1)手算 0.1101
× 0.1011
1101
1101
0000
1101
0.10001111
上符号,1.10001111
部分积问题,1)加数增多(由乘数位数决定)。
2)加数的位数增多(与被乘数、乘数位数有关)。
改进:将一次相加改为分步累加。
( 2)分步乘法每次将一位乘数所对应的部分积与原部分积的累加和相加,并移位。
设置寄存器:
A:存放 部分积累加和,乘积高位
B:存放 被乘数
C:存放 乘数,乘积低位设置初值:
A = 00.0000
B = X = 00.1101
C = Y =,1011
步数 条件 操作 A C
00.0000,1011
1) Cn=1 +B
Cn
+ 00.1101
00.1101
0.1101
× 0.1011
1101
1101
0000
1101
0.10001111
B
C
00.0110 1.101
×
2) Cn=1 +B + 00.1101
01.0011
00.1001 11.10
× 11×3) Cn=0 +0 + 00.000000.1001
00.0100 111.1
4) Cn=1 +B + 00.1101
01.000100.1000 1111
X原 × Y原 = 1.10001111
2.算法流程
0 A,X B,Y C,0 CR
Cn = 1?
CR = n?
1/2( A+B) A,C
1/2( A+0) A,C
CR + 1 CR
Y
Y
N
N
Sx + Sy SA
3.运算规则
( 1)操作数、结果用原码表示;
( 2)绝对值运算,符号单独处理;
( 3)被乘数 (B)、累加和 (A)取双符号位;
( 4)乘数末位 (Cn)为判断位,其状态决定下步操作;
( 5)作 n次循环(累加、右移)。
3.2.2.2 补码一位乘法
1.算法分析
X补 = X0.X1X2…… Xn
( 1) Y为正,Y补 = 0.Y1Y2…… Yn
(XY)补 = X补 (0.Y1Y2…… Yn)
( 2) Y为负,Y补 = 1.Y1Y2…… Yn
(XY)补 = X补 (0.Y1Y2…… Yn)+(-X)补
( 3) Y符号任意:
(XY)补 = X补 (0.Y1Y2…… Yn)+(-X)补 Y0
符号位
( 4)展开为部分积的累加和形式:
(XY)补 = X补 (0.Y1Y2…… Yn)+(-X)补 Y0
= X补 (0.Y1Y2…… Yn)-X补 Y0
= X补 (-Y0+2 Y1+2 Y2+…… +2 Yn)-1 -2 -n
= X补 -Y0+(Y1-2 Y1)+(2 Y2-2 Y2)+……-1 -1 -2
-(n-1) -n+(2 Yn-2 Yn)
= X补 (Y1-Y0)+2 (Y2-Y1)+2 (Y3-Y2)+……-1 -2
+2 (0 -Yn)-n Yn+1
补 (Y ……
比较法:用相邻两位乘数比较的结果决定
+X补,-X补 或 +0。
2.比较法 算法
Yn(高位 ) Yn+1(低位 ) 操作 (A补 为部分积累加和 )
0 0
0 1
1 0
1 1
1/2A补
1/2(A补 +X补 )
1/2(A补 -X补 )
1/2A补
( 0 )
( 1 )
(-1 )
( 0 )
3.运算实例
X=-0.1101,Y=-0.1011,求 (XY)补 。
初值,A=00.0000,B=X补 =11.0011,
-B=(-X)补 =00.1101,C =Y补 =1.0101
步数 条件 操作 A C
00.0000 1.0101
1) 1 0 -B
Cn
+ 00.1101
00.1101
00.0110 11.0101
2) 0 1 +B + 11.0011
11.1001
11.1100 111.010
3) 1 0 -B + 00.1101
00.1001
00.0100 1111.01
4) 0 1 +B + 11.0011
11.011111.1011 11111.0
0 Cn+1CnCn+1
5) 1 0 -B + 00.1101
(XY)补 = 0.10001111
4) 0 1 +B + 11.0011
11.011111.1011 11111.0
5) 1 0 -B + 00.1101
00.1000 1111修正
(1)A,B取双符号位,符号参加运算;
(2)C取单符号位,符号参加移位,以决定最后是否修正;
(3)C末位设置附加位 Cn+1,初值为 0,CnCn+1组成判断位,决定运算操作 ;
(4)作 n步循环,若需作第 n+1步,则不移位,仅修正。
4.运算规则
1.0,-B修正
0.1,+B修正
0.0,不修正
1.1,不修正
3.2.3 定点除法运算除法 若干余数与除数加减、移位。
例,0.10110÷ 0.11111
0.10110
1101
0.
0
1
11111
0.11111
0
0
0
1
11111
101010
1
11111
10110
0
.000000.
商,0.10110
余数,0.10110× 2 5
实现除法的关键:
比较余数、除数绝对值大小,以决定上商。
3.2.3.1 原码恢复余数法
1.算法比较两数大小可用减法试探。
2× 余数 -除数 =新余数 为正,够减,商 1。
为负,不够减,商 0,
恢复原余数。2.实例
X=-0.10110,Y=0.11111,求 X/Y,给出商 Q和余数 R
设置,A:被除数、余数,B:除数,C:商初值,A= X = 00.10110
B= Y = 00.11111
C= Q = 0.00000
-B= 11.00001
步数 条件 操作 A C
00.10110 0.00000
1)
0
-B
01.01100
+11.00001
00.01101 0.00001
2)
1
-B
00.11010
+11.00001
11.11011 0.00010
3)
恢复余数
+B +00.11111
00.11010
01.10100
0.00101
4)
0
-B +11.00001
00.10101
CnS
A
Q1
Q2
Q3
r0
2r0
r1
2r1
r2’
r2
2r2
r3
步数 条件 操作 A C
00.10101 0.00101
5)
0
-B
01.01010
+11.00001
00.01011 0.01011
6)
1
-B
00.10110
+11.00001
11.10111 0.10110
7)
恢复余数
+B +00.11111
00.10110
Q= -0.10110
Cn
Q4
Q5
Q3r3
2r3
r4
2r4
r5’
r5
R= 0.10110× 2-5
X/Y=-0.10110+ -0.10110× 2
-5
0.11111
3.说明
( 1) A,B双符号位,X,Y绝对值,X 小于 Y 。
( 2)运算结束后,余数乘以 2,与被除数同号。-n
3.2.3.2 原码不恢复余数法(加减交替法)
1.算法分析第二步,2r1-B=r2’<0
第三步,r2’+B=r2(恢复余数 )
第四步,2r2-B=r3
2r2-B=2(r2’+B)-B
=2r2’+B=r3
第二步,2r1-B=r2<0
第三步,2r2+B=r3
(不恢复余数 )
2.算法
ri+1=2ri+(1-2Qi)Y
ri为 正,则 Qi为 1,第 i+1步作 2ri-Y;
ri为 负,则 Qi为 0,第 i+1步作 2ri+Y。
3.实例
X=0.10110,Y=-0.11111,求 X/Y,给出商 Q和余数 R。
初值,A= X = 00.10110
B= Y = 00.11111
C= Q = 0.00000
-B=11.00001
步数 条件 操作 A C
00.10110 0.00000
1)
为正
-B
01.01100
+11.00001
00.01101 0.00001
2)
为负
-B
00.11010
+11.00001
11.11011 0.00010
3)
+B +00.11111
11.10110
0.00101为正 00.10101
Cnr
Q1
Q2
Q3
r0
2r0
r1
2r1
r2
2r2
r3
4)
为正
-B
01.01010
+11.00001
00.01011 0.01011Q4
2r3
r4
步数 条件 操作 A C
00.01011 0.01011
6)
为负恢复余数
+B +00.11111
00.10110
Q= -0.10110
CnQ4r
4
5)
为正
-B
00.10110
+11.00001
11.10111 0.10110Q5
2r4
r5’
r5
R= 0.10110× 2-5
X/Y=-0.10110+ 0.10110× 2
-5
-0.11111
4.运算规则
( 1) A,B取双符号位,X,Y取绝对值运算,X < Y 。
( 2)根据余数的正负决定商值及下一步操作。
( 3)求 n位商,作 n步操作;若第 n步余数为负,则第
n+1步恢复余数,不移位。
3.2.3.3 补码不恢复余数法(加减交替法)
如何判断是否够减? 如何上商? 如何确定商符?
1.判够减
(1)同号相除 4 7 7 4 -4 -7 -7 -4
1
-4 7 -7 4 4 -7 7 -4
0 1 0
-4
3
-7
-3
-(-4)
-3 -(-7)3够减 不够减 够减 不够减够减,r与 X,Y同号; 不够减,r与 X,Y异号。
(2)异号相除
1 0 1 0
+(-4)
3
+(-7)
-3
+4
-3
+7
3够减 够减不够减 不够减够减,r与 X同号,与 Y异号; 不够减,r与 X异号,与 Y同号。
( 3)判断规则同号:作 X补 -Y补X

Y补够减,r补 与 Y补 同号不够减,r补 与 Y补 异号异号:作 X补 +Y补够减,r补 与 Y补 异号不够减,r补 与 Y补 同号
2.求商值
X补
Y补同号:商为正异号:商为负够减商 1
不够减商 0
够减商 0
不够减商 1
(r,Y同号 )
(r,Y异号 )
(r,Y异号 )
(r,Y同号 )
够减 商不够减商不够减 商
,同号
,异号
,异号
,同号
,同号
,异号
,异号
,同号商不够减 商够减 商商上商规则,Qi=Sri⊕ SY
余数与除数同号商 1,异号商 0。
3.算法
(ri+1)补 =2ri补 +(1-2Qi补 )Y补
ri补 与 Y补 同号,则 Qi补 为 1,第 i+1步作 2ri补 -Y补 ;
ri补 与 Y补 异号,则 Qi补 为 0,第 i+1步作 2ri补 +Y补 。
4.求商符令 X补 = r0补 r0补 与 Y补 同号,Q0补 =1异号,Q
0补 =0
与实际商符相反商符
5.商的校正
X补
Y补 =(-1+2 +∑ 2 Qi 补 )+
2 rn补
Y补
-n -in-1
i=0
-n
商余数真商 =假商 +1.000… 01
=Q0.Q1Q2…… Qn-1求 n-1位商 (假商 )
X补
Y补 =(-1+2 +∑ 2 Qi 补 )+
2 rn补
Y补
-n -in-1
i=0
-n
商余数
(1)∑ 2 Qi 补
n-1
i=0
-i
(2)2-n 第 n位商 (末位商 )恒置 1
(3)-1 商符变反
n位(4)余数求至 rn
6.实例
X=0.10110,Y=-0.11111,求 X/Y,给出商 Q和余数 R。
初值,A =X补 =00.10110 B =Y补 =11.00001
C =Q补 =0.00000-B =00.11111
步数 条件 操作 A C
00.10110 0.0000
1)
异号
+B
01.01100
+11.00001
00.01101 0.0000
2)
同号
+B
00.11010
+11.00001
11.11011 0.0001
Cn-1r,Y
Q1
Q2
r0
2r0
r1
2r1
r2
求商符 Q0
异号
0
5) +B +11.0000100.10110
11.10111
步数 条件 操作 A C
11.11011 0.0001
3)
异号
-B 11.10110+00.1111100.10101 0.0010
4)
异号
+B 01.01010+11.0000100.01011 0.0100
Cn-1r
,Y
Q3
Q2r2
2r2
r3
2r3
r4
2r4
r5假商 =0.0100
Q4
真商 =0.0100+1.00001=1.01001
Q= -0.10111 R= -0.01001× 2
X/Y=-0.10111+ -0.01001× 2
-5
-0.11111
-5
7.运算规则
( 1) A,B取双符号位,符号参加运算,并且
X < Y 。
( 2)根据余数与除数的符号决定商值及下一步操作。
( 3)求 n-1位商,作 n步操作(求出 rn)。
( 4)对商校正(商符变反,第 n位商恒置 1。
3.2.4 浮点四则运算
3.2.4.1 浮点加减运算步骤:
1.检测能否简化操作。
判操作数是否为 0 尾数为 0
阶码下溢2.对阶例,10.0 1
(1)对阶:使两数阶码相等 (小数点实际位置对齐,
尾数对应权值相同 )。
(2)对阶规则,小阶向大阶对齐 。
2 × 0.1001
2 × 0.1101
2
3 11 0.1
010.01
110.1
2 × 0.01013
2 × 0.11013
3.尾数加减,
(1) 1.0001
+0.1001
(4)阶码比较:比较线路或减法 。
(3)对阶操作,小阶阶码增大,尾数右移。
例,AJ>BJ,则 BJ+1 BJ,BW,直到 BJ=AJ
1.1010
(2) 0.0101
+0.1101
AW + BW AW
4.结果规格化
W <1/2
1.0010
W >1
应 左移规格化 应 右移规格化
AJ-1 AJ
若 Af1⊕ Af2=1,则右规:
(1) 11.0001
+00.1001
11.1010
(2) 00.0101
+00.1101
01.0010
(-1/2除外 )
Af1Af2 A1
AW
11
若 Af1Af2A1+Af1Af2A1=1,则左规:
01
Af1Af2
AW
AJ+1 AJ
3.2.4.2 浮点乘法运算步骤:
1.检测操作数是否为 0。
2.阶码相加。
若阶码用移码表示,相加后要修正。
浮点乘 定点加、定点乘
3.尾数相乘。 相乘前 不需对阶 。
设 A=2 × AW,B=2 × BW
AJ BJ AJ+BJA× B=2 × (A
W× BW)
4.结果规格化。 一般 左规 。
3.2.4.3 浮点除法运算步骤:
1.检测操作数是否为 0。
2,AW < BW?
浮点除 定点减、定点除
4.尾数相除。 相除前 不需对阶 。
设 A=2 × AW,B=2 × BW
AJ BJ
5.结果不再规格化。
AJ-BJA÷ B=2 × (A
W÷ BW)
3.阶码相减。
若阶码用移码表示,相减后要修正。