第三章 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.阶码相减。
若阶码用移码表示,相减后要修正。