资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第3章 80 x86指令系统,3.4 8086/8088,指令系统,3.4.3,逻辑运算与移位类指令(续),2.,移位类指令,名称,助记符指令,操作数类型,操作说明,Shift Logical left,SHL src,1 SHL src,CL,B,W B,W,src,逻辑左移一位,填,0,src,逻辑左移,CL,位,填,0,Shift,Ari-thmetic left,SAL src,1 SAL src,CL,B,W B,W,src,算术左移一位,填,0 src,算术左移,CL,位,填,0,Shift Lo-gical Right,SHR src,1 SHR src,CL,B,W B,W,src,逻辑右移一位,填,0,src,逻辑右移,CL,位,填,0,Shift Arith-metic Right,SAR src,1 SAR src,AL,B,W B,W,src,算术右移一位,填符号,src,算术右移,CL,位,填符号,移位指令操作示意图,CF,最高位,src,0,CF,最高位,src,0,SAL,SHL,由图可见,算术左移指令与逻辑左移指令的功能完全相同。左移一次,末位补,0,,相当于乘以,2,。利用移位指令可实现快速乘法。如:,SAL AL,,,1,;相当于(,AL,),(,AL,),2,MOV CL,4,SALAX,,,CL,;相当于(,AX,),(,AX,),2,4,移位指令操作示意图,CF,最高位,src,CF,最高位,src,0,SAR,SHR,SHR,与,SAR,功能不同,,SHR,移动一次相当于无符号数除,2,运算,而,SAR,移动一次相当于带符号数除,2,运算。因而,可用右移指令实现快速除法运算。,3.,循环移位指令,名称,助记符指令,操作数类型,操作说明,Rotate left,ROL src,1 ROL src,CL,B,W B,W,循环左,/,右移位不通过,CF,Rotate,Right,ROR src,1 ROR src,CL,B,W B,W,Rotate left though carry,RCL src,1 RCL src,CL,B,W B,W,循环左,/,右移位通过,CF,Rotate right though carry,RCR src,1 RCR src,AL,B,W B,W,循环移位指令操作示意图,CF,最高位,src,CF,最高位,src,CF,最高位,src,CF,最高位,src,0,ROL,RCL,ROR,RCR,不含进位循环移位指令又称小循环,含进位循环移位指令又称大循环。,例:,SALAX,,,1,RCL DX,,,1,;实现,(DX),(AX)(DX),(AX)2,运算。,例:,SALFIRST,WORD,,,1,RCLSECOND,WORD,,,1,;可实现存于连续两个存储单元的,32,位数据,2,。,从示意图,可以看出所有移位指令对,CF,直接有影响,对其余标志位也有影响。但对,AF,的影响无实际意义。,3.4.4,串操作(,String Manipulation,)类指令,操作类型,串传送指令,MOVS dst,src MOVSB MOVSW,(ES:DI)(DS:SI),DF=0:+(SI)(SI),(SI)(SI),字节传送,1,字传送,2,串比较指令,CMPS dst,src CMPSB CMPSW,(DS:SI),(ES:DI),建立标志(其余同上),串搜索指令,SCANS dst SCANSB SCANSW,(AX),(ES:DI),建立标志(其余同上),取字符串指令,LODS src LODSB LODSW,(AX)(DS:SI),建立标志(其余同上),存字符串指令,STOS dst STOSB STOSW,(,(,ES,:,D I,),)(AX),建立标志(其余同上),助记符指令,名称,B,,,W B W,B,,,W B W,B,,,W B W,B,,,W B W,B,,,W B W,操作说明,重复前缀助记符与功能,助记符格式,功能说明,REP MOVS,或,REP STOS,当(,CX,),0,时,重复执行,MOVS,(或,STOS,),(,CX,),(,CX,),1,REPE CMPS,或,REPZ CMPS,REPE SCAS,或,REPZ SCAS,当(,CX,),0,,且,ZF,1,时,重复执行,CMPS,(或,SCAS,),,(,CX,),(,CX,),1,。,REPNE CMPS,或,REPNZ CMPS,REPNE SCAS,或,REPNZ SCAS,当(,CX,),0,,且,ZF,0,时,重复执行,CMPS,(或,SCAS,),,(,CX,),(,CX,),1,。,串传送指令应用,例:将,DS,:,AREA1,开始存放的,100,个字节搬到,ES,:,AREA2,为首趾的区域中。,MOVSI,OFFSET AREA1,MOVDI,OFFSET AREA2,MOVCX,100,AGAIN:MOVSAREA2,AREA1,DECCX,JNZAGAIN,方框中的,3,条指令可用一条带前缀的指令完成:,REPMOVSAREA2,AREA1,例:比较,DS,段和,ES,段中的两个字节串。它们分别存放在,DS,:,FLAGS,和,ES,:,STATUS,开始的单元中。长度,5,,试比较二者是否相同,如不同,把不同时位置,记入,DS,:,POINT,单元。,LEASI,FLAGS,LEADI,STATUS,MOVCX,5,REPE CMPSB,JNEFOUTD,SAME:RET,FOUTD:INCCX,MOVWORD PTR POINT,CX,RET,串比较指令应用,串搜索指令应用,例:,AL,存放收到字符,,DS,:,COMMAND,开始的,16,个单元,存放“,012,DEF,”16,个,ASCCII,字符命令串。若,AL,收到的字符与其中的某个相同则显示,否则出错处理。,MOVDI,OFFSET COMMAND,MOVBX,DS,MOVES,BX,CLD,MOVCX,10H,REPNZSANSB,JNZERROR,显示子程序,ERROR:RET,存字符串指令应用,例:将,ES,段中,0400,0500H,单元清,0,。,;,LEADI,0400H,MOVCX,0080H,CLD,XORAX,AX,REPSTRSW,取字符串指令应用,因为,AL,(或,AX,)中的内容会被最后取入的字符覆盖,所以,LODS,指令不能加重复前缀。,3.4.5,控制转移(,Contronl Jump,)类指令,无条件转移,(,Jump,)调用(,CALL,)和返回(,RETURN,)类指令,条件转移指令,循环控制指令,中断及中断返回指令,1.,无条件转移调用和返回指令,(,1,),无条件转移指令(,JMP,),段内直接寻址(,Intrasegment Direct Addressing),近程转移,:,JMP,NEAR PTR,TAGET,;位移量位,16,位带符号数,,寻址范围,32768,32767,。,短程转移:,JMP SHORT,OBJECT,;位移量,8,位的带符号数,寻址范围,128,127,注:无论是,近程转移,还是短程转移,都不能全部寻址段内全部,64KB,目的地址,可省略,段内间接寻址,(,Intrasegment Indirect Addressing),JMP,BX,;,EA,(,BX,),JMP,WORD PTRSI,如果,(DS)=2000H,(BX)=1200H,(SI)=5230H,存储单元(,25230H)=2450H,。,则,JMP BX,执行后,,EA,(IP),(BX)=1200H,,,JMP WORD PTRSI,执行后,,EA,(,IP,)(,16(DS)+(SI),),=,(,20000H,5230H,)(,25230,H,),2540H,地址的内容,段间直接寻址,(,Intersegment Direct Addressing,),又称远程转移指令,指令格式为:,JMP,FARPTR,LABEL,操作是:(,IP,),LABEL,距另一段首地址偏移量,,(,CS,),转向地址的段地址。,段间间接寻址,(,Intersegment Indirect Addressing,)例如:,JMP DWORD PTRBXSI,操作:(,IP,),(,BX,)(,SI,),,(,CS,),(,BX,)(,SI,),2,)。,转移地址的符号,段间转移运算符,(,2,)调用指令,CALL,指令格式为:,CALLdst,操作包括:,(SP)(SP),2,(SP+1),(SP)(CS),(CS)SEG,(SP)(SP),2,(SP+1),(SP)(IP),(IP)dst,段间调用,段内调用,各种调用指令的格式,CALL NEAR PTR ROUT,CALL 1000H,CALL BX,CALL 2500H,:,1400H,CALL FAR PTR SUBR,CALL DWORD PTRDI,段内直接调用,段内间接调用,段间直接调用,段间间接调用,(,3,)返回指令,RET,格式:,RET Optional,pop,value,操作:,(IP)(SP,1),,,(SP),(SP)(SP)+2,(CS)(SP,1),,,(SP),(SP)(SP)+2,RET,指令还可以带立即数,n,如,RET 4,。作用是在返回地址出栈后,(,SP,),(,SP,),4,。,用途:带参数过程(子程序)完成后,释放栈空间。,段内返回,段间返回,由与之相配的,CALL,中的,属性决定,例:,MOVSP,01FEH,04F0CALLMY,PROG,04F3NEXT:MOVAX,BX,0500MY,PROGPROC,0500MOVCL,6,051ERET,051FMY,PROGENDP,01FE,04F3,M,01F8,01FA,01FC,01FE,SP,IP,执行调用前,例:,MOVSP,01FEH,04F0CALLMY,PROG,04F3NEXT:MOVAX,BX,0500MY,PROGPROC,0500MOVCL,6,051ERET,051FMY,PROGENDP,01FC,0500,M,01F8,01FA,01FC,01FE,SP,IP,F304,执行调用之后,例:,MOVSP,01FEH,04F0CALLMY,PROG,04F3NEXT:MOVAX,BX,0500MY,PROGPROC,0500MOVCL,6,051ERET,051FMY,PROGENDP,01FE,04F3,M,01F8,01FA,01FC,01FE,SP,IP,执行返回后,2.,条件转移指令,格式:,JCC Target,CC,成立,?,(,IP,),Target,(,IP,),(,IP,),2,JCC Target,N,Y,条件转移指令的分类,(,1,),根据单个标志条件进行测试,作为转移的依据:,(,2,)根据标志间的组合条件进行测试,转移的依据:,(,3,)根据,CX,寄存器值进行测试,作为转移的依据。,(,1,)单个标志为条件测试转移指令,指令助记符格式,条件说明,测试标志,JZ/JE Target,结果为,0,ZF=1,JNZ/JNE Target,结果不为,0,ZF=0,JS Target,结果为负,SF=1,JNS Target,结果为正,SF=0,JP/JPE Target,结果低,8,位,1,个数为偶数,PF=1,JNP/JPO Target,结果低,8,位,1,个数为奇数,PF=0,JO Target,结果溢出,OF=1,JNO Target,结果未溢出,OF=0,JB/JNAE/JC Target,结果低于(无符号),CF=1,JNB/JAE/JNC Target,结果不低于(无符号),CF=0,(,2,)根据标志间组合条件测试转移指令,条件说明,测试标志,CFZ
展开阅读全文