丰富的线上&线下活动,深入探索云世界
做任务,得社区积分和周边
最真实的开发者用云体验
让每位学生受益于普惠算力
让创作激发创新
资深技术专家手把手带教
遇见技术追梦人
技术交流,直击现场
海量开发者使用工具、手册,免费下载
极速、全面、稳定、安全的开源镜像
开发手册、白皮书、案例集等实战精华
为开发者定制的Chrome浏览器插件
8086CPU是Intel系列的16位微处理器,有40个引脚。它的外部数据总线为16位,地址线为20根。因为可用20位地址,所以可寻址的地址空间达1MB。(代表了外围存储器的寻址能力)
8086CPU内部采用了并行流水线结构,可以提高CPU的利用率和处理速度。8086CPU被设计为支持多处理器系统(CISC)
控制器用来控制程序和数据的输入/输出,以及各部件之间的协调运行,运算器用来进行算术运算和逻辑运算,并保存中间运算结果,寄存器组则用来临时存放信息,其信息或为要处理的数据,或为内存中获取某数据的地址。
Intel8086的内部结构框图:必考
Q1:每部分都有哪些标志性的东西?eg:8086中无FPU,只有ALU,只有cache思想而并没有真正的cache。
总线接口部件BIU
BIU是CPU与外部存储器及输入输出的接口,负责数据交换。BIU由下列各部分组成:
执行部件EU:负责指令的执行
BIU和EU的动作管理
通用寄存器组
数据寄存器数据寄存器包括AX、BX、CX、DX等4个16位寄存器,主要用来保存算术、逻辑运算的操作数、中间结果和地址。它们既可以作为16位寄存器使用,也可以将每个寄存器高字节和低字节分开作为两个独立的8位寄存器使用。而8位寄存器(AL、BL、CL、DL、AH、BH、CH、DH)只能用于存放数据。
地址指针和变址寄存器
隐含寻址
8086CPU中通用寄存器的特殊用途和隐含性质
8086物理地址的形成
段寄存器组
控制寄存器
控制标志控制标志是用来控制CPU的工作方式或工作状态的标志。用户可以使用指令设置或清除。
1)IF(InterruptFlag)——中断允许标志。它是控制可屏蔽中断的标志,如IF=1时,允许CPU响应可屏蔽中断;当IF=0时,即使外设有中断申请,CPU也不响应,即禁止中断。2)DF(DirectionFlag)——方向标志。该标志用来控制串操作指令中地址指针的变化方向。在串操作指令中,若DF=0,地址指针为自动增量,即由低地址向高地址进行串操作;若DF=1,地址指针自动减量,即由高地址向低地址进行串操作。3)TF(TrapFlag)——单步标志。TF=1时,CPU为单步方式,即每执行完一条指令就自动产生一个内部中断,使用户可逐条跟踪程序进行调试。若TF=0时,CPU正常执行程序。
时钟及时钟发生器
8086所需的系统时钟信号(主频),可采用石英晶体或TTL脉冲发生器作振荡源。根据不同的振荡源,8284A有两种不同的连接方法:一种是用脉冲发生器作振荡源,另一种方法是用晶体振荡器作为振荡源。
8086CPU的工作模式
8086CPU总线操作与时序
8086CPU的操作可分为内操作与外操作两种,内操作是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。
Tw状态也叫等待状态或等待周期,是CPU在读写存储器或与外设交换信息时,为了与存储器或外设的速度匹配,在T3状态之后插入的1个或多个等待周期。Tw状态的插入是通过系统中的等待信号产生电路产生一个WAIT信号,经时钟发生器8284同步后传递给CPU的READY线来实现的,此时,总线上的状态一直不变,用于数据传送,当CPU接到有效的READY信号后,数据传送结束,进入T4状态。T4状态后,就要进入下一个总线周期的T1状态,否则,就进入空闲状态,称为Ti状态。
总结:总线内部等待是Tw,两个总线周期之间是Ti。
8086总线请求与响应
8086最小模式下的总线控制信号由CPU直接产生,用于总线控制的信号是HOLD(总线请求信号,输入)、HLDA(总线响应信号,输出)。当系统中其他部件,如DMA控制器,需要占用总线时,向CPU发出总线请求信号HOLD。CPU收到有效的HOLD信号后,如果允许让出总线,就在当前总线周期完成时,发出HLDA信号,同时使地址/数据总线和控制总线处于高阻态,表示让出总线,在下一个时钟周期,总线请求部件收到HLDA信号,获得总线控制权。在这期间,HOLD和HLDA都保持高电平,直到总线请求部件完成对总线的占用后,使HOLD变为低电平,撤消总线请求,CPU收到后,HLDA信号才变为低电平,CPU恢复对总线的控制。
存储器:
存储器是计算机实现记忆功能的核心部件,它用于存放待加工的原始数据和中间计算结果以及系统或用户程序等。计算机的存储器分为两类:
1、内部存储器用于存储当前与CPU频繁交换的信息,其工作速度快,但容量较小;
2、外部存储器用于存储CPU暂不处理的信息,其容量很大,故称为海量存储器。外存要配置专门的接口和驱动设备才能实现访问,存取速度也较内存慢得多。当其信息需要处理时,要先调入内存,再由CPU处理。
主要介绍内部存储器:
内部存储器,也称为内存,是主存储器,位于计算机主机的内部,用来存放系统软件和当前正在使用的或者经常使用的程序和数据,内存的容量大小受到地址总线位数的限制,例如8086CPU有20条地址总线,可寻址空间为1MB。
存储器地址的分段:
任何一个存储单元的实际地址,都是由段地址及段内偏移地址两部分组成的。存储单元可以在一个段中定义,也可以定义在两个段的逻辑段中,关键是看段的首地址是如何指定的。IBMPC机对段的首地址有限制,规定必须从每小段(paragraph)的首地址开始,每16个字节为一小段,所以段起始地址必须能被16整除。
在8086系统中,CPU有16根数据线,而存储器一个基本单元(字节)有8根数据线,因此通常将存储系统分为偶体存储器和奇体存储器与8086相连的方法。
栈的组织
栈段中存储单元的地址由寄存器SS和SP确定。栈寄存器SS存放的是栈的基地址,表明栈所在的逻辑段;栈指针寄存器SP存放的是栈顶的地址,即始终指向最后推入堆栈的数据所作的单元。存储单元的地址由(SS)×16+(SP)形成。根据栈构成方式不同,栈指针SP指向的可以是当前栈顶单元,也可以是栈顶上的一个“空”单元,一般采用SP指向当前栈顶单元,栈的伸展方向既可以从大地址向小地址,也可以从小地址向大地址。8086的栈的伸展方向是从大地址向小地址。做减法
栈具体操作
栈操作以字为单位进行,而栈中的数据必须按规则字存放。(因为偶地址对齐)低字节在偶地址单元,高字节在奇地址单元。把数据推入栈为“压入”;从栈取数据称为“弹出”。“压入”数据的时候,先修改SP的值,即将(SP)-2送SP,然后再与SS形成存储器的物理地址,将数据存入。“弹出”数据的时候,先从当前SS和SP形成的物理地址上取出数据,然后修改SP,即将(SP)+2送SP。栈操作是按“后进先出”的规则进行的。8086CPU设有专用的指令执行“压入”和“弹出”的操作,在这些指令中,SP的修改是自动进行的。
堆栈的注意点
1、先进后出2、PUSHPOP成对出现例如:在某段子程序中需要保护BX、CX、DI的内容PUSHBXPUSHCXPUSHDI……POPDIPOPCXPOPBX
重点:8/16位存储器的设计、译码地址选择、电路连接。
1、芯片地址线的连接
2、芯片片选端的处理
位扩展是指增加存储字长。位扩展可以利用芯片地址并联的方式实现,即将各芯片的数据线分别接到数据总线的各位,而各芯片的地址线、读/写信号线和片选信号线对应地并联在一起。例如:两片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#芯片的片选信号线与A11连接,2#芯片的片选信号线与A11反相之后连接。当A11为低电平时,选择1#芯片读/写;当A11为高电平时,则选择2#芯片读/写。由下图可见,1#芯片的地址范围是000H~7FFH,2#芯片的地址范围是800H~FFFH。地址分配情况见下表所示。
字和位扩展是字扩展和位扩展的组合。例如:四片1K×4bitRAM芯片2114,组成2K×8bit存储器。
①根据系统实际装机存储容量,确定存储器在整个存储空间中的位置。②选择合适存储器芯片,列出地址分配表。③按照地址分配表选用译码器件,画出相应的地址位图,依次确定片选和片内单元的地址线,进而画出片选译码电路。④画出存储器与CPU系统总线的连接图。
例题:为某8位机(地址总线为16位)设计一个32KB容量的存储器。要求采用2732芯片构成8KBEPROM区,地址从0000H开始;采用6264芯片构成24KBRAM区,地址从2000H开始。片选信号采用全译码法。
第一步,确定实现24KBRAM存储体所需要的RAM芯片的数量。因为每片6264提供213×8位的存储容量,所以实现24KB存储容量所需要的RAM芯片数量是所以RAM数量=3(片)第二步,确定实现8KBROM存储体所需要的EPROM芯片数量。由于每片2732提供212×8位的存储容量,所以实现8KB存储容量所需要的EPROM芯片数量是EPROM数量=2(片)第三步,存储器芯片片选择信号的产生及电路设计采用74LS138译码器全译码的方法产生片选信号。
A12~A0作为片内地址线,A15~A13作为3-8译码器74LS138的输入,产生的译码输出000~011作为芯片的片选信号。
典型的总线连接
8086CPU与I/O连接
in/out指令
8086CPU的中断系统
(对外部接口来说是外中断,对内部接口来说是内中断)
8086CPU有一个简单而灵活的中断系统,采用向量型中断结构,可以处理多达256个不同类型的中断请求。CPU的中断源有两类,内部中断和外部中断,外部中断又分为非屏蔽中断NMI和可屏蔽中断INTR。非屏蔽NMI中断(不能屏蔽,强制执行,级别最高)请求信号为上升沿触发,一旦该信号有效,在现行指令执行完后立即中断,执行对应的中断处理程序,不需中断响应周期。而可屏蔽中断通过INTR向CPU发出中断请求信号,如果CPU开放了中断,在执行完当前指令之后就进入中断响应周期,中断响应周期占用两个总线周期。
外部中断(硬件中断)
CPU外部中断请求信号引脚上输入有效的中断请求信号引起的,分为非屏蔽中断NMI和可屏蔽中断INTR1)非屏蔽中断NMI
2)可屏蔽中断INTR
硬件中断和软件中断的区别
可屏蔽中断处理过程
可屏蔽中断处理的过程一般分为几步:中断请求;中断响应;保护现场;转入执行中断服务子程序;恢复现场和中断返回。CPU响应中断要有几个条件:1)外设提出中断申请;2)本中断位未被屏蔽;3)本中断优先级最高;4)CPU允许中断。
响应中断的四个阶段
1、中断请求与响应阶段
2、中断自动处理阶段
3、中断服务阶段
4、中断返回
8086中断系统采用的是向量型中断方式,每个中断源都有一个为它服务的中断服务程序。8086最多能管理256个中断,对应类型号为00H~FFH,称中断类型号或中断向量号,是识别中断源的唯一标志。每一个中断服务程序都有一个确定的入口地址,该地址称为中断向量。把系统中所有的中断类型号及其对应的中断向量按一定的规律存放在一个区域内(1KB)00000H(起始地址)~003FFH,(注意是五位),这个区域叫中断向量表,亦即中断入口地址表。
(注意:1KB区域内,一共1024B,而一个中断类型号4B,因此一共可以放1024/4=256个中断向量)其中高16位(2B),低16位(2B)。
8086系统中,在存储器的00000H~003FFH地址范围建立了一个中断向量表,占用1K字节空间,每个中断向量占用4个存储单元,4个单元中的前2个单元存放的是中断服务程序所在段内的偏移量(IP的内容,16位地址),低位字节存放在低地址,高位字节存放在高地址;后2个单元存放的是中断服务程序所在段的段基地址(CS的内容,16位地址),存放方法与前2个单元相同。CPU响应中断时,从中断向量表中查出中断向量地址,再从该地址中取出内容分别装入IP和CS,从而转去执行相应的中断服务程序。(专用中断类型号0~4共5个、系统备用中断类型号5~31共27个、供用户使用224个)
系统备用中断类型号
专为IBMPC机开发的基本输入输出系统BIOS中断调用占用10H~1AH共11个中断类型号,如INT10H为屏幕显示调用,INT13H为磁盘I/O调用,INT16H为键盘输入调用,INT1AH为时钟调用等,就是双字节指令中断,这些中断为用户提供直接与I/O设备交换信息的一系列子程序。DOS中断占用20H~3FH共32个中断类型号(其中A0~BBH和30H~3FH为DOS保留类型号),如DOS系统功能调用(INT21H)主要用于对磁盘文件的存储管理。
8086中断类型号为40H的中断服务程序入口地址存放在中断向量表的起始地址是:CA、DS:0040HB、ES:0100HC、0000:0100HD、0000:0160H请列出详细解答步骤。8086系统在存储器的00000H~003FFH建立一个中断向量表MOVAX,0(XORAX,AX)MOVDS,AX(MOVES,AX)
中断类型号n设置中断向量
1.利用指令来实现
SEG段基址OFFSET偏移地址
MOVAX,0MOVES,AXMOVBX,N*4;这里N为中断向量号MOVAX,(OFFSETRKDZ);取中断服务程序的偏移地址(先塞IP)MOVES:WORDPTR[BX],AX;注意在这里只能用[BX]MOVAX,SEGRKDZ;取中断服务程序的段基地址MOVES:WORDPTR[BX+2],AXRKDZ::IRET;返回2.利用DOS功能调用来实现
设置中断向量:把由AL中指定中断类型号的中断向量DS:DX,放置在中断向量表中。预置:AL=中断类型号
DS:DX=中断服务程序入口地址AH=25H执行:INT21H取中断向量:预置:AL=中断类型号
AH=35H执行:INT21H返回:ES:BX=中断服务程序入口地址
利用DOS功能调用设置中断向量和取中断向量
;把之前存的先移出来MOVAL,N;先把原来中断向量表中的值取出来放到ES:BX中MOVAH,35HINT21H;然后放置自己的;设置中断向量:PUSHES;存原中断向量PUSHBXMOVAX,SEGRKDZ;设置中断向量段地址在DSMOVDS,AX;RKDZ为中断服务子程序MOVDX,OFFSETRKDZ;设置中断向量偏移地址在DX;调用MOVAL,N;中断类型号nMOVAH,25H;设置中断向量INT21H……;用户编写的主要程序,这里面会调用上面的中断子程序……;等程序快结束了,记得还要恢复原中断向量:;把之前的再移回来POPDX;恢复原中断向量POPDSMOVAL,NMOVAH,25HINT21H中断类型号的获取(看发的视频)
矢量中断中,中断入口地址与中断类型号有关,那么中断类型号如何获取呢?(1)对于除法出错,单步中断,不可屏蔽中断NMI,断点中断和溢出中断,CPU分别自动提供中断类型号0~4。(2)对于用户自己确定的软件中断INTn,类型号由n决定。(3)对外部可屏蔽中断INTR,可用硬件电路(例如,通用并行接口芯片8212)设计产生中断类型号(4)对外部可屏蔽中断INTR,可用可编程中断控制器8259A获得中断类型号。
中断服务子程序
程序开始必须保护中断现场,可以通过一系列PUSH指令将CPU各寄存器的值入栈保护;若允许中断嵌套,则用STI指令来设置开中断,使中断允许标志IF=1;执行中断处理程序;用CLI指令来设置关中断,使中断允许标志IF=0,禁止其他中断请求进入;给中断命令寄存器送中断结束命令EOI,使当前正在处理的中断请求标志位被清除,否则同级中断或低级中断的请求仍会被屏蔽掉;恢复中断时的现场,通过一系列POP指令将CPU各寄存器的值恢复;用中断返回指令IRET返回主程序,此时堆栈中保存的断点值和标志值分别装入IP、CS和flags。
子程序完成过程:
中断嵌套过程
低优先级中断源向CPU发出中断请求,且得到CPU的响应,若此时是低优先级或同级中断源发出的中断请求,CPU均不响应。这种高优先级中断源中断低优先级中断源的服务,使中断服务子程序可以嵌套进行的过程,称为中断嵌套。
中断服务子程序和普通子程序区别(重点)
它们的主要差异有:1、中断服务程序和正在执行的程序之间是相互独立的;普通子程序与CPU正在执行的主程序之间是同一程序的两个部分。2、子程序调用一定是程序员在编写程序时事先安排好的,是可预见的,而中断是由中断源根据自身的需要产生的,是不可预见的。除了软中断(如指令INT引起的中断),通常中断都是随机产生的,而子程序调用是通过调用指令引发的。3、子程序调用是用CALL指令来实现的,调用的入口地址通过程序调用指令指出(即子程序的标号),但中断服务程序的调用,首先是向CPU发出中断请求事件,由一系列的条件决定是否相应中断(INT指令也要理解为发出内部中断信号),中断服务程序的入口地址也是由中断向量号查表指出。
4、中断服务程序是随机发生的,强调中断(有临时终止断开、打断的意思),结束后要返回断点。普通子程序是安排好的没有断点。(排队和插队)5、在主程序中,赋入口参数之前压栈保护。同理,也应在主程序中,处理完出口参数后,出栈恢复现场。而中断子程序的保护现场和恢复现场只能在中断子程序中完成。且在保护和恢复现场时,不能允许高级中断的产生,在恢复现场前须关中断,即关中断和关单步中断。6、处理中断服务程序时,对多个同时发生的中断要进行裁决,而调用子程序时一定没有这种操作。7、子程序的返回指令是RET,而中断服务程序的返回指令是IRET/RETI。8、在通常情况下,子程序是由应用程序开发者编写的,而中断服务程序是由系统软件设计者编写的。
中断服务子程序例子
简单的中断子程序实验
一.实验内容实现子程序和中断服务子程序的设计编写子程序设置40H中断为自定义中断服务子程序编写中断服务子程序实现AX=AX+BX编写主程序调用子程序和中断二.扩展要求保留原中断服务子程序功能三.思考内容中断向量表结构中断服务程序链的实现
8259A内部结构及引脚信号
1、8086CPU具有条地址线,可直接寻址容量的内存空间,在访问I/O端口时,使用条地址线,最多可寻址个I/O端口,其中通过直接寻址方式访问的I/O端口有个。2、某台微型机,其存储器首地址为1000H,末地址为5FFFH,存储容量为KB。A、4B、8C、16D、20
3、微处理器用13条地址线寻址,其最大寻址范围为KBA、1B、2C、4D、8
4、有一存储器芯片,地址线为A0~A12,数据线为D0~D7,则该芯片的存储容量为A、4K×8位B、8K×8位C、16K×8位D、32K×4位
5、8086CPU由哪两部分组成?各部分包含哪些组件?各组件有何主要功能?
6、在8086CPU的寄存器中,哪些可作为8位/16位寄存器使用?哪些寄存器不能由程序员操作使用?
7、在8086CPU的寄存器中,有哪些通用寄存器和专用寄存器?试说明专用寄存器的作用?哪4个寄存器在数据寻址中常用来指示存储器单元的偏移地址,对应的段地址分别是什么?
8、在8086CPU中,物理地址和逻辑地址是指什么?二者之间有何联系?有效地址是如何产生的?
9、8086CPU的工作模式有哪些?其中由8086CPU构成的最小模式系统的典型配置是什么?
10、什么是栈?栈的功能是什么?有什么操作原则?栈指针SP的作用是什么?
11、设双字(DW)12345678H的起始地址C000H:0002H,试说明这个双字在存储器中是如何存放的?
12、请阐述中断服务子程序和普通子程序的区别?
13、可屏蔽中断处理的过程一般步骤是什么,并简述每个阶段的过程?
14、画图并说明什么是时钟周期、CPU周期(机器周期)和指令周期?
15、何谓全译码电路?何谓部分译码电路?
16、某8位机(地址总线为16位)设计一个32KB容量的存储器。要求采用2732芯片(4K×8位)构成8KBEPROM区,地址从0000H开始;采用6264芯片(8K×8位)构成24KBRAM区,地址从2000H开始。片选信号采用全译码法。计算需要的EPROM芯片数量和RAM数量,画出存储器地址分配情况表,并画出存储器扩展电路。
17、什么是I/O接口?什么是I/O端口?I/O接口在系统中能起什么作用?I/O端口与I/O接口又有什么关系?
18、CPU与外设之间交换传送数据的方式有哪几种?各有什么特点?