3 微处理器
3.3 8086微处理器的内部结构
3.3.1 8086CPU的内部结构
- 总线接口部件(Bus Interface Unit, BIU),负责控制存储器读写
-
执行部件(Execute Unit, EU),执行单元EU从指令队列中取出指令并执行
Intel8086CPU逻辑结构框图
特点:
- 取指部分和执行指令部分分开进行,提高了速度。
- BIU和EU的操作是并行的
- BIU和EU是各自独立工作的,在EU执行指令的同时,BIU可预取下面一条或几条指令

3.3.2 8086CPU的内存器结构

- 数据寄存器
- 8086含有4个16位数据寄存器,它们又可分为8个8位寄存器,即
- AX -> AH,AL
- BX -> BH,BL
- CX -> CH,CL
- DX -> DH,DL
- 常用来存放参与运算的操作数或运算结果
- 8086含有4个16位数据寄存器,它们又可分为8个8位寄存器,即
| 数据寄存器特有的习惯用法 | |
|---|---|
| AX (Accumulator) | 累加器。多用于存放中间运算结果。所有I/O指令必须都通过AX与接口传送信息; |
| BX (Base) | 基址寄存器。常用于存放访问内存时的偏移地址; |
| CX (Count) | 计数寄存器。用于在循环或串操作指令中存放循环次数或重复次数; |
| DX (Data) | 数据寄存器。在32位乘除法运算时,存放高16位数;在间接寻址的I/O指令中存放I/O端口地址。 |
- 段寄存器
| 段寄存器为信息按特征分段存储带来方便 | |
|---|---|
| CS (Code Segment) | 16位的代码段寄存器,管理程序段 |
| DS (Data Segment) | 16位的数据段寄存器,管理数据段。 |
| ES (Extra Segment) | 16位的扩展段(附加段)寄存器,管理扩展段。 |
| SS (Stack Segment) | 16位的堆栈段寄存器,管理堆栈段 |
- 地址指针和变址寄存器
BX与BP在应用上的区别- 作为通用寄存器,二者均可用于存放数据;
- 作为基址寄存器,BX通常用于数据段,一般与DS或ES搭配使用;BP则通常用于堆栈段,与SS搭配使用。
| SP (Stack Pointer) | 堆栈指针寄存器,其内容为栈顶的偏移地址; |
| BP (Base Pointer) | 基址指针寄存器,常用于在访问内存时存放内存单元的偏移地址。 |
| 变址寄存器常用于指令的间接寻址或变址寻址 | |
|---|---|
| SI (Source Index) | 源变址寄存器 |
| DI (Destination Index) | 目标变址寄存器 |
- 控制寄存器
- 指令指针寄存器IP (Instruction Pointer)|其内容为下一条要执行的指令的偏移地址;
- 标志寄存器FLAGS
16位标志寄存器,用来存放运算结果的特征。其中7位没有定义,其余9位分成两类:
• 状态标志:表示运算后结果的状态特征它影响后面的操作,
• 有6位:CF、PF、AF、ZF、SF和OF。
• 控制标志,用来控制CPU操作,有3个:TF、IF和DF。
| CF (Carry) | 进位标志:算术运算时有进位CF=1,无进位CF=0 |
| PF (Parity) | 奇偶标志:运算结果中“1” 的个数为偶数PF=1 |
| AF (Auxiliary) | 辅助进位标志:第3位向第4位有进位时AF=1 |
| ZF (Zero) | 零标志:运算结果为“0”则ZF=1 |
| SF (Sign) | 符号标志:运算结果为负数时SF=1 |
| OF (Overflow) | 溢出标志:运算结果超出规定范围OF=1 |
| IF (Interupt Enable) | 中断允许标志:IF=1中断允许 |
| DF (Direction) | 方向标志, DF=0地址加1 |
| TF (Trap) | 跟踪标志,TF=1,为单步工作方式 |
3.4 8086总线的工作周期
主频:CPU的工作频率
时钟周期:对主频进行分频后的工作时钟
总线周期:完成一次总线操作所需的时间。在8088CPU中,CPU与内存或接口间进行通信,如将一个字节写入内存一个单元(或接口),或者从内存某单元(或某接口)读一个字节到CPU,这种读(或)写的过程称为一个总线周期。
空闲周期:如果一个总线周期后不立即执行下一个总线周期,即总线上无数据传输操作,系统总线处于空闲状态,则这时执行空闲周期,
也以时钟周期
为单位
指令周期:一条指令从开始取指令到最后执行完毕所需的时间
总线周期时序
- 1个总线周期正常情况下由4个时钟周期(
―
)组成;时钟周期由主频决定;
- 空闲周期
和等待周期
;
-
读、写、中断响应、总线保持与响应等的总线周期时序
3.5 8086中断系统
3.5.1 8086中断类型
- 8086/8088可以处理256种不同的中断。
-
两类:内部中断和外部中断。
中断源示意图
-
外部中断(硬件中断)
- 不可屏蔽中断(NMI中断)
- 中断类型码 2
- 上升沿触发申请中断
- 不受中断允许标志IF的控制与影响(即不可屏蔽),一旦NMI引脚出现中断请求,CPU在当前指令执行完后,必须立即响应。
- 由计算机内部硬件出错而引发,一般用于处理紧急事件。PC机中用于内存奇偶校验出错和系统主要故障(如电源断电等)。
- 可屏蔽中断(INTR中断)
- 外设申请的中断
- 电平触发
-
受中断允许标志IF控制
IF = 1 (指令STI),开中断,允许响应INTR中断
IF = 0 ( 指令CLI ) ,关中断,禁止响应INTR中断
- 不可屏蔽中断(NMI中断)
-
内部中断(软件中断)
五种三类-
处理运算过程中某些错误的中断
执行程序时,为及时处理运算中的某些错误,CPU以中断方式中止正
在运行的程序,提醒程序员改错。-
除法错中断(中断类型号为0)。在8086/8088 CPU执行除法指令(DIV/IDIV)时,若发现除数为0,或所得的商超过了CPU中有关寄存器所能表示的最大值,则立即产生一个类型号为0的内部中断,CPU转去执行除法错中断处理程序。
-
溢出中断INTO(中断类型号为4)。CPU进行带符号数的算术运算时,若发生了溢出,则标志位OF=1,若此时执行INTO指令,会产生溢出中断,打印出一个错误信息,结束时不返回,而把控制权交给操作系统。若OF=0,则INTO不产生中断,CPU继续执行下一条指令。INTO指令通常安排在算术指令之后,以便在溢出时能及时处理。
-
-
为调试程序设置的中断
-
单步中断(中断类型号为1)。当TF=1时,每执行一条指令,CPU会自动产生一个单步中断。单步中断可一条一条指令地跟踪程序流程,观察各个寄存器及存储单元内容的变化,帮助分析错误原因。单步中断又称为陷阱中断,主要用于程序调试。
断点中断(中断类型号为3)。调试程序时可以在一些关键性的地方设置断点,它相当于把一条INT 3 指令插入到程序中,CPU每执行到断点处,INT 3 指令便产生一个中断,使CPU转向相应的中断服务程序
中断指令INT n引起的中断(中断类型号为n)。程序设计时,可以用INT n指令来产生软件中断,中断指令的操作数n给出了中断类型号,CPU执行INT n指令后,会立即产生一个类型号为n的中断,转入相应的中断处理程序来完成中断功能
-
-
-
8086中断源的优先级
- 8086中断源的优先级顺序由高到低依次为:
软件中断(除单步中断外)、非屏蔽中断、可屏蔽中断、单步中断 -
对同时产生的中断:
首先处理优先级别较高的中断;若优先级别相同,则按先来先服务的原则处理; - 对非同时产生的中断:允许低优先级别的中断处理程序被高优先级别的中断源所中断——中断嵌套。
- 8086中断源的优先级顺序由高到低依次为:
3.5.2 中断向量与中断向量表
- 中断类型码:8086可以处理256个中断请求,每个中断请求均对应于惟一固定的类型码。被0除类型码是0,单步为1;NMI为2;断点中断为3,溢出中断为4 ……等。
- 中断向量:即中断服务程序的入口地址,包括段地址(高字单元)和偏移地址(低字单元)。
-
中断向量表
按中断类型码从小到大顺序依次存放各类中断(256种)的中断向量(中断服务程序入口地址)。- 在内存的00000H~003FFH地址范围内,大小为1KB。
- 每个中断向量占用4 Bytes,低字为段内偏移地址,高字为段基址。
-
中断类型码与中断向量地址的关系:设某类中断的中断类型码为n
中断向量在IVT中的存放地址(向量地址)=4×n
3.5.3 8086中断处理过程
中断处理过程:包括中断请求、中断排队、中断响应、中断
处理、中断返回等全过程。
-
可屏蔽中断的中断过程
CPU响应可屏蔽中断的条件
① 外设提出中断申请;
② 本中断未被中断控制器屏蔽;
③ 本中断优先级最高;
④ CPU允许中断;CPU响应可屏蔽中断的过程
◆ CPU在每条指令的最后一个T周期,检测INTR,若为高电平,且IF=1,则CPU响应中断。
◆ 响应过程中自动依次完成以下工作:
① CPU向外设发两个/INTA ,外设收到第2个/INTA后,立即通过数据线给CPU送中断类型号。
② CPU从数据线上读取中断类型号
③ 将Flags内容入栈,保护现行程序的控制标志及其运行结果产生的状态标志。
④ 关中断(清IF和TF),为了防止在进入中断处理,但并未执行中断程序这段时间内又响应新的中断。
⑤ 保护断点,将当前指令的下一条指令的CS和IP入栈,使中断处理完成后能正确的回到原程序处继续执行。
⑥ 转入相应的中断服务子程序;
⑦ 中断返回,从堆栈中弹出断点的地址(IP和CS)和Flags的内容,返回主程序的断点处,继续执行主程序。
-
非屏蔽中断的中断过程示意图
中断类型码的形成
中断入口地址依赖中断类型号,中断型号获取方法:
◆ 对于专用中断:除法出错、单步中断、不可屏蔽中断、断点中断和溢
出中断,由CPU分别提供中断类型号0~4(内部形成);
◆ 对于用户自己确定的软件中断INT n,类型号由n决定;
◆ 对于INTR引脚上的中断:
– 由硬件电路设计产生中断类型号
– 可用8259A获取中断类型号
3.6 8086微处理器外部基本引脚与工作模式
3.6.1 8086系统总线结构
最小模式:系统中只有8086一个微处理器,所有的总线控制信号均为8086产生,系统中的总线控制逻辑电路,减少到最少。
最大模式:用于大型(中型)8086系统中。系统总是包含有两个或多个微处理器,其中一个主处理器就是8086,还有协处理器8087、8089等。通常由专门的总线控制器(8288)产生总线控制信号。-
8086采用双列直插式(Double In linePackage,DIP)封装,具有40条引脚,使用+5V电源供电。

3.6.2 两种模式下公用的引脚信号
➢所谓三态是指总线输出可以有三个状态:
➢高电平、低电平和高阻状态。
➢当处于高阻状态时,该总线在逻辑上与所有连接负载断开。
- 地址总线、数据总线、状态信号
(1)~
(2~16,39)
➢地址/数据复用总线;
➢双向、三态;
➢分时输出低16位地址信号及进行数据信号的输入/输出。
➢A15-A0:T1输出访问存储器或I/O的地址信息。
➢D15-D0:T2-T4输出与存储器和I/O设备交换数据信息。
(2) A19/S6~A16/S3 (35~38)
➢ 地址/状态复用线;
➢ 输出、三态;
➢ 分时输出地址的高4位及状态信息。
➢ A19-A16:T1输出访问存储器的20位地址的高4位地址A19-A16。
➢ S6-S3: T2-T4输出CPU的工作状态。
• 其中S6为0用以指示8086当前与总线连通;
• S5为1表明8086可以响应可屏蔽中断。
• S4、S3共有四个组合状态,用以指明当前使用的段寄存器;
| S4 | S3 | 当前正在使用的段寄存器 |
|---|---|---|
| 0 | 0 | ES |
| 0 | 1 | SS |
| 1 | 0 | CS或未使用任何段寄存器 |
| 1 | 1 | DS |
(3)(34)
➢高8位数据总线有效/状态复用引脚;
➢三态输出;
➢表示高8位数据线D15~ D8上的数据有效和S7 状态信号;
➢T2-T4状态输出S7状态信号。 8086中无定义。
➢偶地址单元数据通过数据总线低8位传输。奇地址单元数据通过数据总线高8位传输。

- 控制总线(16根引脚)
(1)(32)
➢读信号;
➢三态输出;
➢低电平有效;
➢RD = 0,表示CPU正在读存储器或I/O端口。
(2) READY(22)
➢ 准备就绪信号;
➢ 输入;高电平有效。
➢ READY=1,表示CPU访问的存储器或IO端口已准备好传送数据。若CPU在总线周期T3状态检测到READY=0,表示未准备好,CPU自动插入一个或多个等待状态TW,直到READY=1为止,才进入T4时钟周期完成数据传输。
(3)(23)
➢测试信号,输入。
➢当CPU执行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)(33)
➢工作模式选择信号;
➢输入。
◆,表示CPU工作在最小模式系统;
◆,表示CPU工作在最大模式系统
- 其他信号
(1)VCC(40)GND(1,20)
➢电源、接地引脚
➢输入;
➢8086采用单一的+5V电源;
➢但有两个接地引脚。
(2) CLK(19)
➢时钟信号输入引脚。
➢要求时钟信号的占空比为33%;
➢即1/3周期为高电平,2/3周期为低电平。
3.6.3 最小模式
- 最小模式——仅支持单处理器
-
主要需解决:
地址与数据的分离
地址锁存 -
电路实现方案
用3片8位的锁存器8282实现地址锁存。ALE为锁存控制信号,OE#≡0使锁存的地址直接输出;用2片双向三态门8286用作数据总线驱动和隔离,DT//R作为方向控制,/DEN作为开门信号;其他控制信号由8086直接产生。
8086最小工作模式下控制核心单元的组成

- 时钟发生器
8086内没有时钟发生电路,8284就是供8086系列使用的单片时钟发生器。它由时钟电路、复位电路、准备就绪电路3部分组成。
- 8284A的功能:
- 产生恒定的时钟信号,对准备好信号和复位信号进行同步;
- 外界控制信号RDY和RES可以在任何时候到来,8284A把它们同步在时钟下降沿时输出READY和RESET信号到CPU。
- 8284A的功能:
-
地址锁存器
Intel8282或74LS373当地址锁存允许信号ALE被送到373的选通端G上时,373就锁存送到它的数据输入端的数据。当把一个低电平有效的信号送给输出允许端OC(OE)时,373就把锁存的数据从数据输出端输出。
-
双向总线驱动器
8088收发数据的负载能力是有限的。为了增加8088的负载能力,尤其是组建较大系统时,在8088和系统数据总线间需使用双向总线驱动器。用于双向总线驱动器的芯片有8286和74LS245。
最小模式下的引脚信号
(24)
➢中断响应;
➢输出;
➢当CPU响应INTR时,INTA=0,表示响应中断。ALE(25)
➢地址锁存允许信号;
➢输出;
➢高电平有效。
➢在任一总线周期的T1期间输出一个正脉冲,用于输出地址锁存信号。DEN (26)
➢数据允许信号;三态、输出;
➢DEN通常作为数据收发器的选通信号;
➢仅当DEN=0时,才允许收发器收发数据。(27)
➢数据发送/接收信号;
➢三态、输出。
➢为提高CPU数据总线驱动能力,常常使用数据收发器(8286/8287);
➢控制数据收发器的数据传送方向。
➢时,表示CPU输出(发送)数据;
➢时,表示CPU输入(接收)数据。
(28)
➢存储器或IO端口访问信号;三态、输出;
➢时,表示CPU当前正在访问存储器;
➢时,表示CPU当前正在访问I/O端口。
-
(29)
➢写信号;
➢输出、三态;
➢低电平有效。
➢,表示CPU当前正在写存储器或 I/O 端口。
HOLD (31)
➢总线请求;
➢输入;
➢用于其它主控器(处理器、DMA等)向本CPU 请求占用总线。HLDA (30)
➢总线请求响应,输出;
➢高电平有效;
➢表示CPU认可其他总线部件提出的总线占用请求,准备让出总线控制权。
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 最小模式系统总线周期时序
-
8086最小模式存储器和I/O读总线周期
①T1状态信号在T1状态变为有效,若为高电平则为从存储器读取,反之为从I/O端口读取,而且这个有效电平保持到T4状态结束。同时CPU在T1时通过A19/S6~A16/S3和AD15~AD0发出访问外设或者存储器的20位地址信息,并输出
有效信号,表明高八位数据线上的信息可以使用。总线上的地址信息在T1状态结束之前必须进行锁存,地址锁存器ALE作为它的锁存允许信号,所以T1状态CPU发出一个ALE正脉冲信号,地址锁存器利用ALE的下降沿锁存地址信息。
②T2状态。总线上撤销地址信息A19/S6~A16/S3,引脚输出状态信息S6S3。AD15AD0呈现高阻态,为数据传输做准备。若进行读操作,则CPU在T2状态输出低电平有效信号,否则进行写操作,输出
低电平有效信号。
信号也在T2变为低电平有效状态,选通总线收发器工作。
-
8086最小模式存储器和I/O写总线周期
-
总线保持请求和总线授权时序
当系统中CPU之外的总线主设备(例如DMA)需要占用总线时,向CPU发出一个总线保持请求信号HOLD,该信号可能与时钟信号不同步。CPU在每个时钟周期的上升沿检测到该信号时,在当前总线周期的T4后或下一个总线周期的T1后,CPU发出HLDA信号,并让出总线。

















