当前位置:文档之家› 第二章 80868088(16位)微处理器

第二章 80868088(16位)微处理器

本人精心整理的文档,文档来自网络
本人仅收藏整理
如有错误
还请自己查证!
第二章 8086/8088(16位)微处理器
第一节、16位微处理器
第一代微处理器 1971年Intel公司推出4004和8008
是4和8位微处理器
采用PMOS工艺

第二代微处理器 1974年推出的8080、M6800、Z-80等
是8位微处理器
采用NMOS工艺

第三代微处理器 70年代后期Intel公司推出8086/8088、Motorola公司M68000、Zilog公司的Z8000
是16位微处理器
采用HMOS工艺
80年代以来
Intel公司推出80186用80286
与8086/8088兼容

第四代微处理器 1985年
推出的80386及M68020是32位微处理器
1989年推出80486

1993年推出Pentium及80586等更高性能的32位和64位微处理器

第二节8086/8088CPU结构
微处理器 8086, 8088结构类似
内部都是16位总线
但外部性能是有区别

8086CPU功能结构分为两部分:总线接口部件BIU
执行部件EU

两部分各自执行自己的功能并行工作
这种工作方式与传统的计算机在执行指令时的串行工作相比极大的提高了工作效率

计算机执行程序时
CPU的工作顺序是:取指令 执行指令 再取指令 再执行指令...特点:CPU串行工作

8086CPU工作顺序是:取指令
执行指令同时进行
特点:CPU并行工作























一、执行部件
4个通用寄存器 : AX , BX , CX , DX
4个专用寄存器 SP , BP , SI , DI
算术逻辑部件:ALU
8086/8088的EU的特点
1个标志寄存器: FR;分成两类:状态标志、控制标志
FR的格式:







二、总线接口部件BIU
?功能:负责与存储器、I/O端口传送数据
?BIU的组成:
?4个段地址寄存器(16位):CS、DS、ES、SS
?16位指令指针寄存器IP
?20位地址加法器
?6字节的指令队列
?一条指令20地址的形成:由代码段CS左移4位后与指令指针寄存器IP内容相加得到
注意:
指令执行单元(EU)的功能:一般情况下
指令按照它存放的顺序先后执行
EU源源不断地从指令队列中取得指令代码
达到满负荷地连续执行指令而省去"取指令"的时间
指令执行过程如果需要访问存储器取操作数
那么EU会将访问地址送给BIU
等待操作数到达
然后继续操作
遇到转移指令
BIU会将指令队列中的后继指令作废
从新的地址重新取指令
这时
EU要等待BIU将取到指令装入队列后
才能继续执行
这两种情况下
EU和BIU的并行操作会受到一定影响
这是采用重叠操作方式不可避免的现象

EU中的算术逻辑运算单元ALU可完成16位或8位的二进制运算
运算结果可通过内部总线送到通用寄存器或者送往组成BIU的内部通信寄存器中
等待写入存储器
16位暂存器用来暂存参加运算的操作数

经ALU运算后的结果特征置入标志寄存器FLAGS中保存

EU控制器负责从BIU的指令队列中取指令
并对指令译码
根据指令要求向EU内部各部件发出控制命令以实现各条指令的功能

总线接口单元BIU:一般情况下
BIU通过地址加法器形成某条指令在存储器中的物理地址后
从存储器中取出该条指令的代码送入指令队列
一旦指令队列中空出2B
BIU将自动进行读指令的操作以填满队列
只要收到EU送来的操作数地址
BIU将立即形成这个操作数的物理地址
完成读写操作
遇到转移类指令
BIU将指令队列中剩余的指令作废
重新从存储器新的地址单元中取指令并送入指令队列
BIU中的指令队列可存放6B的指令代码
一般情况下应保证指令队列中填满指令
使得EU可以不断地得到等待执行的指令

EU送来的存储器地址称为逻辑地址
由16位"段基址"和16位"偏移地址"(段内地址)组成
访问存储器的实际地址称为物理地址
用20位二进制表示
地址加法器用来完成由逻辑地址变换成物理地址的功能
这实际上是进行一次地址加法
将两个16位的二进制代码表示的逻辑地址变换为20位的物理地址
从而使可寻址的存储空间达到1MB

总线控制电路将8086/8088CPU的内部总线与CPU引脚所连接的外部总线相连
是8086/8088CPU与外部交换数据的必经之路
它实际上包括16条数据总线
20条地址总线和若干条控制总线
CPU正是通过这些总线与外部联系从而形成各种规模的8086/8088微型计算机

8086/8088CPU区别:(1)指令队列长度不同
8088只有4B
8086有6B;(2)外部数据总线不同
8088CPU与外部交换数据的总线宽度是8位
而8086达16位

三、8086/8088的存储器结构
字节和字的地址

字传送:高字节数 高地址
低字节数 低地址
(反之同样)





(一)、存储器的分段
1、每段逻辑容量最长可达64K字节
1MB空间可分为16个逻辑段
2、各段起始地址能被16整除
(低4位为0)
3、各段之间可分开、部分或完全重叠、可续排列、可断续排列

4、根据各段的用途将其定义为CS、DS、ES、SS段
并用偏移地址(距段起址的字节距离)表示被访问单元

常在CS中用IP表示偏移量
SS中用 SP、BP
DS中用 BX、SI、DI、数值




















(二)、存储器中的逻辑地址和物理地址
?物理地址(绝对地址):20 位
逻辑地址:段基址 (段寄存器的内容)16位
偏移地址(字节距离)16位
物理地址由逻辑地址变换得来的
物理地址的形成(BIU完成)

















例如
代码段寄存器CS=2000H
指令指针寄存器存放的是偏移地址IP=2200H
存储器的物理

地址为20000H+2200H=22200H

存储器中的每个存储单元具有两种类型的地址:物理地址和逻辑地址
物理地址就是实际地址
它具有20位的地址值
并是惟一标识1MB存储空间的某一个字节的地址
逻辑地址由段基址和偏移地址组成
程序是以逻辑地址编址
而不是用物理编址

一般指令程序存放在代码段中
段地址来源于代码段寄存器
偏移地址来源于指令指针IP
当涉及到一个堆栈操作时
段地址寄存器为SS
偏移地址来源于栈指针寄存器SP
当涉及到一个操作数时
则由数据段寄存器DS或附加段寄存器ES作为寄存器
而偏移地址由16位偏移量得到
16位偏移量可以是指令中的偏移量加上16位地址寄存器的值组成
取决于指令的寻址方式

四、8086总线的工作周期
为了取得指令和传送数据的协调工作
就需要CPU的总线接口部件执行一个总线周期
在8086/8088中
一个最基本的总线周期由4个时钟周期组成
时钟周期是CPU的基本时间计量单位
它由计算机主频决定
例如8086的主频为10MHz
一个时钟周期就是100ns
在一个最基本的总线周期中
常将4个时钟周期分别称为4个状态
即T1、T2、T3、T4

1、时钟周期:由计算机的主频决定(主频的倒数)
用T表示

2、总线周期:8086/8088通过总线对存储器或I/O接口进行一次访问所用的时间称为一个总线周期

3、指令周期:CPU从主存取一条指令并执行该条指令所用的时间
它可以包含若干个总线周期

4、一个总线周期至少包括4个时钟周期



典型的8086总线周期时序如上图所示

CPU往多路复用总线上发出地址信息
以指出要寻址的存储单元或外设端口的地址

CPU从总线上撤消地址
而使总线的低16位浮置成高阻状态
为传输数据做准备
总线的高四位(A16~A19)用来输出本总线周期状态信息
这些状态信息用来表示中断允许状态
当前正在使用的段寄存器等

多路总线的高4位继续提供状态信息
而多路总线的低16位(8088则为低8位)上出现由CPU写出的数据或者CPU从存储器或端口读入的数据

在有些情况下
被写入数据或者被读取数据的外设或存储器不能及时地配合CPU传送数据
这时
外设或存储器会通过"READY"信号线在T3状态启动之前
向CPU发一个"数据未准备好"信号
于是CPU会在T3之后插入一个或多个附加的时钟周期TW
TW也称等待状态
在TW状态
总线上的信息情况和T3状态的信息情况一样
当指定的存储器或外设完成数据传送时
便在"READY"线上发出"准备好"信号
CPU接收到这一信号后
会自动脱离TW状态而进入T4状态

只有在CPU和内存或I/O接口之间传输数据
以及填充指令队列时
CPU

才执行总线周期
可见
如果在一个总线周期之后
不立即执行下一个总线周期
那么系统总线就处在空闲状态
此时
执行空闲周期

在空闲周期中
可以包含一个或多个时钟周期
在这期间
高4位上
CPU仍然驱动前一个总线周期的状态信息
而且
如果前一个总线周期为写周期
那么
CPU会在总线低16位上继续驱动数据信息;如果前一个总线周期为读周期
则在空闲周期中
总线低16位处于高阻状态

第三节 8086/8088CPU的引脚信号和工作模式
8086/8088CPU是十六位的微处理器
它向外的信号至少应包含16条数据线
20条地址线
再加上其他一些必要的控制信号
为了减少芯片引脚数量
对部分引脚采用了分时复用的方式
构成40条引脚的双列直插式封装
分时复用总线就是在同一根传输线上
在不同时间传送不同的信息
8086/8088正是靠分时复用技术
才能用40个引脚去实现众多数据、地址、控制信息的传送

8086/8088CPU有两种不同的工作模式(最小模式和最大模式)
8条引脚(24~31)在两种工作模式中具有不同的功能

一、8086/8088的引脚信号和功能
1、AD15~AD0(address data bus)地址/数据复用引脚(双向工作)
分时复用的地址/数据线
传送地址时三态输出
传送数据时可双向三态输入/输出

在8088中
A8~A15并不作复用
它们只是用来输出地址
称为A8~A15

作为复用引脚
在总线周期的T1状态用来输出要访问的存储器或I/O端口地址
T2~T3状态
对读周期来说
处于浮空状态;对于写周期来说
则是传输数据

2、A19/S6~A16/S3(Address/Status)输出
是分时复用的地址/状态线
用作地址线时
A19~A16与A15~A0一起构成访问存储器的20位物理地址
CPU访问I/O端口时
A19~A16保持为"0"
用作状态线时
S6~S3用来输出状态信息
其中S3和S4表示当前使用的段寄存器
如下表所示
S5用来表示中断标志状态线
当IF=1时
S5置"1";S6恒保持为"0"

3、(Bus High Enabale/Status)总线高字节有效信号
三态输出
低电平有效
用来表示当前高8位数据线上的数据有效
8086CPU有16根数据线
低8位数据线总是和偶地址的存储器/IO端口相连接
这些存储器/IO端口称为偶体
高8位的数据线则与奇地址的存储器/IO端口相连接
这些存储器/IO端口称为奇体
用作奇体的选体信号
它与最低位地址码A0配合表示当前总线使用情况
见下表


AD0 总线使用情况 0 0 16位数据总线上进行字传送 0 1 高8位数据总线上进行字节传送 1 0 低8位数据总线上进行字节传送 1 1 无效 S4 S3 段寄存器 0 0 ES 0 1 SS 1 0 CS 1 1 DS






非数据传送期间
S7输出状态信息
在CPU处于保持响应期间被设置为高阻抗状态

4

、NMI(Non Maskable Interrupt Request)不可屏蔽中断请求信号
由外部输入
上升沿触发
不受中断允许标志的限制
CPU一旦测试到NMI请求有效
当前指令执行完后自动从中断入口地址(中断向量)表中找到类型2中断服务程序的入口地址
并转去执行
显然这是一种比可屏蔽中断请求高级的中断请求

5、INTR(Interrupt Request)可屏蔽中断请求信号
由外部输入
电平触发
高电平有效
INTR有效时
表示外部向CPU发出中断请求
CPU在每条指令的最后一个时钟周期对INTR进行测试
一旦测试到中断请求
并且当前中断允许标志IF=1时
则暂停执行下一条指令转入中断响应周期

6、(Read)读信号
三态输出
低电平有效
表示当前CPU正在读存储器或IO端口

7、CLK(Clock)主时钟引脚(输入)
由8284时钟发生器输入
8286CPU可使用的最高时钟频率随芯片型号不同而异
8086为5MHz
8086-1为10MHz
8086-2为8MHz

8、RESET(reset)复位信号
由外部输入
高电平有效
RESET信号至少要保持4个时钟周期
CPU接收到CPU信号后
停止进行操作
并将标志寄存器、段寄存器、指令指针寄存器IP和指令队列等复位到初始状态
(见书本P96 表4-10)

9、READY(ready)准备就绪信号
由外部输入
高电平有效
表示CPU访问的存储器或IO端口已准备好传送数据
当READY无效时
要求CPU插入一个或多个等待周期TW
直到READY信号有效为止

10、TEST测试信号
由外部输入
低电平有效
CPU执行WAIT指令时
每隔5个时钟周期对TEST进行一次测试
若测试TEST无效
则CPU处于踏步等待状态
直到TEST有效
CPU才继续执行下一条指令

11、MN/MX工作模式选择信号
由外部输入
MN/MX为高电平时
CPU工作在最小模式;MN/MX为低电平时
CPU工作在最大模式

12、GND/VCC电源地和电源
8086CPU只需要单一的+5V电源
由VCC引脚输入


13、INTA 中断响应信号
向外部输出
低电平有效
在中断响应周期
该信号表示CPU响应外部发来的INTR信号
用作读中断类型码的选通信号

14、ALE 地址锁存允许信号
向外部输出
高电平有效
在最小模式系统中用作地址锁存器的片选信号

15、DEN数据允许信号
三态输出
低电平有效

16、DT/R数据发送/接收控制信号
三态输出
CPU写数据到存储器或IO端口时
DT/R输出高电平;CPU要从存储器或IO端口读取数据时
DT/R为低电平;进行DMA传输时
DT/R被置为高阻态

17、M/IO存储器/IO端口访问信号
三态输出
M/IO为高电平时
表示当前CPU正在访问存储器;M/IO为低电平时
表示CPU当前正在访问IO端口

18、WR写信号
三态输出
低电平有效
表示当前CPU正在写存储器或IO端口

19、HOLD总线请求信号
由外部输入、高电平有效
表示有其他共享

总线的处理器/控制器向CPU请求使用总线

20、HLDA总线请求响应信号
向外部输出
高电平有效
CPU一旦测试到有HOLD请求
就在当前总线周期结束后
使HLDA有效
表示响应这一总线请求
并立即让出总线使用权
在不要求使用总线的情况下
CPU中指令执行部件可继续工作
HOLD变为无效后
CPU也将HLDA置成无效
并收回对总线的使用权
继续操作

二、8086/8088最小工作模式
1、最小工作模式
所谓的最小工作模式就是指系统中只有一个8086/8088微处理器
所以最小模式也称单处理器模式
在最小模式系统中
所有的总线控制信号都由8086/8088CPU直接产生
构成系统所需的总线控制逻辑部件最小
因此
叫做最小工作模式
将CPU的引脚信号MN/MX接高电平(+5V)可使其工作于最小模式


最小工作模式
2、最小工作模式下系统的配置
(1)最小模式配置
硬件包括:1片8284A
作为时钟发生器;3片8282或74LS373
用来作为地址锁存器;当系统中所连的存储器和外设较多时
需要增加数据总线的驱动能力
这时
要用两片8286/8287作为总线收发器

总线周期锁存的信号有:在总线周期的前一部分时间
CPU总是送出地址信号
为了告诉地址已经准备好
可以被锁存
CPU此时会送出高电平的ALE信号
所以ALE就是允许锁存的信号
同时BHE信号也需要锁存
因为BHE信号线也是分时复用的
对于被锁存的分时复用的总线
在总线周期的后一部分时间中改变了功能
由于有了锁存器
在总线周期的后半部分
地址和数据同时出现在系统的地址总线和数据总线上
确保了CPU对储存器和IO设备的正常的读/写操作

(2)锁存器8282:是典型的锁存器芯片
不过是8位的
而8086/8088系统采用20位地址
加上BHE信号
所以
需要3片8282作为地址锁存器
对于有些只配备64KB内存的小系统
只用16位地址就够了
如果CPU又采用8088
这样
就不存在BHE信号
所以只需两片8282做锁存器

对于8282锁存器的联接和工作原理见电路图


8282锁存器与8086连接
(3)总线驱动器:当一个系统所含的外设接口较多时
数据总线上需要有发送器和接收器来增加驱动能力

Inter系统芯片的典型收发器为8286
是8位的
所以
在数据总线为8位的8088系统中
只用1片8286就可构成数据总线收发器
而在数据总线为16位的8086系统中
则要用两片8286
8286的联接和工作原理见电路图


需要注意:当系统中CPU以外的总线主控部件对总线有请求
并且得到CPU允许时
CPU的DEN和DT/R端呈现高阻状态
从而使8286各输出端也成为高阻状态

有时候

在设计系统总线时
希望提供给各部件数据信号的相位正好和CPU的原始数据信号相反;反过来一样
也就是需要将外部数据信号反一个相位再提供给CPU
为了满足这种需求
Inter公司又提供了另一功能和8286相仿的芯片8287
在这样的系统中
一般对地址信号也要求反一个相位
这时
地址锁存器就不用8282
而是采用8283
其功能和8282相仿
但提供的输出信号相位相反

最小模式系统中
信号M/IO、RD和WR组合起来决定了系统中数据传输的方式
见下表

数据传输方式 M/IO RD WR I/O读 0 0 1 I/O写 0 1 0 存储器读 1 0 1 存储器写 1 1 0
(4)8284A:它有3个功能
对准备信号(READY)及复位信号(RESET)进行同步
由最小模式系统电路中可见
外界控制信号RDY及RES信号可以在任何时候到来
8284A能把它们同步在时钟后沿时输出READY及RESET信号到8086CPU

8284A振荡源一般采用晶体振荡器
也可以用外部脉冲发生器作为振荡源
此时8284A的F/C端应接高电平
8284A输出的时钟频率为振荡源频率的1/3




三、最大工作模式
1、最大工作模式:最大工作模式是指系统中包含有两个以上的微处理器
所以需要增设总线控制器8288和总线仲裁器8289

最大工作模式的系统控制总线由8288产生;而其他协处理器因分时占用总线
所以需要总线仲裁控制器8289来确定总线该让哪个处理器使用及哪个处理器优先

2、最大工作模式下几个重新定义的引脚简要说明:
(1)QS1、QS0指令队列状态
向外部输出
用来表示CPU中指令队列当前的状态
其含义如下表示





QS1 QS0 含义 0 0 无操作 0 1 从队列中取第一个字节 1 0 队列已空 1 1 从队列中取后续字节
(2)S2、S1、S0总线周期状态信号
三态输出
这三个信号是在最大工作模式中由CPU传送给总线控制器8288的总线周期状态信号
其不同的组合表示了CPU在当前总线周期所进行的操作类型
最大模式中
总线控制器8288就是利用这些状态信号进行组合
产生访问存储器和I/O端口的控制信号


S2 S1 S0 操作过程 经总线控制8288产生的信号 0 0 0 发出中断响应信号 INTA(中断响应) 0 0 1 读I/O端口 IORC(I/O读) 0 1 0 写I/O端口 IOWC(I/O写) 0 1 1 暂停 无 1 0 0 取指令 MRDC(存储器读) 1 0 1 读内存 MRDC(存储器读) 1 1 0 写内存 MWTC(存储器写)、AMWTC(提前存储器写) 1 1 1 无源状态(无效状态) 无

(3)LOCK总线封锁信号
三态输出
低电平有效
LOCK有效时表示CPU不允许其它总线主控者占用总线
这个信号由软件设置
当前指令前加上LOCK前缀时
则在执行这条指令期间LOCK保持有效
阻止其它主控者使用总线

(4)RQ/GT1、RQ/GT0总线请求/同意信号线
双向

低电平有效
输入时表示其他主控者向CPU请求使用总线;输出时表示CPU对总线请求的响应信号
两条线可同时与两个主控者相连
RQ/GT0比RQ/GT1有较高的优先级

3、总线控制器8288:其引脚含义和内部结构见电路图
不作介绍

4、总线促裁控制器8289:其引脚含义和内部结构见电路图
不作介绍

第四节 8086/8088的主要操作功能
一个微机系统要完成各种任务
其中有一些操作的最基本的
本节介绍下以几项8086的主要操作:系统的复位和启动操作;总线操作;中断操作;最小工作模式下的总线请求;最大工作模式下的读/写操作

一、系统的复位和启动操作
在CPU的RESET引脚接收到高电平后的第1个时钟周期的正跳变时
8086/8088进行内部RESET阶段
再过一个时钟周期
所有三态输出线就被设置成高阻状态
并且一直维持高阻状态
直到RESET信号回到低电平
但在进入高阻状态的前半个时钟周期
也就是在前一个时钟周期的低电平期间
这些三态输出线被设置成无作用状态
等到时钟信号又成为高电平时
三态输出线才进入高阻状态

三态输出线包括:AD15~AD0、A19/S6~A16/S3、BHE/S7、M/IO、DT/R、DEN、WR、RD和INTA
还有几条非三态输出线
在复位之后会处于无效状态
但不浮空
它们是ALE、HLDA、RQ/GT0、RQ/GT1、QS0、QS1

8086/808要求复位信号(RESET)至少有4个时钟周期的高电平
如果是初次加电的启动
则要求有大于50us的高电平
当8086/8088进入内部RESET时
CPU就结束现行操作
维持在复位状态
这时CPU各内部寄存器都被设为初值
见下表


寄存器名称 寄存器状态 标志寄存器FLAGS 清零 指令指针寄存器IP 0000H CS寄存器 FFFFH DS寄存器 0000H SS寄存器 0000H ES寄存器 0000H 指令队列 空 其他寄存器 0000H
复位后
CS为FFFFH
而IP为0000H
所以重新启动后
8086/8088便从内存的FFFF0H处开始执行指令
使系统在启动时
能自动进入系统程序

二、总线操作
8086/8088CPU中各单元之间以及与外设的数据交换
都是通过总线来进行的
总线操作有两种情况
即总线读操作及总线写操作
分别指CPU从存储器或外设端口读取数据和CPU把数据写入存储器或外设端口

1、最小工作模式下的总线读操作(见下面时序图)
2、最小工作模式下的总线写操作(见下面时序图)


三、中断操作
微机系统为适应各种需要
都有一个中断系统
8086/8088是16位微处理器
它的中断系统可以处理256种不同类型的中断

1、8086/8088的中断分类
(1)硬件中断:是通过外部的硬件产生的
故常称为外部中断

硬件中断分为两类:一类称非屏蔽中断
另一类称可屏蔽中断
其中非屏蔽中断由NMI引脚输


不受中断允许标志IF的屏蔽
并且在整个系统中只能有一个非屏蔽中断
可屏蔽中断由INTR引脚进入
并且只有当中断允许标志IF=1时
可屏蔽中断才能进入
在一个系统中
通过中断控制器(如8259A)的配合工作
可屏蔽中断可以有几个、几十个甚至上百个

(2)软件中断:CPU根据软件中的某条指令或者软件对标志寄存器中某个标志的设置而产生的
从软件中断的产生过程来说
完全和硬件电路无关
软、硬件中断见下图示


2、中断向量:中断处理子程序的入口地址
每个中断类型对应一个中断向量

8086微机系统的内存中
把0段的0000~03FFH区域设置为一个中断向量表
每一个中断向量占4个存储单元
其中前两个单元存放中断子程序入口地址的偏移量(IP)
低位在前、高位在后;后两个单元存放中断子程序入口地址的段地址(CS)
也是低位在前、高位在后
在中断向量表中
这些中断向量是按中断类型的序号
从0单位开始
顺序排列
如类型号为17H的中断处理子程序存放在2345:7890H开始的内存区域中
而17H中断对应的中断向量存放在0000:005CH处
所以
0段005CH、005DH、005EH、005FH这4个单元中的值分别为90H、78H、45H、23H
8086系统的中断向量表见下图



3、硬件中断:8086系统由两条引脚NMI和INTR引进的中断请求信号
非屏蔽中断的类型号为2
所以
非屏蔽中断处理子程序的入口地址放在0段的0008H、0009H、000AH、000BH这4个单元中

非屏蔽中断级别最高
一般用来处理系统的重大故障
比如系统掉电处理常常通过非屏蔽中断处理程序来执行

当遇到掉电事故
此时电源系统就要通过CPU的NMI引脚向CPU发出非屏蔽中断请求
CPU接收到这一请求后
不管当前在做什么
都会停下来
立即转到非屏蔽中断处理子程序
非屏蔽中断处理子程序无非是要在晶体振荡器停振之前将现场作出紧急处理
一般采用以下措施:
(1)把现场的数据立即转移到非易失性有存储器中
等电源恢复后继续执行中断前的程序

(2)启动备用电源
在尽量短的时间内用备用电源来维持微机系统的工作

一般外设的中断都是从CPU的INTR端引入的可屏蔽中断
当CPU接收到一个可屏蔽中断请求信号时
如果标志寄存器中的IF为1
那么
CPU会在执行完当前指令后响应这一中断请求
至于IF的设置和清除
则可以通过指令或调试工具来实现

4、可屏蔽中断的响应过程
当INTR引脚上接收到一个高电平的中断请求信号
且IF=1
CPU就会在当前指令执行完后
开始响应外部的中断请求
即:CPU往INTA引脚上发两个负脉冲
外设接到第2个负脉冲后
立即

往数据线上给CPU送来中断类型码
CPU在响应外部中断、并进入中断子程序的过程中
要依次作下面几件事:
(1)从数据总线上读取中断类型码
将其存入内部暂存器

(2)将标志寄存器的值推入堆栈

(3)把标志寄存器中的中断允许标志IF和单步标志TF清零

(4)将断点保护到堆栈中

(5)根据前面得到的中断类型码
到内存0000段的中断向量表中找到中断向量
再根据中断向量转入相应的中断处理子程序
如中断类型码为0BH
则此中断对应的中断向量的首字节在0BH×4=2CH处
于是CPU在0段的002CH、002DH、002EH、002FH这4个字节中取得中断向量
并将前两个字节中的内容装入IP
将后两个字节的内容装入CS
这样
CPU要执行的下一条指令就是中断处理子程序的第一条转移指令
CPU转入了对中断处理子程序的执行

8086/8088的中断响应要用两个总线周期
其时序图如下图示
当一个可屏蔽中断被响应时
CPU实际执行的总线时序如下:

8086/8088的中断响应总线周期
(1)执行两个中断响应总线周期
之间用2~3个空闲状态隔开
被响应的外设端口在第二个中断响应总线周期中通过低8位数据送回一个单字节的中断类型码
CPU接收中断类型码
将它左移两位后
成为中断向量的起始地址
存入暂存器

(2)执行一个总线写周期
在这个周期中
把标志寄存器的值推入堆栈

(3)将标志寄存器的中断允许标志IF和单步标志TF置成0
这样禁止了中断响应过程中有其他可屏蔽中断进入
还禁止了中断处理过程中出现单步中断

(4)执行一个总线写周期
在这个周期内
将CS的内容推入堆栈

(5)执行一个总线写周期
在这个周期内
将IP容推入堆栈

(6)执行一个总线读周期
在这个周期内中
从中断向量表所在的前两个字节中读得中断处理子程序入口地址的偏移量送到IP寄存器中

(7)执行一个总线读周期
在这个周期内中
从中断向量表所在的前两个字节中读得中断处理子程序入口地址的段值送到CS寄存器中

如果是非屏蔽中断或者软件中断
则跳过步骤(1)
而从步骤(2)开始按次序执行到步骤(7)

5、中断处理子程序的结构模式
(1)保护现场:通过堆栈指令来保护CPU各寄存器的值

(2)开中断:一般情况下
应该用指令设置中断允许标志IF来开放中断
以允许级别较高的中断请求进入

(3)中断处理子程序:这是中断服务子程序的具体内容

(4)恢复现场:通过弹出堆栈指令
使得各寄存器恢复进入中断处理时的值

(5)返回:最后是中断返回指令
中断返回指令的执行会使堆栈中保存的断点值和标志值分别装

入IP、CS和标志寄存器

6、软件中断
在8086系统中
中断指令也是使CPU执行中断处理子程序
因此也称为这种方法为软件中断

软件中断是用一条指令来使CPU进入中断处理子程序
在进入中断是
不需要执行中断响应总线周期
也不从数据总线读取中断类型码
不受中断允许标志IF的影响
即不管IF是1还是0
任何一个软件中断均可执行
不过
软件中断信号仍会受到标志寄存器中另外一个标志即TF的影响
只有TF为1时
才能执行单步中断
正在执行软件中断时
如果有外部硬件中断请求
并且是非屏蔽中断请求
那么
会在执行完当前指令后立即给予响应
如果在执行软件中断时来了可屏蔽中断请求
并且这之前由于中断处理子程序中执行了开放中断指令
从而使中断允许标志IF为1
那么也会在当前指令执行完后响应可屏蔽中断请求

四、最小工作模式下的总线保持

8086/8088总线保持请求/保持响应时序图

当一个系统中具有多个总线主控模块时
CPU以外的其他总线主控模块为了获得对总线的控制
需要向CPU发出使用总线的请示信号;而CPU得到请求后
如果同意让出总线
就要向请求使用总线的主模块发应答信号
8086/8088CPU提供了一对HOLD、HLDA控制联络信号线

HOLD称为总线保持信号
是由其他总线主模块发给CPU的
当某个总线主模块企图使用系统总线时
便发出高电平的HOLD信号
然后等待CPU发来总线保持回答信号HLDA
在每个时钟脉冲的上升沿处
CPU会对HOLD引脚上的信号进行检测
如果检测到HOLD处于高电平状态
并且允许让出总线
那么在总线周期的T4状态或者空闲状态T1之后的下一个时钟周期
CPU会发出HLDA信号
从而CPU便将总线让给发出总线保持请求的设备
直到此后这个发出总线保持请求的设备又将HOLD信号变为低电平
CPU才又收回总线控制权

8086/8088CPU一旦让出总线控制权
便使地址/数据引脚、地址/状态引脚以及控制信号引脚RD、WR、INTA、M/IO、DEN及DT/R都处于浮空状态
这样
CPU和数据总线、地址总线以及上述控制信号之间就暂时没有关系了
不过
ALE信号引脚不浮空

五、最大工作模式下的读/写操作
由于8086/8088工作在最大工作模式系统中增加了总线控制器8088
这时总线控制信号不是由CPU直接控制
而是由8288提供
下面提供了最大工作模式系统中8086CPU的读/写周期时序图



??

??

??

??




1



相关主题
文本预览
相关文档 最新文档