第3章〓80x86微处理器






Intel 80x86系列CPU在微型计算机的发展过程中具有不可替代的地位。虽然目前高档微机系统已经普及,但8086 CPU作为主流微型计算机的基础,能够系统、全面地反映微型计算机系统的工作原理。本章以8086 CPU为例,介绍了微处理器的内部结构、外部基本引脚、工作方式、总线和时序,以及8086 CPU的存储器组织、中断系统等内容。为学习汇编语言程序设计和接口应用技术打下基础。

3.1Intel 8086微处理器

Intel 8086微处理器是由美国Intel公司1978年推出的高性能的16位微处理器,是第三代微处理器的典型代表。它有20根地址总线,直接寻址能力达1MB,具有16根数据总线,内部总线和ALU均为16位,可进行8位和16位操作。

Intel 8086微处理器具有丰富的指令系统,采用多级中断技术、多重寻址方式、多重数据处理形式、段式存储器结构、硬件乘除法运算电路,增加了预取指令的队列寄存器等,一问世就显示出了强大的生命力,以它为核心组成的微机系统性能已达到当时中、高档小型计算机的水平。8086的一个突出特点是多重处理能力,用8086 CPU、8087浮点运算器及8089 I/O处理器组成的多处理器系统,可大大提高其数据处理和输入/输出能力。另外,与8086配套的各种外围接口芯片非常丰富,用户可以方便地开发各种系统。

3.28086的存储器组织
3.2.1寻址空间和数据存储格式


1. 寻址空间

程序和数据存放在内存中,CPU根据地址访问内存,找到需要的指令或数据。寻址空间就是指存储器地址允许的最大范围,即CPU能访问多大范围的地址。

计算机的寻址空间是由CPU地址总线的位数决定的。当存储器按字节编址时,若地址总线为n位,CPU寻址范围是2n字节。例如,8086 CPU有地址总线20位,寻址能力为220=1MB; 80286的地址总线为24位,CPU的寻址能力为224=16MB; 20386地址总线为32位,CPU的寻址能力为232=4GB。寻址范围的大小和内存的实际容量并不一定相等,如果地址总线位数不够,即使有很大的内存也无法完全访问。而对于当前主流的微处理器,其寻址能力已远远超过实际的内存容量。

2.  8086存储器的组织及寻址

8086  CPU地址总线20位,寻址能力为1MB,每字节用唯一的一个地址码标识。地址的范围为0~220-1,用十进制表示为0~1048575。但习惯上使用十六进制表示,即00000H~FFFFFH。这种每字节对应一个地址的方式称为“按字节编址”,如图3.1所示。



图3.1存储空间的字节编址


8086系统的存储空间虽然按照字节编址,但在实际编程时,一个变量可以是字节、字或双字类型。

(1)   字节数据(BYTE)。字节数据8位,对应的地址可以是偶地址(地址的最低位A0=0),也可以是奇地址(A0=1)。当CPU存取字节数据时,只需给出对应的实际地址即可。





(2)  字数据(WORD)。

Intel 8086是16位机,字长16位,每个字数据存放在两个连续的字节单元中。其中高8位存放在高地址字节(称为高字节),低8位存放在低地址字节(称为低字节),并规定将低字节的地址作为这个字的地址(字地址),如图3.2所示。若该字地址位于偶地址,即低字节地址为偶数,称为规则字,否则称为非规则字。



图3.2字数据


(3)  双字数据(DOUBLE WORD)。

双字数据占用4个连续字节单元,并规定最低字节地址为双字的地址,如图3.3所示。



图3.3双字数据


8086系统将1MB的内存分为两个块,每个块的容量都是512KB,如图3.4所示。其中和数据总线D15~D8相连的块称为高位字节块,它由所有的奇地址单元组成(对应双字数据的D15~D8、D31~D24位),也称为奇地址块; 和数据总线D7~D0相连的块称为低位字节块,它由所有的偶地址单元组成(对应双字数据的D7~D0、D23~D16位),也称为偶地址块。



图3.48086系统的存储器结构


高位字节块利用BHE信号作为该块的选择信号; 低位字节块利用地址线A0=0(低电平)作为该块的选择信号。对于每个块内的512字节,通过A19~A1共19位地址线进行寻址。当CPU访问内存时,首先根据BHE和A0信号配合判断字节所在的块,然后通过A19~A1访问相应块中的存储单元。表3.1所示为BHE和A0组合对应的存取操作。


表3.1BHE和A0的代码组合对应的存取操作



数据类型BHEA0操作数据

规则字
0
0
从偶地址开始读/写一个字
D15~D0

字节
01从奇地址开始读/写一字节D15 ~D8
10从偶地址开始读/写一字节D7~D0

非规则字
 
01
10
从奇地址开始读写一个字(非规则字),第一总线周期高8位数据有效,第二总线周期低8位数据有效


D15~D8
D7~D0

—
1
1
无效—


当BHE=0、A0=0时,高位字节块和低位字节块同时有效,8086 CPU通过A19~A1同时在两个块中各寻址一字节,高位字节块中的数据经数据线的高8位(D15~D8)传送,低位字节块中的数据经数据线的低8位(D7~D0)传送,完成一个规则字的存取操作。

当BHE=0、A0=1时,高位字节块有效,通过A19~A1在该块中寻址一字节,并经数据线的高8位(D15~D8)传送。

当BHE=1、A0=0时,低位字节块有效,通过A19~A1在该块中寻址一字节,并经数据线的低8位(D7~D0)传送。

而对于非规则字的存取操作,则需要两个总线周期才能完成: 在第一个总线周期中,BHE=0、A0=1,存取高8位数据; 在第二个总线周期中,BHE=1、A0=0 ,存储器地址加1,访问低8位数据。

这里存取操作所需的BHE及A0信号是由字操作指令给出的。

3.2.2存储器的分段结构和物理地址的形成
1. 存储器的分段结构

8086 CPU的20位地址总线,可直接寻址1MB存储器物理空间,其地址范围为00000H~FFFFFH,与存储单元一一对应的20位地址,称为存储单元的物理地址。

但8086CPU内部寄存器均为16位,8086指令中的地址码也只有16位,那么,利用16位的寄存器如何表示20位地址呢?为了解决这个问题,8086存储器采用分段管理,将1MB的存储空间分成若干逻辑段,每个逻辑段长度≤64KB,并且规定段起始地址的低4位必须为0。将段起始地址的高16位称为该段的段地址(或段基地址),段内存储单元相对于段起始地址偏移量称为当前段内的偏移地址(Offset Address),偏移地址也是16位。这样,任何一个内存单元的地址都可以用段地址和偏移地址来表示,其格式为: 



段地址: 偏移地址






这种地址表示的方式称为逻辑地址。例如,逻辑地址7018H: 5E7FH表示段地址为7018H,偏移地址为5E7FH。可见,通过对内存的分段,将20位的物理地址,用1个16位的段地址和1个16位的偏移地址组成的逻辑地址表示,解决了16位CPU寻址1MB存储空间的问题。另外,内存分段也为程序的浮动分配创造了条件。

2. 物理地址的形成

根据逻辑地址,可以求出它对应的物理地址: 


图3.5物理地址形成过程


物理地址=段地址×10H+偏移地址

例如,逻辑地址7018H: 5E7FH表示的物理地址是7018H×10H+5E7FH=75FFFH。

物理地址的计算过程也可以表示为: 

物理地址=段地址×16+偏移地址

8086CPU有一个专门的20位地址加法器实现逻辑地址到物理地址的变换。当CPU寻址某个存储单元时,首先将段地址左移4位,再与16位偏移地址相加,从而形成20位的物理地址,如图3.5所示。


3. 按信息特征分段存储


在存储器中存储的信息可分为程序指令、数据和计算机系统的状态等信息。为了寻址及操作的方便,8086系统中,存储器空间根据信息特征分段存储。一般可将存储器划分为程序段、数据段、堆栈段和附加段。程序段中存储程序的指令代码; 数据段和附加段中存储数据、中间结果和最后结果; 堆栈段存储压入堆栈的数据或状态信息。在取指令时,CPU自动选择代码段寄存器(CS); 堆栈操作时,CPU自动选择堆栈段寄存器(SS); 每当存取操作数时,CPU会自动选择数据段寄存器(DS)或附加段寄存器(ES)。

3.38086微处理器的内部结构
3.3.18086 CPU的内部结构

CPU的任务是执行存放在存储器中的指令序列,即取指令和执行指令。

8086 CPU内部由两大功能部件组成: 总线接口部件(Bus Interface Unit,BIU)和执行部件(Execute Unit,EU),其结构框图如图3.6所示。



图3.6Intel 8086 CPU逻辑结构框图


在执行指令的过程中,BIU和EU是既分工又合作的两个独立部件。BIU部件负责存取指令和数据,EU部件负责执行指令,它们的操作是并行的,如图3.7所示。



图3.7Intel 8086执行指令过程


BIU和EU是各自独立工作的,在EU执行指令的同时,BIU可预取下面一条或几条指令。也就是说,一条指令在EU中执行的同时,BIU就可以提前取出下一条(或多条)指令,放在指令队列中排队。当CPU执行完当前指令后,就可立即执行存放在指令队列中的下一条指令。EU和BIU的并行操作提高了CPU和总线的利用率,加快了程序的运行速度。

BIU和EU的操作遵循下列原则。 

(1) 每当8086 CPU指令队列中有两个空字节时,BIU就会自动寻找空闲的总线周期进行预取指令操作,直到指令队列填满为止。

(2) 当指令队列缓冲器中存有一条以上的指令时,EU就立即开始执行。

(3) 每当EU执行一条转移、调用或返回指令后,BIU清空指令队列,并从转移后的当前地址取出指令送EU执行,实现程序段的转移; 然后在新地址基础上再做预取指令操作。

1. 总线接口部件

总线接口部件BIU完成CPU与主存储器或I/O端口间的信息传送,它的主要功能如下。

(1) 预取指令序列。BIU会自动进行预取指令操作,并将从存储器中取出的指令按先后次序存入指令缓冲寄存器,以便EU按顺序执行这些指令。

(2) 存取数据。在指令执行期间,BIU配合EU,从指定的内存单元或I/O端口中取出数据传送给执行单元,或者把执行单元的处理结果传送到指定的内存单元或I/O端口中。

(3) 将访问主存的逻辑地址转换为实际的物理地址。

8086的BIU由一个20位地址加法器、4个16位段寄存器、一个16位指令指针IP、一个6字节的指令队列缓冲器,以及总线控制逻辑电路等组成。

(1) 地址加法器和段寄存器。地址加法器将16位的段寄存器内容左移4位,与16位偏移地址相加,形成20位的物理地址。

(2) 指令指针IP。16位指令指针IP用来存放下一条将要执行的指令在代码段中的偏移地址。

(3) 指令队列缓冲器。指令队列寄存器用来缓存BIU取出待执行的指令。该队列寄存器按“先进先出”的方式工作。

(4) 总线控制逻辑。总线控制逻辑将8086 CPU的内部总线和系统总线相连,是8086 CPU与内存单元或I/O端口进行数据交换的必经之路。它包括16条数据总线、20条地址总线和若干条控制总线,CPU通过这些总线与外部取得联系,从而构成各种规模的8086微型计算机系统。

2. 执行部件

执行部件(EU)负责进行所有指令的解释和执行,同时管理EU中相关的寄存器。它的主要功能如下。

(1) 从指令队列中取出指令代码,由EU控制器进行译码,然后控制各部件完成指令规定的操作。

(2) 对操作数进行算术和逻辑运算,并将运算结果的特征状态存放在标志寄存器中。

(3) 当需要与主存储器或I/O端口传送数据时,EU向BIU发出命令,并提供要访问的内存地址或I/O端口地址及传送的数据。

EU由一个16位的算术逻辑运算单元(ALU)、8个16位通用寄存器、一个16位标志寄存器FLAGS、一个数据暂存寄存器和EU控制电路组成。

(1) 算术逻辑运算单元。算术逻辑运算单元是一个16位的运算器,可用于8位、16位二进制算术和逻辑运算,也可计算内存地址的16位偏移量。

(2) 通用寄存器组。通用寄存器组包括4个16位的数据寄存器AX、BX、CX、DX和4个16位指针与变址寄存器SP、BP与SI、DI。

(3) 标志寄存器。标志寄存器是一个16位的寄存器,用来反映CPU运算的状态特征和存放某些控制标志。

(4) 数据暂存寄存器。数据暂存寄存器协助ALU完成运算,暂存参加运算的数据。

(5)   EU控制电路。EU控制电路负责从BIU的指令队列缓冲器中取指令,并对指令译码,根据指令的要求向EU内部各部件发出控制命令,以完成各条指令规定的功能。

执行单元中的各部件通过16位的内部总线连接在一起,在内部实现快速数据传输。值得注意的是,这个内部总线与CPU外接的总线之间是隔离的,即这两个总线可以同时工作而互不干扰。EU从BIU的指令队列缓冲器中取出指令并执行,由BIU通过外部总线从存储器中取得指令。

在指令执行过程中可能需要从存储器中存取数据,这时,EU单元将16位有效地址提供给BIU,在BIU中转换为20位的物理地址,送到外部总线进行寻址。

3.3.28086 CPU的寄存器结构

8086微处理器内部共有14个16位寄存器。这14个寄存器按其用途可分为数据寄存器、段寄存器、地址指针与变址寄存器、控制寄存器。

8086 CPU内部寄存器如图3.8所示。



图3.88086 CPU内部寄存器



1. 段寄存器

在8086系统中,存储器是分段管理的,访问存储器的地址码由段地址和段内偏移地址两部分组成。段寄存器用来存放段地址,包括4个16位寄存器: 代码段寄存器CS、数据段寄存器DS、堆栈段寄存器SS和附加段寄存器ES。

(1) 代码段寄存器CS(Code Segment): 存放当前正在运行的程序所在段的段地址,段内的偏移地址则由IP提供。

(2) 数据段寄存器DS(Data Segment): 存放当前程序使用的数据所在段的段地址。

(3) 堆栈段寄存器SS(Stack Segment): 存放当前堆栈段的段地址。堆栈是在存储器中开辟的、按照“后进先出”原则组织的一个特殊区域。主要用于子程序调用时保护现场和保存断点。

(4) 附加段寄存器ES(Extra Segment): 存放当前程序使用附加段的段地址,附加段是一个附加的数据段,在执行串操作指令时,作为目的串地址使用。


2. 数据寄存器

数据寄存器用来暂时存放计算过程中所用到的操作数、结果或其他信息,包括累加器AX、基址寄存器BX、计数寄存器CX和数据寄存器DX。这4个寄存器都是16位的,它们都可以以字(16位)或字节(8位)形式访问。例如,对于AX寄存器,可以分别访问高字节AH或低字节AL寄存器。因此,它们既可作为4个16位数据寄存器使用(AX、BX、CX、DX),也可作为8个8位数据寄存器使用(AH、AL、BH、BL、CH、CL、DH、DL)。

AX、BX、CX、DX还可以用于各自的专用目的。

AX(Accumulator): 主要作为累加器使用,它是算术运算的主要寄存器。另外,所有的I/O指令都使用这一寄存器与外部设备传送信息。

BX(Base): 在计算存储器地址时,它经常用作基址寄存器。

CX(Count): 在循环(Loop)和串处理指令中,用作隐含的寄存器。

DX(Data): 一般在做双字运算时把DX和AX组合在一起存放一个双字数,DX用来存放高位字。此外,对于某些I/O操作,DX可用来存放I/O的端口地址。

3. 地址指针与变址寄存器

地址指针与变址寄存器包括4个16位寄存器: 堆栈指针寄存器SP、基址指针寄存器BP、源变址寄存器SI和目的变址寄存器DI。它们一般用来存放主存地址的段内偏移地址,用于形成20位物理地址。另外,它们也可以和数据寄存器一样在运算过程中存放操作数,但只能以字(16位)为单位使用。 

(1) 堆栈指针寄存器SP(Stack Pointer): 指出在堆栈段中栈顶的偏移地址。

(2) 基址指针寄存器BP(Base Pointer): 指出要处理的数据在堆栈段中的起始地址,特别值得注意的是,凡包含BP的寻址方式中,如无特别说明,其段地址由堆栈段寄存器SS提供。也就是说,该寻址方式是对堆栈区的存储单元寻址的。

(3) 变址寄存器SI(Source Index)和DI(Destination Index): 在某些间接寻址方式中,用来存放段内偏移量的全部或一部分。在字符串操作指令中,SI用作源变址寄存器,DI用作目的变址寄存器。

4. 控制寄存器

控制寄存器包括指令指针寄存器IP和标志寄存器FLAGS。

(1) 指令指针寄存器IP(Instruction Pointer): 用来存放下一条将要执行的指令在代码段中的偏移地址,程序员不可以直接使用,每当执行一次取指令操作,它将自动加1,“1”指1条指令,即指令的字节数不同,IP加“1”的字节数也不同。它和CS相结合,形成指向指令存放单元的物理地址。

(2) 标志寄存器FLAGS: 存放该处理器的程序状态字。这是一个16位的寄存器,但实际上8086 CPU只用到9位,其中6位为状态标志位,3位为控制标志位,如图3.9所示。




D15D14D13D12D11D10D9D8D7D6D5D4D3D2D1D0

OFDFIFTFSFZFAFPFCF

图3.98086 CPU的标志寄存器


状态标志反映了当前运算和操作结果的状态条件,可作为程序控制转移与否的依据。它们分别是CF、PF、AF、ZF、SF和OF。

CF(Carry Flag): 进位标志位。算术运算指令执行后,若运算结果的最高位产生进位或借位,则CF=1; 否则CF=0。

PF(Parity Flag): 奇偶标志位。反映运算结果中1的个数是偶数还是奇数。运算指令执行后,若运算结果的低8位中含有偶数个1,则PF=1; 否则PF=0。

AF(Auxiliary carry Flag): 辅助进位标志位。算术运算指令执行后,若运算结果的低4位向高4位(即D3位向D4位)产生进位或借位,则AF=1; 否则AF=0。

ZF(Zero Flag): 零标志位。若指令运算结果为0,则ZF=1; 否则ZF=0。

SF(Sign Flag): 符号标志位。它与运算结果的最高位相同。若字节运算时D7位为1或字运算时D15位为1,则SF=1; 否则SF=0。用补码运算时,它能反映结果的符号特征。

OF(Overflow Flag): 溢出标志位。当补码运算有溢出时(字节运算时为-128~+127,字运算时为-32768~+32767),则OF=1; 否则OF=0。

控制标志位则可以由指令进行置位和复位,用来控制CPU的操作,它包括DF、IF、TF。

DF(Direction Flag): 方向标志位。用于串操作指令,指定字符串处理时的方向。设置DF=0时,每执行一次串操作指令,地址指针内容将自动递增; 设置DF=1时,地址指针内容将自动递减。可用专用指令设置或清除DF位。

IF(Interrupt Enable Flag): 中断允许标志位。用来控制8086 CPU是否允许接收外部中断请求。设置IF=1时,允许响应可屏蔽中断请求; 设置IF=0时,禁止响应可屏蔽中断请求。可用专用指令设置或清除IF位。注意,IF的状态不影响非屏蔽中断请求(NMI)和CPU内部中断请求。

TF(Trap Flag): 单步标志位(或跟踪标志位)。它是为调试程序而设定的陷阱控制位。设置TF=1时,使CPU进入单步执行指令工作方式,此时CPU每执行完一条指令就自动产生一次内部中断; 当该位复位后,CPU恢复正常工作。没有专用指令设置或清除TF位。

【例3.1】设(AX)=0010 0011 0100 1101B,(DX)=0101 0010 0000 1001B,试指出两数相加后,6位标志位的状态。

解用补码公式对两数进行运算,并按定义对结果进行判别。

计算机中用补码存储数据,两数相加过程为:  

0 010 0011 0100 1101

+0 101 0010 0000 1001
0 111 0101 0101 0110


根据两数相加结果,可得如下结论。

① 结果非零,故ZF=0。

② 低8位中共有4个1(偶数个),故PF=1。

③ 根据符号位,可知SF=0。

④ 运算结束后,向更高位无进位,故CF=0。

⑤ 运算结果无溢出,故OF=0。

⑥  D3位向D4位产生进位,故AF=1。

3.4总线的工作周期

指令的执行是在统一的时钟脉冲CLK的控制下,按节拍逐步进行的,一个时钟脉冲时间称为一个时钟周期(Clock Cycle),也称为一个T周期。时钟周期由计算机的主频决定,是CPU的定时基准。例如,8086的主频为5MHz,一个时钟周期为200ns。

CPU与外部交换信息总是通过总线进行的。CPU通过总线对存储器或外设I/O端口进行一次访问所需要的时间称为总线周期(Bus Cycle)。8086 CPU的一个基本的总线周期由4个时钟周期组成,分别称为T1、T2、T3和T4。

一个总线周期完成一次数据传输,至少要有传送地址和传送数据两个过程。在第一个时钟周期T1期间由CPU输出地址,在随后的3个时钟周期(T2、T3和T4)期间用以传送数据。换言之,数据传送必须在T2~T4这3个周期内完成,否则在T4周期后,总线将进行另一次操作,开始下一个总线周期。

在实际应用中,如果一些慢速设备在3个T周期内无法完成数据读/写时,在T4后总线就不能为它们所用,这会造成系统读/写出错。为此,在总线周期中允许插入等待周期TW。当被选中进行数据读/写的存储器或外设无法在3个T周期内完成数据读/写时,就由其发出一个请求延长总线周期的信号到8086 CPU的READY引脚,8086 CPU收到该请求后,就在T3与T4之间插入等待周期TW,加入TW的个数与外部请求信号的持续时间长短有关,TW也以时钟周期T为单位,在TW期间,总线上的状态一直保持不变。

如果在一个总线周期后不立即执行下一个总线周期,即总线上无数据传输操作,系统总线处于空闲状态,则这时执行空闲周期Ti,Ti也以时钟周期T为单位,两个总线周期之间插入几个Ti与8086 CPU执行的指令有关。例如,在执行一条乘法指令时,需用124个时钟周期,而其中可能使用总线的时间极少,而且预取队列的充填也不用太多的时间,加入的Ti可能达到100多个。

总线周期时序如图3.10所示。



图3.10总线周期时序


一条指令从开始取指令到最后执行完毕所需的时间称为一个指令周期。不同的指令因其操作性质不同,执行时间的长短可能不同,所以指令周期也就不同。一个指令周期由一个或若干总线周期组成。

CPU执行某一个程序之前,先要把编译后的目标程序放到主存储器的某个区域。在启动执行后,CPU就发出读指令的命令,根据代码段寄存器CS和指令指针IP生成20位物理地址并将其输出到地址总线上,在存储器中读取相应的存储单元,把它送至CPU的指令寄存器中;  CPU对读出指令经过译码器分析之后,发出一系列控制信号,执行指令规定的全部操作,控制各种信息在系统各部件之间传送。每条指令的执行由取指令、译码和执行等操作组成。

3.58086中断系统

8086中断系统可以直接识别和处理256个不同的中断源。这256个中断源都有唯一的一个中断识别号,又称中断类型码(0~255),与之对应。

3.5.18086中断类型

根据中断的产生原因,8086中断系统将256个中断源分为两大类: 硬件中断与软件中断。

1. 硬件中断

中断起初是作为CPU与外围设备交换信息的一种同步控制方式而出现的,这类中断常称为硬件中断。硬件中断又称外部中断,它是由处理器外部的硬件、外围设备的请求而引起的中断。8086有两条硬件中断请求信号线:  NMI(非屏蔽中断)和INTR(可屏蔽中断),外围设备是通过中断请求线向CPU提出中断请求的。

(1)  可屏蔽中断。由INTR线上的中断请求信号引起的中断称为可屏蔽中断。可屏蔽中断INTR受中断允许触发器状态的影响,这种请求可以用CPU指令CLI来屏蔽(使IF=0),也可以用指令STI允许(使IF=1)。出现在INTR线上的中断请求信号(即有效的高电平)必须保持到当前执行的指令结束为止。

CPU在当前指令周期的最后一个T状态采样中断请求线INTR,若发现有可屏蔽中断请求,且中断是开放的(IF=1),则CPU转入中断响应周期。8086进入两个连续的中断响应周期,每个响应周期都是由4个T状态组成,而且都发出有效的中断响应信号。请求中断的中断源必须在第2个中断响应周期的T3状态前,将其中断类型号送至CPU的数据总线。CPU在T4状态的前沿采样数据总线,获取中断类型号。CPU根据中断类型号获取对应的中断服务程序入口地址,从而转去执行相应的服务程序。在一个系统中,产生可屏蔽中断的中断源可以有多个,为了协助CPU按中断优先权高低处理多个中断源,系统中常采用专门的中断控制器8259配合工作,实现多个中断源的管理。中断类型码在08H~0FH和070H~077H之间的中断属于这一级中断。

(2)  非屏蔽中断。由NMI线上的中断请求信号引起的中断称为非屏蔽中断。非屏蔽中断的中断类型码为2。非屏蔽中断NMI具有比可屏蔽中断INTR更高的优先权。当INTR、NMI线上同时发生中断申请时,CPU将首先响应NMI中断。非屏蔽中断的特点是不受中断允许触发器IF状态的影响,即不能被CPU用指令CLI来屏蔽。

当NMI线上出现一个由低到高的上跳边沿触发的中断请求信号后(持续时间需大于两个时钟周期),不管中断允许标志位IF的状态如何,都会在当前指令执行完以后,立即转入中断处理——转去执行中断类型号为2的非屏蔽中断的中断服务程序。

非屏蔽中断常用于紧急情况的故障处理。8086使用NMI中断服务程序对RAM奇偶校验错、I/O通道校验错或协处理器8087运算错进行处理。

2. 软件中断

随着计算机技术的发展和应用需求的提高,中断的概念也随之拓宽。除了传统的硬件中断外,又产生了软件中断的概念,在高档微处理器中则进一步丰富了软件中断的种类,延伸了其内涵,把许多在执行指令过程中产生错误的事件也纳入中断处理的范围。

软件中断是由处理器内部事件产生的中断,又称内部中断。它主要由指令驱动或由指令通过CPU状态间接驱动来引起中断。

软件中断有以下几种类型。 

(1)  除法错中断。
中断类型码为0。当执行DIV、IDIV指令时,若用零作除数,或者商超过了寄存器所能表达的范围,则无条件产生该中断。

(2)  单步中断。
中断类型码为1。这是在调试程序过程中为单步运行程序提供的中断形式。当设定标志寄存器中陷阱标志TF=1时,CPU每执行完一条指令后就产生该中断。若TF=0,则处理器按正常方式连续执行指令。

在8086指令系统中没有能直接设置或改变TF的命令。若要设置或改变TF状态,则可以使用PUSHF指令把16位标志寄存器压入堆栈,并设法把栈顶16位字的第8位变为所要的状态(其他位不变),然后用POPF把栈顶字弹出到标志寄存器中。

(3)  断点中断。
中断类型码为3。这是在调试程序过程中为设置程序断点而提供的中断形式。设置断点或执行INT 3指令可产生该中断。

(4) 溢出中断。
中断类型码为4。在算术运算程序中,若在算术运算之后加入一条INTO指令,则INTO指令将测试溢出标志OF。当OF=1(表示算术运算有溢出)时,该中断发生。

(5) 中断指令INT n引起的中断。
用户可用中断指令INT n产生指定类型n的任何中断。当执行这条指令时,CPU立即产生中断类型号为n的中断响应。

DOS操作系统和基本输入/输出系统BIOS提供了大量的软件中断来实现系统功能的调用。用户在程序设计中可以利用INT n指令直接引用这些系统功能。

3. 中断优先权

在以下中断中,8086规定中断优先权从高到低的顺序为①>②>③>④。

① 除法错、溢出中断指令INTO、中断指令INT n。

② 非屏蔽中断NMI。

③ 可屏蔽中断INTR。

④ 单步中断。

3.5.2中断向量与中断向量表

为了区分各中断源,不同的中断源都有唯一标识的中断类型码(也称为中断向量号或中断矢量号)。由中断类型码来查找中断入口地址进而转向中断服务程序的方法,称为向量中断。每个中断类型码对应一个中断向量,即中断服务程序的入口地址。8086 CPU的中断系统就是采用这种向量中断来管理中断向量的。

每个中断服务程序都有其唯一确定的入口地址,包括中断服务程序的段地址CS和偏移地址IP,共4B。把系统中每一个中断源的中断服务程序入口地址集中起来,按中断类型码的顺序存放在某一连续排列的存储区域内,


图3.118086系统的中断向量表


这个存放中断入口地址的存储区就称为中断向量表。8086系统的中断向量表如图3.11所示。


8086微机系统可提供256个不同类别的中断,由于每个中断入口地址需占用4B的地址空间,故其中断向量表需占用256×4=1KB的地址空间。8086微机系统在其内存的最低端开辟了1KB的存储区(即地址为00000H~003FFH)作为中断向量表。微机系统初始化时,系统顺序将各中断源(0~255)的中断服务程序入口地址填写在该表中。其中,中断类型码n的中断向量存储在中断向量表的地址为0000:4n,即对应的中断入口地址放在起始地址为0000:  4n的连续4B的地址空间中,低地址的两字节存放中断服务程序入口地址的偏移地址(IP),高地址的两字节存放中断服务程序入口地址的段基址(CS)。这样,在响应中断时,CPU就可以根据所得到的中断类型码n,查找中断向量表,在从地址0000:  4n开始的连续4B单元中获取中断源n的中断服务程序首地址。

中断向量表建立了不同的中断源与其相应的中断服务程序首地址之间的联系,它使CPU在响应中断时可以依据中断类型码自动转向中断服务程序,是8086中断系统中特有的、不可缺少的组成部分。


3.5.38086中断处理过程

不同类型的中断,其中断响应过程也不完全相同,如图3.12所示。

1. 可屏蔽中断的中断过程

8086 CPU是通过中断控制器8259A管理外部可屏蔽中断的。

(1)  中断源通过中断控制器8259向CPU发出中断请求信号。当有一个或多个外设向中断控制器8259发出中断请求时,8259经过识别,判优后通过INTR信号线向8086 CPU发出一个高电平的中断请求信号。

(2)   CPU在每一个指令周期的最后一个时钟周期采样INTR信号线,若发现该信号线为高电平,即有中断源向CPU发中断请求,则CPU首先检测IF标志位的值,如果IF=1,表示CPU允许中断,CPU开始响应中断; 否则,CPU忽略该级中断请求,继续执行原程序或响应更高优先级的中断请求服务。

(3)  当CPU开始响应可屏蔽中断请求时,通过INTA信号线向8259连续发出两个负脉冲的中断响应信号。CPU的第1个中断响应信号用来通知8259,CPU准备响应中断,要求8259准备好中断类型码; 当8259接收到CPU发来的第2个中断响应信号以后,立即将准备好的中断类型码通过数据线送至CPU的内部数据寄存器中,以便CPU据此找到相应的中断服务子程序的入口地址。





图3.128086中断系统的中断响应流程


(4)  CPU暂停执行当前程序,而转去执行相应的中断处理程序。在这个过程中,CPU依次做如下处理。

① 将标志寄存器FLAGS的当前值压栈保存。

② 将标志寄存器中的中断允许标志位IF和单步标志位TF的值清零。将IF标志位清零是为了能够在中断响应过程中暂时屏蔽来自同级的其他中断源的请求; 将TF标志位清零是为了避免以单步方式执行中断服务程序。

③ 保护断点,即将寄存器CS和IP的值压栈保存,以便在中断处理程序执行完以后,能够正确地返回到原程序中继续执行。

④ 根据得到的中断类型号,从中断向量表中找到相应的中断服务子程序的入口地址,将其段地址和段内偏移地址分别装入代码段寄存器CS和指令指针寄存器IP中,从而使CPU转去执行相应的中断服务程序。

⑤  CPU执行中断服务程序。8086中断系统中,在执行中断处理的具体内容前,首先将中断服务过程中需要用到的各个寄存器的当前值压入堆栈进行保护,以免在中断服务过程中改变了这些寄存器的值,而导致中断处理程序执行完后,不能正确返回源程序继续执行,这个过程称为保护现场。而在执行完中断处理的具体内容以后,再使用出栈指令,将先前保护的寄存器重新恢复为中断前的值,这就是恢复现场的工作。另外,在保护现场后,中断服务程序往往设置一条开中断指令,令IF标志位的值为1,使在中断服务结束后,允许同级或更高级别的其他中断源的中断请求进入即允许中断嵌套。

⑥ 返回断点,继续执行被中断的程序。中断服务程序执行的最后一条指令是IRET指令(中断返回指令),该指令将保存在堆栈中的断点值和标志寄存器FLAGS的值弹出,重新装入CS、IP和标志寄存器中,从而完成恢复断点的工作。

2. 非屏蔽中断和软件中断的执行过程

非屏蔽中断和软件中断的中断响应、中断处理及中断返回等过程,与可屏蔽中断基本相同,仅在中断请求和中断响应的条件上有所区别。

非屏蔽中断通常是由系统板上的一些硬件故障引起的中断。首先,硬件通过NMI信号线向CPU发出高电平的中断请求信号。CPU在每一个指令周期的最后一个时钟周期采样NMI信号线,若发现该信号线为高电平,即有非屏蔽中断(系统中的2号中断)请求发生,CPU立即予以响应,而不受中断允许标志位IF的影响。同时,非屏蔽级的中断类型号是系统事先约定好的,可以在CPU响应该级中断时,直接从2×4开始的连续4B单元中获取中断入口地址。随后的中断处理与中断返回过程,与可屏蔽中断的第(4)步~第(6)步相同。

软件中断的中断过程更为简单,当CPU执行INT n指令时,即可产生软件中断,CPU根据指令提供的中断类型码,从中断向量表中获取对应的中断入口地址,继而转至中断服务程序。随后的过程与可屏蔽中断的第(4)步~第(6)步基本相同,此处不再赘述。

图3.12所示为8086系统的中断响应流程。



3. 中断类型码的形成

由前述可知,各类中断的中断类型码是在中断响应阶段获得的,但CPU获取中断类型码的方法因中断源的不同而有所不同,具体有以下几种。

(1) 对各种内部中断(如被零除、溢出等),类型码是CPU根据异常类型(即系统内部事先定义的类型)在内部自动形成的。

(2) 对软件中断指令INT n,类型码由指令本身给出,也是在内部自动形成的。

(3) 对NMI,类型码被指定为2。因为它由系统内部事先定义,也不需要外部提供,所以本质上也是内部形成的。

(4) 对INTR,类型码在CPU的两个中断响应周期中由中断源通过中断控制器(如8259A)提供。

3.68086微处理器外部基本引脚与工作模式
3.6.18086系统总线结构

为提高系统性能、耐用性及适应性,8086 CPU设计为可工作在两种模式下,即最小模式和最大模式。最小模式用于由8086单一微处理器构成的小型系统; 最大模式用于实现多处理机系统,其中,8086 CPU被称为主处理器,其他处理器被称为协处理器,如浮点运算协处理器8087、通道控制器8089。

为了减少芯片引脚个数,部分8086 CPU的外部引脚采用了复用技术。复用引脚分为按时序复用和按模式复用两种情况。对按时序复用的引脚,当CPU工作在不同的T周期时,这些引脚传送不同的信息; 对按模式复用的引脚,则当CPU处于不同的工作模式时,这些引脚具有不同的功能含义。

8086采用双列直插式(Double In line Package,DIP)封装,具有40条引脚,使用+5V电源供电。时钟频率有3种:  5MHz(8086)、8MHz(80861)和10MHz(80862)。其引脚信号如图3.13所示,括号内为最大模式时的引脚名称。



图3.138086 CPU引脚信号图


8086 CPU的40条引脚信号按功能可分为4类: 地址总线、数据总线、控制总线及其他(时钟与电源)。其中,控制总线又可分为公共控制信号,最小模式信号及最大模式信号。它的引脚信号定义如表3.2所示。

表3.28086引脚信号定义



信号名称功能引脚号
类型

公用信号


AD15~AD0地址/数据总线39,2~16双向、三态
A19/S6~A16/S3地址/状态总线
35~38输出、三态
BHE/S7
总线高允许/状态
34
输出、三态
MN/MX
最小/最大模式控制
33
输入
RD
读控制
32
输出、三态
TEST
等待测试控制
23
输入
READY
等待状态控制
22
输入
RESET
系统复位
21
输入
NMI
不可屏蔽中断请求
17
输入
INTR
可屏蔽中断请求
18
输入
CLK
系统时钟
19
输入
VCC
+15V电源
40
输入
GND
接地
1,20

续表



信号名称功能引脚号
类型


最小模式信号

(MN/MX=VCC)


HOLD
保持请求
31
输入
HLDA
保持响应
30
输出
WR
写控制
29
输出、三态
M/IO
存储器输入输出控制
28
输出、三态
DT/
数据发送/接收
27
输出、三态
DEN
数据允许
26
输出、三态
ALE
地址锁存允许
25
输出
INTA
中断响应
24
输出

最大模式信号

(MN/MX=GND)


RQ/GT1,0
请求/允许总线访问控制
30,31
双向
LOCK
总线优先权锁定控制
29
输出、三态
S0、S1、S2
总线周期状态
28~26
输出、三态
QSl、QS0
指令队列状态
24,25
输出



3.6.28086 CPU的引脚信号

下面分别介绍4类不同的引脚信号功能。

1. 地址总线与数据总线

数据总线用来在CPU与内存储器或I/O设备之间交换信息,为双向、三态信号。地址总线由CPU发出,用来确定CPU要访问的内存单元或I/O端口的地址信号,为输出、三态信号。8086 CPU有20根地址总线和16根数据总线。在总线周期中,由于地址信息和数据信息在时间上不重叠,因此部分地址线与数据线共用一组引脚。状态信号用来指示CPU的状态信息,其中S6~S3和地址总线的高4位分时复用,S7与BHE分时复用。

(1)   AD15~AD0(输入/输出,三态): 
分时复用地址/数据总线。AD15~AD0这16根信号线是分时复用的双重功能总线,数据总线D15~D0与地址总线的低16位A15~A0复用。在每个总线周期的第一个时钟周期T1中,AD15~AD0用作地址总线的低16位A15~A0,给出内存单元或I/O端口的地址; 在总线周期的其余时间(T2、T3、TW和T4状态),AD15~AD0作为数据总线D15~D0使用。

(2)   A19/S6~A16/S3(输出,三态): 
分时复用的地址/状态复用信号。在每个总线周期的第一个时钟周期T1中,A19/S6~A16/S3用作地址总线的高4位A19~A16,在访问存储器时作为高4位地址,在访问I/O端口时,这4位置“0”(低电平)。在总线周期的其余时间(T2、T3、TW和T4状态),这4条信号线指示CPU的状态信息S6~S3。其中,S6恒为低电平,表明8086 CPU当前正与总线相连; S5反映标志寄存器中中断允许标志IF的当前值; 而S4和S3组合起来指示当前正在使用的是哪个段寄存器,其编码如表3.3所示。

表3.3S4、S3代码组合与当前段寄存器的关系



S4S3当前使用的段寄存器
00附加段寄存器ES
01堆栈段寄存器SS
10存储器寻址时,使用代码段寄存器CS;  对I/O端口或中断向量寻址时,不需要用段寄存器

11数据段寄存器DS


(3)   BHE/S7(输出,三态): 
高8位数据总线允许/状态信号。它也是一个分时复用引脚。在总线周期的T1状态,作为高8位数据总线允许信号,低电平有效。当BHE=0时,表示高8位数据总线AD15~AD8上的数据有效; 当BHE=1时,表示高8位数据总线AD15~AD8上的数据无效,当前仅在数据总线AD7~AD0上传送8位数据。而在T2、T3、TW、T4状态,此引脚输出状态信息S7,在8086微处理机系统中,S7没有定义。

BHE和AD0相配合访问存储器见表3.1(3.2.1节)。

2. 控制总线

控制总线中有8根引脚(第2431号)在两种工作模式下定义的功能不同,其余的在两种工作模式下信号功能相同。

1) 公用控制引脚信号

(1)  RD(输出、三态): 
读信号,低电平有效。RD=0时,表明CPU要进行一次内存或I/O端口的读操作,具体是对内存还是I/O端口进行读操作,决定于M/IO信号。

(2)   READY(输入): 
准备就绪信号。是来自存储器或I/O端口的应答,高电平有效。当READY=1时,表示内存或I/O端口准备就绪,马上可进行一次数据传输。CPU在每个总线周期的T3时钟周期开始处对READY信号采样,若检测到READY信号为低电平,则在T3后插入一个TW等待周期。在TW时钟周期,CPU继续对READY信号采样,若仍为低电平,就继续插入TW等待周期,直到READY信号变为高电平,才进入T4时钟周期,完成数据传送。

(3)  TEST(输入): 
测试信号,低电平有效。用来支持构成多处理器系统,实现8086 CPU与协处理器之间同步协调的功能,只有当CPU执行WAIT指令时才使用。当CPU执行WAIT指令时,CPU每隔5个时钟周期就对此引脚进行测试。若测试到该引脚为高电平,则CPU处于空转状态进行等待; 若测试为低电平,则CPU结束等待状态,继续执行下一条指令。

(4)  INTR(输入): 
可屏蔽中断请求信号,高电平有效。当INTR为高电平时,表示外部有中断请求。CPU在每条指令的最后时刻检测INTR引脚,若为高电平,且当前CPU允许中断(中断允许标志IF=1),那么,CPU就会在结束当前执行的指令后,响应中断请求,进入中断处理子程序。

(5)  NMI(输入): 
非屏蔽中断请求信号,上升沿有效。当NMI引脚输入一个由低到高的上升沿时,CPU就会在结束当前执行的指令后,进入非屏蔽中断处理子程序。

(6)  RESET(输入): 
系统复位信号,高电平有效信号(至少保持4个时钟周期)。在RESET信号来到后,CPU结束当前操作,并将处理器中的寄存器FLAGS、IP、DS、SS、ES及指令队列清零,将CS设置为0FFFFH。当复位信号变为低电平时,CPU从FFFF0H开始执行程序,实现系统的重启动过程。系统加电或操作员按下RESET键后会产生RESET信号。

(7) MN/MX(输入): 
工作模式控制信号。决定CPU工作在最小模式或最大模式。此引脚接+5V电源时,CPU处于最小模式,接地时,CPU处于最大模式。


2) 最小模式下的控制引脚信号

(1) INTA(输出)。

CPU发向中断控制器的中断响应信号,低电平有效。在两个连续的总线周期输出两个低电平信号,第一个低电平用来通知外设CPU,准备响应它的中断请求,在第二个低电平期间,外设通过数据总线送入它的中断类型码,并由CPU读取,以便取得相应中断服务程序的入口地址。

(2) ALE(输出)。

地址锁存允许信号,高电平有效。当ALE信号有效时,表示地址线上的地址信息有效,利用它的下降沿把地址信息和BHE信号锁存在地址锁存器。ALE不能浮空。

(3) DEN(输出、三态)。

数据允许信号,低电平有效。当DEN信号有效时,表示CPU准备好接收和发送数据。在最小模式中,DEN信号就是总线收发器的选通信号,总线收发器将DEN作为输出允许信号。

(4) DT/(输出、三态)。

数据发送/接收信号,表示CPU是接收数据(低电平),还是发送数据(高电平),用于控制总线收发器数据传送的方向。

(5) M/IO(输出,三态)。

存储器/输入、输出控制信号,用于区分是访问存储器(高电平),还是访问I/O端口(低电平)。

(6) WR(输出)。

写信号,低电平有效。WR=0时,表明CPU正在执行向存储器或I/O端口的输出操作。

(7) HOLD(输入)。

总线请求信号,高电平有效,是系统中其他总线主设备向CPU提出总线请求的输入信号。CPU让出总线控制权直到这个信号撤销后才恢复对总线的控制权。

(8) HLDA(输出)。

总线响应信号,高电平有效,是CPU对系统中其他总线主控设备请求总线使用权的应答信号。当CPU让出总线使用权时,就发出这个信号,并使CPU所有具有三态的引脚处于高阻状态,与外部隔离。

在最小模式下,8086 CPU直接产生全部总线控制信号(DT/、DEN、ALE、M/IO)和命令输出信号(RD、WR或INTA),并提供请求访问总线的逻辑信号HLDA。当总线主控设备(例如DMA控制器Intel 8257/Intel 8237)请求总线控制权时,它向8086发送一个总线请求信号HOLD,如果8086 CPU响应HOLD请求,则8086 CPU输出响应信号HLDA,通知DMA控制器可以使用系统总线,同时使8086 CPU的地址总线、数据总线、BHE信号以及有关的总线控制信号和命令输出信号处于高阻状态。此外,地址锁存器和数据收发器的输出也处于高阻状态。这样,8086 CPU不再控制总线,一直保持到HOLD信号变为无效,8086 CPU重新获得总线控制权为止。DMA控制器接收到来自CPU的响应信号后,掌握系统总线控制权,进行数据传送。当DMA控制器完成传送任务时,撤销发向CPU的总线请求信号,CPU重新获得对系统总线的控制权。

3) 最大模式下的控制引脚信号

(1) 2、1、0(输出,三态)。

总线周期状态信号。这三位的组合表示当前总线周期的操作类型,如表3.4所示。

表3.42、1、0译码表





总线状态信号

2
1
0CPU状态

000中断状态
001读I/O端口
010写I/O端口,超前写I/O端口
011暂停
100取指令
101读存储器(数据)
110写存储器,超前写存储器
111无效



当2、1、0中任一个为低电平时,都对应某一种总线操作,此时称为有源状态。而当一个总线周期即将结束(T3期间或TW周期),另一个总线周期尚未开始,并且READY信号也为高电平时,2、1、0都变为高电平,此时称为无源状态。在前一个总线周期的T4时钟周期时,只要2、1、0中有一个变为低电平,就意味着即将开始一个新的总线周期。而在T3或TW期间返回无效状态,则表示一个总线周期的结束。在DMA(直接存储器存取)方式下,2、1、0处于高阻状态。

(2) QS1、QS0(输出)。

指令队列状态信号,用于指示8086内部BIU中指令队列的状态,以便外部协处理器跟踪8086CPU内部指令序列。QS1和QS0表示的状态如表3.5所示。

表3.5QS1、QS0组合与指令队列的状态



QS1QS0队列状态信号的含义

00无操作,未从队列中取指令
01从队列中取出当前指令的第一字节
10队列空,由于执行转移指令,队列重新装填
11从队列中取出指令的后继字节



外部逻辑通过监视总线状态和队列状态,可以模拟CPU的指令执行过程,并确定当前正在执行哪一条指令。有了这个功能,8086才能告诉协处理器何时准备执行指令。

(3) RQ/GT0、RQ/GT1(双向)。


总线请求信号/总线请求响应信号,低电平有效。这两个信号是为多处理机应用而设计的,用于对总线控制权的请求和应答,其特点是请求和允许功能用一根信号线来实现,每一个引脚都可代替最小模式下HOLD/HLDA两个引脚的功能。这两个引脚可同时接两个协处理器,RQ/GT0的优先级高于RQ/GT1。

总线访问的请求/允许时序分为三个阶段:  请求、允许和释放。首先是协处理器向8086输出 RQ请求使用总线,然后在8086 CPU的T4或下一个总线周期的T1期间,CPU输出一个宽度为一个时钟周期的脉冲信号GT0给请求总线的协处理器,作为总线响应信号; 从下一个时钟周期开始,CPU释放总线。当协处理器使用总线结束时,再输出一个宽度为一个时钟周期的脉冲信号 RQ给CPU,表示总线使用结束,从下一个时钟周期开始,CPU又控制总线。

(4) LOCK(输出、三态)。

 总线封锁信号,低电平有效。LOCK信号用来封锁外部处理器的总线请求。当 LOCK=0时,表明CPU不允许其他总线主控设备占用总线。LOCK信号通过指令在程序中设置。若一条指令加上前缀LOCK,则8086在执行该指令期间,LOCK引脚输出低电平并保持到该指令执行结束,以保证该指令在执行期间不会被外部处理器的总线请求打断。


3. 其他信号

(1)   CLK(输入): 
时钟信号。为处理器提供基本的定时脉冲和内部的工作频率。8086 CPU要求时钟信号的占空比(正脉冲与整个周期的比值)为33%,即1/3周期高电平,2/3周期低电平。

(2)   VCC(输入): 
电源。要求接正电压(+5±0.5V)。

(3)   GND(输入): 
地线。8086 CPU有两条接地线。

3.6.38086 CPU的最小工作模式

8086 CPU的MN/MX引脚接+5V电源时,8086 CPU工作在最小模式下,是单一微处理器构成的小型系统。

总线是计算机各种功能部件之间传送信息的公共通路,连接到总线上的功能模块有主动和被动两种方式。主设备可以启动一个总线周期,而从设备只能响应主设备的请求。某一时刻总线上只能有一个主设备占用总线。CPU在不同的时间可以用作主设备,也可用作从设备; 而存储器则只能用作从设备。

在最小模式中,作为单处理器的8086通常控制着系统总线,但也允许系统中的其他设备占用总线。例如直接内存访问(DMA)是一种完全由硬件执行I/O交换的工作方式。在这种方式中,DMA控制器从CPU完全接管对总线的控制,数据交换不经过CPU,而直接在内存和I/O设备之间进行,一般用于高速传送成组数据。DMA控制器在传送数据时,需要使用总线,这时DMA控制器向8086发送一个总线请求信号,在CPU允许并响应的情况下,DMA控制器获得总线控制权,使用完后,又将总线控制权交还给CPU。

8086 CPU在最小模式下的典型配置如图3.14所示。



图3.14最小模式下的8086系统配置


8086的最小模式具有以下几个特点。

(1)  MN/MX引脚接+5V电源,决定了CPU工作在最小模式下。

(2) 使用一片8284,作为时钟信号发生器。

(3) 使用3片74LS373或Intel 8282,作为地址锁存器(总线锁存器)。

(4) 当系统中所连的存储器和外设端口较多时,需要增强数据总线的驱动能力,用两片74LS245或8286/8287作为总线收发器(数据收发器)。

1.  时钟发生器

8284是用于8086系统的时钟发生器芯片,它为8086及其他外设芯片提供恒定的时钟信号,对准备信号(READY)及复位信号(RESET)进行同步。


图3.158284的引脚图


外界控制信号RDY及RES信号可以在任何时刻到来,8284能把它们同步在时钟下降沿时输出READY及RESET信号到8086 CPU。

8284由时钟信号发生器、复位生成电路和就绪控制电路三部分组成,其引脚图如图3.15所示。


时钟信号发生器产生恒定的时钟信号,复位信号发生电路产生系统复位信号RESET,就绪信号控制电路用于对存储器或I/O接口产生的准备好信号READY进行同步。

8284的典型连接如图3.16所示。振荡源一般采用晶体振荡器,在X1与X2引脚间接上晶体,由晶体振荡器产生时钟信号。另外也可以由EFI引脚加入的外接脉冲发生器作为振荡源,产生时钟信号。此时8284的F/引脚应接高电平。8284输出的时钟频率为振荡源频率的1/3。



图3.168284的典型连接



2.  地址锁存器

8086 CPU的地址/数据总线是复用的,BHE和S7也是复用的,在总线周期的T1时钟周期传送地址信息和BHE信号,而在其他时钟周期传送数据、状态信息。为避免丢失地址信息和BHE信号,需在它们失效前将其锁存至地址锁存器,为地址总线提供存储器或I/O端口地址。当ALE信号有效时,表示地址线上的地址信息有效,ALE信号的下降沿把地址信息和BHE信号锁存在地址锁存器。在总线周期的其余时间(T2、T3、TW和T4状态),复用的地址/数据总线作为数据总线使用,实现CPU对存储器和I/O设备的读/写操作。

常用的地址锁存器芯片有74LS373、74LS273、Intel 8282和Intel 8283等。系统配置图中的3片74LS373芯片用来锁存地址/数据总线AD15~AD0中的地址信息、地址/状态总线A19~A16/S6~S3中的地址信息及BHE/S7中的BHE信息。其中每片74LS373芯片锁存8位信息。

3.  总线收发器

当一个系统中所含的外设接口较多时,数据总线上需要有发送器和接收器来增加驱动能力。发送器和接收器简称为总线收发器或总线驱动器。

总线收发器芯片74LS245是8位的。所以在8086系统中,需要用两片74LS245对AD15~AD0中的数据信息进行缓冲和驱动。注意该芯片在8086总线周期的第二个时钟周期T2开始工作,因为T1周期时AD15~AD0上输出的是地址信息。

常用的总线收发器芯片有74LS245、Intel 8286和Intel 8287等。


3.6.48086 CPU的最大工作模式

若微机系统中有两个或多个同时执行指令的处理器,就构成多处理器系统,可以有效地提高整个系统的性能。增加的处理器可以是8086处理器,也可以是协处理器。协处理器只是协助主处理器完成某些辅助工作。和8086配套使用的协处理器有两个: 一个是用于数值计算的协处理器8087,通过硬件实现高精度整数浮点运算; 另一个是专用于输入/输出操作的协处理器8089,8089有一套专门用于输入/输出操作的指令系统,可以直接为输入/输出设备服务。增加协处理器后,使得浮点运算和输入/输出操作不再占用8086 CPU的时间,从而大大提高了系统的运行效率。

多处理器系统必须解决多处理器对系统总线的争用问题,以及处理器之间的通信问题。因为多个处理器通过公共系统总线共享存储器和I/O设备,所以必须增加相应的逻辑电路,以确保每次只有一个处理器取回执行结果,必须提供一种明确的方法来解决两个处理器之间的通信。8086 CPU的最大工作模式就是专门为实现多处理器系统而设计的。在这种方式下,8086 CPU不直接提供用于存储器或I/O端口访问的读/写命令等控制信号,而是由总线控制器8288产生总线命令和控制信号,对存储器和I/O端口进行读/写控制。


当8086 CPU的MN/MX引脚接地时,8086 CPU工作于最大模式,用于构成多处理机系统,图3.17所示为最大模式下8086系统配置。可以看出,与最小模式下8086系统配置相比较,最大模式系统增加了一片专用的总线控制器8288。

8086的最大模式具有以下几个特点。

(1)  MN/MX端接地,决定了CPU工作在最大模式下。

(2) 使用一片8284,作为系统时钟。

(3) 使用三片8282或74LS373,作为地址锁存器。

(4) 使用两片8286/8287,作为总线收发器。

(5) 使用一片8288,作为总线控制器。




图3.17最大模式下的8086系统配置


1. 总线控制器

最大模式系统中,一般包含两个或多个处理器,这就需要解决主处理器和协处理器之间的协调工作,以及对系统总线的共享控制问题,8288总线控制器就起了这个作用。它根据8086在执行指令时提供的总线周期状态信号2、1、0来建立控制时序,与输入控制信号IOB、AEN、CEN和CLK相配合,产生读/写控制命令。通过8288可以提供灵活多变的系统配置,以实现最佳的系统性能。

8288由状态译码器、命令信号发生器、控制信号发生器及控制逻辑组成,其内部结构和引脚信号如图3.18所示。



图3.188288结构框图与引脚信号


8288接收8086的总线周期状态信号2、1、0,确定当前总线周期的操作类型,译码产生相应的存储器读/写命令、I/O端口读/写命令及中断响应信号。2、1、0的代码组合对应的总线操作类型如表3.6所示。

表3.62、1、0译码表





总线状态信号

2
1
0

CPU状态8288命令输出

000
中断状态
 INTA

001
读I/O端口
 IORC

010
写I/O端口,超前写I/O端口
 IOWC,AIOWC

011
暂停
无

100
取指令
 MRDC

101读存储器(数据)
 MRDC

110
写存储器,超前写存储器
 MWTC,AMWC

111
无效无


8288总线控制器产生的总线控制命令如下。

(1) IORC、IOWC: I/O读、写命令。

(2) MRDC、MWTC: 存储器读、写命令。

(3) AIOWC和AMWC: 超前命令。这两个超前命令比IOWC和MWTC出现时间早一个时钟周期,在需要提前发出写命令的场合,可以选用这两个超前信号,从而能够在一定程度上避免微处理器进入等待状态。

(4) INTA: 中断响应命令。

(5) ALE: 地址锁存允许信号。用于将地址选通到地址锁存器,高电平有效,在下降沿锁存。

(6) DEN: 数据使能信号。DEN为高电平时,接通数据收发器。

(7) DT/: 数据发送/接收信号。用来控制数据收发器的传送方向,DT/=1为发送状态; DT/=0为接收状态。

(8) MCE/PDEN: 主设备使能/外设数据允许命令。这是一条双重功能的控制线,当8288工作于系统总线方式时,用作主控级联允许信号MCE,在中断响应周期的T1状态时有效,控制主8259A向从8259A输出级联地址; 当8288工作于I/O总线方式时,用作外设数据允许信号PDEN,控制外围设备通过I/O总线传送数据。

8288的工作受输入控制信号的控制,这些信号是IOB、AEN、CEN和CLK。

(1) IOB: 输入/输出总线方式。8288既可控制系统总线,又可以控制I/O总线。当IOB=0时,8288处于系统总线方式; 当IOB=1时,8288处于I/O总线工作方式,8288仅用来控制I/O总线。

(2) AEN: 地址使能。由总线仲裁器8289输入,是支持多总线结构的同步控制信号。当AEN=1时,8288各种命令无效,呈高阻态; 当AEN=0时,在系统总线方式下,至少在AEN有效后115ns,8288才能输出命令,这段时间进行总线切换; 在I/O总线方式下,AEN不起作用,不影响I/O命令的发出。

(3) CEN: 命令使能。当有多片8288协同工作时起片选作用。当CEN=1时,允许该8288发出全部控制命令; 当CEN=0时,禁止该8288发出总线控制信号,同时使DEN、PDEN呈高阻状态。

(4) CLK: 时钟信号。8288产生命令和控制信号输出时,由CLK决定它们的定时关系。通常由微机的系统时钟提供。

2. 时钟发生器、地址锁存器和总线收发器

由图3.17可知,在最大配置中,这3种部件的工作与最小模式下配置相同。

3.  需要说明的问题

(1) 8086 CPU在最小模式下的HOLD和HLDA引脚在最大模式下成为RQ/GT0和RQ/GT1信号线,这两条引脚通常同8087(协处理器)或8089(I/O处理器)相连接,用于8086同协处理器之间传送总线请求与总线应答信号。

(2) 当系统为具有两个以上主CPU的多处理器系统时,必须配备总线仲裁器8289,与8288相配合确定总线使用权的分配,从而保证系统中的各个处理器同步地进行工作,实现总线共享。


3.78086微处理器的时序

所谓时序,顾名思义,就是时间的先后顺序。系统为完成某一项操作,必将涉及一系列部件的协调动作,并且每一部件动作的时间长短也有严格的限制,这就必须采用一定的方法对它们进行定时控制,这就是下面所要讨论的时序问题。前面已经介绍过,在微机系统中通常有三级时序,分别为时钟周期、总线周期和指令周期。

3.7.1系统的复位与启动

8086 CPU的RESET引脚用来启动或重启动系统。当8086在RESET引脚上检测到一个脉冲的上升沿时,它将停止正在进行的所有操作,


图3.19复位操作时序

处于初始化状态,直到RESET信号变低。因此,通过在CPU的RESET引脚上加正脉冲,
可完成系统的启动和重启动。8086 CPU要求加在RESET引脚上的复位正脉冲信号宽度至少为4个时钟周期,如果是初次加电启动,则要求宽度不少于50μs。复位操作时序如图3.19所示。


图3.19中的RESET输入是引脚信号,CPU内部是用时钟脉冲CLK来同步外部的复位信号的。当外部的复位信号到来时,经8284同步,在RESET输入信号到来后的CLK第一个上升沿形成内部RESET信号送给CPU,CPU就进入内部RESET过程。到本次时钟周期的下降沿,所有的三态输出线都被设置为无效状态,再到下一个时钟周期的上升沿,所有的三态输出线都被设置为高阻状态,直到RESET信号回复低电平。三态输出线包括AD15~AD0、A19/S6~A16/S3、BHE/S7、M/IO(2)、DT/(1)、DEN(0)、WR(LOCK)、RD和INTA。其他输出线只被设置为无效,而不设置高阻,包括最小模式时的ALE、HLDA及最大模式时的RQ/GT1、RQ/GT0、QS1、QS0。



8086 CPU复位时,结束原有的操作和状态,维持在复位状态,各内部寄存器及指令队列被设置为初始值,如表3.7所示。

表3.7复位时CPU的初始化状态



寄存器内容寄存器内容

标志寄存器
清零
堆栈段寄存器SS
0000H
指令指针寄存器IP
0000H
ES附加
0000H
代码段寄存器CS
FFFFH
指令队列
空
数据段寄存器DS
0000H
其他寄存器
0000H


由表3.6可以看出,CPU复位时,代码段寄存器CS被初始化为FFFFH,而指令指针寄存器被初始化为0000H。因此,当CPU复位完成,再重新启动时,就会从主存地址为FFFF0H的位置开始执行指令。通常在这个地址单元存放着一条无条件转移指令,将程序转移到系统程序的入口处。这样,一旦系统复位或重新启动,就会重新引导系统程序。

复位信号RESET从高到低的跳变会触发CPU内部的一个复位逻辑电路,经过7个时钟周期后,CPU就被重新启动而恢复正常工作。

3.7.2最小模式系统总线周期时序
1. 读/写总线周期

读/写总线周期指CPU通过外部总线完成从存储器或外设端口读/写一次数据所需要的时钟周期数。

8086 CPU读/写总线周期时序如图3.20(a)和图3.20(b)所示。



图3.20最小模式系统总线读/写操作时序


各状态所完成的操作描述如下。

(1)    T1状态。
M/IO信号在T1状态变为有效。若为高电平,则表明是从存储器读取; 若为低电平,则表明是从I/O端口读取。并且这个有效电平一直持续到本次总线周期结束,即T4状态。

同时,CPU在T1状态通过A19/S6~A16/S3和AD15~AD0发出访问外设或存储器的20位地址信息,并输出BHE有效信号,表示高8位数据线上的信息可以使用。

总线上的地址信息在T1状态结束之前必须进行锁存,地址锁存器将ALE作为它的锁存允许信号,所以在T1状态,CPU发出一个ALE正脉冲信号,地址锁存器利用ALE的下降沿锁存地址信息。

如果系统中接有数据总线收发器,就要用到DT/和DEN控制信号,DEN用来选通收发器,DT/用来决定收发器的数据传送方向。如果是读操作在T1状态,DT/变为低电平有效,表明本次总线周期让数据总线收发器接收数据; 如果是写操作DT/变为高电平有效,表示本次总线周期让数据总线收发器发送数据。

(2)   T2状态。
总线上撤销地址信息A19/S6~A16/S3,引脚输出状态信息S6~S3。AD15~AD0呈高阻状态,为传送数据做准备。

若进行读操作,则CPU在T2状态输出RD低电平有效信号,否则,进行写操作,CPU在T2状态输出WR低电平有效信号,并立即往数据总线AD15~AD0上发出向外设或存储器写入的数据。

DEN信号也在T2状态变为低电平有效状态,选通总线收发器工作。

(3)   T3状态。
CPU继续提供状态信息,并维持RD或WR、M/IO、DT/及DEN为有效电平。如果外设或存储器速度较快,则应在T3状态往数据总线AD15~AD0上送入CPU读取的数据信息。

(4)  TW状态。
如果所用外设或存储器速度较慢,不能配合CPU的工作,就需要在T3和T4之间插入一个或几个TW等待状态。系统中的READY电路在T3状态后生成READY信号,并经8284系统时钟电路同步后加到CPU的READY引脚上,CPU在T3状态开始时采样READY信号,若为低电平,则表明外设或存储器没有准备好,那么,就在T3后插入TW状态,而且在每个TW状态的上升沿,CPU都将检测READY信号,直至检测到READY高电平信号后,才结束TW状态。在最后一个TW状态中,CPU读取的数据信息已经稳定在数据总线上。


(5)  T4状态。
若为读总线周期,则在T4状态和前一个状态交界的下降沿处,CPU读入已经稳定出现在数据总线上的数据,各控制信号和状态信号变为无效,DEN信号进入高电平,关闭总线收发器8288; 若为写周期,则CPU认为外设或存储器已取走了数据,从而撤销数据信息。

2. 总线请求

在最小模式系统中,如果CPU以外的其他模块(如DMA控制器)需要占用总线,就会向CPU提出请求。CPU接收到请求后,如同意让出总线使用权,就会向请求模块发出响应信号,由请求模块占用总线,请求模块使用完总线后再将总线控制权还给CPU,这一过程称为总线请求。8086 CPU为此专门设置了一组控制线HOLD和HLDA。

CPU在每个时钟的上升沿处都会检测HOLD信号。如果检测到高电平,就表明有模块提出总线保持请求,如果此时CPU允许响应,就会在本次总线周期的T4周期或空闲周期T1的下一个时钟周期发出HLDA响应信号,并使所有三态输出线都变为高阻状态(包括地址/数据线、地址/状态线及控制线RD、WR、INTA、M/IO、DEN、DT/),让出总线控制权,进入总线保持阶段。直到该模块使用完总线,使HOLD恢复低电平状态,CPU随之将HLDA也变为低电平,才又收回总线控制权,其时序如图3.21所示。



图3.21最小模式系统中总线保持请求与响应时序


在总线请求保持期间,CPU继续执行已取到指令队列中的指令(与DMA并行操作),直到指令需要使用总线或指令队列为空为止。


3.7.3最大模式系统总线周期时序

在最大模式系统中,8086 CPU所有的对总线进行读/写操作的控制信号和命令信号都由总线控制器8288提供。

1. 读总线周期

最大模式系统读总线周期时序如图3.22所示。



图3.22最大模式系统读总线周期时序


在读总线周期中,8288提供的总线操作命令信号有ALE(地址锁存允许)、DT/(数据发送/接收)、DEN(数据使能)、MRDC(读存储器)、 IORC(读I/O端口)等。8288对存储器和I/O端口的数据读取用两个不同的命令加以区别,不同于最小工作模式的用M/IO的不同状态区分。

各个时钟周期所完成的操作描述如下。

(1)   T1状态。
CPU送出20位地址信息,从引脚送出BHE低电平有效信号。8288送出ALE地址锁存允许的正脉冲信号; 提供给数据总线收发器方向控制信号DT/,使其为低电平有效。

(2)   T2状态。
CPU撤销地址信息,使地址/数据线成为高阻状态,为数据传输做准备,而BHE/S7和地址/状态线送出总线状态信息S7~S3,并将该状态信息保持到T4状态。8288在T2状态期间送出存储器或I/O端口读命令MRDC/IORC,使其变为低电平有效,并且8288还在T2上升沿给数据总线收发器发出高电平有效的选通信号DEN,允许数据通过总线收发器。

(3)   T3状态。
如果所访问的存储器或外设的存取速度较快,能在时序上满足基本总线周期的时序要求,就不必在T3状态后插入TW等待状态。这时总线状态信息2、1、0都转变为高电平,进入无源状态,并将这个无源状态从T3状态一直持续到T4状态。一旦进入无源状态,就意味着不久就可以启动下一个新的总线周期。若存储器或外设存取速度较慢,不能满足定时要求,则与最小模式系统一样,需要在T3与T4之间插入一个或几个TW状态。

(4)  T4状态。
总线上的数据信息消失,状态信号S7~S3变为高阻。2、1、0则按下一个总线周期的操作类型,产生相应的电平变化。

2. 写总线周期

最大模式系统写总线周期时序如图3.23所示。



在写总线周期中,8288提供的总线操作命令信号有ALE(地址锁存允许)、DT/(数据发送/接收)、DEN(数据使能)、MWTC(写存储器)、IOWC(写I/O端口)。8288提供的存储器写命令和I/O端口写命令比8086 CPU的WR命令晚一个时钟周期,因为要保证CPU输出的数据稳定出现在数据总线上后,8288才可以发出存储器或I/O端口写命令。当MWTC或IOWC不能满足定时要求时,可使用8288提供的另两个超前写命令AMWC(超前写存储器)和AIOWC(超前I/O写端口),它们比MWTC和IOWC提前一个时钟周期。但当AMWC或AIOWC出现时,不能保证总线上出现稳定数据信息。其操作过程与读总线周期相似,这里就不再赘述。



图3.23最大模式系统写总线周期时序


3. 总线请求

8086、8087和8089都设有两个双重功能引脚RQ/GT1和RQ/GT0,其中的任一个都既可用来传送总线请求,也可发送总线保持响应信号和总线释放脉冲。但RQ/GT0的优先级高于RQ/GT1。

CPU在每个时钟周期的上升沿检测RQ/GT1和RQ/GT0引脚,若采样到其中一个有RQ低电平有效信号,就表明有处理器提出总线保持请求。若CPU满足响应条件,就会在本次总线周期的T4状态或空闲周期T1的下降沿利用同一引脚发出响应信号,从而使GT低电平有效,并使系统具有三态的总线处于高阻状态,CPU让出总线控制权,处于保持状态。同样,交出总线使用权的CPU仍将继续执行指令队列中已经预取的指令,直至遇到存取总线的指令或指令队列为空为止。请求使用总线的处理器使用完总线后,又利用同一RQ/GT引脚向CPU发出负脉冲(释放脉冲),将总线控制权交还给CPU。CPU检测到释放脉冲后,又可控制对总线的操作。其中,从总线请求产生(RQ有效)到获得总线授予信号(GT有效)之间的时间延迟范围可以是3~39个时钟周期。最大模式系统中总线保持与响应时序如图3.24所示。



图3.24最大模式系统中总线保持与响应时序



3.8例 题 解 析

1. 8086 CPU在内部结构上由哪几部分组成?其功能是什么?

【解析】

8086的内部结构分为两部分: 总线接口部件BIU和执行部件EU。总线接口部件BIU负责控制存储器与I/O端口的信息读写,包括指令获取与排队、操作数存取等; 执行部件EU负责从指令队列中取出指令,完成指令译码与指令的执行。

2. 8086的BIU由哪几部分组成?其功能是什么?

【解析】

8086的总线接口部件主要由四部分组成: 4个段寄存器CS/DS/ES/SS,用于保存各段地址; 一个16位的指令指针寄存器IP,用于保存当前指令的偏移地址; 一个20位地址加法器,用于形成20位物理地址; 指令流字节队列,用于保存指令; 存储器接口,用于内总线与外总线的连接。

3. 8086的EU由哪几部分组成?各有什么功能?

【解析】

8086的EU主要由四部分组成: 控制器、算术逻辑单元、标志寄存器、通用寄存器组。

(1) 控制器: 从指令流顺序取指令、进行指令译码、完成指令的执行等。

(2) 算术逻辑单元ALU: 根据控制器完成8/16位二进制算数与逻辑运算。

(3) 标志寄存器: 使用9位,标志分两类。其中状态标志6位,存放算数逻辑单元ALU运算结果特征; 控制标志3位,控制8086的3种特定操作。

(4) 通用寄存器组: 用于暂存数据或指针的寄存器阵列。

4. 说明标志位中溢出位与进位标志位的区别。

【解析】

进位标志位CF是指两个操作数在进行算术运算后,最高位(8位操作为D7位,16位操作为D15位)是否出现进位或借位的情况,有进位或借位,CF置“1”,否则置“0”。

溢出位OF是反映带符号数(以二进制补码表示)运算结果是否超过机器所能表示的数值范围的情况。8086中的数据用补码表示,对于8位的字节运算,数值范围为-128~+127; 对于16位的字运算,数值范围为-32768~+32767。若超过上述范围,则称为“溢出”,OF置“1”。

溢出和进位是两个不同的概念,某些运算结果,有“溢出”不一定有“进位”,反之,有“进位”也不一定有“溢出”。

5. 存储器物理地址为400A5H~400AAH的单元中,有6字节的数据分别为11H、22H、33H、44H、55H、66H,若当前(DS)=4002H,请说明它们的偏移地址值。如果要从存储器中读出这些数据,需要访问几次存储器,各读出哪些数据?

【解析】

这个题目考查重点是规则字和非规则字的应用。

由于: 

物理地址=400A5H=段地址×16+偏移地址=40020H+偏移地址

偏移地址=400A5-40020=85H

若以最少访问次数而言,可以如下操作: 从奇地址400A5H中读出一字节11H; 从偶地址开始400A6H、400A7H两个单元读出一个字3322H; 从偶地址400A8H、400A9H两个单元读出一个字5544H; 从偶地址400AAH中读出一字节66H。最少读4次。

6. 8086被复位以后,有关寄存器的状态是什么?微处理器从何处开始执行程序?

【解析】

标志寄存器、IP、DS、SS、ES和指令队列置0,CS置全1(FFFFH)。处理器从FFFF0H存储单元取指令并开始执行。

7. 8086为什么采用地址/数据引线复用技术?

【解析】

考虑到芯片成本和体积,8086采用40根引线的封装结构。由于40根引线无法直接引出8086的全部20位地址、16位数据、诸多控制信号和状态信号,因此采用地址/数据线复用引线方法解决这一矛盾。从逻辑角度来看,地址与数据信号不会同时出现,二者可以分时复用同一组引线。

8. 8086 CPU形成总线数据时,为什么要对部分地址线进行锁存?用什么信号控制锁存?

【解析】

为了确保CPU对存储器和I/O端口的正常读/写操作,要求地址和数据同时出现在地址总线和数据总线上。但8086 CPU中AD0~AD15总线是地址/数据分时复用的,即在总线周期的T1状态传送出地址信息,T3状态传送数据; 因此借由8086 CPU送出的ALE高电平锁存信号,将在T1状态传送出的地址信息存于锁存器中。

9. 8086构成系统时存储器分为哪两个存储体?它们如何与地址、数据总线连接?

【解析】

8086构成系统分为偶地址存储体和奇地址存储体。

偶地址存储体: 连接D7~D0,A0=0时选通; 

奇地址存储体: 连接D15~D8,BHE=0,A0=1时选通。

10. 8086 CPU读/写总线周期各包含多少个时钟周期?什么情况下需要插入TW等待周期?应插入多少个TW,取决于什么因素?什么情况下会出现空闲状态Ti?

【解析】

8086 CPU读/写总线周期包含4个时钟周期。

当CPU与慢速的存储器或外设I/O端口交换信息时,系统中就要用一个电路来产生READY信号,并传递给CPU的READY引脚。CPU在T3状态的下降沿对READY信号进行采样。如果READY信号是无效信号,那么,就会在T3之后插入等待状态TW。插入TW的个数取决于CPU接收到高电平READY信号的时间。CPU在不执行总线周期时,总线接口部件就不和总线打交道,此时,进入总线空闲周期,出现空闲状态Ti。

11. 图3.25所示为8086最小模式下总线操作时序图,结合该图说明ALE、M/IO、DT/、RD、READY信号的功能。

【解析】

ALE为外部地址锁存器的选通脉冲,在T1期间输出;  M/IO确定总线操作的对象是存储器还是I/O接口电路,在T1输出;  DT/为数据发送/接收信号,用于控制总线收发器数据传送的方向,在T1输出;  RD为读命令信号,在T2输出;  READY信号为存储器或I/O接口“准备好”信号,在T3期间给出,否则8086要在T3与T4间插入TW等待状态。



图3.258086最小模式下总线操作时序图








习题3

1.  8086 CPU在内部结构上由哪几部分组成?各部分的功能是什么? 

2. 简述8086 CPU的寄存器组织。

3.  8086 CPU状态标志和控制标志有何不同?程序中是怎样利用这两类标志的? 8086的状态标志和控制标志分别有哪些?

4. 将1001 1100和1110 0101相加后,标志寄存器中CF、PF、AF、ZF、SF、OF各为何值?

5. 什么是存储器的物理地址和逻辑地址?在8086系统中,如何由逻辑地址计算物理地址?

6. 段寄存器CS=1200H,指令指针寄存器IP=4000H,此时,指令的物理地址是多少?指向这一物理地址的CS值和IP值是唯一的吗?

7. 在8086系统中,逻辑地址FFFF: 0001、00A2: 37F和B800: 173F的物理地址分别是多少?

8. 在8086系统中,从物理地址388H开始顺序存放下列3个双字节的数据651AH、D761H和007BH,请问物理地址388H、389H、38AH、38BH、38CH和38DH 6个单元中分别是什么数据?

9.  8086微处理器有哪几种工作模式?各有什么特点?

10. 简述8086引脚信号中M/IO、DT/、RD、WR、ALE、DEN和BHE的作用。

11. 简述最小模式下,8086读总线周期和写总线周期各引脚上的信号动态变化过程。并说出8086的读周期时序与写周期时序的区别有哪些?