第三章8086微处理器系统结构
8086 CPU结构
8086 CPU是Intel系列的16位微处理器,有40个引脚。它的外部数据总线为16位,地址线为20条。因为可以使用20个地址,可以找到1个地址空间MB。(代表外围存储器的搜索能力)
8086 CPU内部采用了并行装配线结构,可以提高CPU利用率和处理速度。8086 CPU支持多处理器系统的设计(CISC)
控制器用于控制程序和数据的输入/输出以及各部件之间的协调运行。计算器用于算术和逻辑操作,并保存中间操作结果。寄存器组用于临时存储信息、信息或要处理的数据,或内存中获取数据的地址。
Intel 8086内部结构框图:必考
Q1:每个部分都有哪些标志性的东西?eg:8086中无FPU,只有ALU,只有cache没有真正的想法cache。
EU与BIU结构及功能
BIU是CPU负责数据交换与外部存储器和输入输出的接口。 BIU由以下部分组成:
-
4个16位段地址寄存器,即代码段寄存器CS,数据段寄存器DS,附加段寄存器ES堆栈段寄存器SS,用于存储当前代码段、数据段、附加段和堆栈段的基址。
段基址表示20位起始地址高16位,段开始地址低4位固定是0。
-
16位指令指针IP:IP用于存储下一个要执行的指令有效地址EA(即偏移地址),IP的内容由BIU自动修改,通常是加1修改。执行转移指令和调用指令时,BIU装入IP转移目的地址。
偏移地址用字节数表示离段起始地址之间的距离。,表示该地,。 由段基址(段寄存器)和偏移地址这两部分构成了存储器的逻辑地址,如CS:IP=3000:2000H,CS:IP=0200:1020H等等,都是逻辑地址。
-
:加法器用于将逻辑地址转换为读写存储器所需的20个物理地址,即完成地址加法操作。方法是将寄存器内容(代表段基址)左转4位(相当乘16位)和16位偏移地址,形成20位物理地址。
-
6字节指令队列:当执行单元EU当执行指令中不需要占用总线时,BIU下一个或几个指令将自动预取,并按顺序存储在指令队列中排队。EU按顺序执行。
-
总线控制逻辑:总线控制逻辑用于生成和发出总线控制信号,以实现读写控制。
:执行指令
- 算术逻辑单元ALU: ALU完成16位或8位二进制数的算术逻辑操作,大部分指令由执行ALU完成。数据首先算时首先传输到16位临时存储器中,经ALU处理后,运算结果可通过内部总线送入通用寄存器或BIU存储器。
- 标志寄存器FR:它用来反映CPU最新运算结果的状态特征或存储控制标志。FR16位,其中7位未用。
- 通用寄存器组:它包括四个数据寄存器AX、BX、CX、DX,其中AX又称累加器,四个专用寄存器,即基址指示器BP、堆栈指示器SP、源变址寄存器SI和目的变址寄存器DI。
- EU控制器:它接收从BIU中指令队列获得的指令通过指令译码形成各种定时控制信号,向EU各功能部件发送相应的控制命令,完成每个指令规定的操作。
- 取指令 BIU从内部获取指令,并将其发送到指令队列。代码段寄存器取指令时的地址CS16位段基址最低位后补4个0,然后指令IP地址加法器中加入16位偏移地址获得20位物理地址。然后通过总线控制逻辑发出存储器读命令,从而启动存储器,从存储器中取出指令,并将指令队列送到EU执行。
- 取操作数或存储结果 在EU在执行指令过程中需要取操作数或存储结果时,先向前BIU发出请求,并提供有效地址,BIU将根据EU请求及有效地址,形成20个物理地址并执行访问存储器或总线周期I/O端口,或指定存储单元I/O端口取出操作数并交付EU使用或将结果存储在指定的存储单元或I/O端口。如果BIU已准备好取指令同时又收到EU的申请,BIU先完成取指令的操作,再读写操作数。 当EU执行转移、调用和返回指令时,BIU先自动清除指令队列,再按EU指示提供的新地址。BIU新获得的第一条指令将直接发送到EU中去执行。BIU将随后获得的指令重新填令队列。
8086寄存器结构
通用寄存器组
数据寄存器 包括数据寄存器AX、BX、CX、DX等4个,主要用来操作数、中间结果和地址保存算术和逻辑操作。它们可以用作16位寄存器,也可以用作两个独立的8位寄存器,即每个寄存器的高字节和低字节。8位寄存器(AL、BL、CL、DL、AH、BH、CH、DH)只能用于存放数据。
地址指针和地址寄存器
- 堆栈指针包括地址指针和包括堆栈指针 SP、堆栈基址寄存器 指针BP以及变址寄存器 指针SI和DI等待4个16位寄存器。它们主要用于存储或指示操作数量偏移地址。
- 堆栈指针SP存放在当前堆栈段的是偏移地址。堆栈操作指令PUSH和POP就是从SP获得操作数段内偏移地址的。
- BP是参观堆栈时的基址寄存器。BP存储在堆栈中存储单元的偏移地址,SP、BP通常和SS联用。
- 。它们通常与DS联用为程序访问当前数据段提供操作数偏移地址。SI和DI除作为一般寄存器外,在。由于串行操作指令规定源字符串必须位于当前数据段DS目的串必须位于附加段ES中,所以SI和DI内容是当前数据段和当前附加段中存储单元的偏移地址。 当SI、DI和BP不使用指示器和变址寄存器时,也可作为一般数据寄存器使用,存储操作数或操作结果。
隐含寻址
- 一般来说,8个16位通用寄存器是通用的。然而,为了缩短指令代码的长度,一些通用寄存器规定了特殊用途。
- 例如,必须使用字符串处理指令CX作为存储串的长度。这样就不需要在指令中给出CX寄存器名,缩短了指令长度,简化了指令的书写形式,这种使用方法称为“隐含寻址”。
8086物理地址的形成
-
8086 CPU可直接寻址lMB内存空间。直接搜索地址需要20个地址代码,所有内部寄存器,包括段寄存器,都是16个,只能直接搜索64个地址寄存器KB单元。因此,在8086 CPU存储空间分段技术用于解决这一矛盾。将1MB存储空间分为几个逻辑段,每段最大长度为64KB。这些逻辑段可以在整个lMB存储空间浮动,但。这样,对于20位段的起始地址,4位为0,可以暂时忽略,只有高16位是有效数,可存放于16位的寄存器中。在形成20位物理地址时,段寄存器中的16位数会自动左移4位,然后与16位偏移量相加 。
-
对于,是将当前中的内容左移4位(相当乘16)再加上IP的内容,形成20位指令地址;操作,是将当前数据段寄存器中的段基址左移4位,再与16位偏移地址EA相加,形成20位的物理地址;对于,是将当前堆栈段寄存器中的段基址左移4位,再与SP相加,形成20位的物理地址;在对时,是以当前附加段寄存器中的段基址左移4位,再与DI相加以形成20位的物理地址。
-
8086还允许部分改变基本段约定,如的基本段为数据段,但可临时改变为代码段、或附加段、或堆栈段,即。这种情况称为。
段寄存器组
控制寄存器
控制标志 控制标志是用来控制 CPU 的工作方式或工作状态的标志。用户可以使用指令设置或清除。
- IF(Interrupt Flag) ——中断允许标志。它是控制可屏蔽中断的标志,如IF=1 时,允许CPU 响应可屏蔽中断;当IF=0 时,即使外设有中断申请,CPU 也不响应,即禁止中断。
- DF(Direction Flag) ——方向标志。该标志用来控制串操作指令中地址指针的变化方向。在串操作指令中,若,即由低地址向高地址进行串操作;若DF=1,地址指针自动减量,即由高地址向低地址进行串操作。
- TF(Trap Flag)——单步标志。TF=1 时,CPU 为单步方式,即每执行完一条指令就自动产生一个内部中断,使用户可逐条跟踪程序进行调试。若TF=0 时,CPU 正常执行程序。
8086系统时钟与指令周期
每条指令的解释执行过程包括和执行指令两个步骤,CPU取一条指令并执行这条指令,都要完成一系列的操作,这一系列操作所需要的时间通常叫做一个。由于各种指令的操作功能不同,因此各种指令的指令周期是不尽相同的。 (1)取指周期 取指周期是取出某条指令所需的时间。在取指周期中CPU主要完成两个操作:1)按程序计数器PC的内容取指令;2)形成后继指令的地址。
(2)取操作数周期 取操作数周期是为执行指令而取操作数所需的时间。取操作数周期的长短与操作数的个数有关、与操作数所处的物理位置有关还与操作数的寻址方式有关。 (3)执行周期 执行周期是完成指令所规定的操作和送结果所需的时间。它与指令规定的操作复杂程序有关,还与目的操作数的物理位置和寻址方式有关。状态信息中的条件码在执行周期中存入程序状态字PSW。若该指令是转移指令,在该周期中还要生成转移地址。
,CPU周期也称为。由于CPU内部的操作速度较快,而CPU访问一次内存所花的时间较长,因此通常。也就是说,一条指令的取出阶段(通常称为取指)需要一个CPU周期时间。而一个CPU周期时间又包含有若干个(通常称为节拍脉冲或T周期,它是处理操作的(最小单位))。时钟周期是CPU的时间基准,由计算机的主时钟脉冲决定,执行每条指令和每个总线周期的一系列操作都是在时钟脉冲的同步下进行的。这些时钟周期的总和则规定了一个CPU周期的时间宽度。 在执行指令的过程中,CPU要占用系统总线访问内存或外部设备,以便从内存或外设接口中读取指令或指令所需的操作数。
•8086所需的系统时钟信号(主频),可采用石英晶体或TTL脉冲发生器作振荡源。根据不同的振荡源,8284A有两种不同的连接方法:一种是用,另一种方法是用。
- 用于单机系统,,因此系统中的总线控制电路可减到最少;最大工作模式用于多处理机系统,8086 CPU作为主处理器,其它的处理器为协处理器,协助主处理器工作。 8086最小模式下的总线控制信号由CPU直接产生,用于总线控制的信号是HOLD(总线请求信号,输入)、HLDA(总线响应信号,输出)。
- 8086具体工作在最大模式还是最小模式,完全由硬件连接决定。当将CPU的第33号引脚MN/ 接+5V时,8086工作在最小模式,当MN/ 接地时,8086工作在最大模式。
8086系统时钟、指令周期、总线周期
8086 CPU总线操作与时序
8086 CPU的操作可分为内操作与外操作两种,内操作是CPU内部执行指令的过程,外操作是CPU与外部进行信息交换的过程,外部操作主要指的是总线操作。8086主要的总线操作有:系统复位和启动操作、总线读/写操作、总线保持操作或总线请求/允许操作、中断响应操作、暂停操作、空操作。
8086基本总线周期
8086最基本的总线周期由4个时钟周期组成,分别用T1、T2、T3、T4表示,称为T1、T2、T3、T4状态,T1状态,CPU输出地址信号,T2、T3、T4状态传送数据,如果在T2、T3、T4状态无法完成数据传送,就在T3与T4状态之间插入Tw。
,是CPU在读写存储器或与外设交换信息时,为了与存储器或外设的速度匹配,在T3状态之后插入的1个或多个等待周期。,此时,总线上的状态一直不变,用于数据传送,当CPU接到有效的READY信号后,数据传送结束,进入T4状态。T4状态后,就要进入下一个总线周期的T1状态,否则,就进入空闲状态,称为Ti状态。
8086总线请求与响应
8086最小模式下的总线控制信号由CPU直接产生,用于总线控制的信号是HOLD(总线请求信号,输入)、HLDA(总线响应信号,输出)。当系统中其他部件,如DMA控制器,需要占用总线时,向CPU发出总线请求信号HOLD。CPU收到有效的HOLD信号后,如果允许让出总线,就在当前总线周期完成时,发出HLDA信号,同时使地址/数据总线和控制总线处于高阻态,表示让出总线,在下一个时钟周期,总线请求部件收到HLDA信号,获得总线控制权。在这期间,HOLD和HLDA都保持高电平,直到总线请求部件完成对总线的占用后,使HOLD变为低电平,撤消总线请求,CPU收到后,HLDA信号才变为低电平,CPU恢复对总线的控制。
8086存储器组织:
存储器:
存储器是计算机实现记忆功能的核心部件,它用于存放待加工的原始数据和中间计算结果以及系统或用户程序等。 计算机的存储器分为两类:
1、 用于存储当前与CPU频繁交换的信息,其工作速度快,但容量较小;
2、 用于存储CPU暂不处理的信息,其容量很大,故称为海量存储器。外存要配置专门的接口和驱动设备才能实现访问,存取速度也较内存慢得多。当其信息需要处理时,要先调入内存,再由CPU处理。
主要介绍内部存储器:
内部存储器,也称为,是主存储器,位于计算机主机的内部,用来,内存的容量大小受到的限制,例如8086 CPU有20条地址总线,可寻址空间为1MB。
存储器地址的分段:
任何一个存储单元的实际地址,都是由段地址及段内偏移地址两部分组成的。存储单元可以在一个段中定义,也可以定义在两个段的逻辑段中,关键是看段的首地址是如何指定的。IBM PC机对段的首地址有限制,,所以。
- 8086系统将段地址放在段寄存器中,称“段基址”。
- 段内“偏移地址”指出了从段地址开始的相对偏移位置。它可以放在指令指针寄存器 IP 中,或者放在16位通用寄存器中,如何从16位段地址和16位偏移地址得到20位地址,需要先说明逻辑地址和物理地址两个概念。
- 逻辑地址**:存储器的任一个逻辑地址是由段基址和偏移地址组成的**,都是无符号的16位二进制数,程序设计时采用。
- 物理地址:存储器的绝对地址,从00000~FFFFFH,是CPU访问存储器的实际寻址地址,是由逻辑地址变换而来的。
存储器的分体结构(奇偶结构)
在8086系统中,CPU有16根数据线,而存储器一个基本单元(字节)有8根数据线,因此通常将存储系统分为偶体存储器和奇体存储器与8086相连的方法。
-
偶体存储器:一个存储体包含全部偶数地址的单元,奇体存储器:一个存储体包含全部奇数地址的单元。根据8086的规定,。
-
偶体存储器的连接到数据总线的上,地址线最低位 A0 用作偶体存储器的选择信号,奇体存储器的8根数据线连接到数据总线的上,8086引脚用(BHE反)低电平作为奇体存储器的选择信号。
-
8086系统中,1MB的存储空间分成两个存储器:和,分别为512KB。
存储器中存放的信息称为存储单元的内容,例如,存储单元00100H中的内容为34H,表示为(00100H)= 34H。一个字在存储器中按相邻两个字节存放,且存入时(口诀),字单元的地址以低位地址表示。一个字可以从偶地址开始存放,也可以从奇地址开始存放,,第一次取奇地址上数据(忽略偶地址的8位数据),第一次取偶地址上数据(忽略奇地址的8位数据),因此为了加快程序运行速度,编程时注意从存储器偶地址开始存放字数据,这种存放方式也称作“对准存放”。
堆栈的概念
栈的概念
- 栈主要用于。段基址由SS(起始地址)给出,栈指针由SP给出,指向栈的栈顶。 (1)栈的概念
- 栈是在存储器中开辟的一片数据存储区,用来存放需要暂时保存的数据。这片存储区的一端固定,另一端活动,且只允许数据从活动端进出。采用“”的规则。(16位)
栈的组织
栈段中存储单元的地址由寄存器SS和SP确定。栈寄存器SS存放的是栈的基地址,表明栈所在的逻辑段;栈指针寄存器SP存放的是栈顶的地址,即始终指向最后推入堆栈的数据所作的单元。存储单元的地址由(SS)×16+(SP)形成。,栈的伸展方向既可以从大地址向小地址,也可以从小地址向大地址。**8086的栈的伸展方向是从大地址向小地址。**做减法
栈具体操作
栈操作以字为单位进行,而栈中的数据必须按规则字存放。(因为偶地址对齐)**低字节在偶地址单元,高字节在奇地址单元。**把数据推入栈为“压入”;从栈取数据称为“弹出”。“压入”数据的时候,先修改SP的值,即将(SP)-2送SP,然后再与SS形成存储器的物理地址,将数据存入。“弹出”数据的时候,先从当前SS和SP形成的物理地址上取出数据,然后修改SP,即将(SP)+2送SP。栈操作是按“后进先出”的规则进行的。8086 CPU设有专用的指令执行“压入”和“弹出”的操作,在这些指令中,SP的修改是自动进行的。
堆栈的注意点
例如:在某段子程序中需要保护BX、CX、DI的内容 PUSH BX PUSH CX PUSH DI …… POP DI POP CX POP BX
存储器组织与I/O结构
- 存储芯片的地址线通常与系统的低位地址总线相连。寻址时,这部分地址的译码是在存储芯片内部完成的,称为。
- 例如:设某存储器有N条地址线,该芯片被选中时。其地址线得到N位地址信号,芯片内部进行N→ 2 N 2^N 2N的译码,译码后的地址范围是:000…000(N位全为0)到111…111(N位全为1)。
2、芯片片选端的处理
-
由一个存储芯片或芯片组构成存储器,其容量是有限的,使用时不一定能够满足要求。因此,常要在地址方向上加以扩充,以满足。这一寻址过程中,主要通过将系统高位地址线经外部地址译码器产生的输出信号与存储器的片选端相连接的方法来实现。通过地址译码实现片选的方法有3种:
-
线性选择法
线性选择法是指利用地址总线的高位地址线中的某一位直接作为存储器芯片的片选信号(CS非),用地址线的低位实现片内寻址。线选法的优点是结构简单,缺点是地址空间浪费大。由于部分地址线未参与译码,必然会出现地址重叠。此外,当通过线选的芯片增多时,还有可能出现可用地址空间不连续的情况。
-
全译码选择法和部分译码法
2)全译码选择法 全译码选择法是指将地址总线中(全连上了)。采用全译码法,每个存储单元的地址都是唯一的,不存在地址重叠,但译码电路较复杂,连线也较多。 3)部分译码法 部分译码法是将**高位地址线中某几位(而不是全部高位)地址经译码器译码,作为存储器的片选信号。**对被选中的芯片而言,未参与译码的高位地址线可以为0,也可为1,即每个存储单元将对应多个地址。使用时一般将未用地址设为0。采用部分译码法,可简化译码电路,但由于地址重叠,会造成系统地址空间资源的部分浪费。
-
连接时应注意的问题
1、CPU总线的负载能力 在小型系统中,CPU可直接与存储器芯片连接,但与大容量的存储器连接时就应考虑总线的驱动问题。 2、CPU时序与存储器芯片存取速度的配合问题 在微机工作过程中,CPU对存储器的读/写操作是最频繁的操作。因此,考虑存储器与CPU连接时,必须考虑存储器芯片的工作速度是否能与CPU的读/写时序相匹配问题,应从存储器芯片工作时序和CPU时序两个方面来考虑。 3、存储器的地址分配和片选问题 首先确定整机存储容量,再确定选用存储芯片的类型和数量,之后划分RAM、ROM区,画出地址分配图。 4、控制信号的连接
位扩展
位扩展是指增加存储字长。位扩展可以利用芯片地址并联的方式实现,即将,而各芯片的地址线、读/写信号线和片选信号线对应 地并联在一起。 •例如:两片1K×4bitSRAM芯片2114,组成1K×8bit存储器
存储器位扩展设计如下图所示。图中两片2114的地址线和各控制线分别并联在一起,而其中**1# 芯片的数据线接数据总线的低4位,2# 芯片的数据线接数据总线的高4位。**硬件连接之后便可确定存储单元的地址,即A9~A0的编码状态000H~3FFH就是1KB存储单元的地址。地址分配情况见下表所示。
字扩展
字扩展是指增加存储器字的数量,字扩展可利用芯片地址串联的方式实现。 例如:用两片2K×8b的RAM芯片6116组成4K×8b的存储器
字扩展设计如下图所示。图中两片6116的片内信号线A10~A0、D7~D0、 OE非、WE非 分别与系统的地址线A10~A0、数据线D7~D0和读/写控制线、连接。。由下图可见,1#芯片的地址范围是,2#芯片的地址范围是。地址分配情况见下表所示。
字和位扩展
字和位扩展是字扩展和位扩展的组合。 例如:四片1K×4bitRAM芯片2114,组成2K×8bit存储器。
存储器扩展设计步骤
① 根据系统实际装机存储容量,确定存储器在整个存储空间中的位置。 ② 选择合适存储器芯片,列出。 ③ 按照地址分配表选用译码器件,画出相应的地址位图,依次,进而。 ④ 画出存储器与CPU系统总线的。
存储体与总线的连接
例题:为某8位机(地址总线为16位)设计一个32KB容量的存储器。要求采用2732芯片构成,地址从0000H开始;采用6264芯片构成,地址从2000H开始。片选信号采用。
- 每片2732提供 212×8位()存储容量
- 每片6264提供 213×8位()存储容量
• 第一步,确定实现24KB RAM存储体所需要的RAM芯片的数量。 因为每片6264提供 213×8位的存储容量,所以实现24KB存储容量所需要的RAM芯片数量是 所以RAM数量 = 3(片) • 第二步,确定实现8KB ROM存储体所需要的EPROM芯片数量。 由于每片2732提供 212×8位的存储容量,所以实现8KB存储容量所需要的EPROM芯片数量是 EPROM数量 = 2(片) • 第三步,存储器芯片片选择信号的产生及电路设计 采用74LS138译码器全译码的方法产生片选信号。
A12~A0作为片内地址线,A15~A13作为3-8译码器74LS138的输入,产生的译码输出000~011作为芯片的片选信号。
典型的总线连接
in/out指令
-
。I/O地址在T1状态时出现在地址总线的A0到A15上,然后被ALE信号锁存。在I/O操作时,地址总线的高端(A16~A19)总是逻辑0。
-
(
与外部进行数据传输时用DX )16位寄存器DX被用作16位 I/O地址指针,最大的寻址能力刚好达到64KB。存储映射I/O接口被当作存储单元被微处理器访问,数据的偶地址字节在D7~D0上传输,奇地址字节在D15~D8上传输。在设计8086系统的8位I/O子系统时需要注意系统中所有的字节寄存器的地址都应为偶数。栈是64K
8086的外部中断
(对外部接口来说是外中断,对内部接口来说是内中断)
•8086 CPU有一个简单而灵活的中断系统,采用向量型中断结构,可以处理多达256个不同类型的中断请求。CPU的中断源有两类,
**内部中断(软件中断 )**必考
- 溢出中断 (向量号为
4 的内部中断) - 除法出错中断(向量号为
0 的内部中断) - 单步中断 (向量号为
1 的内部中断)8086没有直接对TF置1或清0的命令,可修改存放在栈中标志内容,再通过POPF指令改变TF的值 - 断点中断 (向量号为
3 的内部中断) 指令中断 (向量号为n 的内部中断)自定义 指令中断是执行INT n时,产生一个向量号为n的内部中断,为两字节指令,INT 3除外。INT n主要用于系统定义或用户自定义的软件中断 ,如BIOS功能调用和DOS功能调用。内部中断向量号 除指令中断 由指令指定外,其余都是预定好的,因此都不需要传送中断向量号,也不需要中断响应周期。
CPU外部中断请求信号引脚上输入有效的中断请求信号引起的,分为
- 非屏蔽中断NMI是由
NMI引脚上输入有效的中断请求信号 引起的一个向量号为2的中断 。NMI用来通知CPU发生了致命性事件 ,如电源掉电、存储器读写错、总线奇偶位错 等。NMI是不可用软件屏蔽 的,而且是上升沿触发的,中断类型号预定为2 ,不需要中断响应周期。在IBM PC系列机中,NMI用于处理存储器奇偶校验错、I/O通道奇偶校验错以及8087协处理器异常中断等。
2)可屏蔽中断INTR
- CPU的INTR引脚通常由
8259A PIC的INT输出 信号驱动,8259A又与需要请求中断的外设相连。在外设发出中断请求信号时8259A根据优先权和屏蔽状态,决定是否发出INT信号。外设的中断请求信号必须在中断请求信号被接受前保持有效。而CPU对INTR信号是在每条指令的最后一个时钟周期采样的。 •接到有效的INTR信号后,CPU是否响应该中断请求,取决于中断允许标志位IF的状态。若IF=1,CPU开放中断,则响应,否则不响应。因此,要响应INTR的中断请求,CPU必须开放中断。 •8086设有对中断标志位IF置1或清0的指令,STI指令给IF置1,CPU开中断;CLI指令给IF清0,CPU关中断 。
- 若按中断源来划分,则系统中的中断又可分为:
硬件中断和软件中断 。而对于硬件中断,程序员不能控制它,它们基本上是随机产生的,而对于软件中断,程序员可通过指令INT有目的安排它们的 两者的区别 有以下几点: 1、软中断发生的时间是由程序控制的,而硬中断发生的时间是随机的; 2、软中断是由程序调用发生的,而硬中断是由外设引发的; 3、硬件中断处理程序要确保它能快速地完成它的任务,这样程序执行时才不会等待较长时间。
•可屏蔽中断处理的过程一般分为几步:
8086 CPU响应中断的过程
当中断接口电路中的
1、中断请求与响应阶段
- CPU在每条指令执行的最后一个机器周期采样中断请求信号,在执行完当前指令后,进入是否响应中断的判断流程,如果是内部中断或NMI非屏蔽中断,
CPU自动形成中断类型号 ,如果是INTR可屏蔽中断,进入中断响应周期,从数据总线获取中断类型号 。
2、中断自动处理阶段
- 标志寄存器FR入栈,令TEMP=TF,暂存TF的状态, IF和TF清0,CS和IP入栈,根据中断类型号查中断向量表,都是硬件自动完成的。
3、中断服务阶段
- 主要是执行相应的中断服务程序,所做的处理视应用场合而定,如外设的中断服务程序,主要是传递信息,而软件启动的中断服务程序则主要为系统中其它程序服务。
4、中断返回
- 当执行到
IRET 指令时,自动弹出IP和CS以及标志寄存器FR,返回中断前的程序位置,执行下一条指令。
中断向量表
•8086中断系统采用的是向量型中断方式,每个中断源都有一个为它服务的中断服务程序。8086最多能管理
(注意:1KB区域内,一共1024B,而一个中断类型号4B,因此一共可以放1024/4 = 256个中断向量)
8086系统中,在存储器的00000H~003FFH地址范围建立了一个中断向量表,占用1K字节空间,
系统备用中断类型号
专为IBM PC机开发的基本输入输出系统BIOS中断调用占用10H~1AH共11个中断类型号,如
中断向量表题目
•8086中断类型号为40H的中断服务程序入口地址存放在中断向量表的起始地址是:C A 、DS:0040H B 、ES:0100H C 、0000:0100H D 、0000:0160H 请列出详细解答步骤。 •8086系统在存储器的00000H~003FFH建立一个中断向量表 •MOV AX, 0 •(XOR AX, AX) •MOV DS, AX •(MOV ES, AX)
1.
SEG段基址 OFFSET偏移地址
MOV AX,0
MOV ES,AX
MOV BX,N*4 ;这里N为中断向量号
MOV AX,(OFFSET RKDZ);取中断服务程序的偏移地址(先塞IP)
MOV ES:WORD PTR [BX],AX;注意在这里只能用[BX]
MOV AX,SEG RKDZ ;取中断服务程序的段基地址
MOV ES:WORD PTR [BX+2],AX
RKDZ:
:
IRET;返回
2.
•
;把之前存的先移出来
MOV AL, N ;先把原来中断向量表中的值取出来放到ES:BX中
MOV AH, 35H
INT 21H
;然后放置自己的
;设置中断向量:
PUSH ES ;存原中断向量
PUSH BX
MOV AX, SEG RKDZ ;设置中断向量段地址在DS
MOV DS, AX ;RKDZ 为中断服务子程序
MOV DX, OFFSET RKDZ ;设置中断向量偏移地址在DX
;调用
MOV AL, N ;中断类型号n
MOV AH, 25H ;设置中断向量
INT 21H
……
;用户编写的主要程序,这里面会调用上面的中断子程序
……
;等程序快结束了,记得还要恢复原中断向量:
;把之前的再移回来
POP DX ;恢复原中断向量
POP DS
MOV AL, N
MOV AH, 25H
INT 21H
•矢量中断中,中断入口地址与中断类型号有关,那么中断类型号如何获取呢? (1)
•程序开始必须保护中断现场,可以通过一系列PUSH指令将CPU各寄存器的值入栈保护; •若允许中断嵌套,则用
子程序完成过程:
中断嵌套过程
低优先级中断源向CPU发出中断请求,且得到CPU的响应,若此时是低优先级或同级中断源发出的中断请求,CPU均不响应。这种高优先级中断源 中断 低优先级中断源的服务,使中断服务子程序可以嵌套进行的过程,称为
它们的主要差异有: 1、中断服务程序和正在执行的程序之间是
4、中断服务程序是随机发生的,强调中断(有临时终止断开、打断的意思),结束后要返回断点。普通子程序是安排好的没有断点。(排队和插队) 5、在主程序中,赋
中断服务子程序例子
简单的中断子程序实验
一.实验内容 •实现子程序和中断服务子程序的设计 •编写子程序设置
可编程中断控制器8259A •可编程中断控制器8259A是Intel公司专为80x86 CPU控制
8259A内部结构及引脚信号
第三章 思考与习题
1、8086CPU 具有 条地址线,可直接寻址 容量的内存空间,在访问I/O 端口时,使用 条地址线,最多可寻址 个I/O 端口,其中通过直接寻址方式访问的I/O端口有 个。 2、某台微型机,其存储器首地址为1000H,末地址为5FFFH,存储容量为 KB。 A、4 B、8 C、16 D、20
3、微处理器用13 条地址线寻址,其最大寻址范围为 KB A、1 B、2 C、4 D、8
4、有一存储器芯片,地址线为A0~A12,数据线为D0~D7,则该芯片的存储容量为 A、4K×8 位 B、8K×8 位 C、16K×8 位 D、32K×4 位
5、8086 CPU 由哪两部分组成?各部分包含哪些组件?各组件有何主要功能?
6、在8086 CPU 的寄存器中,哪些可作为8 位/16 位寄存器使用?哪些寄存器不能由程序员操作使用?
7、在8086 CPU 的寄存器中,有哪些通用寄存器和专用寄存器?试说明专用寄存器的作用?哪4 个寄存器在数据寻址中常用来指示存储器单元的偏移地址,对应的段地址分别是什么?
8、在8086CPU 中,物理地址和逻辑地址是指什么?二者之间有何联系?有效地址是如何产生的?
9、8086 CPU 的工作模式有哪些?其中由8086 CPU 构成的最小模式系统的典型配置是什么?
10、什么是栈?栈的功能是什么?有什么操作原则?栈指针SP 的作用是什么?
11、设双字(DW)12345678H 的起始地址C000H:0002H,试说明这个双字在存储器中是如何存放的?
12、请阐述中断服务子程序和普通子程序的区别?
13、可屏蔽中断处理的过程一般步骤是什么,并简述每个阶段的过程?
14、画图并说明什么是时钟周期、CPU 周期(机器周期)和指令周期?
15、何谓全译码电路?何谓部分译码电路?
16、某8 位机(地址总线为16 位)设计一个32KB 容量的存储器。要求采用2732 芯片(4K×8 位)构成8KB EPROM 区,地址从0000H 开始;采用6264 芯片(8K×8 位)构成24KBRAM 区,地址从2000H 开始。片选信号采用全译码法。计算需要的EPROM 芯片数量和RAM数量,画出存储器地址分配情况表,并画出存储器扩展电路。
17、什么是I/O 接口?什么是I/O 端口?I/O 接口在系统中能起什么作用?I/O 端口与I/O 接口又有什么关系?
18、CPU 与外设之间交换传送数据的方式有哪几种?各有什么特点?