1
第 3章
微处理器
2
主要内容
? 微处理器的一般结构;
? 8086微处理器的组成、引脚功能;
? 8086的内部寄存器和标志位;
? 8086的存储器组织;
? 实模式和保护模式的存储器寻址;
? 80X86系列微处理器的结构特点。
3
§ 3.1 微处理器的一般结构
运算器 算术逻辑运算,由加法器和
(ALU) 一 些辅助逻辑电路组成
指令流控制
控制器 时序控制,产生节拍定时信号
指令译码和操作控制
寄存器组 存放临时数据、运算的中
间结果、运算特征、操作数地址
性能,8位 → 16位 → 32位 (主流 )→ 64位 (趋势 )
主
要
部
件
4
§ 3.2 8086微处理器
主要内容:
? 8086外部引线及功能;
? 8086的内部结构和特点;
? 8086的工作时序。
5
8086的硬件特性
? 16位微处理器,CMOS型,40引脚 DIP封装
? 16位数据总线,20位地址总线
? 功耗:+ 5V,360mA(低功耗型 80C86仅需 10mA)
? 输入特性:输入电流 ≤0.01mA
? 逻辑 0,≤0.8V
? 逻辑 1,≥2.0V
? 输出特性:
? 逻辑 0,≤0.45V,最大 2.0mA
? 逻辑 1,≥2.4V,最大 -0.4mA
? 输出引脚负载能力:
? 74HC,74ALS,74AS,74F负载 ≤10个
? 74LS负载 ≤5个
? 74,74S负载 ≤1个
6
一、指令流水线
取指令 指令译码 取操作数 执行指令 存放结果
? CPU执行一条指令的过程类似于工厂生产流水线,被分
解为多个小的步骤,称为指令流水线。
原料 调度分配 生产线 成品 仓库 出厂
数据和程
序指令
控制器的
调度分配
ALU等
功能部件
处理后的
数据 存储器 输出
7
指令流水线
? 指令流水线有两种运作方式:
? 串行方式,
取指令 和 执行指令 在不同的时刻按顺序执行。
? 并行方式,
取指令 和 执行指令 可同时执行,需要有能并行工作
的硬件的支持。
8
串行 工作 方式
? 8086以前的 CPU采用串行工作方式
取指令 1 执行 1 取指令 2 执行 2CPU
BUS 忙 碌 忙 碌
取指令 3 执行 3
忙 碌空闲 空闲 空闲
t1t0 t2 t3 t4 t5
?6个周期执行了 3条指令
9
并行工作方式
? 8086CPU采用并行工作方式
取指令 1
取指令 2
取指令 3
取指令 4
执行 1
执行 2
执行 3
BUS 忙碌
执行 4
CPU
t1t0 t2 t3 t4 t5
取指令 5 执行 5
忙碌 忙碌 忙碌 忙碌 忙碌
?6个周期
执行了 5条
指令
10
并行操作的前提
? 取指令部件和指令执行部件要能够并行工作;
? 各部件执行时间基本相同,否则需再细分;
? 取指令部件取出的指令要能暂存在 CPU内部
某个地方;
? 指令执行部件在需要时总能立即获得暂存的
指令;
? 需要解决转移指令问题。
11
*超级流水线和超标量结构
? 超级流水线
? 指令的执行步骤分得更细,流水线长度更长
例如,PIII为 14个阶段,P4为 20个阶段
? 有利于提高主频
? 转移分支时的效率?
? 解决:分支预测、推测执行
? 超标量结构
? 对流水线中的关键, 岗位, 设置多个相同的执行单
元 —— 多个工人完成一道工序
? P4:倍频 ALU× 2,FPU× 2(其中一个为并行 FPU)
? Athlon XP,ALU× 6,并行 FPU× 3组
12
8086 CPU的特点
? 采用并行流水线工作方式:
通过设置指令预取队列( IPQ)实现
? 对内存空间实行分段管理:
将内存分段并设置地址段寄存器,以实现对
1MB空间的寻址。
? 支持多处理器系统,8087 FPU
执行部件 取指部件
13
8086 CPU的两种工作模式
? 8086可工作于两种模式下,即:
最小模式和最大模式。
? 最小模式不支持 8087。存储器和 I/O控制信
号全部由 CPU产生。
? 最大模式支持 8087。 CPU的部分信号线被用
作 8087的控制,因此需要由 8288总线控制器
来产生这些控制信号。
注,80286以后的 CPU不再区分这两种工作模式。
14
最小模式下的连接示意图
8086
CPU
?? 控制总线
数据总线
地址总
线
地址
锁存器
数据总线
缓冲器
ALE
时钟发
生 器
8284A
地址 /数据
8286
8282
Vcc MN/MX
DEN
DT/R
15
最大模式下的连接示意图
8088
CPU 数据总线
地址总线
地址
锁存器
数据总线
缓冲器
时钟发
生 器
总 线
控制器 控制总线
8284A
8288
ALE
CLK
MN/MX
8282
8286
GND
16
8288总线控制器
? 最大模式下,8288总线控制器产生某些 CPU
不再提供的控制信号。
? 8288产生的信号包括:
? 独立的 I/O控制命令,IORC,IOWC
? 独立的存储器控制命令,MRDC,MWTC
? 中断响应信号和总线控制信号
? 以上三组信号取代了最小模式的:
? ALE,WR,IO/M,DT/R,DEN,INTA
17
8288总线控制器逻辑框图
控制
逻辑
命令
信号
产生器
控制
信号
产生器
状态
译码器
S0
S1
S2
CLK
AEN
CEN
IOB
DT/ R
DEN
MCE/PDEN
ALE
MCE/PDEN,PIC主控级连 / IO设备数据输出控制信号
IOB=0时,PIC主控级连;否则,用于允许 I/O总线收发器
MRDC( MEMR)
MWTC( MEMW)
AMWC
IORC ( IOR)
IOWC ( IOW)
AIOWC
INTA ( INTA)
18
二,8086CPU的引线及功能
引脚定义的方法可大致分为:
? 每个引脚只传送一种信息(如 RD)
? 电平的高低代表不同的含义(如 M/IO)
? 在不同模式下有不同的名称和定义(如 WR/LOCK)
? 分时复用引脚(如 AD15~ AD0)
? 引脚的输入、输出分别传送不同的信息(如 RQ/GT0)
19
最小模式下的主要引线
? MN/MX 工作模式控制
? =0(接地):工作于最大模式;
? =1(接 Vcc):工作于最小模式。
20
最小模式下的主要引线
地址总线、数据总线:
? AD15~ AD0,三态
? 地址 /数据复用引脚。 ALE=1时作为地址线
A16~ A0,ALE=0时作为数据线 D16~ D0。
? 传送地址时为输出,传送数据时为双向。
? A19-A16/S6-S3,输出,三态
? 地址 /状态复用引脚 。 ALE=1时作为地址线
A19~ A16,ALE=0时作为控制信号。
21
最小模式下的主要引线
控制信号:
? WR,输出,三态
? 写选通信号,表示 CPU正在写数据到 MEM或 I/O设备。
? RD,输出,三态
? 读信号,表示 CPU正在从总线上读来自于 MEM或 I/O设
备的数据。
? M/IO,输出,三态
? 区分是读写存储器还是读写 I/O端口(即地址总线上
的地址是存储器地址还是 I/O端口地址)。
22
最小模式下的主要引线
? DEN,输出,三态
? 数据总线允许信号。用来打开外部数据总线缓
冲器。
? DT/R:输出,三态
? 表明 CPU正在传送还是接收数据,用来作为外部
数据总线缓冲器的方向控制;
? ALE:输出
? 地址锁存允许信号,表示地址 /数据总线上传输
的是地址信号。
?以上三个信号的用法见下页图
23
数据 /地址分离电路 (最小模式 )
8282或 ’3738086
BHE/S7
A19-A16
/S6-S3
AD15-AD0
OE
8286或 ’245
OE
DIR
D15 - D0
DT/ R
ALE STB
A19 - A0
BHE
地址总线
数据总线
DEN
CPU总线 系统总线
24
最小模式下的主要引线
? RESET,输入
? 复位信号,保持 4个以上时钟周期的高电平时将引起 CPU进
入复位过程( IF清 0,并从存储单元 FFFF0H开始执行指令);
? BHE/S7:输出
? 高 8位数据总线允许。在读 /写操作期间允许 高 8位数据总线
D16~ D8有效(即读 /写数据的高 8位)。
? READY:输入
? 准备就绪。用于与存储器或 I/O接口的同步。
? =0时 CPU进入等待状态(插入 1个或多个等待周期)。
25
READY引脚的作用
总线周期
T2T1 T3 T4
时钟周期
总线周期
T2T1 T3 Twait T4
标准总
线周期
增加了等待
状态的总线
周期
若在 T3周期上升沿检测到 READY=0,将插入等待周期,插入的个数取决于 READY何时变为 1。
采样
26
中断请求和响应信号
? INTR,输入
? 可屏蔽中断请求输入端,CPU要检查 IF状态
? NMI,输入
? 非屏蔽中断请求输入端,CPU不检查 IF状态
? INTA,输出
? 中断响应信号,表示 CPU已进入中断响应周期。
? 此信号常用来选通中断向量号。
27
总线保持信号
? HOLD,输入
? 总线保持请求。用来直接存储器存取 (DMA)。当 CPU以外的其他设
备要求占用总线以便访问存储器时,通过此引脚向 CPU发出请求。
? HOLD=1时,CPU停止执行指令,并将地址 /数据总线和控制总线中
的所有三态控制线置为高阻状态。
? HLDA,输出
? 总线保持响应。 CPU对 HOLD信号的响应信号。指示 CPU已进入保
持状态。
28
其他信号
? TEST:输入
? 测试信号。执行 WAIT指令时将测试此引脚
的状态。
? =0时,WAIT指令相当于空操作 (NOP)。
? =1时,WAIT指令将重复测试直到它变为 0。
? 通常此引脚与 8087算术协处理器相连。
? CLK:输入
? 时钟引脚。为 CPU提供基本的定时信号。
? 占空比必须为 33% (高 1/3,低 2/3)。
29
三,8086CPU的内部结构
? 8086内部由两部分组成:
执行单元( EU)
总线接口单元( BIU)
结 构
30
执行单元
? 功能:执行指令,具体操作如下
从 IPQ中取指令代码
译码
完成指定的操作
结果保存到目的操作数
运算特征保存在标志寄存器 FLAGS(仅对影响标志的指令)
31
总线接口单元
功能:
? 从内存中取指令到指令预取队列 IPQ;
? 负责与内存或 I/O接口之间的数据传送;
? 在执行转移指令时,BIU将清除 IPQ,然后
从转移的目的地址处开始取指令并重新填充
IPQ。
32
8086结构特点小结
? 有 EU和 BIU两个独立的、同时运行的部件
? 二者通过 IPQ构成一个两工位流水线
? 指令被 EU和 BIU按流水线方式处理:
? 提高了 CPU的运行速度;
? 提高了 CPU的执行效率;
? 降低了对存储器存取速度的要求。
33
四,8086的工作时序
? 工作时序分为很多小的时间片,
? 时钟周期
一个时钟脉冲所持续的时间。时钟周期越短,
CPU执行速度越快。
? 总线周期
通过总线对存储器或 I/O接口进行一次访问所需
要的时间。一般包括 4个时钟周期。
在 5MHz的工作频率时,一个标准总线周期为 0.8μs。
34
总线周期中各时钟周期的操作
? T1周期
? CPU向存储器或 I/O发送地址
? CPU向地址 /数据分离器(地址锁存器)发送 ALE信号
? T2周期
? 给存储器或 I/O发送写入的数据
? 测试 READY引脚状态,以决定是否插入等待周期
? 发出 RD或 WR信号
? T3周期
? 等待存储器或 I/O存取数据完成
? 使数据在 CPU与存储器或 I/O之间传输
? T4周期
? 写入数据
读 /写总线周期的信号波形见下页图。
35
数据写入存储器时的总线操作
——写总线周期
总 线 周 期
T 1 T 1
T 2 T 2T 3
T 3T 4
T 4
总 线 周 期
有 效 地 址
有 效 地 址
地 址
写 入 存 储 器 的 数 据
地 址
写 入 存 储 器 的 数 据
C L K
地 址
地 址 / 数 据
W R
① 由 ALE信号将地址锁存到地址锁存器
② DEN=0并且 DT/R=1时打开总线
缓冲器,将其放到系统数据总线上
③ 此信号与 M/IO信号共同构成存储
器写控制信号,将数据写入存储器
36
数据从存储器读出的总线操作
——读总线周期
总 线 周 期
T 1 T 1
T 2 T 2T 3
T 3T 4
T 4
总 线 周 期
有 效 地 址, B H E
C L K
地 址
地 址 / 数 据
R D
地 址
来 自 存 储 器 的 数 据
地 址
来 自 存 储 器 的 数 据
有 效 地 址, B H E
③ DEN=0并且 DT/R=0时打开总线缓冲器,
将其放到 CPU总线上,供 CPU读入
较完整
的读总线
周期
② 此信号与 M/IO信号共同构成存
储器读控制信号
① 由 ALE信号将地址锁存到地址锁存器
37
§ 3.3 8086内部寄存器组
? 8086寄存器组又称为 8086的程序设计模型
? 它是程序设计中惟一可见的 CPU部件
? 它是系统程序设计员的操作对象
? 含 14个 16位寄存器,按功能可分为三类:
通用寄存器,8个
段寄存器,4个
控制寄存器,2个
38
8086寄存器概貌
SP
IP
FLAGS
AH AL
BH BL
CH CL
DH DL
AX
BX
CX
DX
BP
SI
DI
CS
DS
ES
SS
通用寄存器 控制寄存器
段寄存器
16位 16位
39
一、通用寄存器
数据寄存器( AX,BX,CX,DX)
地址指针寄存器( SP,BP)
变址寄存器( SI,DI)
40
数据寄存器
? 用途:存放 临时数据 和存放 运算操作数 。(例)
? 每个均为 16位,但又可分为 2个 8位寄存器,即:
? AX AH,AL
? BX BH,BL
? CX CH,CL
? DX DH,DL
例如:若 (AX)= 1234H,则 (AH)= 12H,(AL)= 34H
41
数据寄存器特有的习惯用法
? AX,累加器
? 所有 I/O指令都通过 AX( AL)与接口传送信息 ;
? 中间运算结果也多放于 AX( AL)中;
? 乘除法指令的一个操作数必须在 AX( AL)中。
? BX,基址寄存器
? 在 间接寻址 中用于存放操作数的基地址。
? CX,计数寄存器
? 用于在循环指令或串操作指令中存放计数值。
? DX,数据寄存器
? 在 间接寻址 的 I/O指令中存放 I/O端口地址;
? 在 32位乘除法运算时,存放高 16位数。
42
地址指针寄存器
? SP:堆栈指针寄存器
? 其内容为 堆栈 栈顶的偏移地址 ;
? 任何堆栈操作后,SP都会自动增 /减量。
? BP,基址指针寄存器
? 在 间接寻址 中用于存放操作数的基地址;
? 常用于访问存放在堆栈中的数据。
43
BX与 BP在应用上的区别
? 作为通用寄存器,二者均可用于存放数据;
? 作为基址寄存器,默认情况下:
? 用 BX作为指针所访问的数据在 数据段 ( DS段);
? 用 BP作为指针所访问的数据在 堆栈段 ( SS段)。
注:间接寻址时
仅 BX,BP,SI,DI可用于存储器寻址;
仅 DX可用于 I/O寻址。
44
变址寄存器
? SI,源变址寄存器,用于访问源操作数
? DI,目标变址寄存器,用于访问目的操作数
? 常用于操作数的 间接寻址 或 变址寻址 。
? 在串操作指令中,SI存放源操作数的偏移地
址,而 DI存放目标操作数的偏移地址。
45
二、段寄存器
用于存放逻辑段的段基地址(简称段地址)
? CS,代码段寄存器。代码段存放指令代码
? DS,数据段寄存器
? ES,附加段寄存器
? SS,堆栈段寄存器:指示堆栈区域的位置
这两个段存放操作数
堆栈段
SS
数据段
DS/ES
代码段
CS
46
三、控制寄存器
? IP,指令指针寄存器
? 其内容为下一条要执行的指令的偏移地址。
? FLAGS,标志寄存器
? 存放指令执行结果的特征:
? 有些指令(如算术指令)要改变 FLAGS的内容 (影响 FLAGS);
? 有些指令对 FLAGS无影响。
? 6个状态标志位( CF,SF,AF,PF,OF,ZF)
? 3个控制标志位( IF,TF,DF) P71例
O D I T S Z A P C
15 02467891011
FLAGS
47
§ 3.4 8086的 存储器组织
? 8086可访问 1MB的存储空间( 为什么? )
? 哪个寄存器能够放得下 20位的地址?
? 用 分段 的方法解决。
? 段是存储器中的一块区域
? 段起始于存储器内 16字节整倍数的边界处。
? 段首地址的最低 4位一定为 0
? 用 段 和 偏移 的组合访问存储单元
? 每个段最大为 64KB,最小为 16B( 为什么? )
? 所有存储单元的地址都由段地址加偏移地址组成
? 段地址被装入段寄存器中以供寻址使用
? 偏移地址用于在 64KB存储器段内选择任一单元
48
段和偏移
? 设段起始地址 =60000H
? 段地址
? 偏移地址
? 0~ FFFFH
6A000H 12H
60000H 6 0 0 0
段寄存器
偏移地址
= A000H
· ·
·
0 0 0 0
段地址 (16位 )
段起始地址
× × × ? ? ? × × ×
49
物理地址和逻辑地址
? 物理地址, 存储单元的硬件地址
物理地址 =段地址× 16 (或段地址左移 4位 )+偏移地址
? 逻辑地址, 段和偏移形式的地址
? 逻辑地址用于汇编语言程序设计
? 以下地址都是逻辑地址的例子:
? 2500H:0100H
? 段地址 A000H
? 偏移地址 0001H
50
例 1:
? 已知 CS=1055H,DS=250AH
ES=2EF0H,SS=8FF0H
数据段中某操作数偏移地址 =0204H
? 各段首地址 =?
? 画出各段在内存中的分布
? 该操作数的物理地址 =?
? 这个例子说明:
? 段与段可以不连续
? 段之间可以重叠
10550H
250A0H
2EF00H
8FF00H
DS段
ES段
SS段
CS段
51
默认段和偏移寄存器
? 8086规定了访问存储器段的规则:
? 此规则定义了段地址寄存器和偏移地址寄存器
的组合方式,其默认规则如下表:
段地址 默认偏移地址 用于访问
CS IP 指令
SS SP,BP 堆栈中的数据
DS BX,DI,SI,8位或 16位数 数据段中的数据
ES 串指令的 DI 目标串操作数
52
例 2:
? 设当前执行的程序中某条指令的物理地址为
5A1F6H,则程序所在的段的段地址 =?当前
CS的内容为多少?
? 解:(有多个解,求出任意一个即可)
5A1F6H=5A10H× 10H+00F6H
所以,段地址 =5A10H,CS的内容为 5A10H
想一想,还有哪些解?
思考题:设当前数据段位于存储器的 A8000H到 B7FFFH的地址空间,
问 DS的内容应是什么才能访问该数据段的所有存储单元?
53
堆栈及堆栈段的使用
? 堆栈:内存中一个特殊区域,用于存放需要保护的数据。
? 堆栈按 后进先出 方式工作
? 堆栈通过 SS(段地址)和 SP(偏移地址)来访问 —— 堆栈指针
? 堆栈的数据压入方向是 从高地址到低地址,弹出方向则相反
(堆栈指针的变化举例 )
? 常用于
? 响应中断
? 子程序调用
? 参数传递
54
例 3:
? 若已知( SS) =1000H
( SP) =2000H
? 则堆栈段的段起始地址 =?
? 栈顶地址 =?
? 若该段最后一个单元地址为
10100H
? 则栈底单元的偏移地址 =?
段起始
栈底
栈顶
堆
栈
段· · ·
55
§ 3.5 80X86微处理器
了解:
? 80X86存储器寻址方式
? 80386CPU的特点及存储管理
? *Pentium 微处理器
56
一,80X86的存储器寻址方式
? 实地址模式
? 用段地址和偏移地址的组合寻址内存的第一个 1MB空间
? 段地址在段寄存器( CS,DS,ES,SS)中
? 保护虚地址模式
? 80286,80386,80486,Pentium~ Pentium4
? 寻址空间(每个段的大小):
? 80286,224( 8MB)
? 80386以上,232( 4GB)
? 虚拟地址空间 64TB( 8K+8K个描述符)
? 段地址在内存的描述符中,描述符由段寄存器的内容来选择
(为什么这样做?)
57
保护模式的存储器寻址
1MB实模式存储器
扩展
存储器
由段寄存器
提供段信息
由描述符提
供段信息
FFFFFH
00000H
100000H
两种方式中的偏移
地址的用法相同
58
保护虚地址模式
? 描述符( Descriptor)
? 用于描述存储器段的位置、大小、访问权限
? 所有的描述符统一放在内存中的描述符表中
? 全局描述符表 GDT(系统中只有一个)
? 中断描述符表 IDT(系统中只有一个)
? 包含了指向 256个中断处理程序入口地址的描述符
? 局部描述符表 LDT(每个任务一个)
? GDT和 IDT的基地址由 GDTR和 IDTR给出
? LDT的基地址由 LDTR( 16位选择子)间接给出
? 选择子( Selector,选择符)
? 指定描述符在描述符表中的位置(偏移量)
59
如何访问描述符
段寄存器内容
(选择子)
全局描述符表
局部描述符表描述符表
GDTR
15 0GDT
描述符
··
·
··
·
线
性
地
址
空
间偏移
当
前
访
问
的
段
存储器
60
描述符的格式( 80386以上)
访问权限
段界限 (L19-L16)
G( 粒度 ) G=1,界限要乘以 4KB,即段的大小为 4KB~ 4GB;
G=0,段的大小为 0~ 1MB。
D(16/32) D=1,寄存器和偏移地址均为 32位; D=0时均为 16位。
AV(段有效 ) AV=1,段有效; AV=0,段无效。
访问权限,在保护方式下控制存储的访问。如:能否读写、优先
级别、段如何扩展等。
15 8 7 6 5 4 3 0
段基址 (B31~ B24) DG 0 AV
0
2
4
6
1
3
5
7
段基址 (B23~ B16)
段基址 (B15~ B0)
段界限 (L15~ L0)
61
例,
0008H
DS
描述符表
FF
00
00
00
10
00
00
92
段界限
段基地址
00100000H
001000FFH
数据段
描述符
存储器
粒度 =0
GDTR 00000000H
FFFFFFFFH
62
选择子的格式
? 选择子:加载到段寄存器中的内容
选择子( Selector),13位 TI RPL
15 3 2 1 0
从 8192个全局描述符或 8192个
局部描述符中选择一个描述符
=0 使用 GDTR作为描述符表的段基址,即访问 GDT
=1 使用 LDTR作为描述符表的段基址,即访问 LDT
请求者优先级别
00 最高,11最低
63
访问局部描述符表 LDT
? 将选择子装入 LDTR(用 LLDT指令):
? (以下操作由 CPU自动完成)
? 根据 LDTR中的选择子到 GDT中选择一个 LDT
的描述符(即 LDT的描述符在 GDT中):
? 这个描述符给出了 LDT的基地址和段界限;
? 它被自动复制到 LDTR的高速缓冲区中。
? 可以看出,LDTR是 GDT中的某个 LDT描述符
的偏移地址,见下页图示。
? 以后就可以用 LDTR高速缓冲区中的基地址来
访问局部描述符表了。
64
访问局部描述符表 LDT
选择子
GDTR
15 0GDT
LDT
描述符
··
·
··
·
LDTR 基地址 界限 权限
LLDT
偏移量
15 0LDT
··
·
··
·
段寄存器
偏移量
65
二,80386CPU
主要特性:
? 全 32位结构 (ALU,BUS,Reg),可处理 8/16/32位数据
? 物理寻址空间 232字节( 4GB)
? 外部数据总线传输率为 33MB/s
? 片内集成 MMU,支持段式或页式虚拟存储管理和特权保护
? 虚存空间 64TB,1MB或 4GB/段,16384段 /任务
? 4级特权层:一般 OS为 0,1,2级,用户程序为 3级
? 实地址方式、虚拟 8086方式和保护方式
? 硬件支持多任务,一条指令可完成任务转换,转换时间 ≤17us
? 更先进的流水线结构,16字节指令队列
? 时钟速度,16~ 33MHz
66
1,内部结构
分三个部分:
? 总线接口单元( BIU)
? 与存储器和接口间的数据传送
? 中央处理单元( CPU)
? 指令预取部件、指令译码部件、执行部件
? 指令译码和执行
? 存储器管理单元( MMU)
? 段管理部件、页管理部件
? 地址转换、虚存管理
内部
结构
67
2,主要引线功能
? D0~ D31,双向,32位数据总线 ;
? A2~ A31,输出,30位地址总线;
? BE0~ BE3:字节选通输出,与 30位地址线结合可
相当于 32位地址;
? W/R:输出,写 /读控制信号;
? D/C:输出,数据传送周期 /控制周期;
? BS16:输入,有效则总线宽度为 16位;
? ADS:输出,地址信号有效;
? NA:输入,下一地址请求信号;
? 其他信号与 8086基本一致
68
3,内部寄存器组
? 共 34个内部寄存器
8个通用寄存器( 32/16/8位)
6个段寄存器( 16位)
指令指针( 32/16位)
标志寄存器( 32/16位)
4个系统地址寄存器( 32+20位 /16位)
控制寄存器
调试和测试寄存器
69
通用寄存器组( 32/16/8位)
? EAX
? EBX
? ECX
? EDX
? ESI
? EDI
? EBP
? ESP
低 16位可分为两个 8位寄存器
低 16位可作为独立的寄存器
注,32位寻址时,这 8个 32位寄
存器全部可用于提供偏移地址。
70
段寄存器( 16位)
? CS
? DS
? ES
? SS
? FS
? GS
每个 16位 段寄存器对应一个
64位 的高速缓冲段描述符
一旦选择子装入段寄存器,
相应的段描述符立刻被自动
装入高速缓冲段描述符中
新增的 2个段寄存器
71
指令指针及标志寄存器( 32位)
? 指令指针 EIP
? 标志寄存器 EFLAGS(增加了 4个标志位)
IOPL——指定 I/0操作处于哪个特权级;
NT——当前任务是否嵌套于另一任务;
RF——调试结束,下一条指令后恢复程序的执行;
VM——是否工作于虚拟 8086方式
EFLAG
S
72
系统地址段寄存器(程序不可见)
? GDTR——48位全局描述符表寄存器
? 指示全局描述符表的 基地址 (32位 )和 表的界限 (16位 )
? IDTR —— 48位中断描述符表寄存器
? 指示中断描述符表的 基地址 (32位 )和 表的界限 (16位 )
? TR —— 16位任务状态寄存器
? LDTR——16位局部描述符表寄存器
以上这些寄存器不直接被程序访问。
73
程序不可见的寄存器
CS
DS
ES
SS
FS
GS
基地址 界限 权限
TR
LDTR
基地址 界限GDTR
IDTR
基地址 界限 权限
程序不可见区域
描述符(寄存器)高速缓冲区
74
4,80386的工作模式小结
? 实模式
? 只允许 CPU访问第一个 1MB存储器空间
? 实模式存储器 /常规内存
? 每次加电 /复位后默认的工作方式
? 存储单元的地址都由, 段+偏移, 组成
? 保护模式
? 允许 CPU访问所有存储器空间
? 段地址由描述符提供,描述符由选择子在描述符表中选择
? 分页机制
? 虚拟 8086模式
? 在保护模式下模拟多个 8086工作环境
地址转
换
75
三,Pentium 4 CPU简介
? 物理特性(三个版本)
? 2000.8 Willamette
? 0.18u铝工艺
? 1.4GHz ~ 2.0GHz
? Socket 423/3400万晶体管,Socket 478/4200万晶体管
? FSB 400/533MHz
? 12KμOps+8KB L1+256KB L2
? 2001.2 Northwood
? 0.13u铝 /铜工艺
? 1.6GHz ~ 3.06GHz
? Socket 478,5500万晶体管
? FSB 533/800MHz
? 12KμOps+8KB L1+512KB L2+2MB L3(XE版本 )
? 2004.2 Prescott
? 0.09u铜工艺
? 2.8GHz ~?
? Socket 478/SocketT,12500万晶体管
? FSB 800MHz
? 16KμOps+16KB L1+1MB L2
76
Pentium 4 CPU简介
? Netburst体系结构
? 2个 2x ALU+ 1个 1x ALU,两个 2x AGU(地址 )
? 超级流水线,20级
? 高级动态执行
? 乱序执行:一条指令暂时不能执行时,后面的指令可继续执行
? 推测执行:为保证流水线不间断,先执行再判断,发现预测错误时再返
回错误点重新开始
? 同时执行 126条指令
? 同时执行 48个读取操作和 24个存储操作
? 增强的分支预测能力
? 分支目标缓存 BTB,可追踪 4096个分支目标地址
? 新型缓存体系结构
? 12K微指令追踪缓存,存放已执行过的指令,以便分支预测错误时能够
立即恢复到错误的分支点
? 8KB L1数据缓存
? 256KB~ 512KB L2高级传输缓存
? 4倍速总线接口
? 总线频率 100MHz( 133MHz) *4= 400MHz( 533MHz) FSB
77
Pentium 4 CPU简介
? 增强的单指令多数据流指令集 SSE2
? 144条 128位多媒体指令
? 128位整数运算,128位双精度浮点运算
? 改善了视频、音频,3D图形、网络等领域的数
据处理能力
? 存储管理基本同 80386
? 基本运行环境
78
第 3章作业:
? 3.1
? 3.5
? 3.6
? 3.10
? 3.11
? 3.13
? 3.16
? 3.20
第 3章
微处理器
2
主要内容
? 微处理器的一般结构;
? 8086微处理器的组成、引脚功能;
? 8086的内部寄存器和标志位;
? 8086的存储器组织;
? 实模式和保护模式的存储器寻址;
? 80X86系列微处理器的结构特点。
3
§ 3.1 微处理器的一般结构
运算器 算术逻辑运算,由加法器和
(ALU) 一 些辅助逻辑电路组成
指令流控制
控制器 时序控制,产生节拍定时信号
指令译码和操作控制
寄存器组 存放临时数据、运算的中
间结果、运算特征、操作数地址
性能,8位 → 16位 → 32位 (主流 )→ 64位 (趋势 )
主
要
部
件
4
§ 3.2 8086微处理器
主要内容:
? 8086外部引线及功能;
? 8086的内部结构和特点;
? 8086的工作时序。
5
8086的硬件特性
? 16位微处理器,CMOS型,40引脚 DIP封装
? 16位数据总线,20位地址总线
? 功耗:+ 5V,360mA(低功耗型 80C86仅需 10mA)
? 输入特性:输入电流 ≤0.01mA
? 逻辑 0,≤0.8V
? 逻辑 1,≥2.0V
? 输出特性:
? 逻辑 0,≤0.45V,最大 2.0mA
? 逻辑 1,≥2.4V,最大 -0.4mA
? 输出引脚负载能力:
? 74HC,74ALS,74AS,74F负载 ≤10个
? 74LS负载 ≤5个
? 74,74S负载 ≤1个
6
一、指令流水线
取指令 指令译码 取操作数 执行指令 存放结果
? CPU执行一条指令的过程类似于工厂生产流水线,被分
解为多个小的步骤,称为指令流水线。
原料 调度分配 生产线 成品 仓库 出厂
数据和程
序指令
控制器的
调度分配
ALU等
功能部件
处理后的
数据 存储器 输出
7
指令流水线
? 指令流水线有两种运作方式:
? 串行方式,
取指令 和 执行指令 在不同的时刻按顺序执行。
? 并行方式,
取指令 和 执行指令 可同时执行,需要有能并行工作
的硬件的支持。
8
串行 工作 方式
? 8086以前的 CPU采用串行工作方式
取指令 1 执行 1 取指令 2 执行 2CPU
BUS 忙 碌 忙 碌
取指令 3 执行 3
忙 碌空闲 空闲 空闲
t1t0 t2 t3 t4 t5
?6个周期执行了 3条指令
9
并行工作方式
? 8086CPU采用并行工作方式
取指令 1
取指令 2
取指令 3
取指令 4
执行 1
执行 2
执行 3
BUS 忙碌
执行 4
CPU
t1t0 t2 t3 t4 t5
取指令 5 执行 5
忙碌 忙碌 忙碌 忙碌 忙碌
?6个周期
执行了 5条
指令
10
并行操作的前提
? 取指令部件和指令执行部件要能够并行工作;
? 各部件执行时间基本相同,否则需再细分;
? 取指令部件取出的指令要能暂存在 CPU内部
某个地方;
? 指令执行部件在需要时总能立即获得暂存的
指令;
? 需要解决转移指令问题。
11
*超级流水线和超标量结构
? 超级流水线
? 指令的执行步骤分得更细,流水线长度更长
例如,PIII为 14个阶段,P4为 20个阶段
? 有利于提高主频
? 转移分支时的效率?
? 解决:分支预测、推测执行
? 超标量结构
? 对流水线中的关键, 岗位, 设置多个相同的执行单
元 —— 多个工人完成一道工序
? P4:倍频 ALU× 2,FPU× 2(其中一个为并行 FPU)
? Athlon XP,ALU× 6,并行 FPU× 3组
12
8086 CPU的特点
? 采用并行流水线工作方式:
通过设置指令预取队列( IPQ)实现
? 对内存空间实行分段管理:
将内存分段并设置地址段寄存器,以实现对
1MB空间的寻址。
? 支持多处理器系统,8087 FPU
执行部件 取指部件
13
8086 CPU的两种工作模式
? 8086可工作于两种模式下,即:
最小模式和最大模式。
? 最小模式不支持 8087。存储器和 I/O控制信
号全部由 CPU产生。
? 最大模式支持 8087。 CPU的部分信号线被用
作 8087的控制,因此需要由 8288总线控制器
来产生这些控制信号。
注,80286以后的 CPU不再区分这两种工作模式。
14
最小模式下的连接示意图
8086
CPU
?? 控制总线
数据总线
地址总
线
地址
锁存器
数据总线
缓冲器
ALE
时钟发
生 器
8284A
地址 /数据
8286
8282
Vcc MN/MX
DEN
DT/R
15
最大模式下的连接示意图
8088
CPU 数据总线
地址总线
地址
锁存器
数据总线
缓冲器
时钟发
生 器
总 线
控制器 控制总线
8284A
8288
ALE
CLK
MN/MX
8282
8286
GND
16
8288总线控制器
? 最大模式下,8288总线控制器产生某些 CPU
不再提供的控制信号。
? 8288产生的信号包括:
? 独立的 I/O控制命令,IORC,IOWC
? 独立的存储器控制命令,MRDC,MWTC
? 中断响应信号和总线控制信号
? 以上三组信号取代了最小模式的:
? ALE,WR,IO/M,DT/R,DEN,INTA
17
8288总线控制器逻辑框图
控制
逻辑
命令
信号
产生器
控制
信号
产生器
状态
译码器
S0
S1
S2
CLK
AEN
CEN
IOB
DT/ R
DEN
MCE/PDEN
ALE
MCE/PDEN,PIC主控级连 / IO设备数据输出控制信号
IOB=0时,PIC主控级连;否则,用于允许 I/O总线收发器
MRDC( MEMR)
MWTC( MEMW)
AMWC
IORC ( IOR)
IOWC ( IOW)
AIOWC
INTA ( INTA)
18
二,8086CPU的引线及功能
引脚定义的方法可大致分为:
? 每个引脚只传送一种信息(如 RD)
? 电平的高低代表不同的含义(如 M/IO)
? 在不同模式下有不同的名称和定义(如 WR/LOCK)
? 分时复用引脚(如 AD15~ AD0)
? 引脚的输入、输出分别传送不同的信息(如 RQ/GT0)
19
最小模式下的主要引线
? MN/MX 工作模式控制
? =0(接地):工作于最大模式;
? =1(接 Vcc):工作于最小模式。
20
最小模式下的主要引线
地址总线、数据总线:
? AD15~ AD0,三态
? 地址 /数据复用引脚。 ALE=1时作为地址线
A16~ A0,ALE=0时作为数据线 D16~ D0。
? 传送地址时为输出,传送数据时为双向。
? A19-A16/S6-S3,输出,三态
? 地址 /状态复用引脚 。 ALE=1时作为地址线
A19~ A16,ALE=0时作为控制信号。
21
最小模式下的主要引线
控制信号:
? WR,输出,三态
? 写选通信号,表示 CPU正在写数据到 MEM或 I/O设备。
? RD,输出,三态
? 读信号,表示 CPU正在从总线上读来自于 MEM或 I/O设
备的数据。
? M/IO,输出,三态
? 区分是读写存储器还是读写 I/O端口(即地址总线上
的地址是存储器地址还是 I/O端口地址)。
22
最小模式下的主要引线
? DEN,输出,三态
? 数据总线允许信号。用来打开外部数据总线缓
冲器。
? DT/R:输出,三态
? 表明 CPU正在传送还是接收数据,用来作为外部
数据总线缓冲器的方向控制;
? ALE:输出
? 地址锁存允许信号,表示地址 /数据总线上传输
的是地址信号。
?以上三个信号的用法见下页图
23
数据 /地址分离电路 (最小模式 )
8282或 ’3738086
BHE/S7
A19-A16
/S6-S3
AD15-AD0
OE
8286或 ’245
OE
DIR
D15 - D0
DT/ R
ALE STB
A19 - A0
BHE
地址总线
数据总线
DEN
CPU总线 系统总线
24
最小模式下的主要引线
? RESET,输入
? 复位信号,保持 4个以上时钟周期的高电平时将引起 CPU进
入复位过程( IF清 0,并从存储单元 FFFF0H开始执行指令);
? BHE/S7:输出
? 高 8位数据总线允许。在读 /写操作期间允许 高 8位数据总线
D16~ D8有效(即读 /写数据的高 8位)。
? READY:输入
? 准备就绪。用于与存储器或 I/O接口的同步。
? =0时 CPU进入等待状态(插入 1个或多个等待周期)。
25
READY引脚的作用
总线周期
T2T1 T3 T4
时钟周期
总线周期
T2T1 T3 Twait T4
标准总
线周期
增加了等待
状态的总线
周期
若在 T3周期上升沿检测到 READY=0,将插入等待周期,插入的个数取决于 READY何时变为 1。
采样
26
中断请求和响应信号
? INTR,输入
? 可屏蔽中断请求输入端,CPU要检查 IF状态
? NMI,输入
? 非屏蔽中断请求输入端,CPU不检查 IF状态
? INTA,输出
? 中断响应信号,表示 CPU已进入中断响应周期。
? 此信号常用来选通中断向量号。
27
总线保持信号
? HOLD,输入
? 总线保持请求。用来直接存储器存取 (DMA)。当 CPU以外的其他设
备要求占用总线以便访问存储器时,通过此引脚向 CPU发出请求。
? HOLD=1时,CPU停止执行指令,并将地址 /数据总线和控制总线中
的所有三态控制线置为高阻状态。
? HLDA,输出
? 总线保持响应。 CPU对 HOLD信号的响应信号。指示 CPU已进入保
持状态。
28
其他信号
? TEST:输入
? 测试信号。执行 WAIT指令时将测试此引脚
的状态。
? =0时,WAIT指令相当于空操作 (NOP)。
? =1时,WAIT指令将重复测试直到它变为 0。
? 通常此引脚与 8087算术协处理器相连。
? CLK:输入
? 时钟引脚。为 CPU提供基本的定时信号。
? 占空比必须为 33% (高 1/3,低 2/3)。
29
三,8086CPU的内部结构
? 8086内部由两部分组成:
执行单元( EU)
总线接口单元( BIU)
结 构
30
执行单元
? 功能:执行指令,具体操作如下
从 IPQ中取指令代码
译码
完成指定的操作
结果保存到目的操作数
运算特征保存在标志寄存器 FLAGS(仅对影响标志的指令)
31
总线接口单元
功能:
? 从内存中取指令到指令预取队列 IPQ;
? 负责与内存或 I/O接口之间的数据传送;
? 在执行转移指令时,BIU将清除 IPQ,然后
从转移的目的地址处开始取指令并重新填充
IPQ。
32
8086结构特点小结
? 有 EU和 BIU两个独立的、同时运行的部件
? 二者通过 IPQ构成一个两工位流水线
? 指令被 EU和 BIU按流水线方式处理:
? 提高了 CPU的运行速度;
? 提高了 CPU的执行效率;
? 降低了对存储器存取速度的要求。
33
四,8086的工作时序
? 工作时序分为很多小的时间片,
? 时钟周期
一个时钟脉冲所持续的时间。时钟周期越短,
CPU执行速度越快。
? 总线周期
通过总线对存储器或 I/O接口进行一次访问所需
要的时间。一般包括 4个时钟周期。
在 5MHz的工作频率时,一个标准总线周期为 0.8μs。
34
总线周期中各时钟周期的操作
? T1周期
? CPU向存储器或 I/O发送地址
? CPU向地址 /数据分离器(地址锁存器)发送 ALE信号
? T2周期
? 给存储器或 I/O发送写入的数据
? 测试 READY引脚状态,以决定是否插入等待周期
? 发出 RD或 WR信号
? T3周期
? 等待存储器或 I/O存取数据完成
? 使数据在 CPU与存储器或 I/O之间传输
? T4周期
? 写入数据
读 /写总线周期的信号波形见下页图。
35
数据写入存储器时的总线操作
——写总线周期
总 线 周 期
T 1 T 1
T 2 T 2T 3
T 3T 4
T 4
总 线 周 期
有 效 地 址
有 效 地 址
地 址
写 入 存 储 器 的 数 据
地 址
写 入 存 储 器 的 数 据
C L K
地 址
地 址 / 数 据
W R
① 由 ALE信号将地址锁存到地址锁存器
② DEN=0并且 DT/R=1时打开总线
缓冲器,将其放到系统数据总线上
③ 此信号与 M/IO信号共同构成存储
器写控制信号,将数据写入存储器
36
数据从存储器读出的总线操作
——读总线周期
总 线 周 期
T 1 T 1
T 2 T 2T 3
T 3T 4
T 4
总 线 周 期
有 效 地 址, B H E
C L K
地 址
地 址 / 数 据
R D
地 址
来 自 存 储 器 的 数 据
地 址
来 自 存 储 器 的 数 据
有 效 地 址, B H E
③ DEN=0并且 DT/R=0时打开总线缓冲器,
将其放到 CPU总线上,供 CPU读入
较完整
的读总线
周期
② 此信号与 M/IO信号共同构成存
储器读控制信号
① 由 ALE信号将地址锁存到地址锁存器
37
§ 3.3 8086内部寄存器组
? 8086寄存器组又称为 8086的程序设计模型
? 它是程序设计中惟一可见的 CPU部件
? 它是系统程序设计员的操作对象
? 含 14个 16位寄存器,按功能可分为三类:
通用寄存器,8个
段寄存器,4个
控制寄存器,2个
38
8086寄存器概貌
SP
IP
FLAGS
AH AL
BH BL
CH CL
DH DL
AX
BX
CX
DX
BP
SI
DI
CS
DS
ES
SS
通用寄存器 控制寄存器
段寄存器
16位 16位
39
一、通用寄存器
数据寄存器( AX,BX,CX,DX)
地址指针寄存器( SP,BP)
变址寄存器( SI,DI)
40
数据寄存器
? 用途:存放 临时数据 和存放 运算操作数 。(例)
? 每个均为 16位,但又可分为 2个 8位寄存器,即:
? AX AH,AL
? BX BH,BL
? CX CH,CL
? DX DH,DL
例如:若 (AX)= 1234H,则 (AH)= 12H,(AL)= 34H
41
数据寄存器特有的习惯用法
? AX,累加器
? 所有 I/O指令都通过 AX( AL)与接口传送信息 ;
? 中间运算结果也多放于 AX( AL)中;
? 乘除法指令的一个操作数必须在 AX( AL)中。
? BX,基址寄存器
? 在 间接寻址 中用于存放操作数的基地址。
? CX,计数寄存器
? 用于在循环指令或串操作指令中存放计数值。
? DX,数据寄存器
? 在 间接寻址 的 I/O指令中存放 I/O端口地址;
? 在 32位乘除法运算时,存放高 16位数。
42
地址指针寄存器
? SP:堆栈指针寄存器
? 其内容为 堆栈 栈顶的偏移地址 ;
? 任何堆栈操作后,SP都会自动增 /减量。
? BP,基址指针寄存器
? 在 间接寻址 中用于存放操作数的基地址;
? 常用于访问存放在堆栈中的数据。
43
BX与 BP在应用上的区别
? 作为通用寄存器,二者均可用于存放数据;
? 作为基址寄存器,默认情况下:
? 用 BX作为指针所访问的数据在 数据段 ( DS段);
? 用 BP作为指针所访问的数据在 堆栈段 ( SS段)。
注:间接寻址时
仅 BX,BP,SI,DI可用于存储器寻址;
仅 DX可用于 I/O寻址。
44
变址寄存器
? SI,源变址寄存器,用于访问源操作数
? DI,目标变址寄存器,用于访问目的操作数
? 常用于操作数的 间接寻址 或 变址寻址 。
? 在串操作指令中,SI存放源操作数的偏移地
址,而 DI存放目标操作数的偏移地址。
45
二、段寄存器
用于存放逻辑段的段基地址(简称段地址)
? CS,代码段寄存器。代码段存放指令代码
? DS,数据段寄存器
? ES,附加段寄存器
? SS,堆栈段寄存器:指示堆栈区域的位置
这两个段存放操作数
堆栈段
SS
数据段
DS/ES
代码段
CS
46
三、控制寄存器
? IP,指令指针寄存器
? 其内容为下一条要执行的指令的偏移地址。
? FLAGS,标志寄存器
? 存放指令执行结果的特征:
? 有些指令(如算术指令)要改变 FLAGS的内容 (影响 FLAGS);
? 有些指令对 FLAGS无影响。
? 6个状态标志位( CF,SF,AF,PF,OF,ZF)
? 3个控制标志位( IF,TF,DF) P71例
O D I T S Z A P C
15 02467891011
FLAGS
47
§ 3.4 8086的 存储器组织
? 8086可访问 1MB的存储空间( 为什么? )
? 哪个寄存器能够放得下 20位的地址?
? 用 分段 的方法解决。
? 段是存储器中的一块区域
? 段起始于存储器内 16字节整倍数的边界处。
? 段首地址的最低 4位一定为 0
? 用 段 和 偏移 的组合访问存储单元
? 每个段最大为 64KB,最小为 16B( 为什么? )
? 所有存储单元的地址都由段地址加偏移地址组成
? 段地址被装入段寄存器中以供寻址使用
? 偏移地址用于在 64KB存储器段内选择任一单元
48
段和偏移
? 设段起始地址 =60000H
? 段地址
? 偏移地址
? 0~ FFFFH
6A000H 12H
60000H 6 0 0 0
段寄存器
偏移地址
= A000H
· ·
·
0 0 0 0
段地址 (16位 )
段起始地址
× × × ? ? ? × × ×
49
物理地址和逻辑地址
? 物理地址, 存储单元的硬件地址
物理地址 =段地址× 16 (或段地址左移 4位 )+偏移地址
? 逻辑地址, 段和偏移形式的地址
? 逻辑地址用于汇编语言程序设计
? 以下地址都是逻辑地址的例子:
? 2500H:0100H
? 段地址 A000H
? 偏移地址 0001H
50
例 1:
? 已知 CS=1055H,DS=250AH
ES=2EF0H,SS=8FF0H
数据段中某操作数偏移地址 =0204H
? 各段首地址 =?
? 画出各段在内存中的分布
? 该操作数的物理地址 =?
? 这个例子说明:
? 段与段可以不连续
? 段之间可以重叠
10550H
250A0H
2EF00H
8FF00H
DS段
ES段
SS段
CS段
51
默认段和偏移寄存器
? 8086规定了访问存储器段的规则:
? 此规则定义了段地址寄存器和偏移地址寄存器
的组合方式,其默认规则如下表:
段地址 默认偏移地址 用于访问
CS IP 指令
SS SP,BP 堆栈中的数据
DS BX,DI,SI,8位或 16位数 数据段中的数据
ES 串指令的 DI 目标串操作数
52
例 2:
? 设当前执行的程序中某条指令的物理地址为
5A1F6H,则程序所在的段的段地址 =?当前
CS的内容为多少?
? 解:(有多个解,求出任意一个即可)
5A1F6H=5A10H× 10H+00F6H
所以,段地址 =5A10H,CS的内容为 5A10H
想一想,还有哪些解?
思考题:设当前数据段位于存储器的 A8000H到 B7FFFH的地址空间,
问 DS的内容应是什么才能访问该数据段的所有存储单元?
53
堆栈及堆栈段的使用
? 堆栈:内存中一个特殊区域,用于存放需要保护的数据。
? 堆栈按 后进先出 方式工作
? 堆栈通过 SS(段地址)和 SP(偏移地址)来访问 —— 堆栈指针
? 堆栈的数据压入方向是 从高地址到低地址,弹出方向则相反
(堆栈指针的变化举例 )
? 常用于
? 响应中断
? 子程序调用
? 参数传递
54
例 3:
? 若已知( SS) =1000H
( SP) =2000H
? 则堆栈段的段起始地址 =?
? 栈顶地址 =?
? 若该段最后一个单元地址为
10100H
? 则栈底单元的偏移地址 =?
段起始
栈底
栈顶
堆
栈
段· · ·
55
§ 3.5 80X86微处理器
了解:
? 80X86存储器寻址方式
? 80386CPU的特点及存储管理
? *Pentium 微处理器
56
一,80X86的存储器寻址方式
? 实地址模式
? 用段地址和偏移地址的组合寻址内存的第一个 1MB空间
? 段地址在段寄存器( CS,DS,ES,SS)中
? 保护虚地址模式
? 80286,80386,80486,Pentium~ Pentium4
? 寻址空间(每个段的大小):
? 80286,224( 8MB)
? 80386以上,232( 4GB)
? 虚拟地址空间 64TB( 8K+8K个描述符)
? 段地址在内存的描述符中,描述符由段寄存器的内容来选择
(为什么这样做?)
57
保护模式的存储器寻址
1MB实模式存储器
扩展
存储器
由段寄存器
提供段信息
由描述符提
供段信息
FFFFFH
00000H
100000H
两种方式中的偏移
地址的用法相同
58
保护虚地址模式
? 描述符( Descriptor)
? 用于描述存储器段的位置、大小、访问权限
? 所有的描述符统一放在内存中的描述符表中
? 全局描述符表 GDT(系统中只有一个)
? 中断描述符表 IDT(系统中只有一个)
? 包含了指向 256个中断处理程序入口地址的描述符
? 局部描述符表 LDT(每个任务一个)
? GDT和 IDT的基地址由 GDTR和 IDTR给出
? LDT的基地址由 LDTR( 16位选择子)间接给出
? 选择子( Selector,选择符)
? 指定描述符在描述符表中的位置(偏移量)
59
如何访问描述符
段寄存器内容
(选择子)
全局描述符表
局部描述符表描述符表
GDTR
15 0GDT
描述符
··
·
··
·
线
性
地
址
空
间偏移
当
前
访
问
的
段
存储器
60
描述符的格式( 80386以上)
访问权限
段界限 (L19-L16)
G( 粒度 ) G=1,界限要乘以 4KB,即段的大小为 4KB~ 4GB;
G=0,段的大小为 0~ 1MB。
D(16/32) D=1,寄存器和偏移地址均为 32位; D=0时均为 16位。
AV(段有效 ) AV=1,段有效; AV=0,段无效。
访问权限,在保护方式下控制存储的访问。如:能否读写、优先
级别、段如何扩展等。
15 8 7 6 5 4 3 0
段基址 (B31~ B24) DG 0 AV
0
2
4
6
1
3
5
7
段基址 (B23~ B16)
段基址 (B15~ B0)
段界限 (L15~ L0)
61
例,
0008H
DS
描述符表
FF
00
00
00
10
00
00
92
段界限
段基地址
00100000H
001000FFH
数据段
描述符
存储器
粒度 =0
GDTR 00000000H
FFFFFFFFH
62
选择子的格式
? 选择子:加载到段寄存器中的内容
选择子( Selector),13位 TI RPL
15 3 2 1 0
从 8192个全局描述符或 8192个
局部描述符中选择一个描述符
=0 使用 GDTR作为描述符表的段基址,即访问 GDT
=1 使用 LDTR作为描述符表的段基址,即访问 LDT
请求者优先级别
00 最高,11最低
63
访问局部描述符表 LDT
? 将选择子装入 LDTR(用 LLDT指令):
? (以下操作由 CPU自动完成)
? 根据 LDTR中的选择子到 GDT中选择一个 LDT
的描述符(即 LDT的描述符在 GDT中):
? 这个描述符给出了 LDT的基地址和段界限;
? 它被自动复制到 LDTR的高速缓冲区中。
? 可以看出,LDTR是 GDT中的某个 LDT描述符
的偏移地址,见下页图示。
? 以后就可以用 LDTR高速缓冲区中的基地址来
访问局部描述符表了。
64
访问局部描述符表 LDT
选择子
GDTR
15 0GDT
LDT
描述符
··
·
··
·
LDTR 基地址 界限 权限
LLDT
偏移量
15 0LDT
··
·
··
·
段寄存器
偏移量
65
二,80386CPU
主要特性:
? 全 32位结构 (ALU,BUS,Reg),可处理 8/16/32位数据
? 物理寻址空间 232字节( 4GB)
? 外部数据总线传输率为 33MB/s
? 片内集成 MMU,支持段式或页式虚拟存储管理和特权保护
? 虚存空间 64TB,1MB或 4GB/段,16384段 /任务
? 4级特权层:一般 OS为 0,1,2级,用户程序为 3级
? 实地址方式、虚拟 8086方式和保护方式
? 硬件支持多任务,一条指令可完成任务转换,转换时间 ≤17us
? 更先进的流水线结构,16字节指令队列
? 时钟速度,16~ 33MHz
66
1,内部结构
分三个部分:
? 总线接口单元( BIU)
? 与存储器和接口间的数据传送
? 中央处理单元( CPU)
? 指令预取部件、指令译码部件、执行部件
? 指令译码和执行
? 存储器管理单元( MMU)
? 段管理部件、页管理部件
? 地址转换、虚存管理
内部
结构
67
2,主要引线功能
? D0~ D31,双向,32位数据总线 ;
? A2~ A31,输出,30位地址总线;
? BE0~ BE3:字节选通输出,与 30位地址线结合可
相当于 32位地址;
? W/R:输出,写 /读控制信号;
? D/C:输出,数据传送周期 /控制周期;
? BS16:输入,有效则总线宽度为 16位;
? ADS:输出,地址信号有效;
? NA:输入,下一地址请求信号;
? 其他信号与 8086基本一致
68
3,内部寄存器组
? 共 34个内部寄存器
8个通用寄存器( 32/16/8位)
6个段寄存器( 16位)
指令指针( 32/16位)
标志寄存器( 32/16位)
4个系统地址寄存器( 32+20位 /16位)
控制寄存器
调试和测试寄存器
69
通用寄存器组( 32/16/8位)
? EAX
? EBX
? ECX
? EDX
? ESI
? EDI
? EBP
? ESP
低 16位可分为两个 8位寄存器
低 16位可作为独立的寄存器
注,32位寻址时,这 8个 32位寄
存器全部可用于提供偏移地址。
70
段寄存器( 16位)
? CS
? DS
? ES
? SS
? FS
? GS
每个 16位 段寄存器对应一个
64位 的高速缓冲段描述符
一旦选择子装入段寄存器,
相应的段描述符立刻被自动
装入高速缓冲段描述符中
新增的 2个段寄存器
71
指令指针及标志寄存器( 32位)
? 指令指针 EIP
? 标志寄存器 EFLAGS(增加了 4个标志位)
IOPL——指定 I/0操作处于哪个特权级;
NT——当前任务是否嵌套于另一任务;
RF——调试结束,下一条指令后恢复程序的执行;
VM——是否工作于虚拟 8086方式
EFLAG
S
72
系统地址段寄存器(程序不可见)
? GDTR——48位全局描述符表寄存器
? 指示全局描述符表的 基地址 (32位 )和 表的界限 (16位 )
? IDTR —— 48位中断描述符表寄存器
? 指示中断描述符表的 基地址 (32位 )和 表的界限 (16位 )
? TR —— 16位任务状态寄存器
? LDTR——16位局部描述符表寄存器
以上这些寄存器不直接被程序访问。
73
程序不可见的寄存器
CS
DS
ES
SS
FS
GS
基地址 界限 权限
TR
LDTR
基地址 界限GDTR
IDTR
基地址 界限 权限
程序不可见区域
描述符(寄存器)高速缓冲区
74
4,80386的工作模式小结
? 实模式
? 只允许 CPU访问第一个 1MB存储器空间
? 实模式存储器 /常规内存
? 每次加电 /复位后默认的工作方式
? 存储单元的地址都由, 段+偏移, 组成
? 保护模式
? 允许 CPU访问所有存储器空间
? 段地址由描述符提供,描述符由选择子在描述符表中选择
? 分页机制
? 虚拟 8086模式
? 在保护模式下模拟多个 8086工作环境
地址转
换
75
三,Pentium 4 CPU简介
? 物理特性(三个版本)
? 2000.8 Willamette
? 0.18u铝工艺
? 1.4GHz ~ 2.0GHz
? Socket 423/3400万晶体管,Socket 478/4200万晶体管
? FSB 400/533MHz
? 12KμOps+8KB L1+256KB L2
? 2001.2 Northwood
? 0.13u铝 /铜工艺
? 1.6GHz ~ 3.06GHz
? Socket 478,5500万晶体管
? FSB 533/800MHz
? 12KμOps+8KB L1+512KB L2+2MB L3(XE版本 )
? 2004.2 Prescott
? 0.09u铜工艺
? 2.8GHz ~?
? Socket 478/SocketT,12500万晶体管
? FSB 800MHz
? 16KμOps+16KB L1+1MB L2
76
Pentium 4 CPU简介
? Netburst体系结构
? 2个 2x ALU+ 1个 1x ALU,两个 2x AGU(地址 )
? 超级流水线,20级
? 高级动态执行
? 乱序执行:一条指令暂时不能执行时,后面的指令可继续执行
? 推测执行:为保证流水线不间断,先执行再判断,发现预测错误时再返
回错误点重新开始
? 同时执行 126条指令
? 同时执行 48个读取操作和 24个存储操作
? 增强的分支预测能力
? 分支目标缓存 BTB,可追踪 4096个分支目标地址
? 新型缓存体系结构
? 12K微指令追踪缓存,存放已执行过的指令,以便分支预测错误时能够
立即恢复到错误的分支点
? 8KB L1数据缓存
? 256KB~ 512KB L2高级传输缓存
? 4倍速总线接口
? 总线频率 100MHz( 133MHz) *4= 400MHz( 533MHz) FSB
77
Pentium 4 CPU简介
? 增强的单指令多数据流指令集 SSE2
? 144条 128位多媒体指令
? 128位整数运算,128位双精度浮点运算
? 改善了视频、音频,3D图形、网络等领域的数
据处理能力
? 存储管理基本同 80386
? 基本运行环境
78
第 3章作业:
? 3.1
? 3.5
? 3.6
? 3.10
? 3.11
? 3.13
? 3.16
? 3.20