微型计算机原理及应用03_第1页
微型计算机原理及应用03_第2页
微型计算机原理及应用03_第3页
微型计算机原理及应用03_第4页
微型计算机原理及应用03_第5页
已阅读5页,还剩83页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

微型计算机原理及应用中南大学中国水利水电出版社1第3章8086/8088CPU的体系结构及其指令系统

3.1CPU发展概述

微处理器(microprocessor)是微型计算机的运算及控制部件,也称中央处理单元(CPU)。它本身不构成独立的工作系统,因而它也不能独立地执行程序。通常,微处理器由算术逻辑部件(ALU)、控制部件、寄存器组和片内总线等几部分组成。20世纪70年代后期,超大规模集成电路(VLSI)投人使用,出现了第三代微处理器。Intel公司的8086/8088,Motorola公司的M68000和Zilog公司的Z8000等16位微处理器相继问世,它们的运算速度比8位微处理器快2~5倍,采用HMOS高密度工艺,集成度达到每片29000个晶体管,赶上或超过了20世纪70年代小型机的水平。23.28086/8088CPU的结构

AHALBHBLCHCLDHDLSPBPDISIALU暂存寄存器ALU数据总线(16位)标志寄存器EU控制单元CSDSSSESIP内部通信寄存器123456执行部件(EU)队列总线(8位)队列接口部件(BIU)指令队列总线控制逻辑∑数据总线(16位)地址总线(20位)8086总线图3-18086微处理器结构框图通用寄存器3.2.18086/8088CPU的内部结构框图

33.2.2总线接口部件BIU(BusInterfaceUnit)

BIU具有下列功能:l

地址形成l

取指令l

指令排队l

读/写操作数l

总线控制它由下列各部分组成:l

16位段地址寄存器l

16位指令指针寄存器l

20位物理地址加法器l

6字节指令队列(指令缓存区)总线控制逻辑

4总线接口部件BIU的工作过程如下:(1)代码段段寄存器CS中16位段基地址,与指令指针寄存器IP中16位偏移地址,在地址加法器内形成20位物理地址;(2)20位地址直接送往地址总线,通过总线控制逻辑发出存储器读信号RD,启动存储器,按给定的地址从存储器中取出指令;(3)取出的指令送到指令队列(指令缓存区)中等待执行。BIU的指令队列可存储6字节指令代码,它是先进先出的队列寄存器,允许预取6字节指令代码。一般情况下,指令队列中填满指令;(4)EU可从指令队列中取出指令执行。指令代码装入指令队列输入端后,自动调整指令队列输入端指针。EU从指令队列输出端取指令,且在EU取走一字节的指令代码后,自动调整指令队列输出端指针。当指令队列有2个或2个以上的字节空余时,BIU自动将指令取到指令队列中;

5(5)当指令队列已满,并且执行部件EU未向BIU申请读写存储器操作数,则BIU不执行任何总线周期,处于空闲状态;(6)EU从指令队列中取走指令,经指令译码后,向BIU申请从存储器或端口读写操作数。只要收到EU送来的逻辑地址,BIU将通过地址加法器将现行数据段及送来的逻辑地址组成20位物理地址,在当前取指令总线周期完成后,在读/写总线周期访问存储器或I/O端口完成读/写操作。最后EU执行指令,由BIU将运算结果读出;(7)指令指针寄存器IP由BIU自动修改,指向下一条指令在现行代码段内的偏移地址。当EU执行转移指令时,则BIU清除指令队列,从转移指令的新地址取得指令,立即送给EU执行,然后从后续指令序列中取指令填满队列;(8)总线控制部件发出总线控制信号,实现存储器或端口读写控制。它将8086CPU的内部总线与外部总线相连,是8086CPU与外部打交道不可缺少的路径.63.2.3指令执行部件EU(ExecutionUnit)指令执行部件EU完成指令译码和执行指令的工作。它由以下几个部分组成:l

算术逻辑运算单元ALUl

标志寄存器PSWl

4个通用16位寄存器组l

4个专用16位寄存器l

EU控制器指令执行部件工作过程如下:(1)EU从BIU的指令队列输出端取得指令,进行译码;(2)若执行指令需要访问存储器或端口去取操作数,则EU将操作数的偏移地址通过内部16位数据总线送给BIU,与段地址一起,在BIU的地址加法器中形成20位物理地址,申请访问存储器或端口,取得操作数送给EU,EU根据指令要求向EU内部各部件发出控制命令,完成执行指令的功能;

7(3)算术逻辑运算单元ALU完成各种算术运算及逻辑运算,运算的操作数可从存储器取得,也可从寄存器组取来;(4)16位暂存器暂存参加运算的操作数。运算结果由内部总线送到EU的寄存器组或送到BIU的内部寄存器,由BIU写入存储器或端口;(5)运算后结果的特征改变了标志寄存器PSW的状态,供测试、判断及转移指令使用;(6)EU控制器负责从指令队列中取指令、指令译码及发各种控制命令以完成指令要求的功能。(7)一般情况下,指令顺序执行EU从指令队列中取指令而不是访问存储器取指令,所以取指令与执行指令可并行操作。但遇到转移指令、调用指令和返回指令,要将指令队列中的内容作废,由BIU重新取转移去的新地址中的指令代码EU才能继续执行指令,此时并行操作可能受到影响。但这种情况相对较少发生,因此EU与BIU之间相互配合又相互独立的非同步工作方式提高了CPU的工作效率。

83.38086/8088CPU的寄存器组和存储器

3.3.1寄存器组1.通用寄存器组

AHALBHBLCHCLDHDLSPEPSIDIIPFLAGSCSDSSSES图3-2寄存器组示意图累加器基址寄存器计数寄存器数据寄存器堆栈指针寄存器基址指针寄存器源变址寄存器目的变址寄存器指令指针寄存器标志寄存器代码段寄存器数据段寄存器堆栈段寄存器附加段寄存器数据寄存器地址指针和变址寄存器控制寄存器段寄存器通用寄存器92.指针及变址寄存器包括SP、BP、SI、DI四个16位寄存器。它们可以象数据寄存器一样在运算过程中存放操作数,但它们只能以字(16位)为单位使用。此外,它们更经常的用途是在段内寻址时提供偏移地址。SP(StackPointer)称为堆栈指针寄存器BP(BasePointer)称为基址指针寄存器SI(SourceIndex)源变址寄存器DI(DestinationIndex)目的变址寄存器

3.段寄存器包括CS、DS、SS和ES四个段寄存器。

104.控制寄存器包括IP和PSW两个16位寄存器。IP指令指针寄存器(InstructionPointer),存放代码段中的偏移地址,始终指向下一条指令的首地址,它与CS寄存器联用确定下一条指令的物理地址。

条件码标志:记录程序中运行结果的状态信息。由于这些状态信息往往作为后续条件转移指令的转移控制条件,所以称为条件码。它包括以下6位:l

OF(OverflowFlag)溢出标志。本次运算过程中产生溢出时,OF=1l

SF(SignFlag)符号标志。本次运算结果的最高位为1时,SF=1l

ZF(ZeroFlag)零标志。本次运算结果为0时,ZF=1l

CF(CarryFlas)进位标志。本次运算结果中最高位有进位或借位时,CF=1l

AF(AuxiliarycarryFlag)辅助进位标志。本次运算结果中低4位向高4位有进位或借位时,AF=1PF(ParityFlag)奇偶标志。本次运算结果中有偶数个“1”时,PF=111控制标志位有三个:l

DF(DirectionFlag)方向标志,在串处理指令中控制处理信息的方向。l

IF(InterruptFlag)中断标志,当IF为1时,允许中断,否则关闭中断。l

TF(TraPFlag)陷井标志,用于单步方式操作。控制信息是由系统程序或用户程序根据需要用指令来设置的,状态信息是由中央处理机根据计算的结果自动设置的。

在调试程序DEBUG中提供了测试标志位的手段,它用符号表示标志位的值。

123.3.2

存储器结构1.存储单元的地址和内容(1)计算机存储信息的单位

(2)存储器地址:在存储器里以字节为单位存储信息。为了正确地存放或取得信息,每一个字节单元给以一个存储器地址。(3)存储器的容量的基本单位

(4)地址及内容的表示

(5)机器字的表示

(6)存储器的特性:重复读取:从某个单元取出其内容后,其内容仍然保存不变,可以重复取出存新覆旧:只有存入新的信息后,原来保存的内容就自动丢失了。

132.存储器地址的分段

(1)段与小段:把存储器划分成段(Segment),每个段的大小可达64K,这样段内地址可以用16位表示。可以根据需要来确定段的大小,可以是64K范围内的任意个字节。段的起始地址必须从任一小段(Paragraph)的首地址开始。

小段(Paragraph):从0地址开始,每16个字节为一小段,下面列出了存储器最低地址区的三个小段的地址区间,每行为一小段。

14(2)物理地址及其确定:①物理地址:在1M字节的存储器里,每一个存储单元都有一个唯一的20位地址,称为该存储单元的物理地址。20位物理地址由16位段地址和16位偏移地址组成②段地址是指每一段的起始地址,其低4位一定是0,这样就可以规定段地址只取段起始地址的高16位值。③

偏移地址则是指在段内相对于段起始地址的偏移值。④物理地址的计算方法

⑤段寄存器在IBMPC机中,有四个专门存放段地址的寄存器,称为段寄存器。l

代码段寄存器CS(CodeSegment)l

数据段寄存器DS(Datasegment)l

堆栈段寄存器SS(StackSegment)附加段寄存器ES(ExtraSegment)

15(3)段寄存器的设定与调整:各段在存储器中的分配一般是由操作系统负责的。

各段也可以允许重叠(指每个段区的大小允许根据实际需要来分配,而不一定要占有64K的最大段空间)。注意新段可以在已占用区后面的第一个小段开始。

CSDSSSES…...64KB代码段…64KB堆栈段…64KB数据段…64KB附加段…存储器00000H01230H6C100H80000HBF1C0HFFFFFH0123H8000H6C10HBF1CH图3-8存储器分段实例一CSDSSSES8KB代码2KB数据256B堆栈存储器0200H0400H04800H0200H0400H0480H图3-9存储器分段实例二163.48086/8088CPU的引脚信号及工作模式

3.4.18086/8088CPU的引脚信号和功能

178086/8088各引脚信号的功能如下:(1)AD15~AD0(addressdatabus)地址/数据二用引脚(双向工作)(2)A19/S6~A16/S3(address/status)地址/状态复用引脚(输出)

(3)BHE/S7(bushighenable/status)高8位数据总线允许/状态复用引脚(输出)

(4)NMI(non-maskableinterrupt)非屏蔽中断引脚(输入)

(5)INTR(interruptrequest)可屏蔽中断请求信号引脚(输入)

(6)RD(read)读信号引脚(输出)

(7)CLK(clock)时钟引脚(输人)

(8)RESET(reset)复位信号引脚(输入)

(9)READY(ready)“准备好”信号引脚(输入)

(10)TEST(test)测试信号引脚(输入)

(11)MN/MX(minimum/maximummodecontrol)最小/最大模式控制信号引脚(输入)

(12)GND地和VCC电源引脚

183.4.2

最小工作模式当8086/8088的第33脚MN/MX固定接到+5V时,就处于最小工作模式。下图是8088在最小模式下的典型配置

193.4.3

最大工作模式8086/8088CPU为实现多处理器控制系统(多主控系统)就要增设总线控制器8288和总线仲裁器8289。

201.最大工作模式引脚

2.总线控制器8288

218288由状态译码器、命令信号发生器,控制信号发生器及控制电路4部分组成。由8086/8088CPU来的总线状态信号S2、S1及S0经8288的状态译码器译码后,与输人控制信号AEN,CEN和IOB相配合,便产生总线命令和控制信号。

8288产生的ALE,DT/R及DEN信号与最小模式工作方式时相同,但DEN信号的极性相反。8288产生的总线命令是由8086/8088的总线状态信号S2、S1及S0所决定。

8288发出的总线命令信号具有以下功能:(1)MRDC:相当于最小模式时由8086/8088发出的RD和IO/M两信号的组合,此时IO/M=0。(2)IORC:相当于最小模式时由8086/8088发出的RD和IO/M两信号的组合,此时IO/M=l。(3)MWTC和AMWTC:相当于最小模式时由8086/8088发出的WR和IO/M两信兵组合,此时IO/M=0。但在最大工作模式时增加了一个“超前写存储器信号”AMWC。它比MWTC提前一个时钟周期。22(4)IOWC和AIOWC:相当于最小模式时WR和IO/M两信号的组合,此时IO/M=1。也增加了一个“超前写I/O端口信号AIOWC。它比IOWC提前一个时钟周期。(5)INTA:中断响应信号INTA在最小模式时由CPU直接发出。(6)CEN:当有多片8288协同工作时起片选作用。当命令允许信号CEN为高电平时,允许该8288发出全部控制信号。当CEN为低电平时,禁止该8288发出总线控制信号,同时使DEW和PDEN呈高阻状态。任何时候只有一片8288的CEN信号为高电平(7)AEN:由总线仲裁器8289输人,低电平有效。地址允许信号AEN是支持多总线结构的同步控制信号。(8)MCE/PDEN:是一条双功能的输出控制线。当8288作于系统总线方式时,作主控级联允许信号MCE用,在中断响应周期的T1状态时MCE有效,控制主8259A向从8259A输出级联地址。当8288工作于I/O总线方式时,作外设数据允许信号PDEN用,控制外部设备通过I/O总线传送数据。(9)IOB:8288既可控制系统总线,又可控制I/O总线。当总线方式控制信号IOB=1时,8288只用来控制I/O总线;当IOB=0时,8288工作于系统总线工作方式。

233.4.48088CPU与8086CPU的差异8088CPU的内部数据总线宽度是16位,外部数据总线宽度是8位,所以8088CPU称为准16位微处理器。

243.58086/8088CPU的时序

3.5.18086/8088CPU的各种CLK周期(1)时钟周期(ClockCycle):时钟周期是CLK信号振荡一次所用的时间,是CPU时钟频率的倒数,也称T状态。(2)总线周期(BusCycle):8086CPU中,BIU完成一次访问存储器或I/O端口操作所需要的时间,称作一个总线周期。一个总线周期由几个T状态组成。(3)指令周期(InstructionCycle):执行一条指令所需的时间称为指令周期。不同指令的指令周期的长短是不同的,一个指令周期一般由几个总线周期组成。(4)等待周期(WaitCycle)当CPU与慢速外设进行数据交换,如果要延长总线周期时需要插入状态Tw。(5)空闲周期Ti在两个总线周期之间,如果CPU的某些操作还没有执行完毕时,需要插入空闲时钟周期Ti。

25CLK信号构成的各种周期示意图如下图所示。

263.5.28086/8088CPU最小模式下的总线操作1.读总线周期

27一个最基本的读总线周期包含4个T状态,即T1、T2、T3、T4,在存储器和外设速度较慢时,在T3后可插入1个或几个等待状态TW。T1状态:(1)M/IO信号在T1状态有效,指出CPU是从内存还是从I/O端口读取数据。M/IO为高,从存储器读,M/IO为低,从I/O端口读。M/IO信号的有效电平一直保持到总线周期结束的T4状态。(2)T1状态开始,20位地址信号通过多路复用总线输出,指出要读取的存储器或1们端口的地址。高4位地址从A19/S6~A16/S3地址/状态线送出,低16位从AD15~AD0地址/数据线送出。

(3)ALE引脚上输出一个正脉冲作地址锁存信号。在T1状态结束时,M/IO信号,地址信号均已有效,ALE的下降沿用作锁存器8282的选通信号,使地址锁存,这样在总线周期的其它状态才可分时复用这些引脚传送数据或状态信息。

28T2状态:(4)地址信号消失,A19/S6~A16/S3引脚上输出状态信息S6~S3,指出当前正在使用的段寄存器及中断允许情况。(5)低位地址线AD15~AD0进入高阻状态,为读取数据作准备。(6)RD信号有效,送到所有的存储器和I/O端口,但只选通地址有效的存储单元和I/O端口,使之能读出数据。

(7)这时,被选中的存储单元和I/O端口将CPU所需要的数据送到总线上,供CPU读取。

29T3状态:(8)T3状态一开始,CPU采样READY信号,若此信号为低电平,表示系统中所连接的存储器或外设工作速度较慢,数据没有准备好,要求CPU在T3和T4状态之间再插入一个TW状态。

(9)当READY信号有效时(为高电平),表示存储单元和I/O端口将数据通过数据收发器8286送到数据总线AD15~AD0上,CPU可以读取数据。这时CPU在T3周期结束时(即T3周期的下降沿),读取数据。S4S3指出了当前访问哪个段寄存器,若S4S3=10,表示访问CS段,读取的是指令,CPU将它送入指令队列中等待执行,否则读取的是数据,送入ALU进行运算。

30TW状态:(10)CPU在每个TW状态的前沿对READY信号采样,若为低电平继续插入Tw状态。当在Tw状态采样到READY信号为高电平时,在当前Tw状态执行完,进入T4状态。在最后一个Tw状态,数据肯定已出现在数据总线上,此时Tw状态的动作与T。状态一样。CPU采样数据线AD15~AD0。T4状态:CPU在T3与T4状态的交界处采样数据。然后在T4状态的后半周期,数据从数据总线上撤除,各个控制信号和状态信号线进入无效状态,总线收发器不工作,一个读总线周期结束。

312.写总线周期

328086/8088CPU写总线周期时序与读总线周期时序有许多相同之处。在T1状态,M/IO信号有效,指出CPU将数据写入内存还是I/O端口;CPU给出写入存储单元或I/O端口的20位物理地址;地址锁存信号ALE有效,选存储体信号BHE,A0有效,DT/R变高平,表示本总线周期为写周期。在T2状态,地址撤消,S6~S3状态信号输出;数据从CPU送到数据总线AD15~AD0,WR写信号有效;DEN信号有效,作为数据总线收发器8286的选通信号。在T3状态,CPU采样READY线,若READY信号无效,插入一个到几个Tw状态,直到READY信号有效,存储器或I/O设备从数据总线上取走数据。在T4状态,从数据总线上撤消数据,各控制信号和状态信号线变成无效;DEN信号变成高电平,总线收发器不工作。

333.5.3

最大模式下的总线操作8086/8088CPU工作在最大模式时,增加了总线控制器8288,CPU向8288输出状态信号S2~S0,根据S2~S0的编码,由8288输出总线控制信号,如存储器读/写信号,I/O端口读/写信号及中断信号,因此在时序分析上要同时考虑CPU和总线控制器两者产生的信号。 8086/8088CPU工作在最大模式时,一个总线周期一般同样由T1、T2、T3、T4这4个时钟周期构成,如果外设工作速度比较慢,则可以在T3周期之后插入等待周期TW。 8088CPU与8086CPU的时序上差异主要体现在总线宽度上,8088CPU的外部总线宽度是8位,一次只能用AD7~AD0读写1个字节(8位),8086CPU的外部总线宽度是16位,一次能用AD15~AD0读写1个字(16位),其余的操作都一样。

343.68086/8088的指令系统

3.6.1概述

一、8086/8088指令系统的特点(1)灵活的指令格式

(2)指令的寻址能力和数据存取及运算能力强

(3)具有处理多种类型数据的能力

(4)便于构成多处理机系统

35二、汇编语言的指令格式汇编语言指令的格式为:[标号]指令助忆符[[操作数1][,操作数2]][;注释]其中[]方括号内的内容为可缺省的项。标号:代表该语句的存储器首地址。指令助忆符:可为代表8086操作的115个指令助忆符之一。操作数:一个、两个或没有。有两个操作数时,逗号前面的为目的操作数,逗号后面的为源操作数。以“;”开头后跟的注释是一个字符串。注释的作用是便于阅读、修改和调试程序,可有多行,但每行必须以“;”开头。

36三、符号与标号1.符号符号就是字符串。

2.标号

标号代表某语句的存储器首地址。当某指令(语句)为重复控制指令、条件转移指令或无条件转移指令的目的语句时,就应当使用标号。

四、常量与变量1.常量常量表示固定值,通常分为字面常量和符号常量。

2.变量

变量是存储器中一个数据或多个数据(数据区)的符号表示,变量指针总是指向数据区的第一个数据项,变量名的命名规则与符号的命名规则相同。

373.6.2

寻址方式

一、

操作数的种类和有效地址1.操作数的种类根据操作数的不同来源,将操作数分为这样几类:立即数、寄存器操作数、存储器操作数及隐含的寄存器操作数。(1)立即数指操作数存放在指令代码中,紧跟在操作码之后,和指令的操作码部分一起存放在代码段中,称此操作数为立即数。立即数可以是8位或16位,在指令中立即数只能为源操作数。如:MOV AX,100H指令中源操作数100H就为立即数。

38(2)寄存器操作数指寄存器中的内容或寄存器本身作为操作数,参加指令的运算或存放运算结果。如:ADD AX,BX指令中源操作数和目的操作数均为寄存器操作数,指令的功能为将寄存器AX和BX中的内容相加,和存入AX中。(3)存储器操作数指内存的字节、字单元、双字单元或其中的内容作为操作数参加指令的运算或存放运算结果。如:ADD AX,[BX]指令中源操作数[BX]为存储器操作数,指内存数据段中偏移地址为BX寄存器中内容的字单元中的内容。存储器操作数既可作为源操作数又可作为目的操作数。39(4)隐含的寄存器操作数指令中没有给出操作数,但实际上隐含使用了某些指定的寄存器或段寄存器。如指令DAA为将AL寄存器中的内容进行十进制调整,指令中隐含使用了AL寄存器。又如CLC、STC进借位清零及置位指令隐含对标志寄存器的CF位操作,LDS指令隐含使用了DS段寄存器。

2.有效地址EA寻访存储器操作数所需的偏移地址即为有效地址,简称EA。EA是一个16位的无符号数,代表被寻址的存储器操作数在存储器中的位置距该段起点(首单元)的字节数。40二、寻址方式8086/8088的寻址方式有7种:立即寻址、寄存器寻址、直接寻址、寄存器间接寻址、基址寻址、变址寻址及基变址寻址等。1.立即寻址操作数存放在指令中,紧跟在操作码之后,它作为指令的操作数字段存放在代码段中,这种寻址方式称为立即寻址方式,操作数称为立即数。

2.寄存器寻址操作数为寄存器操作数,在指令中给出了寄存器名。寄存器为8个16位的寄存器与8个8位的寄存器。413.直接寻址在直接寻址方式中,操作数的偏移地址直接包含在指令中,它存放在代码段中指令操作码的后面的操作数字段,而操作数在内存中。

图3-20直接寻址方式示意图段地址EA操作数指令42

4.寄存器间接寻址

在寄存器间接寻址方式中,存储器操作数的偏移地址即有效地址EA,

可直接取自基址寄存器BX或BP或变址寄存器SI或DI,符号表示为:[BX]、[BP]、[SI]、[DI]。如果使用BX、SI、DI寄存器存放偏移地址,则存储器操作数在数据段中;如果使用BP寄存器存放偏移地址,则存储器操作数在堆栈段中。

5.基址寻址基址寻址中存储器操作数的偏移地址为规定的基址寄存器的内容加上指令中给出的位移量。基址寄存器为BX和BP。用BX作为基址寄存器,操作数在数据段中。用BP作为基址寄存器,操作数在堆栈段中。

图3-23基址寻址方式示意图段地址地址操作数基址寄存器位移量寄存器指令存储器段寄存器EA436.变址寻址变址寻址中存储器操作数的偏移地址为规定的变址寄存器的内容加上指令中给出的位移量。变址寄存器为SI和DI。变址寻址中通常操作数在数据段中,即操作数的段地址在DS段寄存器中。

7.基变址寻址

基变址寻址中存储器操作数的偏移地址为规定的一个基址寄存器(BX或BP)和一个变址寄存器(SI或DI)的内容加上指令中给出的位移量。

图3-25基变址寻址方式示意图段地址变址值操作数基址寄存器变址寄存器位移量变址寄存器指令存储器段寄存器EA基址值变址寄存器443.6.38086/8088指令系统中的常用指令8086/8088指令系统可分为五大类:数据传送、算术运算、位操作、控制转移、串操作等。

一、

数据传送类指令数据传送类指令负责把数据、地址或立即数传送到寄存器或存储单元中。所有的数据传送指令在执行时均不影响标志位。

存储器寄存器立即数DS、ES、SSCS、图3-26MOV指令的传送方向示意图451.数据传送指令(MOV指令)指令格式:MOVDOPD,SOPD作用:把一个字节或一个字操作数从源传送到目的地该指令有如下几种形式:MOVREG,REGMOVREG16,SEGMOVREG,MEMMOVREG,IMMMOVMEM,REGMOVMEM,IMMMOVMEM16,SEGMOVSEG,REG16(除CS外)MOVSEG,MEM16(除CS外)

46使用时的注意事项:(1)不允许在两个存储单元之间传送数据(数据串传送指令除外);(2)段寄存器之间不允许传送数据;(3)立即数和CS代码段寄存器不能作为目的操作数;(4)操作数不能出现二义性,即存储器操作数的类型必须明确。(5)两操作数的类型必须匹配(一致)。(6)立即数不能直接送至段寄存器,需要利用通用器(如:AX、BX)中转。

47例3-4指出下面指令的错误所在(1)MOVAL,BX ;两操作数类型不一致(2)MOVAH,2589 ;两操作数类型不一致(3)MOVCS,AX ;CS不能作为目的操作(4)MOV[SI],[BX] ;两操作数不能同为存储器操作数(5)MOVDS,2000H ;立即数不能直接送往段寄存器(6)MOV [BX],1 ;操作数出现二义性(不知是字节还是字)代码段寄存器CS和指令指针IP的值,不能由用户在程序中用MOV指令来改变。

482.地址传送指令地址传送指令主要有LEA、LDS及LES三条。(1)LEA指令指令格式:LEA REG16,MEM作用:

将存储器操作数的偏移地址送入指定的16位寄存器REG16中。

(2)LDS指令指令格式:LDS REG16,MEM作用:

将双字的存储器操作数的前两个存储单元的内容送入指定的16位寄存器REG16中,后两个存储单元的内容送入DS寄存器中。

49(3)LES指令指令格式:LES REG16,MEM作用:

将双字的存储器操作数的前两个存储单元的内容送入指定的16位寄存器REG16中,后两个存储单元的内容送入ES寄存器中。即将地址指针的段地址送ES段寄存器,偏移地址送REG16。

3.交换指令指令格式:XCHGDOPD,SOPD作用:将一个字节或一个字的源操作数与目的操作数进行交换。DOPD和SOPD可为REGH或MEM操作数,但其中必须有一个为寄存器操作数,立即数和段寄存器不能作为XCHG指令的操作数。例如:XCHGAX,BXXCHG[BX],BL504.堆栈操作指令堆栈操作指令主要在PUSH、POP、PUSHF及POPF等4条。(1)PUSH指令指令格式:PUSHSOPD作用:将一个字的源操作数压入栈顶。SOPD可为REG16、MEM16或SEG。执行过程:①SP←SP-1;②(SP)←SOPDH;③SP←SP-1;④(SP)←SOPDL。结果:①(SP-1,SP-2)←SOPD;②

SP←SP-2。

51每执行完一条PUSH指令,SP的值减2,如图3-30所示。堆栈是以“先进后出”方式工作的一个存储区域,它在内存的堆栈段中,它的一端固定一端活动,称固定端为栈底,活动端为栈顶。堆栈的唯一出入口为栈顶,堆栈指针SP任何时候都指向栈顶,堆栈的最大容量为64KB,为了提高堆栈的访问速度,堆栈的操作以字为单位进行。当堆栈为空时,栈底和栈顶重合,随着入栈的内容的增加,栈顶的地址即SP的值减少,反之SP的值增加。

2000H1FFFH1FFEH1000H64KB堆栈段内存栈底SP堆栈段首地址设SS=1000H、SP=2000H地址的伸展方向堆栈的伸展方向1FFDH1FFCH图3-30堆栈示意图52(2)POP指令指令格式:POPDOPD 作用:把栈顶所指的一个字数据送到DOPD中,同时SP加2,即将栈顶的内容弹出到REG16、MEM16或除CS外的段寄存器中。执行过程:①DOPDL

←(SP);②SP←SP+1;③DOPDH

←(SP);④SP←SP+1。结果: ①(DOPD)←(SP,SP+1);②SP←SP+2。(3)PUSHF指令指令格式:PUSHF 作用:把标志寄存器中的内容压入堆栈保存,同时堆栈指针SP减2。

即:(SP-1,SP-2)←FLAG,

SP←SP-2。

53(4)POPF指令指令格式:POPF作用:将栈顶的内容弹出到标志寄存器中,同时堆栈指针SP加2。

即:FLAG←(SP,SP+1),SP←SP+2545.输入/输出指令输入/输出指令共有两条,即:IN指令与OUT指令。(1)IN指令指令格式:①IN AL,端口地址;AL←8位端口的字节内容

②IN AX,端口地址;AX ←两个8位端口的字内容

③IN AL,DX ;AL←端口地址为DX中内容的端口的字节内容

④IN AX,DX;AX←端口地址为DX中内容的两端口的字内容作用:从一个端口输入一个字节或字到累加器AL或AX中。

55(2)OUT指令指令格式:①OUT端口地址,AL

②OUT端口地址,AX

③OUT DX,AL

④OUT DX,AX作用:通过累加器AL或AX送一个字节或字到外设端口。IBMPC机中,所有I/O端口与CPU之间的通信由IN和OUT指令来完成。

566.标志寄存器传送指令该类指令主要有两条,即LAHF指令与SAHF指令。(1)LAHF指令指令格式:LAHF作用:将标志寄存器低八位的内容送入AH寄存器中,即:AH ←FLAGL。该指令不影响标志位。(2)SAHF指令指令格式:SAHF作用:将AH寄存器的内容送入标志寄存器低八位中,即:FLAGL

←AH。该指令执行时将影响标志位。

57二、算术运算类指令8086/8088CPU可进行8位、16位(字节、字)的四种算术运算,即加、减、乘、除。参加运算的数据可以是无符号或有符号的,无符号的加、减运算,标志位CF为1表示运算结果溢出,有符号的加、减运算,标志位OF为1表示运算结果溢出。参加算术运算或逻辑运算的寄存器有:8个8位的寄存器AL、AH、BL、BH、CL、CH、DL、DH,8个16位的寄存器AX、BX、CX、DX、SP、BP、SI、DI。

581.加法类指令加法类指令有三条,即:ADD、ADC及INC指令。(1)ADD指令

指令格式:ADDDOPD,SOPD;DOPD←DOPD+SOPD(2)ADC指令指令格式:ADCDOPD,SOPD;DOPD←DOPD+SOPD+CFADC指令也有与ADD指令对应的五种形式,它与ADD指令的唯一区别是加上了进借位CF;ADD,ADC指令执行结果影响状态标志位CF、OF、PF、ZF、SF、AF;ADD、ADC指令中源操作数和目的操作数不允许同时为存储器操作数,两操作数的类型必须一致;在进行多字节数据的加法时需要使用ADC指令,如果低字节(字)相加产生进位位,则在高字节(字)相加时将此进位位加进去。

59(3)INC指令指令格式:INC SDOPD;SDOPD←SDOPD+1INC指令执行后不影响CF,但对其余状态标志位的影响同ADD指令,INC指令的操作数SDOPD只能为REG或MEM,使用存储器操作数时必须指明其类型是字节还是字。可用解析操作符PTR说明存储器操作数的类型,其格式为:类型PTR地址表达式指令中类型可为:BYTE(字节)、WORD(字)及DWORD(双字,用在JMP指令中)如:ADDBYTEPTR[BX+2],1;目的操作数的类型为字节(单元)

60例3-13现有DS=2000H,BX=0100H,SI=0002H,内存20100H—20103H单元中的内容分别为:12H、34H、56H、78H,内存21200H—21203H单元中的内容分别为:2AH、4CH、87H、65H试说明下列各条指令执行完后AX寄存器的内容? MOV AX,1200H ;AX=1200H MOV AX,BX ;AX=0100H MOV AX,[1200H] ;AX=4C2AH MOV AX,[BX] ;AX=3412HMOV AX,1100[BX] ;AX=4C2AH

MOV AX,[BX][SI] ;AX=7856H MOV AX,1100[BX][SI] ;AX=6587H61例3-16下列程序将BX(存放的是无符号数)乘以10,结果存储到字节变量DATA1中去。 SUB AL,AL SHLBX,1 RCL AL,1;AL,BX←BX×2MOVDX,BX MOVAH,AL ;AH、DX←2BX SHL BX,1 RCL AL,1 SHL BX,1 RCL AL,1 ;AL、BX←BX×8 ADD BX,DX ADD AL,AH ;AL、BX←2*BX+8*BX MOVWORDPTRDATA1,BX MOVDATA1+2,AL622.减法类指令减法类指令主要有五条,即:SUB、SBB、DEC、CMP及NEG指令。(1)SUB指令

指令格式:SUBDOPD,SOPD ;DOPD←DOPD-SOPD(2)SBB指令

指令格式:SBBDOPD,SOPD ;DOPD←DOPD-SOPD-CF(3)DEC指令

指令格式:DECSDOPD ;SDOPD← SDOPD-1(不影响CF)

63(4)CMP指令

指令格式:CMPDOPD,SOPD ;DOPD-SOPD(5)NEG指令

指令格式:NEGSDOPD ;SDOPD←0-SDOPD643.乘法指令乘法指令有两条,即MUL指令与IMUL指令。(1)MULSOPD(字节或字);无符号数的乘法指令字节乘法: AX ←ALSOPD字节

字乘法: DX:AX←AXSOPD字

(2)IMUL SOPD;有符号数乘法指令有符号数乘法指令与MUL相类似,但其参加乘法运算的两操作数必须为有符号的操作数。若乘积的高半部分不是结果的低半部分的符号扩展,则CF和OF置“1”,表示AH或DX含有结果的有效数字。

654.除法指令8086/8088规定除数必须为被除数的一半字长。

(1)DIV SOPD(字节或字);无符号数除法无符号数字节除法前,将AH清0,被除数隐含在AX寄存器中,除得的商,存放在AL中,余数存放在AH中;字除法前将DX清0,除得的商,存放在AX中,余数存放在DX中。若除数为零,则产生0类型的中断。

(2)IDIV SOPD(字节或字);有符号数除法有符号数除法指令IDIV和DIV指令类似,差别就是IDIV指令在执行时将被除数和除数都看成是有符号数,商和余数也均为带符号数。

66三、位操作指令位操作指令的功能是对8位或16位的寄存器或存储单元的内容,按位进行逻辑运算或移位操作。位操作指令有三组:逻辑运算指令、移位指令和循环移位指令。1.逻辑运算指令8086/8088CPU的逻辑运算指令有:AND(逻辑与)、TEST(逻辑测试)、OR(逻辑或)、XOR(逻辑异或)和NOT(逻辑非)五条指令。

(1)NOT指令

指令格式:NOT SDOPD ;SDOPD←SDOPD的反码。

(2)AND指令

指令格式:AND DOPD,SOPD ;DOPD←DOPD∧SOPD。

67(3)OR指令

指令格式:OR DOPD,SOPD ;DOPD←DOPD∨SOPD(4)逻辑异或XOR指令

指令格式:XOR DOPD,SOPD;DOPD←DOPDSOPD(5)逻辑测试TEST指令

指令格式:TESTDOPD,SOPD ;DOPD∧SOPD,用来检测条件是否满足

682.移位指令字节或字的各位可以进行算术或逻辑移位,移动的数位由移位指令中给出的的计数值确定。若移位次数为1,可将立即数1直接作为指令中的操作数,若移位的次数超过1次,则必须先将移位的次数放入CL寄存器中。逻辑移位指令实际上是将操作数当作无符号数来进行移位,所以右移时最高位添0;算术移位时,将操作数当作有符号数来处理,故右移时保持最高位不变。移位指令可以实现二进制乘以2的整数幂运算。移位指令有四条:逻辑左移SHL、逻辑右移SHR、算术左移SAL、算术右移SAR。(1)左移指令左移指令有两条,即逻辑左移SHL指令与算术左移SAL指令。指令格式:①SHLDSOPD,COUNT ;逻辑左移②SALDSOPD,COUNT ;算术左移

69(2)右移指令右移指令亦有两条,即逻辑右移SHR指令与算术右移SAR指令。指令格式:①SHRDSOPD,COUNT ;逻辑右移②SARDSOPD,COUNT ;算术右移

3.循环移位指令字节或字中的各位可以进行带进位或不带进位的循环移位。与算术或逻辑移位不同,循环移位时移出操作数的位并不丢失,而是循环送回操作数的另一端。循环移位的指令格式以及移位计数值的规定同移位指令。移动的位数为1直接给出,超过1位,则必须在CL中指定。循环移位指令中DSOPD可为16位或8位的寄存器操作数或存储器操作数,COUNT为循环次数。循环移位指令共有4条。

70(1)ROL指令指令格式:ROLDSOPD,COUNTROL指令对操作数进行循环左移,将最高位移入标志位CF,同时将最高位移入操作数的最低位。故ROL指令又称不带进位位循环左移指令。(2)ROR指令指令格式:RORDSOPD,COUNTROR指令对操作数进行循环右移,将最低位移入标志位CF,同时将最低位移入操作数的最高位。故ROR指令又称不带进位位循环右移指令。

71(3)RCL指令指令格式:RCLDSOPD,COUNTRCL指令把进借位标志CF包含在循环中进行循环左移位,每执行循环移位指令一次,将操作数的最高位移入标志位CF中,同时将CF中原来的内容送入操作数的最低位。故RCL指令又称带进位位循环左移指令。(4)RCR指令指令格式:RCRDSOPD,COUNTRCR指令把进借位标志CF包含在循环中进行循环右移位,每执行循环移位指令一次,将操作数的最低位移入标志位CF中,同时将CF中原来的内容送入操作数的最高位。故RCR指令又称带进位位循环右移指令。

上述四条循环移位指令执行后都影响标志位CF、OF,对其他标志位无影响。

72四、控制转移类指令通常指令是顺序地逐条执行的,但实际上程序不可能总是顺序执行,而经常需要改变程序的执行流程,控制转移类指令就是用来改变程序的执行流程的。控制转移类指令包括:无条件转移指令和条件转移指令;循环控制指令;子程序调用和返回指令;中断指令和中断返回指令。1.无条件转移指令JMP

无条件转移指令必须指定转移的目标地址,该指令可将程序无条件转移到目标地址开始的指令。无条件转移可分为两大类:段内转移和段间转移。段内转移是指在同一段的范围内进行转移,只要改变IP的值即可实现段内转移;段间转移是要将程序的执行转到另一个段去执行,此时不仅要修改IP的值,还要修改CS的值才能实现段间转移。

73(1)段内直接转移指令1)JMPSHORTOPRD ;段内直接短转移功能:IP←IP+8位的位移量2)JMP NEARPTROPRD ;段内直接近转移

功能:IP←IP+16位的位移量

(2)段内间接转移指令JMP WORDPTROPRD;IP←(EA)指令将以EA为有效地址的存储字单元的内容送入IP中,有效地址EA的值由操作数OPRD的寻址方式决定,OPRD的寻址方式可为除立即寻址外的其它寻址方式

74(3)段间直接转移指令JMP FARPTROPRD;IP←OPRD的偏移地址,CS←OPRD所在段的段地址。指令的操作数是一个FAR型的标号,即该标号在另外一个代码段。(4)段间间接转移指令JMP DWORDPTROPRD;IP←(EA),CS←(EA+2)。指令的操作数为一个32位的存储器操作数(地址指针),EA由OPRD的寻址方式决定。

752.条件转移指令条件转移指令是根据执行该指令前有关标志位的状态来决定程序的执行是否发生控制转移的指令,条件转移指令的执行分为两个过程:首先测试规定的条件,然后根据测试的结果决定程序的转向,若满足条件则转移到目标地址,否则程序顺序执行。条件转移指令只有一个操作数,用以指明转移的目标地址。条件转移指令的操作数必须是一个短标号,即所有的条件转移指令都是段内直接短转移,指令的字节数为2个字节,条件转移指令的下一条指令与目标地址之间的距离在-128~+127之内。在执行条件转移指令时,若满足规定的条件,IP的值改为原来IP值加上符号扩展到16位后的偏移量。所有的条件转移指令都不影响状态标志位

763.重复控制指令8086/8088中专门设计了重复(循环)控制指令用于使一些程序段重复执行,形成循环程序。在循环控制指令中都隐含使用了CX循环计数器,与条件转移指令一样,所有的重复(循环)控制指令都为段内短转移,指令执行后对状态标志位无影响。(1)LOOP循环指令指令格式:LOOP短标号其意义是:CX←CX-1,然后判断CX是否等于0,若CX≠0,则转移至短标号处执行;否则顺序执行。在使用LOOP指令之前必须先将循环次数送入CX中。选择当型的循环程序结构,且将CX初值置为1,则可实现“0”次循环。77(2)LOOPE/LOOPZ(等于或为零)循环指令指令格式:LOOPZ 短标号或LOOPE短标号其意义是先将CX←CX-1,然后判断是否有CX≠0且ZF=1,有则转移至短标号处执行;否则(即CX=0或ZF=0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论