微机原理与接口技术复习笔记

更新时间:2024-07-01 02:53:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

程序(program):实现特定应用的数据定义和指令序列。其中,数据是计算机自动计算的对象,而指令(instruction)是指挥计算机执行各种基本操作的指令,一条指令对应一种基本操作。 冯·诺依曼结构:

计算机必须具备的5个基本部分:算术逻辑单元、存储器、控制单元、输入设备、输出设备。

算术逻辑单元实现数据处理,而数据处理是计算机最根本的功能。 存储器用以暂存原始数据、中间结果、最终处理结果及程序。

控制单元:实现指令的执行,根据指令控制算术逻辑单元的操作及各部分之间的数据传送。

现代计算机:普遍采用的是以存储器为中心的冯·诺依曼结构。

算术逻辑单元 输入设备 存储器 输出设备 控制单元 计算机5个部分之间的关系,两种信息流:

数据流:以存储器为中心,其他部分之间的数据传送都要经过存储器的暂存中转。输入设备输入的原始数据和程序(计算机中各部分之间传送的信息广义上都是数据)要暂存在存储器;控制单元从存储器读取指令;算术逻辑单元从存储器得到原始数据,处理后的结果再存回存储器;输出设备输出从存储器传送来的最终处理结果。数据流表征了配合数据处理和程序执行所必须的操作—数据传送。

控制流:以控制单元为中心。控制单元从存储器读取指令(数据流),根据指令译码产生发向其他部分的控制信号(控制流),指挥算术逻辑单元的数据处理,协调各部分之间的数据传送(数据流)。控制流表征了计算机自动计算的实现—程序执行。

微机在结构上两个显著特点:一是采用CPU,二是各组成部件之间采用总线连接。

存储器 CPU I/O接口 I/O接口 时钟 输入设备 微机结构 输出设备 时序脉冲的频率就是CPU的工作频率。

时钟周期:时序脉冲的周期。时钟周期是微机的最小定时单位。

总线周期:CPU访问一次总线的时间即为总线周期。由四个时钟周期构成。 指令周期:执行一条指令的时间即为指令周期。指令周期由若干时钟周期够成。 指令周期包括取指周期和执行周期,执行周期包括译码、取操作数、数据处理和存操作数等若干基本操作。 微机的组成结构:

1、 总线:是连接各部件的一组公共信号线;

2、 CPU:算术逻辑单元与控制逻辑单元合称为CPU,即中央处理器; 3、 存储器:存储数据和程序;

4、 I/O接口:输入/输出设备与总线之间的缓冲电路。在外设侧以输入/输出设备通信标准信号实现数据交换,在总线侧则与存储器类似,被CPU通过总线标准信号访问。

在微机结构中,CPU与输入/输出设备不相关,双方可以独立发展。 寻址:

CPU从存储器取指令时,必须发出指令所在存储器单元的地址,程序计数器就是暂存在这个地址的寄存器。CPU根据指令访问存储器单元或I/O接口中的数据时,也必须发出相应的地址,地址寄存器就是暂存在这个地方。 地址总线从CPU向存储器和I/O接口的译码电路传送地址。

译码电路对地址译码之后,即可定位到相应的存储器单元或I/O端口。

总线的功能:

地址总线:用于CPU寻址存储器和I/O端口,针对采用独立寻址方式和存储器单元数目,定义为8位宽度。(功能是从CPU向存储器和I/O接口的译码电路传送地址。)

数据总线:是各部件之间数据传送的公共通道。

控制总线:用于CPU控制单元控制数据总线上的传送过程。

三类信号线不是独立作用的,协调完成数据的传送:CPU首先通过地址总线和M/IO信号线寻址存储器单元或I/O端口,然后通过RD或WR控制线确定数据传送的方向,最后被选通的寄存器与CPU通过数据总线实现数据传送。

数据传送是要实现的目的,数据总线是传送通道,地址总线定位数据的所在,控制总线控制数据的传送方向,三总线协调作用,共同实现数据传输的目的。 数据传输的一端一定是CPU内部的寄存器,由控制单元在CPU内部直接控制,且同一时刻只能有一个CPU工作。

模型机的指令集:共8条。2条数据处理指令(加法和减法操作),2条存储器访问指令,2条输入/输出访问指令,1条流程控制指令(无条件转移)和1条空操作指令。

伪指令:用于向汇编程序指示存储器分配的汇编命令(directive)。 操作系统:一种控制硬件和调度软件全面管理计算机资源的程序。

执行指令:包括取指令和译码发出控制信号两个阶段。后一阶段是通过指令译码器和控制逻辑电路对设计的指令集实现译码,并转换成相应的控制信号。 程序计数器(PC):是控制单元中的一个重要寄存器。其内容是控制单元要执行的下一字节指令的地址,控制单元根据这个地址从存储器去的一字节指令后,就对程序计数器加1,始终指示下一字节指令的地址,这样控制单元就可以不断

取得指令(取指令后自加1)。 I/O接口的数据传送方式: 1、查询方式(Query):不需增加额外的硬件,CPU输入或输出数据时,必须先查询相应I/O接口是否就绪,若就绪则进行数据传送,否则继续查询直到满足条件。(耗时)

2、中断方式(Interrupt):当相应I/O接口满足数据传送条件时主动向CPU发出申请,由CPU中断当前执行的程序,调用一个相应的子程序完成数据传送,子程序返回后继续执行被中断的程序。(CPU运行效率高,但I/O接口想CPU申请的信号需要占用CPU引脚,而响应此过程也需要一定的CPU开销,还有可能增加硬件)

3、DMA方式(Direct Memory Access):DMA方式是通过增加一个硬件(DMA控制器)来专门完成I/O接口与存储器的直接数据交换。DMA控制器发出地址信号、控制信号,而采用DMA方式时,CPU要出让总线控制权,这时,CPU可以继续执行当前程序,但不能访问总线,还可能影响到对中断的响应。

微处理器:算术逻辑单元和控制逻辑单元,以及暂存数据和指令的寄存器组(Register Set)、高速缓冲存储器(Cache)等特殊寄存器,这些部件集中在一片大规模或超大规模集成电路芯片上。(通常,微处理器不包含程序存储单元) 微机:以微处理器为核心,配以大规模集成电路的只读存储器ROM、读写存储器RAM、输入/输出接口及总线。(微机已具有独立运行的能力) 微机系统:硬件和软件的集合。

8086微处理器

是字长16位的定点微处理器,内部寄存器、算术逻辑单元和外部数据引脚均为16位,支持8位和16位的符号数/无符号数的算术运算和数据传送。提供20位地址引脚(存储周期20位地址有效;I/O周期16位地址有效),可寻址1M存储器空间和64K I/O地址空间。 流水线:

分段寻址:把整个存储器地址分为若干段,存储器单元的定位被分解为所在的段和在段内的偏移,一次,存储器单元的地址由两部分组成:段地址和偏移地址。段地址和偏移地址通常记为segment:offset。段地址定位断的位置,由8086内专门的段寄存器提供。偏移地址定位存储器单元在段内的位置,如果是取指操作,偏移地址由指令指针寄器提供;如果是指令执行中访问存储器操作数,偏移地址在指令中指出。

物理存储器:连接在系统总线上实际存在的存储器。

物理地址:为了寻址物理存储器,微处理器向系统地址总线发出的地址。物理地址是寻址物理存储器的线性地址,线性是指连续而有序的意思。

8086的分段地址称为逻辑地址。要访问系统总线上的物理存储器,逻辑地址必须转换为物理地址,所以逻辑地址只存在于8086中,即逻辑地址对物理存储器是透明的。

总线接口单元BIU

段寄存器:

段寄存器组:CS、SS、DS、ES。 CS(Code Segment):保存代码段的段地址,代码段用于存储程序的指令。 SS(Stack Segment):保存堆栈段的段地址,堆栈段用于形成堆栈区。 DS(Data Segment):保存数据段的段地址,数据段用于暂存原始数据和处理后的中间结果及最终结果。 ES(Extra Segment):保存扩展段的段地址,扩展段与数据段类似,一般情况下,数据段用于存储局部变量,扩展段用于存储全局变量。

地址加法器:将执行单元提供的16位费重定位地址重定位为20位的存储器物理地址,用于存储器接口访问总线上实际存无的物理存储器。 工作分两步:1.将段寄存器提供的16位段地址左移4位,得到20位的段首地址。2.20位段首地址再加上16位的偏移地址,即可得到20位的物理地址。

指令指针寄存器:存储代码段内的偏移地址,,与CS仪器构成取指所需的程序计数器。程序计数器由总线接口单元自动改变,始终指向顺序存储的下一字节指令。除控制程序流指令可以改变程序计数器外,其他指令都不能直接修改程序计数器。 (8086复位后,CS全部置位而IP全部复位,程序计数器的值为FFFFH:0000H,转换为物理地址为FFFF0H)

存储器接口:

指令流字节队列:

执行单元EU

控制器:从指令流字节队列顺序读取指令,根据指令译码控制8086中其他部分进行相应的操作,以实现指令要求的功能。

控制器根据要求修改程序计数器的内容之后,必须等待总线接口单元清空指令流字节队列,并按修改后的程序计数器内容重新取指填充指令流字节队列后,控制器才能继续从指令流字节队列取指令。

算术逻辑单元:这个16位算术逻辑单元,根据控制器的控制,可完成8位或16位的二进制算术运算和逻辑运算,实现对数据的处理。

标志寄存器:标志寄存器设计为16位,实际使用9位,其中6位用于存放算术逻辑单元运算后的结果特征,称为状态标志; CF(Carry Flag):进位/借位标志。(最高位) PF(Parity Flag):奇偶标志。(置位位的个数,为偶则PF=1,表示为PE;为奇则PD=0,表示为PO) AF(Auxiliary Carry Flag):辅助进位/借位标志,用于BCD加法的调整。(运算的低四位产生了进位或借位,AF=1,表示为AC;否则AF=0,表示为NA) ZF(Zero Flag):零标志。(运算结果为0,则标志置位;否则复位) SF(Sign Flag):符号标志,用于标志符号的正负。(运算结果最高位为1,则标志置位,表示为NG;否则标志复位,表示为PL)

OF(Overflow Flag):溢出标志,用于标志符号数的运算结果是否超出表达范围(无符号数的溢出以CF标志)。(双高异或判别)

另外3位通过人为设置,用以控制8086的3种特定操作,称为控制标志。 TF(Trap Flag):陷阱标志,也称为单步标志,用于程序的单步执行调试。 IF(Interrupt Flag):中断标志。(IF=1,表示为EI,即允许响应可屏蔽中断的请求;IF=0,表示为DI,即禁止响应可屏蔽中断的请求) DF(Direction Flag):方向标志。(DF=1,表示为DN,即down,串操作后地址指针自动减量;DF=0,表示为UP,即up,串操作后地址指针自动增量)

通用寄存器组:是8086中暂存数据,指针的寄存器阵列,相比使用存储器,可以减少访问总线的次数,有利于提高数据处理速度。8086包含8个16位寄存器,使用上一般没有限制,但有些特定操作要求必须使用指定的寄存器。 寄存器定义为: AX(Accumulator),累加寄存器;主要用于乘除运算和输入输出操作时存储操作数、优化移动操作。 BX(Base),基寄存器;主要用于存储器间接寻址时存储数据段的基地址。 CX(Counter),计数寄存器;主要用于循环、重复、移位操作时存储计数值。 DX(Data),数据寄存器;主要用于乘除运算时存储操作数、输入输出操作间接寻址时存储I/O地址。 SP(Stack Pointer),堆栈指针寄存器;用于存储站定的偏移地址。

BP(Base Pointer)基指针寄存器;主要用于存储器间接寻址时存储堆栈段的基地址。

SI(Source Index),索引源寄存器;主要用于存储器间接寻址时存储索引地址、串操作时存储原串偏移地址。 DI(Destination Index),目的索引寄存器 ;主要用于存储器间接寻址时存储索引地址、串操作时存储目的串偏移地址。

如果I/O端口中的是字数据时,最好分配偶地址存储。

计算机中的指令由操作码和操作数两部分构成。操作码也称为指令码,说明计算机要执行哪种操作,是指令中不可缺少的部分;而操作数是参加本指令运算的数据,也就是各种操作的对象。

为限制指令的长度,8086指令系统规定,一条指令的操作数最多只能有2个,且它们不能同时位于存储器中。

根据指令的不同,操作数可以是1个,即单操作数,也可以是两个,即双操作数(源操作数和目的操作数)。有的指令还可以没有操作数或隐含操作数。

基本数据类型:字节、字、双字。

指令中的立即数是字符,则用单引号括起来。

8086CPU的寻址方式(计算机中操作数地址的形成就是寻址方式) 1、 操作数包含在指令中,称为立即操作数。

2、 操作数包含在CPU的某个内部寄存器中,称为寄存器操作数。

循环移位指令:ROL、ROR、RCL、RCR。 ROL(Rotate Left):循环左移指令。最高位进入标志位CF并移入最低位,按一个闭环回路进行移位。目的操作数可以是寄存器数或存储器数。格式:ROR dst,CL;CL是移位的位数。 Exp:ROL AL,1 MOV CL,4 ROL AL,CL

循环移位为1位时,若移位后的操作数的最高位不等于标志位CF,则溢出标志OF=1;否则OF=0.用来表示移位前后操作数的符号位是否发生改变(OF=0表示符号位为改变)。

ROR(Rotate Right)循环右移指令,与ROL指令的功能相似,仅移动方向相反,最低位进入标志位CF并移入最高位。

只移1位时,移位后的操作数的最高位与次高位不相等,则溢出标志OF=1;否则OF=0。可由此判断移位前后操作数的符号位是否发生改变。

RCL:带进位的循环左移指令。最高位移入标志位CF,CF移入最低位形成环路。

循环移位为1位时,若移位后的操作数的最高位与标志位CF不相等,则溢出标志OF=1;否则OF=0。可由此判断移位前后操作数的符号位是否发生改变。 RCR:带进位的循环右移指令。最低位移入标志位CF,CF移入最高位。形成环路。

循环移位为1位时,若移位后的操作数的最高位与次高位不相等,则溢出标志CF=1;否则OF=0。可由此判断移位前后操作数的符号位是否发生改变。

串操作指令:是用一条指令实现对一串字符或数据的操作。串是存储器中一系列连续的字或字节,串操作就是针对这些字或字节进行的某种相同的操作。

8086串操作特点:

1) 所有串操作指令都用SI对DS段中的源操作数进行间接寻址,用DI对ES段中的目的操作数进行间接寻址,即目的串和源串地址分别有ES:DI和DS:SI提供。使用前应先设定好SI和DI的初值。 2) 串操作指令执行时自动修改地址指针,地址指针的修改与方向标志DF有关。 3) 若源串和目的串在同一段中,则把数据段基址DS和附加段基址ES设成相同的数字,即DS=ES,仍由SI和DI分别指出源串和目的串的有效地址。 4) 任何一条串操作指令,可在前面加一个“重复前缀”,通过它们来控制串操作指令的重复执行。

5) 串操作指令是唯一的一组源操作数和目的操作数都在存储单元的指令。

重复前缀:REP、REPZ(REPE)、REPNZ(REPNE)。

功能是重复执行紧跟其后的串操作指令,不能单独使用,只能加在串操作指令前用来控制串操作的重复执行,且不影响标志位。

REP:重复前缀(无条件重复)。执行操作时,(CX)=0,退出重复串操作;否则重复串操作。过程如下:

1、 若(CX)=0,退出重复操作REP,否则往下执行; 2、 修改CX,即CX=CX-1;

3、 执行串操作一次,并修改SI、DI,执行第1步。

其中,DF=0,则SI、DI内容自动加1或加2;否则自动减1或2. 用途:用于字串传送MOVS或保存字串STOS指令的的前缀。 REPZ(REPE):相等重复前缀。若执行的操作为(CX)~=0且ZF=1,重复串操作;否则,退出重复操作。 用途:用于比较两个字符串,找出不同的字。REPZ(REPE)与串操作指令CMPS与SCAS配合。表示只有当两数相等时才继续比较;否则可提前结束串操作。 REPNZ(REPNE):不相等重复前缀。执行的操作为(CX)~=0且ZF=1,重复串操作;否则不重复。

用途:在一个字串中,找到需要的字。也可用于比较两个字串,找出相同的字。REPNZ(REPNE)和串操作指令CMPS与SCAS配合。表示只有当两书不相等时才继续比较;否则可提前结束串操作。

串传送指令格式:MOVSB/MOVSW;用于字节/字的传送。 操作:((ES:DI))<—((DS:SI));不影响标志位。

该指令把数据段一SI为有效地址的源串中的字节或字传送到附加段以DI为有效地址的目的串中,同时自动修改SI和DI中的有效地址,使之指向下一个元素。

串比较指令格式:CMPSB/CMPSW;源字节串比较或字串比较。

((ES:EI))<—((DS:SI));6个标志位:AF、ZF、OF、PF、CF、SF反映了目的串与源串的关系。

CMPS指令把由SI指定的数据段中源串的一个字节或字与DI指定的附加段目的串的一个字节或字相减,但不回送结果,只是影响标志位。比较后按照DF的值修改地址指针SI和DI。

SCAS:串扫描指令。格式:SCASB/SCASW;字节串或字串扫描。

操作:把AL/AX的内容减去DI指定的目的串中的一个字节或字数据。不送运算结果,只根据结果影响标志位,并按照DF的值修改DI。用于从一个字串中查找一个与AL或AX中不同的字符,或查找一个相同的字符。 LODS:读取串指令。格式:LODSB/LODSW。

操作:把源串中的一个字节或字的数据送入AL或AX中,同时按照DF标志修改SI。该指令正常情况是不重复操作的,因为每重复一次操作,累加器的内容就会改写,但在软件设计中,该指令是十分有用的。 STOS:存串指令。格式:STOSB/STOSW。

操作:把AL或AX中的一个字节或字的内容送入目的串所在单元,并按照DF的值修改DI。STOS指令常用于初始化某一缓冲区为同一数据。

控制转移类指令:无条件转移指令、条件转移指令、循环控制指令、中断指令。

JMP:无条件转移指令。可实现短、近、远转移,使用方便,包括段内直接转移、段内间接转移、段间直接转移、段间间接转移。

CALL/RET:调用和返回指令。子程序完成功能之后,最后执行的一条指令必

须是返回指令RET,返回地址由执行CALL调用指令时入栈保存的断点值提供。 条件转移指令:满足条件,则转移到指定的目标地址;否则,继续执行该条件转移指令的下一条指令。条件转移分为:单个状态条件转移、无符号条件转移、带符号条件转移3种。

指令格式:JX Target;X代表转移条件,条件成立,则转到标号Target处执行;否则顺序执行;Target是短目标地址。

LOOP、LOOPE/LOOPZ、LOOPNE/LOOPNZ:短目标标号。

第四章:

表达式:由若干操作数和运算符构成的有意义的组合序列。表达式可出现于源程序的任何地方,在汇编过程中可产生确定的值。表达式是常数、寄存器、标号、变量与运算符的组合。

汇编时按优先规则对表达式进行计算,计算出具体数值,在运行时不能改变,而寄存器间接寻址的地址计算则是按照执行指令时寄存器的值先取指后计算的。

运算符:算术运算符、逻辑运算符、关系运算符、分析运算符、合成运算符。 算术运算符:+、-、*、/、取模运算(MOD)。 Exp: MOV AL, 5 MOD 2 ;汇编后为MOV AL,1

‘/’是取商部分,只有整数部分,没有余数;而MOD只是取余数。

逻辑运算符:AND、OR、XOR、NOT。逻辑运算符在两个操作数之间按位进行布尔运算,逻辑表达式只能对常数进行运算,所得结果也是常数。 关系运算符:在两个无符号操作数之间进行大小关系比较,满足关系则返回全1,否则返回全0。包括:相等(EQ)、不相等(NE)、小于(LT)、大于(GT)、小于等于(LE)、大于等于(GE)。运算结果是一个逻辑值,即真或假。 1)关系运算符只能对常数(或相当于常数)进行运算,且为无符号数。 2)关系为真,结果为全1;否则为全0。

分析运算符:SEG、OFFSET、TYPE、LENGTH、SIZE。 SEG:取变量或标号的段地址。 OFFSET:取变量或标号偏移地址。

TYPE:取变量的类型,对于变量类型返回值可以是1(字节)、2(字)、4(双字)、6(三字)、8(四字)、10(五字);对于标号类型,返回值可以是-1(NEAR)或-2(FAR)。

LENGTH:取变量中元素的个数。若使用DUP( )定义的数组变量,结果为单元的个数;否则结果为1。

SIZE:取所定义存储区的字节数(等于LENGTH*TYPE)。若使用DUP(),取所定义的变量或字节个数;没使用DUP( ),则取第1个数据的字节数。

合成运算符:对已定义的但个操作数重新生成段基地址、偏移量相同而类型不同的新操作数,主要介绍PTR、THIS。 1) PTR:用来指定地址操作数的类型。

格式为:<新类型> PTR <存储器操作数>

类型:BYTE、WORD、DWORD、NEAR、FAR。

功能:指定原存储器的操作数为新类型,新操作数的段基地址和偏移量与原操作数相同;PTR也可用来进行强制类型转换。 THIS:指定“新类型”。格式为:THIS <新类型>;代表新的操作数的类型

即为式中指定的“新类型”。

伪指令:符号定义伪指令、数据定义伪指令。 符号定义伪指令:EQU、=。

格式:<符号> EQU <表达式>。用EQU定义的符号未清除前不能进行重定义。清除EQU定义可用:PURGE伪指令。格式:PURGE <符号>。

用“=”定义的符号可在任何时候进行重定义,其他用法与EQU完全相同。两者均不占用存储空间,仅是给符号赋值在编译过程中完成。 数据定义伪指令:<变量名> 数据定义伪指令 <操作数,操作数,···> 操作数可以是常数、变量或表达式。

常用的数据定义伪指令有:DB定义字节、DW定义字、DD定义双字、DQ定义4字、DT定义5字。 Exp:DATA DB ‘HELLO’ 复制操作符:DUP

定义重复的数据可使用复制操作符,括号中的内容可以为DUP重复定义的嵌套。 Exp:DATA DB 8 DUP (8 DUP (0) );连续分配64个字节单元,初值为0。

$表示取当前地址。 段定义伪指令:

格式:<段名> SEGMENT [定位类型] [组合方式] [类别] <汇编语言语句> <段名> ENDS

SEGMENT和ENDS总是成对出现的,且段名一样。SEGMENT说明一个段的开始,ENDS则说明一个段的结束。 ASSUME:明确段与寄存器的关系。 Exp:ASSUME CS:CODE DS:DATA ES:DATA ORG:规定了段内的指令或数据存放的开始地址,格式:ORG <表达式>,表达式的值即为开始地址,从此地址连续存放程序或数据。 PROC、ENDP:过程定义伪指令。

注意:PROC和ENDP必须成对出现,且过程名相同。过程的类型有NEAR、FAR两种,分别表示段内、段间调用,默认模式为NEAR。

END:汇编结束伪指令。格式:END <表达式>,表达式通常就是第一条指令的标号,指示程序的入口地址。

中断:当CPU内部或外部出现某种事件(中断源)需要处理时,终止正在执行的程序(断点),转去执行请求中断的那个事件的处理程序(中断服务程序),执行完后,在再返回被暂时中止执行的程序(中断返回),从断点处继续执行。 中断源的分类:外设中断源;硬件故障中断源;软件中断源。

CPU响应外中断的条件:

1)有中断源发出中断信号,并保存在中断请求触发器中,直至CPU响应此中断请求之后才清除。 2)开放总中断。可通过对CPU标志位IF的置位或复位使中断响应开放或禁止。只有开放总中断(执行STI指令),CPU才能响应外部可屏蔽中断;当一个中断被响应后,CPU会自动关闭中断。在中断服务程序中仍需开放总中断以允许嵌

套发生。

3)在现行指令结束之后响应中断。

中断类型码:为一个字节,是识别中断源的唯一标志。CPU通过中断类型码,确定对应为它服务的中断服务程序。

中断向量:每一个中断服务程序都有一个确定的入口地址,中断服务程序入口地址则称为中断向量。中断向量由段地址(CS)和偏移地址(IP)组成,占用四个字节,低两字节为偏移地址,高两字节为段地址。

中断向量表:把系统中所有中断向量集中起来,按中断类型码从小到大的顺序存放到存储器的某一区域内,这个存放中断向量的存储区叫做中断向量表,即中断入口地址表。

中断向量在表中的位置称为中断向量地址,中断向量地址与中断类型码的关系为: 中断向量地址(首地址)=中断类型码*4

中断请求可能在任意时刻被送到CPU,但实际上8086 CPU只是在每条指令执行的最后一个机器周期才采样中断请求信号。CPU是否响应中断,要看中断允许标IF,IF=1,则响应;IF=0,则不响应。

中断响应阶段

1、获取中断类型码;2、CPU进入自动处理阶段:1)关中断:CPU清IF位;2)断点保护:自动将标志寄存器FLAG和与断点地址CS和IP压入堆栈;3)形成中断入口地址:系统通过中断类型码获取中断向量,即获得中断服务程序的入口地址,从而进入中断服务程序。可得出结论:8086响应可屏蔽中断的条件:1、接收到有效的中断请求信号;2、CPU开放中断;3、CPU执行完当前指令。

中断服务阶段:

1、保护现场:用入栈指令把中断服务程序中要用到的寄存器内容压入堆栈,以便返回后CPU能正确运行源程序,断点地址是由硬件自动保护的,不用在中断服务程序中保护。 2、CPU开放中断:以便执行终端服务时能响应高一级中断请求,实现中断嵌套。需要注意的是:用STI指令开放中断时,是在STI指令的后一条指令执行完后,才真正开放中断。中断过程中,可以多次开放和关闭中断,但一般只在程序的关键部分才关闭中断,其他部分则要开放中断以允许中断嵌套。 3、中断服务程序:执行输入/输出或事件处理程序。 4、CPU关中断:为恢复现场作准备。

5、恢复现场:用出栈指令把保护现场时进栈寄存器内容恢复,注意应按先进后出的原则与进栈指令一一对应。出栈后,堆栈指针也应恢复到进入中断处理时的位置。

中断返回:8086CPU必须根据中断结束方式,发中断结束指令,并在最后用一条IRET指令结束中断。当执行到IRET指令时,断点地址自动出栈到IP和CS,并回复标志寄存器到FLAG,返回中断前的程序位置,继续执行。

一、中断服务程序设计步骤: 1、主程序应做的工作

1)CPU关中断,即用CLI置IF=0; 2)设置中断向量;

3)CPU开中断,用STI置IF=1; 4)等待中断。

2、编写中断服务子程序,完成中断服务任务:

1)保护现场,用入栈指令把中断服务程序中要用到的寄存器内容压入堆栈; 2)中断服务程序的编写,与普通子程序类似;

3)在中断子程序结束前,恢复现场,用出栈指令将堆栈中保护的寄存器内容弹出到原寄存器;

4)用IRET中断返回指令返回主程序被中断处。 二、中断向量表的装入与修改 三、软件中断服务程序设计

8259A的功能模块: 1、8位中断请求寄存器 2、8位中断服务寄存器 3、优先权比较器

4、8位中断屏蔽寄存器 5、控制逻辑

6、读/写控制逻辑

7、8位数据总线缓冲器 8、级联缓冲/比较器

8253:定时时间=时钟脉冲Tc x 预置的计数初值n

一、中断服务程序设计步骤: 1、主程序应做的工作

1)CPU关中断,即用CLI置IF=0; 2)设置中断向量;

3)CPU开中断,用STI置IF=1; 4)等待中断。

2、编写中断服务子程序,完成中断服务任务:

1)保护现场,用入栈指令把中断服务程序中要用到的寄存器内容压入堆栈; 2)中断服务程序的编写,与普通子程序类似;

3)在中断子程序结束前,恢复现场,用出栈指令将堆栈中保护的寄存器内容弹出到原寄存器;

4)用IRET中断返回指令返回主程序被中断处。 二、中断向量表的装入与修改 三、软件中断服务程序设计

8259A的功能模块: 1、8位中断请求寄存器 2、8位中断服务寄存器 3、优先权比较器

4、8位中断屏蔽寄存器 5、控制逻辑

6、读/写控制逻辑

7、8位数据总线缓冲器 8、级联缓冲/比较器

8253:定时时间=时钟脉冲Tc x 预置的计数初值n

本文来源:https://www.bwwdw.com/article/x5y.html

Top