已阅读5页,还剩142页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章80868088微处理器及其系统,以Intel80868088、Z8000和MC68000为代表的16位微处理器是第3代产品,以它们为核心部件组成的微机系统,其性能已达到中、高档小型计算机的水平。20多年来,Intel系列CPU一直占着主导地位。尽管8086/8088后续的80286、80386、80486以及Pentium系列CPU结构与功能已经发生很大变化,但从基本概念与结构以及指令格式上来讲,它们仍然是经典的8086/8088CPU的延续与提升。并且,其他系列流行的CPU(如AMD公司的6X86MX/M等)也与80 x86CPU兼容。,3.18086/8088微处理器,3.28086/8088系统的最小/最大工作方式,3.38086/8088的存储器,3.48086/8088指令系统,3.180868088微处理器,8086是Intel系列的16位微处理器,是iAPX8688系列微机的基础。它采用高速运算性能的HMOS工艺制造,芯片上集成有2.9万个晶体管,用单一的+5伏电源和40条引脚的双列直插式封装(DIP);时钟频率为5MHz10MHz,最快的指令执行时间为0.4us。(SOIC,LQFP,QFP等)8086有16根数据线和20根地址线,可以处理8位或16位数据,寻址1MB的存储单元和64KB的IO端口。它的主机设计较之8位机的性能大约提高了10倍。在推出8086之后不久,Intel公司还推出了准16位微处理器8088。8088的内部寄存器、运算器以及内部数据总线都是按16位设计的,但外部数据总线只有8条。这样设计的目的主要是为了与Intel原有的8位外围接口芯片直接兼容。在本节中,我们对8088也将加以说明。,一、80868088CPU的内部结构从功能上讲,8086可分为两个部分,即总线接口单元BIU(BusInterfaceUnit)和执行单元EU(ExecutionUnit)。,(一)总线接口单元BIU总线接口单元BIU的功能是负责完成CPU与存储器或IO设备之间的数据传送。其具体任务是:BIU要从内存取指令送到指令队列缓冲器;CPU执行指令时,总线接口单元要配合执行单元从指定的内存单元或者外设端口中取数据,将数据传送给执行单元,或者把执行单元的操作结果传送到指定的内存单元或外设端口中。BIU内有4个16位段地址寄存器CS(代码段寄存器)、DS(数据段寄存器)、SS(堆栈段寄存器)和ES(附加段寄存器),16位指令指针IP,6字节指令队列缓冲器,20位地址加法器和总线控制电路。,1.指令队列缓冲器:8086的指令队列为6个字节,而8088的指令队列为4个字节。在执行指令的同时,从内存中取下面1条或几条指令,取来的指令依次放在指令队列中。“先进先出”的原则:(1)取指时当指令队列缓冲器中存满1条指令后,EU执行。(2)指令队列缓冲器中只要空出2个(对8086)或空出1个(对8088)指令字节时,BIU自动执行取指操作,直到填满。,(3)在EU执行指令的过程中,指令需要对存储器或IO设备存取数据时,BIU将在执行完现行取指令存储器周期后的下一个存储器周期,对指定的内存单元或IO设备进行存取操作,交换的数据经BIU由EU进行处理。(4)当EU执行完转移、调用和返回指令时,则要清除指令队列缓冲器,并要求BIU从新的地址重新开始取指令,新取的第1条指令将直接经指令队列送到EU去执行,随后取来的指令将填入指令队列缓冲器。,2.地址加法器和段寄存器:8086有20根地址线,内部寄存器有16位,采用了16位的段寄存器与16位的偏移地址即“段加偏移”的技术。利用各段寄存器分别来存放确定各段的起始地址的16位段地址信息,而由IP提供或由EU按寻址方式计算出寻址单元的16位偏移地址(又称为逻辑地址或简称为偏移量),然后,将它与左移4位后的段寄存器的内容同时送到地址加法器进行相加,最后形成一个20位的实际地址(又称为物理地址),以对存储单元寻址。,3.16位指令指针IP(InstructionPointer)其功能与8位CPU中的PC类似。正常运行时,IP中含有BIU要取的下1条指令(字节)的偏移地址。IP在程序运行中能自动加1修正,使之指向要执行的下1条指令(字节)。有些指令能使IP值改变或使IP值压进堆栈,或由堆栈弹出恢复原值。,(二)执行单元EU执行单元EU并不与系统的总线控制电路直接相连,这使得它能与总线接口单元之间保持既相互联系又相互独立的关系。EU的功能只是负责执行指令;执行的指令从BIU的指令队列缓冲器中取得,执行指令的结果或执行指令所需要的数据,都由EU向BIU发出请求,再由BIU经总线控制电路对存储器或外设存取。EU由下列部分组成。,1.16位算术逻辑单元(ALU):它可以用于进行算术、逻辑运算,也可以按指令的寻址方式计算出寻址单元的16位偏移量。2.16位标志寄存器F:它用来反映CPU运算的状态特征或存放控制标志。3.数据暂存寄存器:它协助ALU完成运算,暂存参加运算的数据。4.通用寄存器组:它包括4个16位数据寄存器AX、BX、CX、DX和4个16位指针与变址寄存器SP、BP与SI、DI。,5.EU控制电路:它是控制、定时与状态逻辑电路,接收从BIU中指令队列取来的指令,经过指令译码形成各种定时控制信号,对EU的各个部件实现特定的定时操作。EU中所有的寄存器和数据通道(除队列总线为8位外)都是16位的宽度,可实现数据的快速传送。8088CPU内部结构与8086的基本相似,只是8088BIU中指令队列长度为4个字节;8088BIU通过总线控制电路与外部交换数据的总线宽度是8位,总线控制电路与专用寄存器组之间的数据总线宽度也是8位。,80868088的内部寄存器编程结构共有13个16位寄存器和1个只用了9位的标志寄存器。,二、80868088的寄存器结构,(一)通用寄存器1.数据寄存器:执行单元EU中有4个16位数据寄存器AX、BX、CX和DX.每个数据寄存器分为高字节H和低字节L,它们均可作为8位数据寄存器独立寻址,独立使用。数据寄存器是用在算术运算或逻辑运算指令中,用来进行算术逻辑运算。在有些指令中,它们则有特定的用途:如AX作累加器;BX作基址寄存器,在查表指令XLAT中存放表的起始地址;CX作计数寄存器,在使用带有重复前缀(如REP)的数据串操作指令中用来存放数据串元素的个数;DX作数据寄存器,在字的除法运算指令DIV中存放余数(高16位)。这些寄存器在指令中的特定功能是被系统隐含使用的。,2.指针寄存器SP、BP和变址寄存器SI、DI:指针寄存器是指堆栈指针寄存器SP和堆栈基址指针寄存器BP,简称为P组。变址寄存器是指源变址寄存器SI和目的变址寄存器DI,简称为I组。它们都是16位寄存器,一般用来存放偏移地址。指针寄存器SP和BP都用来指示存取位于当前堆栈段中的数据所在的地址,但SP和BP在使用上有区别。入栈(PUSH)和出栈(POP)指令是由SP给出栈顶的偏移地址,故称为堆栈指针寄存器。而BP则是存放位于堆栈段中的一个数据区基地址的偏移地址,故称为堆栈基址指针寄存器。显然,由SP所指定的堆栈存储区的栈顶和由BP所指定的堆栈段中某一块数据区的首地址是两个不同的意思,不可混淆。,(二)段寄存器80868088CPU有20条地址线,具有寻址1MB存储空间。80868088指令中给出的地址码仅有16位,指针寄存器和变址寄存器也只有16位长,不能直接寻址1MB大小的内存空间。,在80868088CPU内部设计了一组16位的段寄存器,用这些段寄存器的内容作为段地址,再由段寄存器左移4位形成20位的段起始地址,被称为段基地址或段基址;这样,80868088就有可能寻址1MB存储空间并将其分成为若干个逻辑段,使每个逻辑段的长度为64KB(它由16位的偏移地址限定)。80868088CPU的BIU中有4个16位段寄存器,80868088的指令可以直接访问这4个段寄存器.,(三)标志寄存器80868088的16位标志寄存器F只用了其中的9位作标志位,即6个状态标志位,3个控制标志位。CF(CARRYFLAG)进位标志:当加/减运算使最高位产生进位或借位时,置“1”CF,否则置“0”。另外,循环指令也会影响它。PF(PARITYFLAG)奇偶标志:当指令执行结果低八位有偶数个1,置“1”PF,否则置“0”。,AF(AuxiliaryCarryFlag)辅助进位标志:标志一般用在BCD码运算中作为是否需要对AL寄存器进行十进制调整的依据。ZF(ZeroFlag)零标志:零标志表示一个算术或逻辑操作的结果是否为零。若当前的运算结果为零,ZF为1;否则为0SF(SignFlag)符号标志:符号标志保持算术或逻辑运算指令执行后结果的算术符号。它和运算结果的最高位相同。,OF(OverflowFlag)溢出标志:溢出标志用于判断在有符号数进行加法或减法时是否可能出现溢出。溢出将指示运算结果已超出机器能够表示的数值范围。控制标志有3个,用来控制CPU的操作,由程序设置或清除。DF(DirectionFlag)方向标志:它用来控制数据串操作指令的步进方向。若用STD指令将DF置1,则数据串操作过程中地址会自动递减;若用CLD指令将DF清0,则数据串操作过程中地址会自动递增。,IF(InterruptEnableFlag)中断允许标志:控制可屏蔽中断的标志。若用STI指令将IF置1,则表示允许8086/8088CPU接受外部从其INTR(18)引脚上发来的可屏蔽中断请求信号;若用CLI指令将IF清0,则禁止CPU接受外来的可屏蔽中断请求信号。IF的状态不影响非屏蔽中断NMI(17)请求,也不影响CPU响应内部的中断请求。TF(TrapFlag)跟踪(陷阱)标志:若将TF标志置为1,则80868088CPU处于单步工作方式;否则,将正常执行程序。在高型号微处理器中,跟踪(陷阱)标志能够激活芯片上的调试特性(调试程序,以便找到错误或故障),当TF标志为1时,则微处理器将根据调试寄存器和控制寄存器的指示中断程序流。,三、总线周期的概念对任何一个微处理器来说,为了从存储器中取得指令或者与之传送数据,都需要它的总线接口单元执行一个总线周期。同时,以后我们会知道,在微机系统中,当选择一个存储器或I/O设备与微处理器接口之前,也必须了解系统总线的所谓时序,而这些时序也是以总线周期为基准来描述的。因此,在这里有必要介绍一下有关总线周期的概念。通常,包括80868088CPU在内,一个最基本的总线周期由4个时钟周期组成,时钟周期是CPU的基本时间计量单位,它由CPU的主频决定。在一个最基本的总线周期中,习惯上将4个时钟周期分别称为4个状态,即T、T、T与T这4个状态。,下面以80868088CPU为例,简要说明CPU在4个状态中的基本作用。在T状态,CPU往多路复用总线上发送地址信息,以选中所要寻址的存储单元或外设端口的地址。在T状态,CPU从总线上撤消地址,并使总线的低16位浮置成高阻状态,为传送数据做准备。总线的高4位(AA)用来输出本总线周期状态信息。这些状态信息用来表示CPU是否允许中断、当前正在使用什么段寄存器等。在T状态,多路总线的高4位继续提供状态信息,而其低16位(对8088CPU则为低8位)上将出现由CPU写出的数据或者CPU从存储器或端口读入的数据。,在有些情况下,由于外设或存储器的速度较慢,不能及时地配合CPU传送数据。这时,外设或存储器就会通过“READY”的信号线在T3状态启动之前向CPU发一个“数据未准备好”信号,表示它们还来不及同CPU之间传送数据,于是,CPU会在T3之后自动插入1个或多个附加的时钟周期Tw,这个Tw就叫等待状态,它表示此时CPU在总线上的信息情况和T3状态时的信息情况一样。只有在指定的存储器或外设已经完成数据传送时,它们又通过“READY”的信号线向CPU发出一个“准备好”信号,当CPU接收到这一信号后,才会自动脱离Tw状态而进入T4状态。在T状态,总线周期结束。,只有当CPU和存储器或I/0接口之间传送数据时,或者它正在填充指令队列缓冲器时,CPU才执行总线周期。如果CPU在执行一个总线周期之后,并不立即执行下一个总线周期,那么,系统总线就会处于空闲状态,此时,CPU将执行空闲周期。在空闲周期中,可以包含1个或多个时钟周期。在此期间,CPU在总线的高4位上仍将驱动前一个总线周期的状态信息,而且,如果前一个总线周期为写周期,则CPU会在总线的低16位上继续驱动数据信息;如果前一个总线周期为读周期,则在空闲周期中,总线低16位会处于高阻状态。,三8086/8088的引脚信号和功能,(一)地址数据总线AD15AD0:16-2,39这是分时复用的存储器或端口的地址和数据总线。传送地址时为单向的三态输出,而传送数据时可双向三态输入输出。正是利用分时复用的方法才能使80868088用40条引脚实现20位地址、16位数据及众多的控制信号和状态信号的传输。不过在8088中,由于只能传输8位数据,所以,只有AD7AD08条地址数据线,A15A8只用来输出地址。作为复用引脚,在总线周期的T1状态用来输出要寻址的存储器或IO端口地址;在T2状态浮置成高阻状态,为传输数据作准备;在T3状态,用于传输数据;T4状态结束总线周期.当CPU响应中断以及系统总线“保持响应”时,复用线都被浮置为高阻状态。,(二)地址状态总线A19S6A16S3:35-38地址状态总线为输出、三态总线,采用分时输出,即T1状态输出地址的最高4位,T2T4状态输出状态信息。当访问存储器时,T1状态时输出的A19A16送到锁存器(8282)锁存,与AD15AD0组成20位的地址信号;而访问IO端口时,不使用这4条引线,A19A16=0。状态信息中的S6为0用来指示80868088当前与总线相连,所以,在T2T4状态,S6总等于0,以表示80868088当前连在总线上。S5表明中断允许标志位IF的当前设置。S4和S3用来指示当前正在使用哪个段寄存器,如表上表所示。,(三)控制总线1.(34)高8位数据总线允许状态复用引脚,三态、输出.BHE在总线周期的T1状态时输出,S7在T2T4时输出。在8086中,当BHES7引脚上输出BHE信号时,表示总线高8位AD15AD8上的数据有效。在8088中,第34引脚不是BHES7,而是被赋予另外的信号:在最小方式时,它为SS0;在最大方式时,它恒为高电平.S7在8086中未被赋予定义。,2.(32)读控制信号,三态、输出。当RD=0时,表示CPU将要执行一个对存储器或IO端口的读操作。对内存单元还是对IO端口读取数据,取决于MIO(8086)或MIO(8088)信号。在一个读操作的总线周期中,RD信号在T2、T3和Tw状态均为低电平,以保证CPU读有效。在系统总线“保持响应”期间,RD被浮空。,3.(22)“准备好”信号线,输入。当READY=1时,表示所寻址的内存或IO设备已准备就绪,马上就可进行一次数据传输。CPU在每个总线周期的T3状态开始对READY信号采样。到READY=0,表示存储器或IO设备尚未准备就绪,则CPU在T3状态之后自动插入一个或几个等待状态Tw,直到READY变为高电平,才进入T4状态,完成数据传送过程,从而结束当前总线周期。,4.(23)等待测试信号,输入。当CPU执行WAIT指令时,它就进入空转的等待状态,并且每隔5个时钟周期对该线的输入进行一次测试;若TEST=1时,则CPU将停止取下条指令而继续处于等待状态,重复执行WAIT指令,直至TEST=0时,等待状态结束,CPU才继续往下执行被暂停的指令。等待期间允许外部中断。,5.(18)可屏蔽中断请求信号,输入,高电平有效。当INTR=1时,表示外设提出了中断请求,80868088在每个指令周期的最后一个T状态去采样此信号。若IF=1,则CPU响应中断,停止执行当前的指令序列,并转去执行中断服务程序。6.(17)非屏蔽中断请求信号,输入,上升沿触发。此请求不受IF状态的影响,也不能用软件屏蔽,只要此信号一出现,CPU就会在现行指令结束后引起中断。7.(21)复位信号,输入,高电平有效。它与8284A(时钟发生/驱动器)的复位输出端相连,80868088要求复位脉冲宽度不得小于4个时钟周期,而初次接通电源时所引起的复位,则要求维持的高电平不能小于50s;复位后,CPU的主程序流程恢复到启动时的循环待命初始状态。,标志寄存器与指令队列缓冲器的原有信息被清除,IP与DS、SS和ES也被清零,而CS被置为FFFFH。当RESET信号变为低电平时,CPU就从FFFF0H开始执行程序。在程序执行时,RESET线保持低电平。,8.(19)系统时钟,输入。通常与8284A时钟发生器的时钟输出端CLK相连,该时钟信号的低高之比常采用21(占空度为13)。,(四)电源线Vcc和地线GND:40,1,20电源线Vcc接入的电压为+5V10%,有两条地线GND,均应接地。(五)其他控制线(2431引脚)这些控制线的功能将根据方式控制线MNMX所处的状态而确定。80868088CPU引脚的主要特点是:数据总线和地址总线的低16位AD15AD0或低8位AD7AD0采用分时复用技术。还有一些引脚也具有两种功能,这由引脚33(MNMX)来控制。当MNMX=1时,80868088工作于最小方式(MN),在此方式下,全部控制信号由CPU本身提供。当MNMX=0时,80868088工作于最大方式(MX)(即2431引脚的功能示于括号内的信号)。这时,系统的控制信号由8288总线控制器提供,而不是由80868088直接提供。,3.28086/8088系统的最小最大工作方式,由80868088CPU构成的微机系统,有最小方式和最大方式两种系统配置。一、最小方式当MNMX接电源电压时,系统工作于最小方式,即单处理器系统方式,它适合于较小规模的应用。8086和8位微处理器系统类似,系统芯片可根据用户需要接入。下图中:8284A为时钟发生驱动器;8282为8位地址锁存器;8282是典型的锁存器芯片,它是8位的;8286为具有三态输出的8位数据总线收发器,用于需要增加驱动能力的系统。,1INTA(24):中断响应信号,输出,两个负脉冲,1个通知外设中断被允许,2个要求外设发中断类型。2ALE(25):地址锁存信号。3DEN(26):数据允许信号。4DT/R(27):数据发收信号,输出。5M/IO(28):存储器/输入输出选择。6WR(29):写信号。7HOLD(31):总线保持请求信号,输入。8HLDA(30):总线保持响应信号,输出。,二、最大方式8086与8088也都可以按最大方式来配置系统。当MNMX线接地,则系统就工作于最大方式了。最大方式系统与最小方式系统的主要区别是外加有8288总线控制器,通过它对CPU发出的控制信号进行变换和组合,以得到对存储器和IO端口的读写信号和对锁存器8282及对总线收发器8286的控制信号,使总线控制功能更加完善。通常,在最大方式系统中,一般包含2个或多个处理器,这样就要解决主处理器和协处理器之间的协调工作问题以及对总线的共享控制问题,为此,要从软件和硬件两个方面去解决。8288总线控制器就是因此需要而加在最大方式系统中的。,最大方式,比较两种工作方式可以知道,在最小方式系统中,控制信号MIO(或MIO)、WR、INTA、ALE、DTR和DEN是直接从CPU的第2429脚送出的;而在最大方式系统中,则由状态信号S2、S1、S0隐含了上面这些信息,使用8288后,系统就可以从S2、S1、S0状态信息的组合中得到与这些控制信号功能相同的信息。,表中,前7种代码组合都对应了某一个总线操作过程,通常称为有源状态,它们处于前一个总线周期的T4状态或本总线周期的T1、T2状态中,S2、S1、S0至少有一个信号为低电平.在总线周期的T3、Tw状态并且READY信号为高电平时,S2、S1、S0都成为高电平,,此时,前一个总线操作过程就要结束,后一个新的总线周期尚未开始,通常称为无源状态。而在总线周期的最后一个状态即T4状态,S2、S1、S0中任何一个或几个信号的改变,都意味着下一个新的总线周期的开始。,3.380868088的存储器,一、存储器组织80868088有20条地址线,可寻址1MB的存储空间。存储器仍按字节组织,每个字节只有惟一的一个地址。若存放的信息是8位的字节,将按顺序存放;若存放的数为1个字时,则将字的低位字节放在低地址中;当存放的是双字形式(这种数一般作为指针),其低位字是被寻址地址的偏移量;高位字是被寻址地址所在的段地址。在80868088程序中,指令仅要求指出对某个字节或字进行访问,而对存储器访问的方式不必说明,无论执行哪种访问,都是由处理器自动识别的。,8086的存储器组织在8086系统中,1MB的空间被分成了两个512KB的存储体,用A0位来区分。偶地址存储体:与系统的低8位数据线连接;奇地址存储体:与系统的高8位数据线连接;奇偶存储体的选择:由信号BHE和A0来决定。,8086与存储器的连线:,存储体与总线的连接空间分配图:,规则字:高位字节在奇数地址存放,低位字节在偶数地址存放,存取过程需要一个总线周期。非规则字:低位字节在奇数地址存放,高位字节在偶数地址存放,存取过程需要两个总线周期。例如:MOVAX,SI对于字节读写:当对偶地址,忽略高位字节,保留低位字节;当对奇地址,忽略低位字节,保留高位字节。例如:MOVAL,SI对于字的读写:当对偶地址,一次读取的字(高位字节和低位字节)均有效;当对奇地址,读取两次,第一次取高位字节为字的低八位,然后地址加一,取第二次的低位字节为字的高八位。,二、存储器的分段80868088CPU的指令指针IP和堆栈指针SP都是16位,故只能直接寻址64KB的地址空间。而8086/8088有20根地址线,它允许寻址1MB的存储空间。如前所述,为了能寻址1MB存储空间,引入了分段的新概念。,1MB存储空间被分为若干逻辑段。每个段的20位起始地址(段基址),是一个能被16整除的数(即最后4位为0),可以通过用软件在段寄存器中装入16位段地址来设置。,内存中各个段所处位置之间的相互关系,即段和段之间可以是连续的,分开的,部分重叠的、或完全重叠的。1个程序所用的具体存储空间可以为1个逻辑段,也可以为多个逻辑段。由于段的基址是由存放于段寄存器CS、DS、SS和ES中的16位段地址左移4位得来的,所以,程序可以从4个段寄存器给出的逻辑段中存取代码和数据。若要对别的段而不是当前可寻址的段中存取信息,程序必须首先改变对应的段寄存器中段地址的内容,将其设置成所要存取的段地址信息。最后需要强调的是,段区的分配工作是由操作系统完成的;但是,系统允许程序员在必要时指定所需占用的内存区。,三、实际地址和逻辑地址实际地址指CPU对存储器进行访问时实际寻址所使用的地址,对80868088来说是用20位二进制数或5位十六进制数表示的地址,又称为物理地址。逻辑地址是指在程序和指令中表示的一种地址,它包括两部分:段地址和偏移地址。对80868088来说,前者是由16位段寄存器直接给出的16位地址;后者是由指令寻址时的寄存器组合与位移量之和,它最终所给出的是一个16位的偏移量,表示所寻址的地址单元距离段起始地址之间的偏移字节的多少,故称为偏移地址(又简称为偏移量或偏移)。段地址和偏移地址都用无符号的16位二进制数或4位十六进制数表示。表3.7,四、堆栈80868088系统中的堆栈是用段定义语句在存储器中定义的一个堆栈段,和其他逻辑段一样,它可在1MB的存储空间中浮动。一个系统具有的堆栈数目不受限制,一个栈的深度最大为64KB。堆栈由堆栈段寄存器SS和堆栈指针SP来寻址。SS中记录的是其16位的段地址,它将确定堆栈段的段基址,而SP的16位偏移地址将指定当前栈顶,即指出从堆栈段的段基址到栈顶的偏移量;栈顶是堆栈操作的惟一出口,它是堆栈地址较小的一端。为了加快堆栈操作的速度,堆栈操作均以字为单位进行操作。高位先入,低位后入。书上例:,五、“段加偏移”寻址机制允许重定位8086/8088CPU引入了分段技术,微处理器在寻址时是利用段基地址加偏移地址的原理,通常,就将这种寻址机制称为“段加偏移”。“段加偏移”寻址机制允许重定位(或再定位)是一种重要的特性。所谓重定位是指一个完整的程序块或数据块可以在存储器所允许的空间内任意浮动并定位到一个新的可寻址的区域。在8086以前的8位微处理器中是没有这种特性的,而从8086引入分段概念之后,由于段寄存器中的段地址可以由程序来重新设置,因而,在偏移地址不变的情况下,就可以将整个存储器段移动到存储器系统内的任何区域而无需改变任何偏移地址。这就是说,“段加偏移”的寻址机制可以实现程序的重定位。,3.480868088指令系统,一、80868088指令系统的特点8086与8088的指令系统由8位的80808085指令系统扩展而来的,同时又能在其后续的80 x86系列的CPU上正确运行。其主要特点是:(1)采用可变长指令,指令格式比较复杂。(2)寻址方式多样灵活,处理数据的能力比较强,可处理字节或字、带符号或无符号的二进制数据以及压缩型/非压缩型的十进制数据。(3)有重复指令和乘、除运算指令。扩充了条件转移、移位循环指令。(4)为加强软件中断功能和支持多处理器系统的工作,增设了有关的指令。,二、80868088的指令格式80868088采用可变长指令,指令长度为16个字节。其指令编码格式有以下几种基本格式。(一)无操作数指令这类指令一般属于控制类指令,指令中只包含1个字节的操作码OP,故又称为单字节指令。WAIT(二)单操作数指令这类指令只有1个操作数(字节或字),也只给出1个操作数地址。该操作数可以在寄存器或在存储器中,也可以是指令中直接给出的立即数。,1.单操作数在寄存器中一类是单字节指令,格式指令位7位3为操作码,位2位0的REG字段(寄存器编码)有8种编码,对应8个16位通用寄存器:000AX,001CX,010DX,011BX,100SP,101BP,110SI,111DI。DECBX(4BH)格式指令的SEG字段(段寄存器编码)有4种编码,对应4个段寄存器:00ES,01CS,10SS,11DS。PUSHCS(0EH),格式的指令中,W字段(1位)用来表示操作数是字节还是字,W=1表示是字,W=0表示是字节;MOD字段(寻址方式编码)在此必须为11,表示操作数在寄存器中;RM字段(寄存器/存储器选择编码)在此对应8位或16位的寄存器:000ALAX,001CLCX,010DLDX,011BLBX,100AHSP,101CHBP,110DHSI,111BHDI。NOTBX格式的指令中,两个字节均为操作码,而单操作数被约定总是固定存放在AX或AL中,它是一种隐含寻址的单操作数指令。AAM,另一类是双字节指令,2.单操作数在存储器中这是一类2字节4字节的指令,有下列3种编码格式:3种格式中,MOD11,表示单操作数是在存储器中,由RM字段和MOD字段的不同取值可确定单操作数在存储器中的有效地址。关于RM和MOD字段编码的定义详见下列双操作数指令。DISP为8位或16位的地址位移量。DECBX;INCBX+0FH;NEGBX+2000H,(三)双操作数指令:2-6字节长双操作数指令常常是有一个操作数在寄存器中,由指令中的REG字段和W字段给定所在的寄存器;而另一个操作数可以在寄存器中,也可以在存储器中,或者是指令中给出的立即数,但不允许两个操作数均在存储器中。两个操作数均在寄存器中。ADDAX,DX两个操作数中有一个在寄存器中,另一个在存储器中。由REG和W字段给定一个操作数所在寄存器;由MOD和RM字段给定另一操作数在存储器中的有效地址,但MOD11。MOVAX,BX两个操作数中有一个在寄存器中,另一个是指令中给出的立即数,有以下两种基本格式。MOVAX,1234H两个操作数中,一个在存储器中,其有效地址由MOD(11)和RM字段给定,另一个操作数是指令中给出的立即数。MOVBX+1234H,5678H,(三)寄存器寻址操作数就放在CPU的寄存器(如AX、BX、CX和DX等)中,而寄存器名在指令中指出。这种寻址的指令长度短,操作数就在CPU内部进行,不需要使用总线周期,所以,执行速度也快。例如INCreg它将指令的寄存器的内容加1。,对16位操作数来说,寄存器可以为8个16位通用寄存器,而对8位操作数来说,寄存器只能为AH、AL、BH、BL、CH、CL、DH、DL。在一条指令中,源操作数或/和目的操作数都可以采用寄存器寻址方式。,三、寻址方式80868088的操作数可位于寄存器、存储器或IO端口中。对位于存储器的操作数可采用多种不同方式进行寻址。80868088不仅包含80808085的寻址方式,而且还有许多扩展。下面对80868088的寻址方式给予简要介绍.(一)固定寻址有些单字节指令其操作是规定CPU对某个固定的寄存器进行的,如加法的ASCII调整指令AAA,规定被调整的数总是位于AL中。AAA(二)立即数寻址操作数就在指令中,当执行指令时,CPU直接从指令队列中取得该立即数,而不必执行总线周期。立即数可以是8位,也可以是16位;并规定只能是整数类型的源操作数。这种寻址主要用来给寄存器赋初值,指令执行速度快。MOVAL,88H,(四)存储器寻址指令系统中采用的复杂的“寻址方式”主要是针对存储器操作数而言。CPU寻找存储器操作数,必须经总线控制逻辑电路进行存取。当执行单元EU需要读/写位于存储器的操作数时,应根据指令的B1和B2字节给出的寻址方式,由EU先计算出操作数地址的偏移量(即有效地址EA),并将它送给总线接口单元BIU,同时请求BIU执行一个总线周期,BIU将某个段寄存器的内容左移4位,加上由EU送来的偏移量形成一个20位的实际地址(即物理地址),然后执行总线周期,读/写指令所需的操作数。8086/8088CPU所寻址的操作数地址的偏移量即有效地址EA,它是一个不带符号的16位地址码,表示操作数所在段的首地址与操作数地址之间的字节距离。所以,它实际上是一个相对地址。EA的值由汇编程序根据指令所采用的寻址方式自动计算得出。计算EA的通式为:,EA=基址值+变址值+位移量,BXBP,SIDI,8016,(1).直接寻址方式直接寻址方式最简单、最直观,其含义是指令中以位移量方式直接给出操作数的有效地址EA,即EA=DISP。这种寻址方式的指令执行速度快,主要用于存取位于存储器中的简单变量。采用直接寻址方式时,MOD和R/M字段必须分别为00和110,由DISP-L和DISP-H直接给出操作数的有效地址。所以,在直接寻址方式时,指令中的位移量即有效地址。例如:MOVAX,1680H;将1680H和1681H两单元的字内容取入AX中,OP,MOD,REG,R/M,DISP-L,DISP-H,00,110,EA,31,24,23,22,21,19,18,16,15,8,7,0,(2).间接寻址方式间接寻址方式是指寄存器间接寻址方式,其操作数一定在存储器中,而存储单元的有效地址EA则由寄存器指出,这些寄存器是基址寄存器BX、基址指针寄存器BP、变址寄存器SI和DI之一或它们的某种组合。具体使用哪个寄存器或哪种组合,由指令中的MOD(11)和R/M字段配合来确定。书写指令时,这些寄存器带有方括号。(1)基址寻址方式基址寻址是指操作数的有效地址由基址寄存器(BX或BP)的内容和指令中给出的地址位移量(0位、8位或16位)之和来确定。有效地址EA的具体计算方法取决于指令中MOD(11)和R/M字段的不同取值。举例:,(2)变址寻址方式变址寻址是指操作数的有效地址由变址寄存器(SI或DI)的内容与指令中给出的地址位移量(0位、8位或16位)之和来确定。有效地址EA的具体计算方法取决于指令中MOD(11)和R/M字段的不同取值。举例:,OP,MOD,REG,R/M,DISP-L,DISP-H,SI/DI,000110,+,EA,变址寻址方式,(3)基址加变址寻址方式(书63页例3.12)基址加变址寻址是指操作数的有效地址EA由基址寄存器(BX或BP)的内容与变址寄存器(SI或DI)的内容以及指令中的地址位移量(0位、8位或16位)三者之和来确定。有效地址EA的具体计算方法取决于指令中MOD(11)和R/M字段的不同取值,见图3.15。注意,由于指令中的位移量也可以看成是一个相对值,因此,有时又把带位移量的寄存器间接寻址叫做寄存器相对间接寻址。,例如:MOVBX+SI+1000H,1234HCS:2000H,DS:3000H,IP:0100H,BX:0200HSI:0300H,C7,83,00,10,34,12,34,12,CS段:,DS段:,20100H:,31500H,(五)其他寻址方式1.串操作指令寻址方式数据串(或称字符串)指令不能使用正常的存储器寻址方式来存取数据串指令中使用的操作数。执行数据串指令时,源串操作数第1个字节或字的有效地址应存放在源变址寄存器SI中(不允许修改),目标串操作数第1个字节或字的有效地址应存放在目标变址寄存器DI中(不允许修改)。在重复串操作时,8086/8088能自动修改SI和DI的内容,以使它们能指向后面的字节或字。因指令中不必给出SI或DI的编码,故串操作指令采用的是隐含寻址方式。,2.I/O端口寻址方式在8086/8088指令系统中,输入/输出指令对I/O端口的寻址可采用直接或间接两种方式。(1)直接端口寻址:I/O端口地址以8位立即数方式在指令中直接给出。例如INAL,n。所寻址的端口号只能在0255范围内。(2)间接端口寻址:这类似于寄存器间接寻址,16位的I/O端口地址在DX寄存器中,即通过DX间接寻址,故可寻址的端口号为065535。例如OUTDX,AL。它是将AL的内容输出到由(DX)指出的端口中去。,3.转移类指令的寻址方式在8086/8088系统中,由于存储器采用分段结构,所以转移类指令有段内转移和段间转移之分。所有的条件转移指令只允许实现段内转移,而且是段内短转移,即只允许转移的地址范围在-128+127字节内,由指令中直接给出8位地址位移量。JZDISP;JNCDISP;,四、8086/8088指令的分类8086/8088的指令按功能可分为6类:数据传送、算术运算、逻辑运算、串操作、程序控制和CPU控制。(一)数据传送类指令数据传送类指令可完成寄存器与寄存器之间、寄存器与存储器之间以及寄存器与I/O端口之间的字节或字传送,它们所具有的共同特点是不影响标志寄存器的内容。这类指令又可分成4种类型。1.通用数据传送指令(1)MOVd,s;ds,即将由源s指定的源操作数送到目标d,其中,s表示源,d表示目标。由s与d可分别指定源操作数与目标操作数。源操作数可以是8/16位寄存器、存储器中的某个字节/字或者是8/16位立即数;目标操作数不允许为立即数,其他同源操作数。且两者不能同时为存储器操作数。,几种不同的表示方法:MOVAX,BX+SI+DISPMOVAX,DISPBXSIMOVAX,BX+DISPSIMOVAX,BX+SIDISPMOVAX,DISPSIBX注意:1、数据传输过程中的数据类型的一致性;例如ADDBX,88H就错了2、段地址必须通过寄存器如AX送到段寄存器如DS。例如MOVAX,DATA-SEGMOVDS,AX不能直接写MOVDS,DATA-SEG;,(2)PUSHs;将源操作数(16位)压入堆栈POPd;将堆栈中当前栈顶两相邻单元的数据字弹出到d这是两条进栈与出栈指令,其中,s和d可以是16位寄存器或存储器两相邻单元,以保证堆栈按字操作。例,使用堆栈指令时应注意:1、8086的堆栈指令时按字进行的,没有字节的操作指令。2、每执行一条入栈指令,SP值减2,高位字节先入栈,地位字节后入栈。3、CS段寄存器的值可以入栈,但不能出栈到CS中。,(3)XCHGd,s该指令功能是将源操作数与目标操作数(字节或字)相互对应交换位置。交换可以在通用寄存器与累加器之间、通用寄存器之间、通用寄存器与存储器之间进行。但不能在两个存储单元之间交换,段寄存器与IP也不能作为一个源或目的操作数。(4)XLAT:查表指令这是一条用于实现字节翻译功能的指令,又称为代码转换指令。具体地说,它可以将AL寄存器中设定的的一个字节数值变换为内存一段连续表格中的另一个相应的代码,以实现编码制的转换。偏移地址在BX中,表格数据在内存储器中。例,dp,g,e,f,d,c,b,a,显示0:01000000显示1:01111001显示2:00100100显示3:00110000显示4:00011001显示9:00010000,例如:CS:2000H,IP:007AH,DS:4000H,BF,30,00,B0,05,D7,2007AH:,40,79,24,30,10,12,MOVBX,0030HMOVAL,5XLAT执行结果:AL:12H,CS段:,DS段:,40030:040031:140032:240033:340034:440035:5,2.目标地址传送指令这是一类专用于8086/8088中传送地址码的指令,可传送存储器的逻辑地址(即存储器操作数的段地址或偏移地址)至指定寄存器中,共包含3条指令:LEA、LDS和LES。(1)LEAd,s这是取有效地址指令,其功能是把用于指定源操作数(它必须是存储器操作数)的16位偏移地址(即有效地址)传送到一个指定的16位通用寄存器中。这条指令常用来建立串操作指令所需要的寄存器指针。例3.21注意和MOV的区别LEABX,SI+100AH(2)LDSd,s例LDSSI,DI+100AH这是取某变量的32位地址指针的指令,其功能是从由指令的源s所指定的存储单元开始,由4个连续存储单元中取出某变量的地址指针(共4个字节),将其前两个字节(即变量的,偏移地址)传送到由指令的目标d所指定的某16位通用寄存器,后两字节(即变量的段地址)传送到DS段寄存器中。例3.23(3)LESd,s例LESDI,BX这条指令与LDSd,s指令的操作基本相同,其区别仅在于将把由源所指定的某变量的地址指针中后2个字节(段地址)传送到ES段寄存器,而不是DS段寄存器。上述3条指令都是装入地址,但使用时要准确理解它们的不同含义。LEA指令是将16位有效地址装入任何一个16位通用寄存器;而LDS和LES是将32位地址指针装入任何一个16位通用寄存器及DS或ES段寄存器。,3.标志位传送指令这类指令用于传送标志位,共有4条。(1)LAHF指令功能:将标志寄存器F的低字节(共包含5个状态标志位)传送到AH寄存器中。(2)SAHF指令功能:将AH寄存器内容传送到标志寄存器F的低字节。(3)PUSHF指令功能:将16位标志寄存器F内容入栈保护。其操作过程与前述的PUSH指令类似。(4)POPF指令功能:将当前栈顶和次栈顶中的数据字弹出送回到标志寄存器F中。,例如:改变单步控制位PUSHFPOPAXORAX,0100H;PUSHAXPOPF,4.I/O数据传送指令(1)IN累加器,端口号端口号可以用8位立即数直接给出;也可以将端口号事先安排在DX寄存器中,间接寻址16位长端口号(可寻址的端口号为065535)。IN指令是将指定端口中的内容输入到累加器AL/AX中。其指令如下:INAL,PORT;AL(端口PORT)INAX,PORT;AX(端口PORT)INAL,DX;AL(端口(DX)INAX,DX;AX(端口(DX),(2)OUT端口号,累加器与IN指令相同,端口号可以由8位立即数给出,也可由DX寄存器间接给出。OUT指令是将累加器AL/AX中的内容输出到指定的端口。OUTPORT,AL;端口PORTALOUTPORT,AX;端口PORTAXOUTDX,AL;端口(DX)ALOUTDX,AX;端口(DX)AX注意:I/O指令只能用累加器作为执行I/O数据传送的机构,而不能用其他寄存器代替。另,当用直接I/O指令时,寻址范围仅为0255,这适用于较小规模的微机系统;当需要寻址大于255的端口地址时,则必须用间接寻址的I/O指令。例如,在IBMPC/XT微机系统中,既用了0255范围的端口地址,也用了25565535范围的端口地址。,(二)算术运算类指令算术运算类指令能对无符号或有符号的8/16位二进制数以及无符号的压缩型/非压缩型(又称为装配型拆开型或组合型未组合型)十进制数进行运算,有加、减、乘、除以及十进制调整5类指令。1.加法指令(1)ADDd,s;dd+s指令功能:将源操作数与目标操作数相加,结果保留在目标中。并根据结果置标志位。源操作数可以是8/16位通用寄存器、存储器操作数或立即数;目标操作数不允许是立即数,其他同源操作数。且不允许两者同时为存储器操作数。例3.27:ADDWORDPTRBX+106BH,1234H,(2)ADCd,s;dd+s+CF带进位加法(ADC)指令的操作过程与ADD指令基本相同,惟一的不同是进位标志位CF的原状态也将一起参与加法运算,待运算结束,CF将重新根据结果置成新的状态。例3.32:多位数加法(3)INCd;dd+1指令功能:将目标操作数当作无符号数,完成加1操作后,结果仍保留在目标中。目标操作数可以是8/16位通用寄存器或存储器操作数,但不允许是立即数。不对CF产生影响。例3.33,2.减法指令(1)SUBd,s;dd-s指令功能:将目标操作数减去源操作数,其结果送回目标,并根据运算结果置标志位。操作数可以是8/16位通用寄存器、存储器操作数或立即数;目标操作数只允许是通用寄存器或存储器操作数。并且,不允许两个操作数同时为存储器操作数,也不允许做段寄存器的减法。(2)SBBd,s;dd-s-CF本指令与SUB指令的功能、执行过程基本相同,唯一不同的是完成减法运算时还要再减去进位标志CF的原状态。运算结束时,CF将被置成新状态。例3.36,(3)DECd;dd-1减1指令功能:将目标操作数的内容减1后送回目标。目标操作数可以是8/16位通用寄存器和存储器操作数,但不允许是立即数。(4)NEGd;dd+1NEG是一条求补码的指令,简称求补指令。指令功能:将目标操作数取补后送回目标。目标操作数可以是8/16位通用寄存器或存储器操作数。NEG指令是把目标操作数当成一个带符号数,如果原操作数是正数,则NEG指令执行后将其变成绝对值相等的负数(用补码表示);如果原操作数是负数(用补码表示),则NEG指令执行后将其变成绝对值相等
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年农产品质量检测合作协议(权威认证)
- 2025年民宿智能窗帘合同(2025年标准)
- 2025年贵州省铜仁地区德江县保安员招聘考试题库附答案解析
- 2025年物联网行业物联网应用创新研究报告及未来发展趋势
- 2025年基础设施智慧化改造项目可行性研究报告及总结分析
- 2025年老年人智能健康监测系统项目可行性研究报告及总结分析
- 2025年安庆市宜秀区保安员招聘考试题库附答案解析完整版
- 2025年金融科技跨境支付数字货币结算平台实施方案
- 2025年未来交通(超高速列车)项目可行性研究报告及总结分析
- 2025年新兴社交媒体应用可行性研究报告及总结分析
- 江苏开放大学2024年春《领导科学与艺术 050013》实践性环节考核作业占形考成绩的30%参考答案
- 中国科学技术大学2011年有机化学(含部分答案)考研真题
- 钨酸钠复合添加剂深镀粗化电解铜箔表面处理工艺研究
- GB/T 5008.2-2023起动用铅酸蓄电池第2部分:产品品种规格和端子尺寸、标记
- 外国影视音乐拓展 久石让的动漫音乐 课件-2023-2024学年高中音乐人音版(2019) 必修 音乐鉴赏
- 宝马X5汽车说明书
- 弥漫大B细胞淋巴瘤护理查房
- 内部融资的概念
- 护士执业注册健康体检表
- 超星尔雅学习通《逻辑学导论(中山大学)》章节测试含答案
- 商务英语常用单词
评论
0/150
提交评论