第三章 8086微处理器
3.2 8086的存储器组织
3.2.1寻址空间和数据存储格式
1、寻址空间
当存储器按字节编址时,若地址总线为n位,CPU寻址范围是2n字节
2、8086存储器的组织及寻址
(1)8086地址总线为20位,寻址能力为1MB,每个字节用唯一的一个地址码标识。即地址范围为0-220-1(0-1048575),采用十六进制表示为00000H-FFFFFH。
(2)虽然按照字节编址,但是实际一个变量可以是字节、字或者双字类型。
①字节数据(BYTE)
字节数据为8位,分为奇地址、偶地址。
②字数据(WORD)
字数据16位,存放在两个连续的字节单元中。
③双字数据(DOUBLE WORD)
双字数据占用4个连续字节单元,并规定最低字节地址为双字的地址
(3)8086系统把1MB的内存分为两个块,每个块分别为512KB,其中和数据总线D15-D8相连的块是高位地址块,有所有的奇地址单元组成(00001 00003 00005 …. FFFFF,奇地址块),其中和数据总线D7-D0相连的块是低位地址块,有所有的偶地址单元组成(00000 00002 00004 …. FFFFE,偶地址快)。
3.2.2存储器的分段结构和物理地址形成
1、存储器的分段结构
(1)由于8086中的地址寄存器都是16位的,用户不能直接使用20位的物理地址,编程时需要使用逻辑地址来寻址存储单元。一般的逻辑地址有两个16位数构成,形式为:
段的起始地址 :段内的偏移地址
(16位段地址):(16位偏移量)
(2)1MB最多可以分为16个不重叠的段,每段长度为216=64KB,段内偏移量也是16位数表示。
2、物理地址的形成
每个存储单元都有一个唯一物理地址(00000H~FFFFFH),20位二进制数,该地址在指令执行时由地址加法器形成,并进行硬件寻址。地址加法器的具体做法:段地址左移4位,然后加上偏移地址就得到20位物理地址。
3、按照信息特征分段存储
存储器可以划分为:程序区、数据区、堆栈区
程序段中存储程序的指令代码;数据段和附加段中存储数据、中间结果和最后结果;堆栈段存储压入堆栈的数据或状态信息。
3.3 8086微处理器的内部结构
3.3.1、8086CPU的内部结构
8086CPU的内部结构包括总线接口部件BIU和执行部件EU。
总线接口部件(BIU):完成CPU与主存储器或I/O端口间信息的传送,主要功能包括预取指令序列、存取数据、将访问主存的逻辑地址转换为实际的物理地址;其组成包括一个20位地址加法器、4个16位段寄存器、一个16位指令指针IP、一个6字节的指令队列缓冲器,以及总线控制逻辑电路等。
执行部件(EU):负责进行所有指令的解释和执行,同时管理EU中相关的寄存器,主要功能是从指令队列中取出指令,完成指令译码与指令的执行;其组成包括控制器、算术逻辑单元、标志寄存器、通用寄存器组。
BIU和EU是同时工作的,一条指令在EU中执行的同时,BIU就可以提前取出下一条(或多条)执行放在指令队列中排队。EU和BIU的并行操作提高了CPU和总线的利用率,加快了程序的运行速度。
3.3.2、8086CPU的寄存器结构
8086CPU的内部寄存器如图所示:
8086微处理器内部共有14个16位寄存器,按用途可分为数据寄存器、段寄存器、地址寄存器与变址寄存器、控制寄存器。
- 数据寄存器
8086包含4个16位数据寄存器,又可分为8个8位数据寄存器,如图所示:
其中累加器AX多用于存放中间运算结果,所有I/O指令都使用AX寄存器与外部设备传送信息;
基址寄存器BX 常用于存放访问内存时的偏移地址;
计数寄存器CX用于在循环或串操作指令中存放循环次数或重复次数;
数据寄存器DX在32位乘除法运算时,存放高16位数;在间接寻址的I/O指令中存放I/O端口地址。
- 段寄存器
8086包含4个16位段寄存器,分别为:
代码段寄存器CS:管理程序段;
数据段寄存器DS:管理数据段;
堆栈寄存器SS:存放当前堆栈段的段地址,管理堆栈段;
附加段寄存器ES:存放当前程序使用附加段的段地址,管理扩展段。
- 地址指针与变址寄存器
8086包含4个16位地址指针与变址寄存器,分别为:
堆栈指针急窜起SP:指出堆栈段中栈顶的偏移地址;
基址指针寄存器BP:指出要处理的数据在堆栈段中的起始地址;
源变址寄存器SI和目的变址寄存器DI:常用于指令的简介寻址或变址寻址。
其中,BX和BP在应用上的区别是:
作为通用寄存器时,二者皆可存放数据;
作为基址寄存器时,BX通常用于数据段,一般与DS或ES搭配使用;BP则通常用于堆栈段,与SS搭配使用。
- 控制寄存器
控制寄存器包括指令指针寄存器IP和标志寄存器FLAGS。
指针指令寄存器IP:用来存放下一条将要执行的指令在代码中的偏移地址,程序员不可以直接使用,但程序控制类指令会用到。
标志寄存器FLAGS:存放该处理器的程序状态字,共16位,其中7位没有意义,其余9位分成两类:
- 状态标志:反映当前运算和操作结果的状态条件,可作为程序控制转移与否的依据,分别时CF、PF、AF、ZF、SF、OF;
- 控制标志:由指令进行置位和复位,用来控制CPU的操作,包括DF、IF、TF。
其主要功能如图所示:
3.4 8086总线的工作周期
主频:CPU的工作频率;
时钟周期:对主频进行分频后的工作时钟;
总线周期:完成一次总线操作所需的时间。一个基本的总线周期由4个时钟周期(T1~T4)组成。
指令周期:一条指令从开始取值到最后执行完毕所需的时间。
空闲周期Ti:一个总线周期后不立即执行下一个总线周期,即总线上无数据传输操作,系统总线处于空闲状态。
等待周期Tw
总线周期时序如图所示:
3.5 8086中断系统
3.5.1 中断
根据中断的产生原因,8086中断系统将256个不同的中断源分为硬件中断与软件中断两类。
- 硬件中断(外部中断)
指由处理器外部的硬件、外围设备的请求而引起的中断。8086有两条硬件中断请求信号线:NMI(非屏蔽中断)和INTR(可屏蔽中断)。
外围设备通过中断请求线向CPU提出中断请求。
如图所示:
- 可屏蔽中断
由INTR线上的中断请求信号引起的中断。电平触发。
受到中断允许标志IF控制,IF=1(指令STI),开中断,允许响应INTR中断;IF=0(指令CLI),关中断,禁止响应INTR中断。
- 不可屏蔽中断
由NMI线上的中断请求信号引起的中断。上升沿触发。
非屏蔽中断的中断类型码为2。
不受中断允许标志IF的控制与影响,一旦NMI引脚出现中断请求,CPU在当前指令执行完后,必须立即响应。
非屏蔽中断具有比可屏蔽中断更高的优先权。
- 软件中断(内部中断)
指由处理器内部事件产生的中断,主要由指令驱动或由指令通过CPU状态简介驱动来引起中断。主要有以下5种类型,可分为3类:
- 处理运算过程中某些错误的中断
- 除法错中断:中断类型码为0;当执行DIV、IDIV指令时,若用零作除数,或者商超过了寄存器所能表达的范围,则无条件产生该中断。
- 溢出中断:中断类型码为4;在算术运算程序中,若在算术运算之后加入一条INTO指令,则INTO指令将测试溢出标志OF。当OF=1(表示有算术运算溢出)时,该中断发生。
- 为调试程序设置的中断
- 单步中断:中断类型码为1;当设定标志寄存器中陷阱标志TF=1时,CPU每执行一条指令就产生该中断。若TF=0,则处理器按正常方式连续执行指令。
- 断点中断:中断类型码为3;设置断点或执行INT 3指令可产生该中断。
- 中断指令INT n引起的中断:中断类型码为n。用户可用中断指令INT n产生指定类型n的任何中断。
- 中断优先权
在8086中规定中断优先权从高到低的顺序为除法错、溢出中断指令INTO、中断指令INT n;非屏蔽中断NMI;可屏蔽中断INTR;单步中断。
中断嵌套:对不同时发生的中断,允许低优先级别的中断处理程序被高优先级别的中断源所中断。
3.5.2 中断向量与中断向量表
中断类型码:不同的中断源都有唯一标识的中断类型码;
向量中断:由中断类型码来查找中断入口地址进而转向中断服务程序的方法;
中断向量:即中断服务程序的入口地址,包括段地址(高字节单元)和偏移地址(低字单元)。
每一个中断处理程序都有一个唯一的中断向量。
中断向量表:把系统中每一个中断源的中断服务程序入口地址集中起来,按中断类型码的顺序存放在某一连续排列的存储区域内。主要为:
- 按中断类型码从小到大顺序依次存放各类中断(256种)的中断向量(中断服务程序入口地址)。
- 在内存的00000H~003FFH的地址范围内,大小为1KB
- 每个中断向量占用4Bytes,低字为段内偏移地址(IP),高字为段基址(CS)。
- 中断类型码与中断向量地址的关系:设某类中断的中断类型码为n
中断向量在IVT中的存放地址(向量地址)=4×n
3.5.3 中断处理过程
中断处理过程包括:中断请求、中断排队、中断响应、中断处理、中断返回等全过程。
- 可屏蔽中断的中断过程
- CPU响应可屏蔽中断的条件
- 外设提出中断申请
- 本中断未被中断控制器屏蔽
- 本中断优先级最高
- CPU允许中断
- CPU响应可屏蔽中断的过程
CPU在每条指令的最后一个T周期,检测INTR,若为高电平,且IF=1,则CPU响应中断;
- 非屏蔽中断和软件中断的执行过程
非屏蔽中断和软件中断的中断响应、中断处理及中断返回等过程,与可屏蔽中断基本相同,仅在中断请求和中断响应的条件上有所区别。
8086的系统中断流程如图所示:
- 中断类型码的形成
中断入口地址依赖中断类型号,中断型号获取方法:
- 对于专用中断:除法出错、单步中断、不可屏蔽中断、断点中断和溢出中断,由CPU分别提供中断类型号0~4(内部形成)。
- 对于用户自己确定的软件中断INT n类型由n决定;
- 对于INTR引脚上的中断:由硬件电路设计产生中断类型号;可用8259A获取中断类型号。
3.6 8086微处理器外部基本引脚与工作模式
3.6.1 8086系统总线结构
一、最大模式和最小模式
最小模式:用于8086单一微处理器构成的小型系统。所有的总线控制信号均为8086产生,系统中的总线控制逻辑电路,减少到最少。
最大模式:用于大型(中型)8086系统中。系统总是包含有两个或多个微处理器,其中一个主处理器就是8086,还有协处理器8087、8089等,实现多处理机系统。通常由专门的总线控制器(8288)产生总线控制信号。
二、8086微处理器外部基本引脚与工作模式
1.为了减少芯片引脚个数,部分8086CPU的外部引脚采用了复用技术。复用引脚分为按时序复用和按模式复用。
时序复用:当CPU工作在不同的T周期时,这些引脚传递不同的信息;
模式复用:当CPU处于不同的工作模式时,这些引脚具有不同的功能含义。
2. 8086采用双列直插式(Double In linePackage,DIP)封装,具有40条引脚,使用+5V电源供电。时钟频率有3种: 5MHz(8086)、8MHz(8086-1)和10MHz(8086-2)。其引脚信号如图3.13所示,括号内为最大模式时的引脚名称。
3.8086引脚信号定义
3.6.2 两种模式下公用的引脚信号
一、两种模式下公用的引脚信号
两种模式下公用的引脚信号包括地址总线、数据总线、状态信号、控制总线、其他信号(CLK、Vcc、GND)
二、地址总线、数据总线、状态信号
数据总线:在CPU与内存储器或者I/O设备之间交换信息,为双向、三态信号;8086有16根数据总线。
地址总线:地址总线由CPU发出,用来确定CPU要访问的内存单元或者I/O端口的地址信号,为输出、三态信号。8086有20根地址总线。
在总线周期上,由于地址信息和数据信息在时间上不重叠,因此部分地址线和数据线公用一组引脚。状态信号用来指示CPU的状态信息,其中S6-S3和地址总线的高4位分时复用,S7与BHE分时复用。
(1)AD15~AD0(2~16,39)
➢分时地址/数据复用总线;为双向、三态信号;
➢分时输出低16位地址信号及进行数据信号的输入/输出。在每个总线周期的第一个时钟周期T1中,AD15-AD0作为地址总线的低16位A15-A0,给出内存单或者I/0端口的地址;在总线周期的其余时间(T2、T3、Tw、T4),AD15-AD0作为数据总线D15-D0使用。
➢A15-A0:T1输出访问存储器或I/O的地址信息。
➢D15-D0:T2-T4输出与存储器和I/O设备交换数据信息。
(2) A19/S6~A16/S3 (35~38)
➢ 分时地址/状态复用线;为输出、三态信号;
➢ 分时输出地址的高4位及状态信息。在每个总线周期的第一个时钟周期T1中,A19/S6~A16/S3作为地址总线的高4位A19-A16,给出内存单元的高4位地址,同时如果访问I/0端口的地址则4个位置均为低电平;在总线周期的其余时间(T2、T3、Tw、T4),这四条信号线指示CPU的状态信息S6-S3。S6恒为低电平(8086CPU此时正在和总线连着),S5反映标志寄存器中中断允许标志IF的当前值,S4和S3组合指示当前正在使用的是哪个段寄存器。
➢ A19-A16:T1输出访问存储器的20位地址的高4位地址A19-A16。
➢ S6-S3:T2-T4输出CPU的工作状态。
(3)BHE/S7(34)
➢高8位数据总线有效/状态复用引脚,时分复用;三态输出;
➢在T1状态,表示高8位数据线D15~D8上的数据有效和S7 状态信号;
➢T2-T4状态输出S7状态信号。8086中无定义。
➢偶地址单元数据通过数据总线低8位传输。奇地址单元数据通过数据总线高8位传输。
三、控制总线(16根引脚)
仅介绍公用的8根引脚
(1)RD (32)
➢读信号;三态输出;低电平有效;
➢RD = 0,表示CPU正在读存储器或I/O端口,具体是哪一个要看M/IO。
(2) READY(22)
➢ 准备就绪信号;输入;高电平有效。
➢ READY=1,表示CPU访问的存储器或IO端口已准备好传送数据。若CPU在总线周期T3状态检测到READY=0,表示未准备好,CPU自动插入一个或多个等待状态TW,直到READY=1为止,才进入T4时钟周期完成数据传输。
(3) TEST (23)
➢测试信号,输入,实现构成多处理器系统。
➢当CPU执行WAIT指令时(是WAIT指令结束与否的条件),CPU每隔5个T状态进行一次测试;当测试到TEST=1,则CPU 重复执行WAIT指令,即CPU处于空闲等待状态,直到测试到TEST=0时,等待状态结束,CPU继续执行后续指令。
(4) RESET (21)
➢ 复位信号,输入,高电平有效(至少保持4个时钟周期)。
➢ 复位时:标志寄存器FLAGS、IP、DS、SS、ES为0,CS=FFFFH,复位后CPU
从FFFF0H处开始执行。
(4) INTR (18)
➢可屏蔽中断请求信号;输入,高电平有效。
➢INTR=1,表示外设向CPU发出中断请求,CPU在当前指令周期的最后一个T状态去采样该信号,若此时,IF=1,CPU响应中断,执行中断服务程序。
(5) NMI (17)
➢ 不可屏蔽中断请求信号,输入,上升沿触发。
➢ 该请求信号不受IF状态的影响,也不能用软件屏蔽,一旦该信号有效,则执行完当前指令后立即响应中断,进入非屏蔽中断处理子程序。
(6) MN/MX (33)
➢工作模式选择信号;输入。
MN/MX=1,表示CPU工作在最小模式系统;
MN/MX =0,表示CPU工作在最大模式系统。
四、其他信号
(1)VCC(40) GND(1,20)
➢电源、接地引脚;输入;
➢8086采用单一的+5V电源;但有两个接地引脚。
(2) CLK(19)
➢时钟信号输入引脚,为处理器提供基本的定时脉冲和内部的工作频率。
➢要求时钟信号的占空比为33%,即1/3周期为高电平,2/3周期为低电平。
3.6.3 最小模式
一、基本知识
1.最小模式——仅支持单处理器,MN/MX引脚接+5V电源。
2.主要需解决:地址与数据的分离和地址锁存
3.电路实现方案:用3片8位的锁存器8282实现地址锁存。ALE为锁存控制信号,OE#≡0使锁存的地址直接输出;用2片双向三态门8286用作数据总线驱动和隔离,DT//R作为方向控制,/DEN作为开门信号;其他控制信号由8086直接产生。
二、8086最小工作模式下控制核心单元的组成
(1)时钟发生器
8086内没有时钟发生电路,8284是供8086系列使用的单片时钟发生器。它由时钟电路、复位电路、准备就绪电路3部分组成。8284A的功能:产生恒定的时钟信号,对准备好信号和复位信号进行同步;外界控制信号RDY和RES可以在任何时候到来,8284A把它们同步在时钟下降沿时输出READY和RESET信号到CPU。
①时钟发生电路
X1,X2:外接石英晶体连接端
F/C:使用外振源还是由X1, X2端外接晶体振荡器,低电平时外接晶体振荡器。
CLK:时钟信号输出端,为振荡信号经3分频后产生。
PLCK:对CLK时钟信号二分频产生,占空比为1/2,供定时/计数器使用。
CSYNC:时钟同步输入,为多个8284同步工作而设置
EFI:外振源输入端
OSC:晶振频率输出端,供显示器用
②时钟发生电路
RES:输入信号,用于产生使系统复位的输出信RESET,一般来自电源电路。
RESET:输出信号,到CPU的RESET端
③准备就绪电路
RDY1,RDY2:准备就绪输入信号,
AEN1,AEN2:用来决定对应的RDY信号生效与否,若有效使RDY1和RDY2产生REDAY信号,否则使CPU产生等待周期
ASYNC:准备就绪输入信号和时钟信号进行同步的方式选择输入端
REDAY:输出到CPU的准备就绪信号
(2) 地址锁存器:(Intel8282或74LS373)
当地址锁存允许信号ALE被送到373的选通端G上时,373就锁存送到它的数据输入端的数据。
当把一个低电平有效的信号送给输出允许端OC(OE)时,373就把锁存的数据从数据输出端输出。
(3) 双向总线驱动器
G:控制驱动器A端和B端何时接通
DIR:当DIR输入高电平时。数据从A传到B;当DIR输入低电平时。数据从B传到A。
三、最小模式下的引脚信号
(1)INTA (24)
➢中断响应信号;输出;低电平有效;
➢在两个连续的总线周期输出两个·低电平信号,第一个低电平用来通知外设CPU,准备响应它的中断请求,在第二个低电平期间,外设通过数据总线送入它的中断类型码,并由CPU读取,以便取得相应中断服务程序的入口地址;当CPU响应INTR时,INTA =0,表示响应中断。
(2)ALE(25)
➢地址锁存允许信号;输出;高电平有效;ALE不能浮空。
➢在任一总线周期的T1期间输出一个正脉冲,用于输出地址锁存信号。
(3)DEN(26)
➢数据允许信号;三态、输出;低电平有效。
➢DEN通常作为数据收发器的选通信号;仅当DEN=0时,才允许收发器收发数据。
(4) DT/R (27)
➢数据发送/接收信号;三态、输出。
➢DT/R控制数据收发器的数据传送方向。
DT/R=1时,表示CPU输出(发送)数据;
DT/R=0时,表示CPU输入(接收)数据。
(5) M/IO (28)
➢存储器或IO端口访问信号;三态、输出;
M/IO=1时,表示CPU当前正在访问存储器;
M/IO=0时,表示CPU当前正在访问I/O端口。
(6) WR (29)
➢写信号;输出、三态;低电平有效。
➢WR=0,表示CPU当前正在写存储器或I/O 端口。
(7) HOLD (31)
➢总线请求信号;输入;高电平有效;
➢用于其它主控器(处理器、DMA等)向本CPU 请求占用总线,CPU让出总线控制权直到这个信号撤销后才恢复对总线的控制权。
(8) HLDA (30)
➢总线请求响应,输出;高电平有效;
➢表示CPU认可其他总线部件提出的总线占用请求,准备让出总线控制权。
最小模式下,信号M/IO,RD,和WR组合起来决定了系统中数据传输的方式。
3.7 8086微处理器的时序
3.7.1系统的复位与启动
产生:RESET端上的高电平维持4个时钟周期,可使CPU复位。如果是初
次加电引起的复位,则要求维持不小于50us的高电平。
CPU复位:PSW、DS、ES、SS、IP等寄存器,指令队列被清零。CS寄存器设置为FFFFH。注:由于复位后,IF=0,处关中断状态,所以在初始化程序中应开中断,使CPU可响应中断请求。
CPU重启:复位信号RESET从高电平到低电平的跳变会触发CPU内部的复位逻辑
电路,当RESET由高电平变低电平7个机器周期后,CPU开始从FFFF0处执行程序。
复位操作时序图
复位时总线状态
➢地址线为高阻态,直到RESET变为低电平,开始从FFFF0H单元取指令;
➢ALE、HLDA等信号为低电平(无效);
➢一些信号呈高阻态。
3.7.2最小模式系统总线周期时序
1. 8086最小模式存储器和I/O读总线周期
①T1状态。M/IO信号在T1状态变为有效,若为高电平则为从存储器读取,反之为从I/O端口读取,而且这个有效电平保持到T4状态结束。同时CPU在T1时通过A19/S6~A16/S3和AD15~AD0发出访问外设或者存储器的20位地址信息,并输出BHE有效信号,表明高八位数据线上的信息可以使用。总线上的地址信息在T1状态结束之前必须进行锁存,地址锁存器ALE作为它的锁存允许信号,所以T1状态CPU发出一个ALE正脉冲信号,地址锁存器利用ALE的下降沿锁存地址信息。
②T2状态。总线上撤销地址信息A19/S6~A16/S3,引脚输出状态信息S6~S3。AD15~AD0呈现高阻态,为数据传输做准备。若进行读操作,则CPU在T2状态输出RD低电平有效信号,否则进行写操作,输出WR低电平有效信号。DEN信号也在T2变为低电平有效状态,选通总线收发器工作。
2. 8086最小模式存储器和I/O写总线周期
3.总线保持请求和总线授权时序
当系统中CPU之外的总线主设备(例如DMA)需要占用总线时,向CPU发出一个总线保持请求信号HOLD,该信号可能与时钟信号不同步。
CPU在每个时钟周期的上升沿检测到该信号时,在当前总线周期的T4后或下一个总线周期的T1后,CPU发出HLDA信号,并让出总线。
附录 第三章思维导图