微型计算机指令系统.ppt

上传人:tian****1990 文档编号:11533167 上传时间:2020-04-27 格式:PPT 页数:69 大小:225.50KB
返回 下载 相关 举报
微型计算机指令系统.ppt_第1页
第1页 / 共69页
微型计算机指令系统.ppt_第2页
第2页 / 共69页
微型计算机指令系统.ppt_第3页
第3页 / 共69页
点击查看更多>>
资源描述
第三章微型计算机指令系统,指令系统是微处理器(CPU)所能执行的指令的集合,它与微处理器有密切的联系,不同的微处理器有不同的指令系统。在本章中我们主要讲解INTEL公司生产的8086/8088CPU的寻址方式以及各种指令系统,并通过具体实例讲述了各条指令的功能和使用方法。通过本章的学习,读者应该掌握以下内容:3种操作数的寻址方式常用指令的格式、功能、以及对标志位的影响,3、18086/8088的寻址方式,操作码操作数,汇编指令:,操作码:指令操作类型;操作数:指令所需操作数或操作数的地址;操作数可以有一个,也可以有两个,一个源操作数,一个目的操作数。例:MOVAX,CX;将CX的内容送入AX中。,本章主要介绍8086/8088的指令系统以及在指令中为取得操作数地址所使用的寻址方式。,3、1、1立即寻址方式指令操作数部分直接给出指令的操作数,操作数与操作码一起存入代码段中。立即数有8位和16位。例:MOVAL,5;源操作数为立即寻址指令执行后,AL=05H,8位数据05H存入AL寄存器。例:MOVAX,3064H;源操作数为立即寻址指令执行后,AX=3064H,16位数据3064H存入AX寄存器。,3、1、2寄存器寻址方式寄存器寻址方式的操作数是寄存器的值,指令中直接使用寄存器名,包括8位或16位通用寄存器和段寄存器。可使用的16位寄存器:AX、BX、CX、DX、SI、DI、SP、BP;其中:AX、BX、CX、DX可分成两8位使用。例:MOVAX,CX;(AX)(CX)MOVAL;(AL)(AL)-13、1、3内存寻址方式在内存寻址方式中,操作数是某个内存单元的内容(值),指令中给出的是内存单元的有效地址EA(即偏移地址),段地址通常在隐含的某个段寄存器中。,1、直接寻址方式直接寻址方式的操作数的形式为:Variable或Variable在直接寻址方式中,操作数的偏移地址(有效地址EA)直接用指令加以指定(有直接地址值和标号两种形式),它存放在代码段中指定操作码之后,但操作数一般存放在存储器的数据段中,所以必须先求出操作数的物理地址,然后再访问存储器才能取得操作数。段地址隐含的由DS指定,也可以ES指定,但需在指令中指明。最后存储器地址为:DS:偏移地址或ES:偏移地址。例:MOVAX,ES:2000H将ES:2000H单元内容送入AX。例:MOVAX,LABLE或MOVAX,LABEL将标号为LABLE(存放操作数单元的符号地址),即DS:LABLE中的内容送入AX。,2、寄存器间接寻址寄存器间接寻址方式的操作数形式为:reg操作数的有效地址包含在基址寄存器BX,基址指针BP或一个变址寄存器(SI或DI)中。寄存器间接寻址要用方括号括起来,以便与寄存器操作数相区别。例:MOVAX,BX;将由BX决定的存储单元的内容送到AX寄存器。,0000,0001,0002,0003,BB,AA,TAB:,AX,AHAL,AABB,间接寻址,数据段,0001,BX,操作数在存储器中,指令中寄存器内容作为操作数所在单元的有效地址。(BX)(SI)(DI)(BP),有效地址=,段寄存器为DS,段寄存器为SS,物理地址计算方法:物理地址=(DS)*16+(BX)或(SI)或(DI)物理地址=(SS)*16+(BP),例:已知:(DS)=2100H,(DI)=2000H指令:MOVAX,DI;(AX)(DI)物理地址=(DS)*16+(DI)=2100H*16+2000H=21000H+2000H=23000H指令结果:将23000H单元内容送AL中,将23001H单元内容送AH中。,3、寄存器相对寻址方式操作数在存储器内,指令中寄存器内容与指令指定的位移量(DISP)之和作为操作数所在单元的有效地址。(BX)DISP8(SI)(DI)(BP)DISP16,有效地址=,段寄存器为DS,段寄存器为SS,+,物理地址=(DS)*16+(BX)+DISP8(SI)、(DI)、DISP16类同。物理地址=(SS)*16+(BP)+DISP16,例:如果(DS)=3000H,(SI)=2000H,COUNT=3000H,则执行指令MOVAX,CONUTSI,求出此种寻址方式对应的有效地址和物理地址。有效地址=2000H+3000H=5000H物理地址=(DS)*16+5000H=30000H+5000H=35000H4、基址变址寻址方式:操作数在存储器中,指令将基址寄存器(BX或BP)与变址寄存器(SI或DI)内容之和作为操作数所在存储单元的有效地址。,(BX)(SI)(BP)(DI),有效地址=,+,物理地址=(DS)*16+(BX)+(SI)或(DI)物理地址=(SS)*16+(BP)+(SI)或(DI)例:MOVAX,BX+DI或MOVAX,BXDIDS:(BX)+(DI)字存储单元内容送AX。例:MOVAX,BP+SI或MOVAX,BPSISS:(BP)+(SI)字存储单元内容送AX。,例:如果(DS)=2100H,(BX)=0158H,(DI)=10A5H,EA=11FDH,则执行指令MOVAL,BXDI有效地址:EA=(BX)+(DI)=0158H+10A5H=11FDH物理地址:(DS)*16+有效地址=21000H+11FDH=221FDH执行结果:将221FDH单元内容送入寄存器AL中。,5、相对基址变址寻址方式操作数在存储器内,指令将基址寄存器(BX或BP)与变址寄存器(SI或DI)的内容之和再加上位移量(8位或16位),得到操作数所在单元的有效地址。(BX)(SI)DISP8(BP)(DI)DISP16,有效地址=,+,+,物理地址=(DS)*16+(BX)产生的有效地址物理地址=(SS)*16+(BP)产生的有效地址例:已知:(DS)=3000H,(BX)=2000H,(SI)=1000H,MK=0250H指令:MOVAX,MKBXSI或MOVAX,MKBX+SI或MOVAX,MK+BX+SI有效地址:MK+(BX)+(SI)=0250H+2000H+0100H=3250H物理地址:(DS)*16+有效地址=30000H+3250H=33250H执行结果:将33250H单元内容送AL,33251H内容送AH。,3、1、4段超越当操作数在内存单元时,系统根据隐含约定,自动将寄存器DS或SS的值作为段地址。然而,当操作数段地址不在隐含的段寄存器时,可以使用段超越前缀取代其隐含约定。段超越前缀形式为:段寄存器名:例如:MOVAX,ES:BP;段地址在ESMOVAX,CS:BXSI;段地址在CS段地址的基本约定和允许超越的情况如表所示:,3、1、5对8086内存寻址方式的注解(1)在汇编后,指令中的变量名有具体的偏移地址所取代。,(2)在寄存器相对寻址与相对基址变址方式中,位移量disp可以是符号常量或变量,汇编后为一个常数,若是变量,则取其偏移地址。(3)在Microsoft宏汇编MASM(MicrosoftMacroAssembler)中,内存操作数可以采用多种书写形式。(4)操作数中使用变量的地方也可以用下列形式:变量名整数表达式。5)计算出的有效地址以16位表示,若超过0FFFFH,CPU将忽略所有溢出。(6)记忆8086内存操作数形式的简易方法如下:BXSIdispBPDI每列选择0项或一项,构成至少一项,即可得到有效的内存操作数形式。,3、2标志位在标志寄存器FLAGS中有若干标志位,这些标志用来表示CPU当前的操作方式和状态信息。与普通应用程序有关的主要是FLAGS中的9个标志6个状态标志(CF、OF、SF、ZF、AF、PF)3个控制信息标志(DF、IF、TF)3、2、1深入认识CF和OF1、深入认识CF和OFCF表示无符号溢出,即运算结果超出了无符号数的表示范围。OF表示带符号溢出,即运算结果超出了带符号数的表示范围。,2、CF和OF判断方法(1)加法CF的判断方法从十进制角度来看,若无符号加的结果大于2n(n为位数),则CF=1,否则CF=0。从二进制角度来看,若结果最高位向前有进位,则CF=1,否则CF=0。OF的判断方法从十进制角度来看,若带符号加的结果不在范围n1n-11(n为位数)内,则OF=1,否则OF=0。从二进制角度来看,若两个数同号,而相加结果与之异号,说明溢出,则OF=1,否则OF=0。例:8位数加法,判断CF和OF,二进制加法看作无符号数看作带符号数00110000B66+00001001B+9+9,00111001B1515CF=0OF=000000111B7+7+11111011B+251+(5),00000010B258+21CF=1OF=0现为2结果错00001001B9+9+01111100B+124+(+124),10000101B133+133CF=0OF=1现为123,结果错10000111B135(121)+11110101B+245+(11),01111100B3801321CF=1OF=1现为124,结果错现为124,结果错,(2)减法CF的判断方法从十进制角度来看,若无符号减数大于被减数,则CF=1,否则CF=0。从二进制角度来看,若结果最高位向前有借位,则CF=1,否则CF=0。OF的判断方法从十进制角度来看,若带符号减的结果不在范围n-1n-11(n为位数)内,则OF=1,否则OF=0。从二进制角度来看,若两个数异号,而结果与被减数符号相反,说明溢出,则OF=1,否则OF=0。,3、3指令系统8086/8088的指令系统可以分为6组:(1)数据传送指令;(2)算术运算指令;(3)逻辑指令与移位指令;(4)串操作指令;(5)控制转移指令;(6)处理机控制指令;3、3、1数据传送指令数据传送指令是最简单、最常用的一类指令,它是负责把数据、地址、或立即数传送到寄存器或存储单元中。,1MOV(Move):传送指令MOV指令的格式为:MOVdest,src;destsrc功能:将源操作数src复制到目的操作数dest中,结果目的操作数的内容等于源操作数的内容,源操作数src的内容不变。对标志位的影响:无语法格式:MOVreg/mem/seg,reg/mem/seg/imm说明:(1)双操作数指令不允许两个操作数同时为段寄存器或存储器操作数。MOVseg,seg;错误MOVmem,mem;错误,(2)立即数不能传送到段寄存器中。MOVseg,imm;错误(3)目的操作数不允许使用CS段寄存器。(4)dest与src必须类型匹配,即同时是字节或字类型。以下几点要注意:寄存器具有明确的类型,例如,AL、AX分别为字节、字类型。若立即数没有明确的类型,MASM负责将立即数扩展为与目的操作数位数相同。有时MASM不能确定内存操作数的类型,需要用byteptr和wordptr明确指出是字节或字类型。关于PTR的详细介绍见第4章。只要其中一个操作数的类型确定即可。,例:错误的MOV指令如下所示:MOVAX,BL;类型不匹配MOVDS,1000H;不允许立即数送段寄存器MOVBX,SI;不允许内存操作数之间传送MOVES,CS;不允许段寄存器之间传送MOVCS,AX;CS不能作为目的操作数例:设B是已定义的字节变量,以下是一些错误和正确的指令。MOVAX,B;错误,类型不匹配MOVA,0;正确,MASM可以判断出要送字节0,XCHG(Exchange):交换指令XCHG指令的格式为:XCHGoprd1,oprd2;交换oprd1与oprd2的内容语法格式为:XCHGreg/mem,reg/mem例:XCHGBX,BP+SI如指令执行前:(BX)=6F30H,(BP)=0200H,(SI)=0046H,(SS)=2F00H,(2F00H)=4254H,OPR2的物理地址=2F00+0200+0046=2F246则指令执行后:(BX)=5154H,(2F246H)=6F30H。,3、堆栈操作指令堆栈概念-存储器的一段区域,按“先进后出”的原则进行存出操作。8086/8088系统,堆栈位于堆栈段,其段地址由SS指示,SP寄存器作为指针,SP内容始终指向栈顶所在存储单元。作用:在调用一个过程时,保存返回地址;暂时存放寄存器或存储器单元操作数的内容。指令格式:进栈PUSHSRC;操作:(SP)(SP)-2,(SP)+1,(SP)(SRC)出栈POPDST;操作:(DST)(SP)+1,(SP),(SP)(SP)+2,堆栈,SS:01F8,SS:01FA,SS:01FC,SS:01FE,SP,AABB,(执行PUSHAX之前),堆栈,SS:01F8,SS:01FA,SS:01FC,SS:01FE,SP,AABB,(执行PUSHAX之后),1101H,1101H,AX,堆栈,SS:01F8,SS:01FA,SS:01FC,SS:01FE,SP,AABB,(执行POPAX之后),1101H,AX,1,2,3,8086/8088系统的堆栈具有如下特点:堆栈是在内存的堆栈段中,具有“先进后出”的特点;堆栈只有一个出入口,即当前栈顶为空时,栈顶和栈底指向同一内存单元;堆栈有两个基本操作:PUSH(进栈)和POP(出栈)。PUSH操作使栈顶向低地址方向移动,而POP操作则刚好相反;堆栈操作只能作字操作;SS:SP在任何时候都指向当前的栈顶。,4、地址传送指令将操作数所在存储器的地址送入目标寄存器。指令格式:有效地址送寄存器:LEAreg16,mem;reg16mem指针送寄存器和DS:LDSreg16,mem32;把源操作数指定的4个相继字节到由指令指定的寄存器及DS寄存器中。该指令常指定SI寄存器。指针送寄存器和ES:LESreg16,mem32;把源操作数指定的4个相继字节送到由指令指定的寄存器及ES寄存器中。该指令常指定DI寄存器。,LEA指令与MOV指令的区别:LEASI,BUFF指令是将标号BUFF的偏移地址送入寄存器中;MOVSI,BUFF指令是将标号BUFF所指存储单元的内容送入SI。,BUFF=,0,1,2,3,4,5,48,00,FE,FF,LEASI,BUFF;执行后:(SI)=0002HMOVSI,BUFF;执行后:(SI)=0048H,段起始地址,B、LDS或LES指令将源操作数指定的4个连续字节单元内容分别送入指令指定的寄存器以及DS或ES中。其中:低16位送到一个指定的字寄存器,高16位送到DS或ES中。,57H,13H,68H,24H,例:(DS)=C000H,(C2480H)=1357H,(C2482H)=2468H,DS:2480H,DS:2481H,DS:2482H,DS:2483H,1357,2468,SI,DS,LDSSI,2480,4、标志寄存器传送指令指令格式:LAHF;(AH)(PSW低字节)SAHF;(PSW低字节)AHPUSHF;(SP)(SP)-2,(SP)+1,(SP)(PSW)POPF;(PSW)(SP)+1,(SP)(SP)(SP)+2,说明:LAHF/SAHF指令是寄存器AH与标志寄存器PSW的低字节之间完成的字节型数据传送。PUSHF/POPF指令是标志寄存器PSW与堆栈间进行的字型数据传送。指令SAHF/POPF将影响标志位。,4、2、2算术运算指令1、加法指令指令格式:加法ADDDST,SRC;(DST)(SRC)+(DST)带进位加法ADCDST,SRC;(DST)(SRC)+(DST)+CF加1INCOPR;(OPR)(OPR)+1说明:这在三条指令运算结果将影响状态标志位,但是INC指令不影响标志CF。,2、减法指令指令格式:减法SUBDST,SRC;(DST)(DST)-(SRC)带进位减法SBBDST,SRC;(DST)(DST)-(SRC)-CF减1DECOPR;(OPR)(OPR)-1求补NEGOPR;(OPR)0FFFFH-(OPR)+1比较CMPOPR1,OPR2;(OPR1)-(OPR2)以上五条指令均可作字或字节运算,而且除DEC不影响CF外,其他都按一般规则影响状态标志位。,3、乘法指令指令格式:无符号数乘法MULSRC;(AX)(AL)*(SRC)字节乘法;(DX,AX)(AX)*(SRC)字乘法带符号数乘法IMULSRC;操作同上进行字节运算时,目的操作数必须是累加器AL,乘积在寄存器AX中;进行字运算时,目的操作数必须是累加器AX,乘积在寄存器DX,AX中。源操作数不允许使用立即数。乘法指令运算结果只影响状态标志CF、OF。例:MULBX;无符号数乘法,BX乘上AX,4、除法指令指令格式:无符号数除法DIVSRC;(AL)(AX)/(SRC)除法的商(AH)(AX)/(SRC)除法余数或者(AX)(DX,AX)/(SRC)除法的商(DX)(DX,AX)/(SRC)除法余数带符号数除法IDIVSRC;操作同上。,当除数是字节数据时,被除数必须放在AX中;当除数是字数据时,被除数必须放在DX,AX中。除法指令运算结果对状态标志无定义。8086/8088规定IDIV指令运算结果余数的符号与被除数相同。带符号数除法运算中,当被除数位数不够时,可进行扩展。,符号扩展指令:字节扩展到字CBW;将寄存器AL中的符号位扩展到寄存器AH字扩展到双字CWD;将寄存器AX中的符号位扩展到寄存器DX,7,0,AL,7,0,AH,0,15,AX,DX,15,0,CBW,CWD,5、压缩BCD码十进制调整指令加法十进制调整DAA;执行的操作:这条指令执行前必须先执行ADD或ADC指令,加法指令必须把两个压缩的BCD码相加,并把结果存放在AL寄存器中。减法十进制调整DAS;执行的操作:这条指令执行之前,必须先执行SUB或SBB指令,减法指令必须把两个BCD码相减,并把结果存放在AL寄存器中。,调整的方法:累加器AL低4位大于9或辅助进位标志位AF=1,则累加器AL加06H修正。累加器AL高4位大于9或辅助进位标志位AF=1,则累加器AL加60H修正。累加器AL高4位大于等于9,低4位大于9,则累加器AL进行加66H修正。,例:进行BCD码加法运算59+68=1270101100159+011010006811000001C1+0110011066100100111127,加法运算结果为C1,AF=1,高位大于9,加66H进行压缩BCD调整,说明:压缩BCD码加法或减法十进制调整指令必须在ADD(ADC)或SUB(SBB)指令之后,调整结果对标志OF无影响,对其它状态标志位均有影响。减法十进制调整方法与加法十进制调整方法类同,只是将加6变为减6操作。,6、非压缩BCD码十进制调整指令指令格式:加法十进制调整AAA;减法十进制调整AAS;乘法十进制调整AAM;除法十进制调整AAD;,AAA指令将AL的内容变换成一位非压缩的十进制数。AAA检查AL低四位,如低四位是0-9的数字,AAA就清除AL的高四位,以及AF和CF标志;如AL低四位表示的数大于9或AF=1,AAA执行:加6到AL寄存器;加1到AH寄存器;置AF=1,CF=1;清除AL高四位为0。例:ADDAL,BL;AL和BL中的数相加AAA;非压缩BCD码调整,AAS指令检查AL低四位,如低四位表示的数是0-9的数字,ASS清除AL高四位及CF和AF标志;如AL低四位表示的数大于9或AF=1,AAS进行如下调整:,AL减去6;AH减去1;置AF=1,CF=1;清除AL中高四位。例:SUBAL,BL;AAS,AAM指令的作用是用10(0AH)来除AL寄存器的内容,并将除得的商和余数分别送到AH和AL来实现转换。例:MULBL;AL*BLAAM,3、3、3逻辑指令与移位指令1、逻辑运算指令:对字节或字数据进行按位的操作。格式:逻辑与ANDDST,SRC;(DST)(DST)AND(SRC)逻辑或ORDST,SRC;(DST)(DST)OR(SRC)逻辑非NOTOPR;(OPR)(OPR)异或XORDST,SRC;(DST)(DST)XOR(SRC)测试TESTOPR1,OPR2;(OPR1)AND(OPR2)(1)、逻辑与(AND)、或(OR)、异或(XOR)操作指令,AND指令主要用来屏蔽掉一个数中某些位,以便对剩下的其它位进行某些处理。对那此两个操作数都是1的位,目的操作数相对应位就是1,其它各种组合的位,目的操作数相应位都是0。,例:ANDAX,BX;两个寄存器逻辑与ANDAL,MEM-BYTE;寄存器和存储单元逻辑与ANDMEM-BYTE,AL;存储单元和寄存器逻辑与,OR指令在两个操作数相对应位中有一个是1或两个都是1时,在目的操作数的该位产生一个1。例:ORBX,0C000B将BX的两位最高的有效位(15和14位)置成1,而其它位不变。,XOR指令主要用于判断两个操作数中那些位是不同的。如两个操作数相对应位的值不同时,在目的操作数产生一个1。相同为0,不同为1。例:XORBX,0C000B;,NOT指令改变寄存器或存储单元的每一位状态,原来为0变为1,原为1变为0。例:NOTAX;AX各位取反,TEST指令是一条测试指令,它执行的操作与AND相同,不过它不送回结果,只影响标志位。例:TESTAL,00000001B;如AL最低位为0,则ZF=1。,2、移位指令逻辑左移SHLOPR,CNL算术左移SALOPR,CNL逻辑右移SHROPR,CNL算术右移SAROPR,CNT其中:OPR为操作数,CNT为1或CL表示移位次数,0,CF,OPR,0,CF,OPR,CF,OPR,例:设AL=10110100,CF=1在SALAL,1之后,AL=01101000CF=1在SARAL,1之后,AL=11011010CF=0在SHLAL,1之后,AL=01101000CF=1在SHRAL,1之后,AL=01011010CF=0,算术左移(SAL)和算术右移(SAR)实现带符号数移位。SAR通过在整个移位过程中复制符号来保护操作数的符号。SAL不保护进位,但如果符号位发生变化的话,就将1送OF标志。每次移位,SAL都将操作数空出来的第0位置0。,逻辑左移(SHL)和逻辑右移(SHR)对无符号数的移位。SHL将操作数左移,空出来的第0位置0;SHR将操作数右移,空出来的高位(字节时第7位,字时第15位)置0。,例:将两个非压缩BCD码(高位在BL,低位在AL)合并成压缩BCD码送AL。MOVCL,4;将计数值送CLSHLBL,CL;将高位移到BL的高4位ANDAL,0FH;清零AL高4位ORAL,BL;合并AL和BL形成压缩BCD码。,(2)、循环移位指令循环左移ROLOPR,CNT循环右移ROROPR,CNT带进位循环左移RCLOPR,CNT带进位循环右移RCROPR,CNT,CF,OPR,CF,OPR,CF,OPR,CF,OPR,例:设AL=10110100B,CF=1执行下列语句:执行ROLAL,1后,AL=01101001,CF=1执行RORAL,1后,AL=01011010,CF=0执行RCLAL,1后,AL=01101001,CF=1执行RCRAL,1后,AL=11011010,CF=0,3、2、4串操作指令串操作:对存储区中连续存放的字节或一串字进行操作。与REP前缀相配合工作的指令MOVS、LODS、和STOS指令(1)REP重复串操作直到(CX)=0为止。格式:REPSTRINGPRIMITIVE其中STRINGPRIMITIVE可为MOVS,LODS或STOS指令。如(CX)=0则退出REP,否则继续执行;(CX)(CX)1;执行其后的串指令;重复。(2)MOVS串传送指令格式:MOVSDST,SRC;MOVSB(字节);MOVSW(字),(3)STOS存入串指令STOS指令的格式为:STOSDST;STOSB(字节);STOSW(字)。执行的操作:字节操作:(DI)(AL),(DI)(DI)1字操作:(DI)(AX),(DI)(DI)2(4)LODS从串中取指令LODS指令的格式为:LODSSRC;LODSB(字节);LODSW(字)。执行的操作:字节操作:(AL)(SI),(SI)(SI)1字操作:(AX)(SI),(SI)(SI)22与REPE/REPZ和REPNE/REPNZ联合工作的CMPS和SCAS指令,(1)REPE/REPZ当相等/为零时重复串操作REPE/REPZ指令的格式为:REPE/REPZstringprimitive其中stringprimitive可为CMPS或SCAS指令。执行的操作:如(CX)=0或ZF=0(即某次比较的结果两个操作数不等)时退出,否则继续执行;(CX)(CX)1;执行其后的串指令;重复。(2)REPNE/REPNZ当不相等/不为零重复串操作REPNE/REPNZ指令的格式为:REPNE/REPNZstringprimitive其中stringprimitive可为CMPS或SCAS指令。执行的操作:除退出条件为(CX)=0或ZF=1外,其他操作与REPE指令完全相同。,(3)、串比较指令CMPSB;(SI)-(DI)(SI)(SI)1,(DI)(DI)1CMPSW;(SI)-(DI)(SI)(SI)2,(DI)(DI)2(4)SCAS串扫描指令SCAS指令的格式为:SCASDST;SCASB(字节);SCASW(字)。执行的操作:字节操作:(AL)(DI),(DI)(DI)1字操作:(AX)(DI),(DI)(DI)2,3、2、5控制转移指令控制转移指令分成无条件转移指令和条件转移指令。1无条件转移指令转移可以分成两类:段内转移和段间转移。段内转移是指在同一段的范围之内进行转移,此时只需改变IP寄存器的内容,即用新的转移目标地址代替原有的IP的值就可达到转移的目的。段间转移则是要转到另一个段去执行程序,此时不仅要修改IP寄存器的内容,还需要修改CS寄存器的内容才能达到目的,因此此时的转移目标地址应由新的段地址和偏移地址两部分组成。,(1)直接短转移JMPSHORTOPR;操作:(IP)(IP)+8位位移量(2)段内直接转移JMPNEARPTROPR;操作:(IP)(IP)+16位位移量(3)段内间接转移JMPWORDPTROPR;操作:(IP)(有效地址)(4)段间直接(远)转移JMPNEARPTROPR操作:(IP)OPR的段内偏移地址(CS)OPR所在段的段地址(5)段间间接转移JMPDWORDPTROPR操作:(IP)(EA)(CS)(EA+2),2、条件转移指令状态标志作为转移的条件,当满足一定的条件时,转移到指定的地址,否则,将顺序执行下条指令。作为判断条件的状态标志位有:CF、PF、ZF、SF和OF。根据单个标志位的设置情况转移这组包括10种指令,它们一般适用于测试某一次运算的结果并根据其不同特征产生程序分支作不同处理的情况。结果为零(或相等)转移JZ/JEOPR;ZF=1结果不为零(或不相等)转移JNZ/JNEOPR;ZF=0结果为负转移JSOPR;SF=1结果为正转移JNSOPR;SF=0,溢出转移JOOPR;OF=1无溢出转移JNOOPR;OF=0奇偶位为1转移JP/PEOPR;PF=1奇偶位为0转移JNP/JPOOPR;PF=0低于/不高于或等于/进位为1转移JB/JNAE/JCOPR;CF=1不低于/高于或等于/进位为0转移JNB/JAE/JNCOPR;CF=0(2)比较两个无符号数,并根据比较的结果转移。低于/不高于或不等于/进位为1转移JB/JNAE/JCOPR;CF=1且ZF=0不低于/高于或等于/进位为0转移JNB/JAE/JNCOPR;CF=0或ZF=1,低于或等于/不高于转移JBE/JNAOPR;CF=1或CF=1不低于或不等于/高于转移JNBE/JAOPR;CF=0且ZF=0(3)比较两个带符号数,并根据比较结果转移。小于或者不大于或者等于转移JL(或JNGE)OPRSFZF=1小于或者不大于或者等于转移JNL(或JGE)OPRSFZF=0小于或等于,或者不大于转移JLE(或JNG)OPR(SFZF)ZF=1小于或等于,或者不大于转移JNLE(或JG)OPR(SFZF)ZF=0,(4)测试CX的值为0则转移指令JCXZOPR;(CX)=0则转移3、循环控制指令(1)LOOP(LOOP)循环指令格式:LOOPOPR测试条件:(CX)0(2)LOOPZ/LOOPE(Loopwhilezeroorequal)当为零或相等时循环指令格式:LOOPZ(或LOOPE)OPR测试条件:ZF=1且(CX)0(3)LOOPNZ/LOOPNE(Loopwhilenonzero,ornotequal)当不为零或不相等时循环指令格式:LOOPNZ(或LOOPNE)OPR测试条件:ZF=0且(CX)0,4、子程序CALL调用指令(1)段内直接调用格式:CALLDST执行的操作:(IP)(SP)2;(SP)1,(SP)(IP);(IP)(IP)D16;()段内间接调用格式:CALLDST执行的操作:(SP)(SP)2;(SP)1,(SP)(IP);(IP)(EA)()段间直接调用格式:CALLDST,执行的操作:(SP)(SP)2;(SP)1,(SP)(CS);(SP)(SP)2;(SP)1,(SP)(IP);(IP)偏移地址(指令的第2,3个字节);(CS)段地址(指令的第4,5个字节)。(4)段间间接调用格式:CALLDST执行的操作:(SP)(SP)2;(SP)1,(SP)(CS);(SP)(SP)2;(SP)1,(SP)(IP);(IP)(EA);(CS)(EA2),RET返回指令段内返回RET;(IP)(SP)+1,(SP)(SP)(SP)+2段内带立即数返回RETEXP;(IP)(SP)+1,(SP)(SP)(SP)+2(SP)(SP)+DISP16位移量段间返回RET;(IP)(SP)+1,(SP)(SP)(SP)+2(CS)(SP)+1,(SP)(SP)(SP)+2,段间带立即数返回RETEXP;(IP)(SP)+1,(SP)(SP)(SP)+2(CS)(SP)+1,(SP)(SP)(SP)+2(SP)(SP)+DISP16位移量3、2、6处理机控制指令1标志处理指令(1)CLC进位位置0指令(Clearcarry)CF0(2)CMC进位位求反指令(Complementcarry)CFCF(3)STC进位位置1指令(Setcarry)CF1(4)CLD方向标志置0指令(Cleardirection)DF0,(5)STD方向标志位置1指令(Setdirection)DF1(6)CLI中断标志置0(关中断)指令(Clearinterrupt)IF0(7)STI中断标志置1(开中断)指令(Setinterrupt)IF12其它处理机控制指令(1)NOP空操作指令NOP指令的语法格式为:NOP(2)HLT停机指令HLT指令的语法格式为:HLT(3)WAIT等待指令WAIT指令的语法格式为:WAIT(4)ESC换码指令ESC指令的语法格式为:ESCmem(5)LOCK封锁前缀指令LOCK指令的语法格式为:LOCK,习题1.判断下列指令是否正确。若不正确,指出错误原因。(1)MOVSP,DL(2)POPCS(3)MOVBPSI,DI(4)MOVSP,BP(5)JLEBX(6)MOVES,1000H(7)MOVAX,BX+2(8)MOVES,CS(9)ANDAX,CX(10)SHRBL2.说明指令DECAX与SUBAX,1的区别。3.IP寄存器能作为指令的操作数吗?哪类指令的执行会改变IP的值?4.在无符号数和带符号数比较两种情况下,分别给出下列条件成立时相关标志位的值。(1)相等(2)不相等(3)小于(4)小于或等于(5)大于(6)大于或等,5.说明CALL和RET指令要执行的操作。6.如果过程的第一条指令是POPAX,那么AX的值将是什么?7.在哪两种情况下,执行DIV或IDIV指令将出错?8.给出与下列每组指令序列功能相同的一条指令。(1)MOVAH,ALSARAH,7(2)MOVDX,AXSARDX,15(3)TESTAX,1JZISZEROSTCJMPDONEISZERO:CLCDONE,9.写出实现下列功能的指令序列。(1)将AL与BX中的两个无符号数相加,结果放入AX。(2)将AL与BX中的两个带符号数相加,结果放入AX。10.分析下列指令序列完成什么功能。MOVCL,4SHLAX,CLMOVBL,DLSHRDX,CLSHLBL,CLORAH,BL11.给出下列各条指令执行后AL以及CF、OF、SF和ZF的值。XORAL,ALMOVAL,255,INCALNOTALSHLALCMPALSUBAL,7FHSHLAL,112.写出与下列指令功能相同的指令序列。(1)CLDREPMOVSB(2)CLDRDPSTOSD(3)CLDREPECMPSW,13.设AX与DX存放的均为位十进制数对应的压缩BCD码,给出下列代码的功能。ADDAL,DLDAAXCHGAL,AHADCAL,DHDAAXCHGAL,AH14.编写实现下列功能的指令序列。(1)AL的高位与低位分别放入BH与BL的低4位,并将BH与BL的高4位清0。(2)将CX:BX:AX中的48位数加倍。其中,CX与AX分别作为最高16位与最低16位。(3)设AL的值为带符号数,若AL的绝对值小于10,则置CF=0,否则置CF=1。,(4)若AX和BX中的数恰好一个是奇数、一个是偶数,则将奇数放入AX,偶数放入BX;否则,AX和BX不变。(5)将AX中的无符号数乘以10存入DX:AX(要求用移位、传送和加法指令实现)。(6)设字节变量X中存放着位带符号数,计算4X5X2,将结果存入AX中。(7)求12100,结果放入AX中。,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!