Download presentation
Presentation is loading. Please wait.
1
第2章 16位和32位微处理器 16位微处理器8086/8088 2.1 32位微处理器80386 2.2
虽然 从 8位机、16位机 到64位机 经过了那么多年的发展,但无论从 基本概念、结构 指令系统等方面 都是8086、8088的延续和提高,所以这里讲的时候仍然是以8086为住来介绍
2
2.1.0 简介 8086:16位微处理器 采用单一的+5V电源和40条引脚的双列直插式封装;时钟频率为5MHz~10MHz,最快的指令执行时间为0.4µs。 8086有16根数据线和20根地址线,可以处理8位或16位数据,可寻址220即1MB的存储单元和64KB的I/O端口。 8088:准16位微处理器 设计的主要目的是为了与Intel原有的8位外围接口芯片直接兼容。 8088的内部寄存器、运算器以及内部数据总线都是按16位设计的,但外部数据总线只有8条,因此执行相同的程序,8088要比8086有较多的外部存取操作而执行得较慢。 1、时钟频率 也就是主频,一般时钟频率越高,理论上运算速度应该越快,但是不绝对。 2、可以寻址的单元数要讲 2
3
/8088 CPU的内部结构 图2.1 总线接口部件BIU 1 执行部件EU 2 BIU和EU的流水线管理 3
4
图 微处理器内部结构图
5
1.总线接口部件BIU 图2.1 功能 负责CPU与内存或I/O端口传送指令或数据。 访问存储器时,需要生成20位的物理地址
要不断从内存中取指令并送到指令队列 CPU执行指令时,要配合执行部件EU从指定的内存单元或者外设端口中取数据,并将数据传送给EU;或把执行部件EU的操作结果传送给指定的存储器或者IO设备 组成:段寄存器、指令指针寄存器、地址加法器、指令预取队列及总线控制逻辑。
6
1)段寄存器 图2.1 所有寄存器都是16位的,因此,能够提供的最大地址空间只能为64 KB。
地址总线是20位,可以寻址1MB存储器空间,所以将存储器的空间分成若干段,每段最大为64KB。 段寄存器:用来存放段的起始地址(16位)的寄存器,设有四个段寄存器: CS 代码段寄存器(Code Segment register) DS 数据段寄存器(Data Segment register) SS 堆栈段寄存器(Stack Segment register) ES 附加数据段寄存器(Extra Segment register)
7
2)地址加法器 图2.1 作用:根据提供的16位信息产生20位地址。
已知:代码段寄存器CS存放当前代码段基地址,IP指令指针寄存器存放了下一条要执行指令的段内偏移地址,其中CS=2000H,IP=003AH。通过组合形成的20位存储单元寻址地址为多少?
8
3)指令预取队列 图2.1 8086:指令预取队列为6字节 8088:指令预取队列为4字节 指令预取队列采用“先进先出”原则。
要执行的指令预先由BIU从内存取出放在队列中,然后EU再从队列中取出指令并执行。 一般情况下,EU每执行完一条指令,就可以立即从指令队列中取指令执行,从而提高了CPU的效率。
9
4)总线控制逻辑 8086分配20条引脚线传送20位地址、16位数据和4位状态信息,这就必须要分时传送。
总线控制逻辑的功能,就是以逻辑控制方法实现上述信息的分时传送。是处理器和外界总线联系的转接电路。
10
2.执行部件EU 图2.1 功能 负责指令的译码和执行。 负责向总线接口部件BIU提供偏移地址。 对通用寄存器和标志寄存器FR进行管理。
组成:算术逻辑单元(ALU) 、1个标志寄存器、8个通用寄存器、1个数据暂存寄存器和EU控制电路。
11
执行部件EU 图2.1 算术逻辑单元ALU(Arithmetic and Logic Unit) 进行所有的算术和逻辑运算 EU控制器
标志寄存器FR:存放ALU运算结果的状态和控制标志。 通用寄存器: 4个16位数据寄存器AX、BX、CX、DX 4个16位指针与变址寄存器:SI、DI、SP、BP
12
3.BIU和EU的流水线管理 (1)每当8086的指令队列中有2个空字节或8088的指令队列有1个空字节,BIU就会自动把后面的指令从存储器取到指令队列中,从而提高了CPU执行指令的速度。 (2)每当EU准备执行一条指令时,它会从指令队列前部取出指令,进行译码,然后去执行。 (3)当指令队列已满,且EU对BIU又没有总线访问请求时,BIU进入空闲状态。 (4)在执行转移指令、调用指令和返回指令时,如果要执行的指令不在指令队列中,则指令队列中原有内容被自动清除,BIU会重新取指令,把将要转入的程序段的指令装入到指令队列中。 在执行指令时,如果必须访问存储器或I/O端口,EU就会请求BIU去完成访问外部的操作,如果此时BIU正好处于空闲状态,那么会立即响应EU的请求。若EU向BIU发出请求访问时,BIU正在将某条指令取到指令队列中,此时BIU首先完成取指令操作,然后再去响应EU发出的访问外界的请求。
13
小结 1、8086/8088微处理器内部包括哪两部分?每一部分的功能是什么? 2、BIU、EU两部分各自的组成。
3、8086微处理器的基本指标:几位机?多少引脚?地址线、数据线各有多少条?供电电压是多少?主频是多少?能够访问的存储器空间有多大?能够访问的IO端口有多少?
14
2.1.2 8086/8088 CPU的寄存器结构 数据寄存器AX、BX、CX、DX 1 指令指针寄存器BP、SP、SI、DI 2
图2.2 数据寄存器AX、BX、CX、DX 1 指令指针寄存器BP、SP、SI、DI 2 标志寄存器FR 3 段寄存器CS、DS、SS、ES 4
15
图 /8088的寄存器结构
16
1)数据寄存器 数据寄存器 可分为两个8位,主要用于数据操作 16位 8 8 AL AH AX AX BL BH BX BX CL CH
累加器(Accumulator) 数据寄存器 可分为两个8位,主要用于数据操作 BL BH BX BX 基址寄存器(Base) CL CH CX CX 计数寄存器(Count) DL DH DX DX 数据寄存器(Data) EU中有4个16位的数据寄存器AX、BX、CX、DX 每个数据寄存器又可分为高字节H和低字节L寄存器,即AH、BH、CH、DH和AL、BL、CL、DL两组。 每个寄存器 又有特殊用途,名字是因此而取 16位数据寄存器主要用于存放数据,也可存放地址,而8位寄存器只能用于存放数据,它们均可以用寄存器名来独立寻址、独立使用。 16
17
2)地址指针寄存器和变址寄存器 表2.1 SP BP SI DI 地址指针主要用于地址操作 堆栈指针(Stack Pointer)
基址指针(Base Pointer) 表2.1 SI 源变址指针(Source Index) DI 目的变址指针(Destination Index) 都是16位,一般用来存放偏移地址。 指针寄存器SP和BP用来存取位于当前堆栈段中的数据,但SP和BP使用上有区别。 堆栈指针寄存器SP给出栈顶的偏移地址。 基址指针寄存器BP用来存放位于堆栈段中的一个数据区基址的偏移地址。 源变址寄存器SI和目的变址寄存器DI用来存放当前数据段的偏移地址。
18
2.指令指针寄存器IP 16位,存放着BIU要取的下一条指令的偏移地址。
指令代码存放在存储器的代码段,CPU利用CS和IP取得要执行的指令。 修改IP中的内容,就可以改变指令的执行流向。
19
3.标志寄存器(16位) 16位标志寄存器FR用于反映指令执行结果或控制指令执行的形式。 只用了其中的9位,分为:状态标志位和控制标志位。
20
标志寄存器 OF(Overflow Flag):溢出标志(指补码) OF=1:在运算过程中,如操作数超过了机器表示的范围称为溢出。
求解方法:最高位进位次高位进位 字节允许范围:-128—+127 字允许范围:-32768—+32767 PF(Parity Flag):奇偶标志 PF=1: 运算结果中低8位有偶数个1。 PF=0: 运算结果中低8位有奇数个1。 21
21
标志寄存器 CF(Carry Flag):进位/借位标志 CF=1:最高位需要向前产生进位/借位。 CF=0:最高位不会向前产生进位/借位。
AF(Auxiliary Carry Flag):辅助进位标志 AF=1:数据的第3位(半个字节)需要向前产生进位/借位。 AF=0:数据的第3位(半个字节)不会向前产生进位/借位。 22
22
标志寄存器 SF(Sign Flag):符号标志 SF=1:运算结果的最高位为1,如果为带符号数,则为负数。
带符号数的最高位为符号位;而无符号数的 最高位为数值位。 ZF(Zero Flag):全零标志 ZF=1:运算结果为全0。不包括进位的情况 ZF=0:运算结果不为0。 23
23
标志寄存器 —控制标志 控制标志位的值不由数据运算的结果决定,而由专用指令直接赋值 控制标志决定了后续指令的执行情况
DF(Direction Flag):方向控制标志位 用于串处理指令,控制从前往后、还是从后往前对字符串进行操作处理 DF=1,每次串处理操作后使变址寄存器SI和DI的值递减,使串处理从高地址向低地址方向处理。 DF=0,每次串处理操作后使变址寄存器SI和DI的值递增,使串处理从低地址向高地址方向处理。 24
24
标志寄存器 —控制标志 IF(Interupt Flag):中断允许/禁止标志位。STI\CLI
IF=1, 允许外部可屏蔽中断。CPU可以响应可屏蔽中断请求。 IF=0, 关闭中断。CPU禁止响应可屏蔽中断请求。 IF的状态对不可屏蔽中断和内部软中断没有影响。 TF(Trap Flag):跟踪(陷阱)标志位。系统调试用。 TF=1,每执行一条指令后,自动产生一次内部中断,使CPU处于单步执行指令工作方式,便于进行程序调试,用户能检查程序。 TF=0, CPU正常工作,不产生陷阱。 25
25
例:2个数相加后,分析各标志位的值 + 运算结果最高位为1 ∴SF=1; 运算结果本身≠0 ∴ZF=0;
+ 1 运算结果最高位为1 ∴SF=1; 运算结果本身≠0 ∴ZF=0; 结果中1的个数为偶数个 ∴PF=1; 最高位没有进位 ∴CF=0; 第三位向第四位有进位 ∴AF=1; 次高位向最高位有进位 ,最高位向前没有进位,∴OF=10=1 26 注意:带符号数的运算结果是否正确看OF,无符号数看CF
26
4.段寄存器 图2.1 存储器分段的概念 ★ 逻辑地址和物理地址 ★ 堆栈 ★ 段寄存器的使用 ★
27
1)存储器分段的概念 为什么要分段? 如何分段:
所谓分段技术就是把1MB的存储空间分成若干逻辑段,每个逻辑段最大具有64 KB的存储空间,并要求逻辑段的起始单元地址能被16整除。 段内地址是连续的,段与段之间是相互独立的。逻辑段可以在整个存储空间浮动,即段的排列可以连续、分开、部分重叠或完全重叠,非常灵活。 8086/8088有20位地址线,能够寻址1 MB的内存空间; CPU内部存放地址信息的IP、SP、SI、DI或BX等寄存器却只有16位,只能寻址64KB存储空间。 28
28
图2.4 逻辑分段的示意图 某一个存储单元可以属于不同的逻辑段。每个段区的大小允许根据实际需要来分配,不一定要达到64KB
图2.4 逻辑分段的示意图 只要修改段寄存器的内容,就可以将相应的存放区设置在内存存储空间的任何位置上。这些区域可以相互独立,也可以部分或完全重叠。 某一个存储单元可以属于不同的逻辑段。每个段区的大小允许根据实际需要来分配,不一定要达到64KB 29
29
2)逻辑地址和物理地址 段首址:段的第一个单元的地址(20位),最低4位是全0(即段首址是16的整数倍)。
段基址:段首址的高16位。段基址存放在段寄存器中。 偏移地址:段内存储单元距离段首地址的偏移量(以字节数计算,16位),也称有效地址EA。偏移地址存放在IP、BP、SI、DI或BX中,或者是通过计算得到。 逻辑地址:通常用段基址:偏移地址的形式来描述,在程序中使用。
30
物理地址的形成 物理地址:指CPU和存储器进行数据交换时实际寻址所使用的地址,是用20位二进制数或5位十六进制数表示的地址。
任何一个单元的20位物理地址都是由它的逻辑地址变换得到的: 物理地址=段基址×16+偏移地址
31
注意 一个存储单元的物理地址是唯一的,而逻辑地址是可以不唯一的。 存储单元 物理地址 11230H 11231H 11232H ……
存储单元 物理地址 11230H 11231H 11232H …… 1123FH 11240H 11241H 11242H 11243H 段基址 1123H 偏移量 13H 段基址1124H 偏移量 03H
32
3)堆栈 堆栈是以“先进后出”或“后进先出”原则管理的存储区域。采用段定义语句在存储器中定义,最大为64KB。可在1MB的存储空间内浮动。
堆栈段所在存储区中的位置由堆栈段寄存器SS和堆栈指针SP来指示。 SS给出堆栈段的段基址 SP存放栈顶地址,指出从栈顶到段首址的偏移量。 堆栈操作有入栈(PUSH)和出栈(POP)两种。 堆栈段也采用段定义语句在存储器中定义,最大为64KB。可在1MB的存储空间内浮动。 栈顶与栈底之间单元中的内容是堆栈段中的有效数据。
33
4)段寄存器的使用 图2.7 表2.2 四个段寄存器分别指明四个现行可寻址的逻辑段:
(1)代码段(Code Segment):用来存放当前正在运行的程序。系统在取指令时将寻址代码段,其段基址和偏移地址分别由段寄存器CS和指令指针IP给出。 (2)数据段(Data Segment):存放当前运行程序所用的数据。用户在寻址该段内的数据时,可以缺省段的说明,其偏移地址可通过多种寻址方式形成。 (3)堆栈段(Stack Segment):系统在执行栈操作指令时将寻址堆栈段,段基址和偏移地址分别由段寄存器SS和堆栈指针SP提供。 (4)附加数据段(Extra Segment):该段是一个辅助的数据区,也用于数据的保存。用户在访问段内的数据时,其偏移地址同样可以通过多种寻址方式来形成,但在偏移地址前要加上段的说明(即段跨越前缀ES)。
34
图2.7 段寄存器的使用情况 段基地址可以由默认的段寄存器提供,也可以由指定的段寄存器提供,这叫段超越。 36
35
小结 1、8086CPU内部有哪些寄存器?各自的名字。 2、由逻辑地址如何得到物理地址。
3、存储器访问的时候为什么要分段?分段要求每个段大小不超过64K,每个段都要从末位为0的地址开始。
36
最小模式: 时:系统只有8086或8088一个微处理器。所有控制信号直接由CPU提供
8086工作有2种工作模式:最小模式、最大模式。由第33引脚 控制 最小模式: 时:系统只有8086或8088一个微处理器。所有控制信号直接由CPU提供 最大模式: 时,两个或多个微处理器(主处理器和协处理器)组成中(大)规模系统,最大模式下,许多总线控制信号不是由8086直接产生的,而由S0S1S2通过Intel 8288总线控制器提供 不同的工作模式下,CPU有一部分引脚具有不同的功能 学引脚的时候 注意 38 38
37
引脚信号 引脚的功能 用英文单词或英文缩写表示引脚名称 信号的流向 微处理器输出到外部,从外部输入到微处理器内部 信号的逻辑状态
低电平有效,高电平有效,上升沿或下降沿有效 高电平和低电平都有效 三态能力 高阻状态放弃对引脚的控制 高电平和低电平都有效 用于信号线 可以输入输出高电平或者低电平。 课件中星号* 表示低有效
38
图 /8088CPU的引脚信号
39
补充:8086总线周期的概念2.1.5节 8086CPU通过总线对存储器或者IO端口进行一次信息的输入/输出过程,称为总线操作,执行该操作需要的时间叫做总线周期。 一个最基本的总线周期由4个时钟周期组成。时钟周期和主频有关系,是最基本的计量单位。 习惯上将4个时钟周期分别称为4个状态,即T1状态、T2状态、T3状态和T4状态。
40
AD15~AD0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 GND AD14 AD13 AD12 AD11 AD10 AD9 AD8 AD7 AD6 AD5 AD4 AD3 AD2 AD1 AD0 NMI INTR CLK VCC AD15 A16/S3 A17/S4 A18/S5 A19/S6 BHE MN/MX RD HOLD* HLDA* WR* M/IO* DT/R* DEN* ALE* INTA* TEST READY RESET 8086 地址/数据复用引脚。 在总线周期的T1状态用来输出要访问的存储器或I/O端口地址,在T2~T4状态,作为数据传输线。 在8088中,只有AD7~AD08条地址/数据线,AD15~AD8只用来输出地址。
41
A19/S6~A16/S3 8086 地址/状态复用引脚,三态,分时输出。 在T1状态:输出高4位地址。
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 GND AD14 AD13 AD12 AD11 AD10 AD9 AD8 AD7 AD6 AD5 AD4 AD3 AD2 AD1 AD0 NMI INTR CLK VCC AD15 A16/S3 A17/S4 A18/S5 A19/S6 BHE MN/MX RD HOLD* HLDA* WR* M/IO* DT/R* DEN* ALE* INTA* TEST READY RESET 8086 地址/状态复用引脚,三态,分时输出。 在T1状态:输出高4位地址。 访问存储器时:A19~A16与AD15 ~AD0组 成20位地址; 访问I/O端口时:不使用这4条引线。 在T2~T4状态:输出状态信息。 S6=0,表示当前8086/8088与总线相 连(S6始终保持低电平)。 S5 用来指示状态寄存器中的中断允 许标志IF的状态 (S5为1允许中断,S5为 0禁止中断) 。 S4和S3指示正在使用的段寄存器。
42
8086 高8位数据总线允许/状态复用引脚,三态,输出。 在T1状态: 输出,若 =0,表示高8位数据线D15~D8上的数据有效。
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 GND AD14 AD13 AD12 AD11 AD10 AD9 AD8 AD7 AD6 AD5 AD4 AD3 AD2 AD1 AD0 NMI INTR CLK VCC AD15 A16/S3 A17/S4 A18/S5 A19/S6 BHE MN/MX RD HOLD* HLDA* WR* M/IO* DT/R* DEN* ALE* INTA* TEST READY RESET 8086 高8位数据总线允许/状态复用引脚,三态,输出。 在T1状态: 输出,若 =0,表示高8位数据线D15~D8上的数据有效。 在T2~T4状态:输出S7(无意义)。
43
ALE 8086 地址锁存允许信号,输出,正脉冲。 提供给地址锁存器8282的控制信号。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 GND AD14 AD13 AD12 AD11 AD10 AD9 AD8 AD7 AD6 AD5 AD4 AD3 AD2 AD1 AD0 NMI INTR CLK VCC AD15 A16/S3 A17/S4 A18/S5 A19/S6 BHE MN/MX RD HOLD* HLDA* WR* M/IO* DT/R* DEN* ALE* INTA* TEST READY RESET 8086 地址锁存允许信号,输出,正脉冲。 提供给地址锁存器8282的控制信号。 在任何一个总线周期的T1状态,ALE输出有效电平,以表示当前总线上输出的是地址信息,要求进行地址锁存。
44
RESET 复位信号,输入,高电平有效。 复位信号至少维持4个时钟周期的高电平,接通电源上电时,复位信号不能小于50μs。
45
READY 8086 “准备好”信号,输入,高电平有效 由所寻址的存储器或I/O端口发来的响应信号,表明存储器或I/O端口的状态。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 GND AD14 AD13 AD12 AD11 AD10 AD9 AD8 AD7 AD6 AD5 AD4 AD3 AD2 AD1 AD0 NMI INTR CLK VCC AD15 A16/S3 A17/S4 A18/S5 A19/S6 BHE MN/MX RD HOLD* HLDA* WR* M/IO* DT/R* DEN* ALE* INTA* TEST READY RESET 8086 “准备好”信号,输入,高电平有效 由所寻址的存储器或I/O端口发来的响应信号,表明存储器或I/O端口的状态。 CPU在T3采样READY,若READY=0,则在T3后插入一个或多个TW,直至READY=1,进入T4,完成数据传送,从而结束当前总线周期。
46
8086 读信号,三态、输出。 =0时,表示将要执行一个对存储器或I/O端口的读操作。 在读操作的总线周期的T2、T3和TW为低电平。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 GND AD14 AD13 AD12 AD11 AD10 AD9 AD8 AD7 AD6 AD5 AD4 AD3 AD2 AD1 AD0 NMI INTR CLK VCC AD15 A16/S3 A17/S4 A18/S5 A19/S6 BHE MN/MX RD HOLD* HLDA* WR* M/IO* DT/R* DEN* ALE* INTA* TEST READY RESET 8086 读信号,三态、输出。 =0时,表示将要执行一个对存储器或I/O端口的读操作。 在读操作的总线周期的T2、T3和TW为低电平。 写信号,三态、输出。 =0时,表示将要执行一个对 存储器或I/O端口的写操作。 在写操作的总线周期的T2、T3和T4为 低电平。
47
NMI 8086 存储器/外设控制信号,输出 =1:访问存储器 =0:访问I/O端口 非屏蔽中断请求信号,输入,上升沿有效。
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 GND AD14 AD13 AD12 AD11 AD10 AD9 AD8 AD7 AD6 AD5 AD4 AD3 AD2 AD1 AD0 NMI INTR CLK VCC AD15 A16/S3 A17/S4 A18/S5 A19/S6 BHE MN/MX RD HOLD* HLDA* WR* M/IO* DT/R* DEN* ALE* INTA* TEST READY RESET 8086 存储器/外设控制信号,输出 =1:访问存储器 =0:访问I/O端口 NMI 非屏蔽中断请求信号,输入,上升沿有效。 此请求不受IF的影响。只要此信号一出现,CPU就在现行指令结束后响应中断。 一般被用于存储芯片或I/O接口芯片的片选( /cs )译码电路中。 49
48
INTR 可屏蔽中断请求信号,输入,高电平有效。
当INTR=1时,表示外设提出了中断请求,8086/8088 在每个指令周期的最后一个T状态去采样此信号。 若IF=1,则CPU响应中断,转去执行中断服务程序。 可屏蔽中断响应信号,输出,低电平有效。 用于对外设的中断请求作出响应。连续周期中的两个负脉冲。第1个脉冲是通知外设接口,它的中断请求已获允许;外设接口收到第2个负脉冲后,往数据总线上放中断类型码。
49
HOLD、 HLDA HOLD:总线保持请求信号,输入,高电平有效 HLDA:总线保持响应信号,输出,高电平有效
HOLD信号是系统中的其它总线主控部件向CPU发出的请求占用总线的控制信号。当CPU从HOLD线上收到一个高电平请求信号时,如果CPU允许让出总线,就在当前总线周期完成时,于T4状态从HLDA线上发出一个应答信号,对HOLD请求作出响应。同时,CPU使地址/数据总线和控制总线处于浮空状态,从而让出了总线。 当请求部件完成对总线占用后,CPU就立即使HLDA变低,同时恢复对总线的控制。
50
数据收发控制信号,输出,三态。 用来控制数据总线驱动器8286的数据传送方向。 =1:发送数据 =0:接收数据 数据允许信号,输出,低电平有效,三态。 提供给数据总线收发器8286,表示CPU准备发送或接收一个数据。 它常作为数据总线驱动器的三态控制信号。
51
等待测试信号,输入,低电平有效。 用于多处理器系统中且只有在执行WAIT指令时才使用。 当CPU执行WAIT指令时,每隔5个时钟周期对该引脚进行一次测试:若 =1时,CPU将停止取下条指令而进入等待状态,重复执行WAIT指令,直至该信号为0,CPU才继续往下执行被暂停的指令。 等待期间允许外部中断。 WAIT指令可使CPU与外部硬件同步, 相当于外部硬件的同步信号。
52
CLK 系统时钟,输入 通常与8284A时钟发生器的时钟输出端CLK相连。该时钟信号的低/高之比常采用2:1。 8086 CPU的标准时钟频率为5 MHz。
53
3. 8088的引脚特性 8088和8086之间引脚上的不同主要表现在:
(1)由于8088 CPU外部一次只传送8位数据,因此其引脚A15~A8仅用于输出地址信号,而8086则将此8条线变为双向分时复用的AD15~AD8。 (2)8086 CPU上的 信号在8088上变为 (HIGH)信号。这是一条状态输出线,它与 和 信号一起,决定了8088 CPU在最小模式下现行总线周期的状态。 (3)8088的存储器/外设控制引脚是 。
54
2.1.4 8086系统的工作模式 8086系统可有最小模式和最大模式。区别在于: 一、最小模式系统
系统的工作模式 8086系统可有最小模式和最大模式。区别在于: 最小模式 最大模式 MN/MX引脚接+5V MN/MX引脚接地 构成单处理器系统 构成多处理器/协处理器系统 系统控制信号由CPU提供 系统控制信号由总线控制器8288提供 一、最小模式系统 最小模式系统中,要有CPU、存储器、IO接口芯片外,还需 1片8284A时钟发生器 3片8282/8283或74LS373做地址锁存器 2片8286/8287或者74LS245作为双向数据总线收发器 当 =1时,8086 CPU工作在最小模式,即单处理器系统方式。 此时,构成的微型机中只包括一个8086或8088 CPU,且系统总线的所有控制信号都由CPU直接给出,系统中的总线控制逻辑电路被减到最少,适合于较小规模的应用。 56 56
55
图2.9 8086最小模式下的典型配置 Intel 8282是具有三态缓冲的单向8位锁存器。锁存20位地址+/BHE, 所以需要3片。
8284A时钟发生器,能提供恒定的时钟信号(5MHZ),还能对外界输入的准备就绪信号RDY和复位信号进行同步操作。 时钟发生器8284A 地址锁存器8282 数据收发器8286 Intel 8282是具有三态缓冲的单向8位锁存器。锁存20位地址+/BHE, 所以需要3片。 8086/8088CPU所需的时钟信号由外部的时钟发生器提供。8284A是Intel公司专为8086设计的时钟信号发生器,能产生8086所需的5MHz系统时钟信号,即系统主频。 Intel 8286是8位双向三态缓冲器。能增强驱动能力,又叫总线驱动器。数据总线是16位,所以需要2片。 57
56
1、地址锁存器8282 8282 DI 1 2 3 4 5 6 7 DO D Q CLK STB OE 为什么要使用地址锁存器?P32 CPU与存储器进行数据交换时,CPU要先送出地址信号,然后发出控制信号并传送数据,由于8086引脚限制,数据线和地址线分时复用一组总线,所以要加入地址锁存器,先锁存地址,使在读写总线周期内地址稳定。 由于8086/8088的部分地址线和数据线采用分时复用的技术,在一个总线周期内总线首先传送地址,然后传送数据。 在每个总线周期的T1状态利用地址锁存允许信号ALE的后沿,将地址信息锁存到地址锁存器内,经锁存后的地址信号可以在整个总线周期保持不变,从而为外部提供稳定的地址信息。 使用时,将8282的选通信号输入端STB与ALE相连。 当ALE有效时,8086的地址信号被锁存并以同相方式传至输出端,供存储器芯片和I/O接口芯片使用。 地址锁存器8282内部结构 58 58
57
OE为有效电平(低电平)时,正常输出;为无效电平(高电平)时,输出高阻
地址锁存功能总结 STB为高电平期间,输出等于输入(跟随);为下降沿时,输出锁存,与输入无关(输出保持) OE为有效电平(低电平)时,正常输出;为无效电平(高电平)时,输出高阻 ALE为8088/8086地址锁存允许, 高电平有效, 输出,复用线上出现地址时为高电平 锁存器的DI0-DI7与CPU的地址/数据复用线相连,STB与ALE相连。ALE为正脉冲时,输出地址;为低电平时,输出锁存,与数据无关 59
58
图 锁存器与8086的连接
59
2、双向数据收发器8286内部结构 为什么要用数据收发器? 8286 OE T A 1 2 3 5 4 6 7 B A B 功能表 OE T
B 为什么要用数据收发器? 功能表 OE T 传送方向 1 Ai→Bi Bi→Ai 高阻状态 8086驱动数据的负载能力有限,当挂在数据总线上的部件增加时,可以利用数据收发器增加驱动能力。 61 61
60
双向数据收发器8286引脚信号 8286 B A 1 2 3 4 5 6 7 OE GND T V CC 8 9 10 20 19 18
/OE是输出允许信号,当/OE=0时允许数据通过 8086的/DEN脚是数据允许信号 /DEN脚 和/OE相连,当CPU有数据输出时, /DEN脚的低电平使得/OE为低电平,数据总线上的数据可以通过8286和存储器或IO端口交换数据 T信号控制数据传送方向 8086的DT/R是数据发送/接收控制信号。 T与DT/R相连。当DT/R=1(CPU 发送数据),使得T=1,8286 A端的数据传送到B端。 B A 1 2 3 4 5 6 7 OE GND T V CC 8286 8 9 10 20 19 18 17 16 15 14 13 12 11 当系统中所连接的存储器及I/O设备较多时,为了使系统能稳定工作,可以采用发送器和接收器来增加驱动能力。发送器和接收器简称为收发器,也常称为总线驱动器。 8286的数据线有两组,A7~A0、B7~B0,引脚T用来控制数据传输的方向,当T=1时,方向为A→B;当T=0时,方向为B→A。 是输出允许信号,当它为0时,允许数据传送。 8086的数据总线是16位,如果要选用8286做总线驱动器,则需要2片。 如果是较小规模的最小模式系统,不需要总线驱动器,那么就用CPU的 M/IO 、RD 、WR组合起来决定系统中数据传输的方式。 62 62
61
图 收发器和8088CPU的连接
62
最小模式总线连接 64
63
/8088的操作和时序 指令周期与总线周期 1 几种基本时序 2
64
1.指令周期与总线周期 指令周期:执行一条指令所需要的时间。不同指令的指令周期在时间上是不相等的。
总线周期:CPU访问一次存储器或I/O接口所需要的时间。一个指令周期由一个或几个总线周期组成。 时钟周期:执行指令的所有操作都是在时钟脉冲的控制下一步一步进行的。时钟周期是CPU的基本时间计量单位。时钟周期由主频决定。
65
图2.15 典型的8086总线周期序列 (1)Tw 等待周期:当存储器或者外设没有准备就绪时,CPU就要插入Tw周期,等待外设或者存储器准备好。 (2)Ti 空闲周期:CPU不使用总线、没有操作的时候。 Tw:当被写入数据或被读取数据的存储器或外设在速度上跟不上CPU的要求时,就会由存储器或外设通过READY信号线在T3状态启动之前向CPU发一个READY无效信息,表示数据未就绪,于是CPU将在T3之后插入1个或多个附加的时钟周期TW(等待状态)。当存储器或外设完成数据的读/写时,便在READY线上发出有效信号,CPU接到此信号,会自动脱离TW而进入T4状态。 Ti:总线周期只用于CPU和存储器或I/O端口之间传送数据和供填充指令队列,如果在1个总线周期之后,不立即执行下1个总线周期,那么,系统总线就处于空闲状态,即执行空闲周期TI。在空闲周期中,可以包含1个时钟周期或多个时钟周期。 67
66
2.几种基本时序 系统的复位和启动操作 ★ 总线读/写操作 ★ 中断响应操作 ★
67
1)系统的复位和启动操作 RESET引脚至少维持4个时钟周期的高电平信号时,8086/8088复位。如果是初次加电引起的复位,则要求维持不小于50μs的高电平。 8086/8088复位后将从内存的FFFF0H处开始执行指令。因此,一般在该处放一条无条件转移指令,转移到系统程序的入口处。这样系统一旦被启动,便自动进入系统程序。 FR 寄存器清零,所以IF=0,默认是关中断的。
68
图 的复位操作时序 复位的过程会把所有具有三态的输出引脚置成浮空状态,例如AD0-15、M/IO等引脚;不具有三态的引脚都置为无效状态。
69
最小模式下的总线读操作总线读操作 (CPU从存储器或I/O端口读取数据)
70
最小模式下的总线写操作 CPU将数据写入存储器或I/O端口
71
3)中断响应操作 当8086/8088CPU收到外界从INTR引脚上送来的中断请求信号,并且满足IF=1时,CPU在执行完当前指令后,便执行一个中断响应时序。
72
/8088的存储器组织 8086存储器组织 1 8088存储器组织 2
73
8086共有16根数据线,一次数据传送是2个字节,那么要送入哪两个存储单元呢?
奇区和偶区 在存储器中以字节为单位存储。每个存储单元有唯一的地址确定(即存储地址空间为00000H-FFFFFH)。 8086的1MB存储空间实际上分为两个512KB的存储体,分别叫奇存储体(奇区)和偶存储体(偶区) 。 8086共有16根数据线,一次数据传送是2个字节,那么要送入哪两个存储单元呢? 地址 内容 00000H 00001H 00002H 00003H FFFFEH 偶地址存储体 512K*8 bit A0=0 奇地址存储体 BHE=0 FFFFFH 低字节低地址 高字节高地址 a)存储器地址空间分配
74
8086存储器的分体结构 CPU和存储器的硬件连接 D7 ~D0 D15 ~D8 BHE A0 A19 ~A1 b)存储体与总线的连接 DB
奇地址存储体 SEL A18 ~ A0 D7 ~D0 偶地址存储体 SEL A18 ~ A0 A19 ~A1 BHE A0 CPU和存储器的硬件连接: 1、先分析两个存储体的地址线、数据线、控制线 2、分析使用CPU的A1-A19和两个存储体的地址线相连。 3、数据线:两个存储体分别接收8位数据,CPU一次输出16位数据,该怎么连接呢?按照高字节高地址,低字节低地址的顺序,从偶地址开始访问,所以低字节在偶地址(偶存储体),高字节在奇地址(奇存储体) 4、分别的选通线:A0=0 偶地址 BHE有效时数据高8位有效。 偶存储体与数据总线D7~D0相连,该存储体中每个地址均为偶数地址; 奇存储体与数据总线D15~D8相连,该存储体中每个地址均为奇数地址 b)存储体与总线的连接 /BHE A0 读/写的字节 从偶地址读写高低两个字节 1 从奇数地址读写一个字节 从偶数地址读写一个字节 无效
75
数据在存储器的存储方式(地址为20位的,这里省略了)
数据在存储器中怎样存放呢?怎样确定数据的地址? 低地址放低字节,高地址放高字节,字单元地址以低位地址表示 00H 01H 02H 03H 04H 05H 06H 07H 08H 31H CBH 74H 0BH 23H A4H 1FH 31H(字节) 字节地址 表示方法:(01H)=31H 字地址 74CBH(字) 1FA4230BH(双字) 双字地址 数据在存储器的存储方式(地址为20位的,这里省略了)
76
结论:为了加快程序运行速度,编程时注意从存储器偶地址开始存放字数据,这种存放方式也称为“对准存放”
存储器中字的存放 一个字可以从偶地址开始存放,也可以从奇地址开始存放,但是8086CPU访问存储器的时候,都是以字为单位进行的,并从偶地址开始 当CPU读写一个字时的不同情况: 结论:为了加快程序运行速度,编程时注意从存储器偶地址开始存放字数据,这种存放方式也称为“对准存放” 00 11 22 33 10000 从偶地址读一个字节 00 11 22 33 10000 从奇地址读一个字节 10001 00 00 11 22 33 10000 从偶地址读一个字 10002 10000 11 22 11 10001 22 10002 33 10003 从奇地址读一个字
77
2.8088存储器组织 由于每次传送的是8位数据,不存在奇偶存储体的概念。
存储器的20位地址线A19~A0和8根数据线分别和8088CPU的对应地址线与数据线相连。 8088CPU每访问一次存储器只读/写一个字节信息,而读/写一个字需要两次访问存储器才能完成。故在8088系统中,程序运行速度比在8086系统中要慢些。
78
结 束
Similar presentations