X86指令系统和寻址方式.ppt_第1页
X86指令系统和寻址方式.ppt_第2页
X86指令系统和寻址方式.ppt_第3页
X86指令系统和寻址方式.ppt_第4页
X86指令系统和寻址方式.ppt_第5页
已阅读5页,还剩94页未读 继续免费阅读

下载本文档

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

文档简介

1,教学重点,第3章是本课程的一个关键内容,是程序设计的基础难点是各种寻址方式基础是熟悉寄存器组重点是掌握8086常用指令的功能及应用,第三章80 x86的指令系统和寻址方式,2,指令系统:计算机的指令系统就是指该计算机能够执行的全部指令的集合。(一组指令集)。指令的一般格式:,指令由操作码和操作数两部分组成操作码说明计算机要执行哪种操作,如传送、运算、移位、跳转等操作,它是指令中不可缺少的组成部分操作数是指令执行的参与者,即各种操作的对象有些指令不需要操作数,通常的指令都有一个或两个操作数,也有个别指令有3个甚至4个操作数,3,每种指令的操作码:用一个唯一的助记符表示(指令功能的英文缩写)指令中的操作数:可以是一个具体的数值可以是存放数据的寄存器或指明数据在主存位置的存储器地址,指令举例:MOVAX,BXSUBBX,123ADDAX,3ANDDL,80HMULBLPUSHDXCLDCBW,4,寻址方式:取得操作数地址的方式,指令系统设计了多种操作数的来源寻找操作数的过程就是操作数的寻址操作数采取哪一种寻址方式,会影响机器运行的速度和效率,如何寻址一个操作数对程序设计很重要,与数据有关的寻址方式与转移地址有关的寻址方式,5,3.180 x86的寻址方式,与数据有关的寻址方式与转移地址有关的寻址方式,3.1.1与数据有关的寻址方式以MOV指令为例,操作码操作数1,操作数2;注释操作数2,称为源操作数src,它表示参与指令操作的一个对象操作数1,称为目的操作数dest,它不仅可以作为指令操作的一个对象,还可以用来存放指令操作的结果分号后的内容是对指令的解释,6,MOVdest,src;destsrcMOV指令的功能是将源操作数src传送至目的操作数dest,例如:MOVAL,05H;AL05HMOVBX,AX;BXAXMOVAX,SI;AXDS:SIMOVAX,BP+06H;AXSS:BP+06HMOVAX,BX+SI;AXDS:BX+SI,7,1.立即寻址方式*操作数在指令中给出MOVAL,5MOVAX,3064H*只能用于SRC字段*SRC和DST的字长一致MOVAH,3064H,8,2.寄存器寻址方式*操作数在指定的寄存器中MOVAX,BXMOVAL,BH*字节寄存器只有AHALBHBLCHCLDHDL*SRC和DST的字长一致MOVAH,BX*CS不能用MOV指令改变MOVCS,AX,9,3.直接寻址方式*有效地址EA由指令直接给出有效地址EA:操作数的偏移地址物理地址PA=16d(DS)+EA例:MOVAX,2000HEA=2000H,假设(DS)=3000H,那么(PA)=32000H例:操作数地址可由变量(符号地址)表示MOVAH,VALUE;(VALUEDB10),50,30,32000,AHAL,30,50,(AX)=3050H,10,3.直接寻址方式*隐含的段为数据段DS*可使用段跨越前缀MOVAX,ES:2000H*使用变量时,要注意变量的属性VALUEDB10MOVAX,VALUEMOVAX,WORDPTRVALUE*适于处理单个变量,11,4.寄存器间接寻址方式*EA在基址寄存器(BX/BP)或变址寄存器(SI/DI)中BX,SI,DI(DS)物理地址=16d(DS)+BP(SS)物理地址=16d(SS)+(BP)MOVAX,BX;PA=16d(DS)+(BX)MOVAX,ES:BX;PA=16d(ES)+(BX)MOVAX,BP;PA=16d(SS)+(BP),(BX)(SI)(DI),12,4.寄存器间接寻址方式*不允许使用AX、CX、DX存放EAMOVAX,CX*SRC和DST的字长一致MOVDL,BX;BX指示一个字节单元MOVDX,BX;BX指示一个字单元*适于数组、字符串、表格的处理,13,5.寄存器相对寻址方式*例:MOVAX,COUNTSI或MOVAX,COUNT+SI假设(DS)=3000H,(SI)=2000H,COUNT=3000H那么PA=35000H假设(35000H)=1234H,那么(AX)=1234H*适于数组、字符串、表格的处理,有效地址=,(BX)(BP)(SI)(DI),+,8位16位,位移量,14,6.基址变址寻址方式*MOVAX,BXDI或MOVAX,BX+DIMOVAX,ES:BXSI*适于数组、字符串、表格的处理*必须是一个基址寄存器和一个变址寄存器的组合MOVAX,BXBPMOVAX,SIDI,有效地址=,(BX)(BP),+,(SI)(DI),15,7.相对基址变址寻址方式*MOVAX,MASKBXSI或MOVAX,MASKBX+SI或MOVAX,MASK+BX+SI*适于堆栈处理和数组处理,有效地址=,(BX)(BP),+,(SI)(DI),+,8位16位,位移量,16,3.1.2与转移地址有关的寻址方式,用来确定转移指令及CALL指令的转向地址。,段内寻址段间寻址,段内直接寻址段内间接寻址,段间直接寻址段间间接寻址,以转移(条件转移/无条件转移)指令为例,段内:转移指令与转向的目标指令在同一代码段中,(CS)不变。段间:转移指令与转向的目标指令在两个代码段中,(CS)变化。,17,1.段内直接寻址转向的有效地址EA=物理地址=16d(CS)+(IP)新例:JMPAGAIN(IP)当前MOVBX,AXAGAIN:例:JMPNEARPTRNEXT近转移-32768+32767JMPSHORTNEXT短转移-128+127,(IP)当前+位移量(8bit/16bit),(IP)新,(IP)新,18,2.段内间接寻址转向的有效地址EA是一个寄存器或存储单元的内容。(可用除立即数以外的任何一种数据寻址方式得到)物理地址=16d(CS)+EA例:(BX)=1256H(SI)=528EHTABLE=20A2H(DS)=2000H(232F8H)=3280H(264E4H)=2450HJMPBX;(IP)=1256HJMPTABLEBXJMPWORDPTRTABLEBX;(IP)=3280HJMPBXSIJMPWORDPTRBXSI;(IP)=2450H,19,3.段间直接寻址用指令中提供的转向段地址和偏移地址取代CS和IP。物理地址=16d(CS)+(IP)例:,code1segmentjmpfarptrnextcode1ends,code2segmentnext:.code2ends,20,4.段间间接寻址用存储器中的两个相继字的内容取代CS和IP。(存储单元的地址可用除立即数和寄存器以外的任何一种数据寻址方式得到)物理地址=16d(CS)+(IP)例:JMPDWORDPTRINTERS+BX,21,3.380 x86的指令系统,数据传送指令算术指令逻辑指令串处理指令控制转移指令处理机控制指令,注意:1.指令的基本功能2.指令的执行对标志位的影响3.对寻址方式或寄存器使用的限制和隐含使用的情况,22,3.3.1数据传送指令通用数据传送指令累加器专用传送指令地址传送指令标志寄存器传送指令,23,通用数据传送指令传送指令:MOVDST,SRC执行操作:(DST)(SRC)注意:*DST不能是CS*不影响标志位*DST、SRC不同时为存储器*DST、SRC不同时为段寄存器MOVDS,ES*立即数不能直接送段寄存器MOVDS,2000H,24,例:MOVAX,DATA_SEGMOVDS,AX例:MOVAL,E;MOVAL,45H例:MOVBX,OFFSETTABLE例:MOVAX,YBPSI,25,进栈指令:PUSHSRC执行操作:(SP)(SP)-2(SP)+1,(SP)(SRC)出栈指令:POPDST执行操作:(DST)(SP)+1,(SP)(SP)(SP)+2堆栈:“先进后出”的存储区,存在于堆栈段中,SP在任何时候都指向栈顶。注意:*堆栈操作必须以字为单位。*不影响标志位*不能用立即寻址方式PUSH1234H*DST不能是CSPOPCS,26,例:假设(AX)=2107H,执行PUSHAX,(SP),低地址,高地址,(SP),07H21H,低地址,高地址,进栈方向,*,*,*,*,PUSHAX执行前,PUSHAX执行后,27,例:POPBX,(SP),低地址,高地址,(SP),07H21H,低地址,高地址,出栈方向,07H21H,(BX)=2107H,POPBX执行前,POPBX执行后,*,*,*,*,28,例:PUSHDSSUBAX,AXPUSHAXRET例:PUSHAXPUSHBXPOPBXPOPAX,;其间用到AX和BX寄存器,29,交换指令:XCHGOPR1,OPR2执行操作:(OPR1)(OPR2)注意:*不影响标志位*不允许使用段寄存器例:XCHGBX,BP+SIXCHGAL,BH,30,累加器专用传送指令(只限于使用AX或AL)输入指令(I/OCPU)长格式:INAL,PORT(字节)INAX,PORT(字)执行操作:(AL)(PORT)(字节)(AX)(PORT+1,PORT)(字)短格式:INAL,DX(字节)INAX,DX(字)执行操作:(AL)(DX)(字节)(AX)(DX)+1,(DX)(字),31,输出指令(CPUI/O)长格式:OUTPORT,AL(字节)OUTPORT,AX(字)执行操作:(PORT)(AL)(字节)(PORT+1,PORT)(AX)(字)短格式:OUTDX,AL(字节)OUTDX,AX(字)执行操作:(DX)(AL)(字节)(DX)+1,(DX)(AX)(字),32,注意:*不影响标志位*前256个端口号00HFFH可直接在指令中指定(长格式)如果端口号256,端口号DX(短格式)例:INAX,28H;MOVDX,28H;INAX,DXMOVDATA_WORD,AX例:MOVDX,3FCH例:OUT5,ALINAX,DX,33,换码指令:XLAT或XLATOPR执行操作:(AL)(BX)+(AL)例:MOVBX,OFFSETTABLE;(BX)=0040HMOVAL,3XLATTABLE指令执行后(AL)=33H注意:*不影响标志位*字节表格(长度不超过256)首地址(BX)*需转换代码(AL),34,地址传送指令有效地址送寄存器指令:LEAREG,SRC执行操作:(REG)SRC指针送寄存器和DS指令:LDSREG,SRC执行操作:(REG)(SRC)(DS)(SRC+2)4个相继字节寄存器(通常是SI)、DS指针送寄存器和ES指令:LESREG,SRC执行操作:(REG)(SRC)(ES)(SRC+2)4个相继字节寄存器(通常是DI)、ES,35,例:LEABX,BX+SI+0F62H例:LDSSI,10H例:LESDI,BX例:,(DS):1000H40H,00H,00H,30H,TABLE,MOVBX,TABLE;(BX)=0040HMOVBX,OFFSETTABLE;(BX)=1000HLEABX,TABLE;(BX)=1000HLDSBX,TABLE;(BX)=0040H;(DS)=3000HLESBX,TABLE;(BX)=0040H;(ES)=3000H,注意:*不影响标志位*REG不能是段寄存器*SRC必须为存储器寻址方式,36,标志寄存器传送指令标志送AH指令:LAHF执行操作:(AH)(PSW的低字节)AH送标志寄存器指令:SAHF执行操作:(PSW的低字节)(AH)标志进栈指令:PUSHF执行操作:(SP)(SP)-2(SP)+1,(SP)(PSW)标志出栈指令:POPF执行操作:(PSW)(SP)+1,(SP)(SP)(SP)+2*影响标志位,37,3.3.2算术指令加法指令减法指令乘法指令除法指令十进制调整指令,38,加法指令加法指令:ADDDST,SRC执行操作:(DST)(SRC)+(DST)带进位加法指令:ADCDST,SRC执行操作:(DST)(SRC)+(DST)+CF加1指令:INCOPR执行操作:(OPR)(OPR)+1,注意:*除INC指令不影响CF标志外,均对条件标志位有影响。,39,加法指令对条件标志位(CF/OF/ZF/SF)的影响:,CF位表示无符号数相加的溢出。OF位表示带符号数相加的溢出。,n=8bit带符号数(-128127)无符号数(0255),41,例:双精度数的加法(DX)=0002H(AX)=0F365H(BX)=0005H(CX)=0E024H指令序列(1)ADDAX,CX(2)ADCDX,BX(1)执行后,(AX)=0D389HCF=1OF=0SF=1ZF=0(2)执行后,(DX)=0008HCF=0OF=0SF=0ZF=0,42,减法指令减法指令:SUBDST,SRC执行操作:(DST)(DST)-(SRC)带借位减法指令:SBBDST,SRC执行操作:(DST)(DST)-(SRC)-CF减1指令:DECOPR执行操作:(OPR)(OPR)-1求补指令:NEGOPR执行操作:(OPR)-(OPR)比较指令:CMPOPR1,OPR2执行操作:(OPR1)-(OPR2),注意:*除DEC指令不影响CF标志外,均对条件标志位有影响。,减法指令对条件标志位(CF/OF/ZF/SF)的影响:,CF位表示无符号数减法的溢出。OF位表示带符号数减法的溢出。NEG指令对CF/OF的影响:CF位:操作数为0时,求补的结果使CF=0,否则CF=1。OF位:字节运算对-128求补或字运算对-32768求补时OF=1,否则OF=0。,或,44,例:x、y、z均为双精度数,分别存放在地址为X,X+2;Y,Y+2;Z,Z+2的存储单元中,用指令序列实现wx+y+24-z,并用W,W+2单元存放w。MOVAX,XMOVDX,X+2ADDAX,YADCDX,Y+2;x+yADDAX,24ADCDX,0;x+y+24SUBAX,ZSBBDX,Z+2;x+y+24-zMOVW,AXMOVW+2,DX;结果存入W,W+2单元,45,乘法指令无符号数乘法指令:MULSRC执行操作:字节操作数(AX)(AL)*(SRC)字操作数(DX,AX)(AX)*(SRC)带符号数乘法指令:IMULSRC,注意:*AL(AX)为隐含的乘数寄存器。*AX(DX,AX)为隐含的乘积寄存器。*SRC不能为立即数。*除CF和OF外,对条件标志位无定义。,46,乘法指令对CF/OF的影响:,例:(AX)=16A5H,(BX)=0611H(1)IMULBL;(AX)(AL)*(BL);A5*115B*11=060BF9F5;(AX)=0F9F5HCF=OF=1(2)MULBX;(DX,AX)(AX)*(BX);16A5*0611=00895EF5;(DX)=0089H(AX)=5EF5HCF=OF=1,47,除法指令无符号数除法指令:DIVSRC执行操作:字节操作(AL)(AX)/(SRC)的商(AH)(AX)/(SRC)的余数字操作(AX)(DX,AX)/(SRC)的商(DX)(DX,AX)/(SRC)的余数带符号数除法指令:IDIVSRC执行操作:与DIV相同,但商和余数带符号,且余数符号与被除数符号相同。注意:*AX(DX,AX)为隐含的被除数寄存器。*AL(AX)为隐含的商寄存器。*AH(DX)为隐含的余数寄存器。*SRC不能为立即数。*对所有条件标志位均无定义。,48,符号扩展指令:CBWALAX执行操作:若(AL)的最高有效位为0,则(AH)=00H若(AL)的最高有效位为1,则(AH)=0FFHCWDAX(DX,AX)执行操作:若(AX)的最高有效位为0,则(DX)=0000H若(AX)的最高有效位为1,则(DX)=0FFFFH,注意:*无操作数指令*隐含对AL或AX进行符号扩展*不影响条件标志位,例:(AX)=0BA45HCBW;(AX)=0045HCWD;(DX)=0FFFFH(AX)=0BA45H,49,例:x,y,z,v均为16位带符号数,计算(v-(x*y+z-540)/xMOVAX,XIMULY;x*yMOVCX,AXMOVBX,DXMOVAX,ZCWDADDCX,AXADCBX,DX;x*y+zSUBCX,540SBBBX,0;x*y+z-540MOVAX,VCWDSUBAX,CXSBBDX,BX;v-(x*y+z-540)IDIVX;(v-(x*y+z-540)/x,50,十进制调整指令BCD码:用二进制编码的十进制数,又称二-十进制数压缩的BCD码:用4位二进制数表示1位十进制数例:(59)10(01011001)BCD非压缩的BCD码:用8位二进制数表示1位十进制数例:(59)10(0000010100001001)BCD数字的ASCII码是一种非压缩的BCD码DIGITASCIIBCD030H00110000131H00110001232H00110010939H00111001,51,例:写出(3590)10的压缩BCD码和非压缩BCD码,并分别把它们存入数据区PAKED和UNPAK。压缩BCD:(3590)10(0011010110010000)BCD非压缩BCD:(3590)10(00000011000001010000100100000000)BCD,52,压缩的BCD码调整指令,加法的十进制调整指令:DAA执行操作:(AL)(AL)压缩BCD减法的十进制调整指令:DAS执行操作:(AL)(AL)压缩BCD,19压缩BCD:00011001,+08+00001000,2700100001+110,(00100111)BCD,AF=1,问题的提出:,注意:*隐含的操作寄存器为AL*紧接在加减指令之后使用*影响条件标志位(对OF无定义),53,调整方法:AF1或(AL)03AF,则(AL)(AL)06H,AF1CF1或(AL)47AF,则(AL)(AL)60H,CF1(DAA做+,DAS做-)例:DATASEGMENTBCD1DB34H,18H;(1834)BCDBCD2DB89H,27H;(2789)BCDBCD3DB2DUP(?)DATAENDS(1)BCD3BCD1+BCD2;(4623)BCD(2)BCD3BCD1-BCD2;(9045)BCD=-955,54,(1)MOVAL,BCD1;(AL)=34HADDAL,BCD2;(AL)=34+89=BDHDAA;(AL)=BD+60+06=23HAF=CF=1MOVBCD3,AL;(BCD3)=23HMOVAL,BCD1+1;(AL)=18HADCAL,BCD2+1;(AL)=18+27+1=40HAF=1CF=0DAA;(AL)=40+06=46HMOVBCD3+1,AL;(BCD3+1)=46H(2)MOVAL,BCD1;(AL)=34HSUBAL,BCD2;(AL)=34-89=ABHDAS;(AL)=AB-60-06=45HAF=CF=1MOVBCD3,AL;(BCD3)=45HMOVAL,BCD1+1;(AL)=18HSBBAL,BCD2+1;(AL)=18-27-1=F0HDAS;(AL)=F0-60=90HMOVBCD3+1,AL;(BCD3+1)=90H,55,非压缩的BCD调整指令加法调整指令:AAA(AL)(AL)非压缩BCD减法调整指令:AAS(AL)(AL)非压缩BCD注意:*隐含的操作寄存器为AL*紧接在加减指令之后使用*除AF、CF外,对其它条件标志位无定义调整方法:若(AL)03=09,且AF=0,则(AL)47=0,AFCF0若(AL)03=AF,或AF=1,则(AL)(AL)6,(AL)470(AH)(AH)1,AFCF1,(AAA做+,AAS做-),56,乘法调整指令:AAM(AL)(AX)非压缩BCD注意:*隐含的操作寄存器为AL*紧接在MUL指令之后使用*对OF、CF、AF无定义调整方法:(AL)除以0AH,商(AH),余数(AL)除法调整指令:AAD被除数(AX)=(0000 xxxx0000 xxxx)非压缩BCD除数=(0000 xxxx)非压缩BCD在DIV指令之前:(AL)20AH(AH)+(AL)(AH)20,57,例:(AX)0504H(BL)03H(1)(AL)*(BL)MULBL;(AX)=000CHAAM;(AH)=01H(AL)=02H(2)(AX)/(BL)AAD;(AH)=00H(AL)=36HDIVBL;(AH)=00H(AL)=12HAAM;(AH)=01H(AL)=08H,58,3.3.3逻辑指令逻辑运算指令移位指令,59,逻辑非指令:NOTOPR*OPR不能为立即数执行操作:(OPR)(OPR)*不影响标志位逻辑与指令:ANDDST,SRC执行操作:(DST)(DST)(SRC)逻辑或指令:ORDST,SRC执行操作:(DST)(DST)(SRC)异或指令:XORDST,SRC执行操作:(DST)(DST)(SRC)测试指令:TESTOPR1,OPR2执行操作:(OPR1)(OPR2),CFOFSFZFPFAF00*无定义,根据运算结果设置,60,例:屏蔽AL的0、1两位ANDAL,0FCH例:置AL的第5位为1ORAL,20H例:使AL的0、1位变反XORAL,3例:测试某些位是0是1TESTAL,1JZEVEN,*AND11111100*00,*OR00100000*1*,*XOR00000011*,61,移位指令:逻辑左移SHLOPR,CNT逻辑右移SHROPR,CNT算术左移SALOPR,CNT(同逻辑左移)算术右移SAROPR,CNT,62,循环移位指令:循环左移ROLOPR,CNT循环右移ROROPR,CNT带进位循环左移RCLOPR,CNT带进位循环右移RCROPR,CNT,63,注意:*OPR可用立即数以外的任何寻址方式*CNT=1,SHLOPR,1CNT1,MOVCL,CNTSHLOPR,CL;以SHL为例*条件标志位:CF=移入的数值1CNT=1时,最高有效位的值发生变化0CNT=1时,最高有效位的值不变移位指令:SF、ZF、PF根据移位结果设置AF无定义循环移位指令:不影响SF、ZF、PF、AF,OF=,64,例:(AX)=0012H,(BX)=0034H,把它们装配成(AX)=1234HMOVCL,8ROLAX,CLADDAX,BX例:(BX)=84F0H(1)(BX)为无符号数,求(BX)/2SHRBX,1;(BX)=4278H(2)(BX)为带符号数,求(BX)/2SARBX,1;(BX)=0C278H(3)把(BX)中的16位数每4位压入堆栈,0008,0004,000F,0000(SP),MOVCH,4;循环次数MOVCL,4;移位次数NEXT:ROLBX,CLMOVAX,BXANDAX,0FHPUSHAXDECCHJNZNEXT,65,3.3.4串处理指令串传送指令存入串指令从串取指令串比较指令串扫描指令,配合使用的前缀有:REP重复REPE/REPZ相等/为零则重复REPNE/REPNZ不相等/不为零则重复,66,与REP配合工作的MOVS/STOS/LODSREPMOVS/STOS/LODS执行操作:(1)如(CX)=0则退出REP,否则转(2)(2)(CX)(CX)-1(3)执行MOVS/STOS/LODS(4)重复(1)(3),67,MOVS串传送指令MOVSDST,SRCMOVSB(字节)MOVSW(字)例:MOVSES:BYTEPTRDI,DS:SI执行操作:(1)(DI)(SI)(2)字节操作:(SI)(SI)1,(DI)(DI)1字操作:(SI)(SI)2,(DI)(DI)2方向标志DF=0时用+,DF=1时用-。REPMOVS:将数据段中的整串数据传送到附加段中。源串(数据段)目的串(附加段)执行REPMOVS之前,应先做好:(1)源串首地址(末地址)SI(2)目的串首地址(末地址)DI(3)串长度CX(4)建立方向标志(CLD使DF=0,STD使DF=1),68,(SI),低地址,高地址,数据段,附加段,(SI),(DI),(DI),DF=0,DF=1,69,例3.58datareasegmentmess1dbpersonal_computerdatareaendsextrasegmentmess2db17dup(?)extraendscodesegmentleasi,mess1leadi,mess2movcx,17cldrepmovsbcodeends,leasi,mess1+16leadi,mess2+16movcx,17stdrepmovsb,70,STOS存入串指令STOSDSTSTOSB(字节)STOSW(字)执行操作:字节操作:(DI)(AL),(DI)(DI)1字操作:(DI)(AX),(DI)(DI)2例:把附加段中的5个字节缓冲区置为20Hleadi,mess2moval,20Hmovcx,5cldrepstosb,71,LODS从串取指令LODSSRCLODSB(字节)LODSW(字)执行操作:字节操作:(AL)(SI),(SI)(SI)1字操作:(AX)(SI),(SI)(SI)2,注意:*LODS指令一般不与REP联用*源串必须在数据段中,目的串必须在附加段中,但源串允许使用段跨越前缀来修改。*不影响条件标志位,72,与REPE/REPZ和REPNE/REPNZ配合工作的CMPS和SCASREPE/REPZ(REPNE/REPNZ)CMPS/SCAS执行操作:(1)如(CX)=0或ZF=0(ZF=1)则退出,否则转(2)(2)(CX)(CX)-1(3)执行CMPS/SCAS(4)重复(1)(3),73,CMPS串比较指令CMPSSRC,DSTCMPSB(字节)CMPSW(字)执行操作:(1)(SI)-(DI)根据比较结果设置条件标志位:相等ZF=1不等ZF=0(2)字节操作:(SI)(SI)1,(DI)(DI)1字操作:(SI)(SI)2,(DI)(DI)2,74,SCAS串扫描指令SCASDSTSCASB(字节)SCASW(字)执行操作:字节操作:(AL)-(DI),(DI)(DI)1字操作:(AX)-(DI),(DI)(DI)2,75,例3.60从一个字符串中查找一个指定的字符messdbCOMPUTERleadi,messmoval,Tmovcx,8cldrepnescasb,(DI):相匹配字符的下一个地址(CX):剩下还未比较的字符个数,76,例3.61比较两个字符串,找出它们不相匹配的位置leasi,mess1leadi,mess2movcx,8cldrepecmpsb,例:反向传送,77,3.3.5控制转移指令无条件转移指令*条件转移指令*循环指令*子程序调用和返回指令*中断指令*不影响条件标志位,78,无条件转移指令JMP段内直接短转移:JMPSHORTOPR执行操作:(IP)(IP)+8位位移量(-128127)例:.JMPSHORTHELLOHELLO:MOVAL,3,79,段内直接近转移:JMPNEARPTROPR执行操作:(IP)(IP)+16位位移量段内间接转移:JMPWORDPTROPR执行操作:(IP)(EA)段间直接(远)转移:JMPFARPTROPR执行操作:(IP)OPR的段内偏移地址(CS)OPR所在段的段地址段间间接转移:JMPDWORDPTROPR执行操作:(IP)(EA)(CS)(EA+2),80,条件转移指令,注意:只能使用段内直接寻址的8位位移量(-128127),根据单个条件标志的设置情况转移:格式测试条件JZ(JE)OPRZF=1JNZ(JNE)OPRZF=0JSOPRSF=1JNSOPRSF=0JOOPROF=1JNOOPROF=0JPOPRPF=1JNPOPRPF=0JCOPRCF=1(JB、JNAE)JNCOPRCF=0(JNB、JAE),81,比较两个无符号数,并根据比较结果转移:*格式测试条件JNBE(JA)OPRCFZF=0*适用于地址或双精度数低位字的比较,82,比较两个带符号数,并根据比较结果转移:*格式测试条件JNLE(JG)OPR(SFOF)ZF=0*适用于带符号数的比较测试CX的值为0则转移:格式测试条件JCXZOPR(CX)=0,返回,83,例3.64X50,转到TOO_HIGH;计算X-Y,溢出转到OVERFLOW,否则|X-Y|RESULT,MOVAX,XCMPAX,50JGTOO_HIGHSUBAX,YJOOVERFLOWJNSNONNEGNEGAXNONNEG:MOVRESULT,AXTOO_HIGH:OVERFLOW:,84,例3.65、是双精度数,分别存于DX,AX及BX,CX中,时转X,否则转Y。,CMPDX,BXJGXJLYCMPAX,CXJAXY:.X:.,85,循环指令注意:*CX中存放循环次数*只能使用段内直接寻址的8位位移量(-128127)LOOPLOOPZ/LOOPELOOPNZ/LOOPNE执行步骤:(1)(CX)(CX)-1(2)检查是否满足测试条件,如满足则(IP)(IP)+8位位移量,实行循环;不满足则IP不变,退出循环。,86,循环指令:LOOPOPR测试条件:(CX)0为零或相等时循环指令:LOOPZ(LOOPE)OPR测试条件:ZF=1且(CX)0不为零或不相等时循环指令:LOOPNZ(LOOPNE)OPR测试条件:ZF=0且(CX)0,87,例3.67求首地址为ARRAY的M个字之和,结果存入TOTAL。,MOVCX,MMOVAX,0MOVSI,AXSTART_LOOP:ADDAX,ARRAYSIADDSI,2LOOPSTART_LOOPMOVTOTAL,AX,88

温馨提示

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

评论

0/150

提交评论