《第6章控制转移类指.ppt》由会员分享,可在线阅读,更多相关《第6章控制转移类指.ppt(26页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、4、控制转移类指令2.6.1 条件转移指令2.6.2 无条件转移指令2.6.3 循环指令 2.6.4 子程序调用指令2.6.5 中断指令2.6.1 条件转移指令条件转移指令1 1简单条件转移指令简单条件转移指令2 2无符号数条件转移指令无符号数条件转移指令3.3.有符号数条件转移指令有符号数条件转移指令 它们都有通用的语句格式和功能。它们都有通用的语句格式和功能。语句格式:语句格式:标号:标号:操作符操作符 短标号短标号功功能能:如如果果条条件件满满足足,则则(IPIP)位位移移量量IPIP。1 1简单条件转移指令简单条件转移指令2无符号数条件转移指令表2.2无符号数条件转移指令【例例】比比较
2、较无无符符号号数数大大小小,将将较较大大的的数数存存放放AXAX寄存器。寄存器。CMPCMPAXAX,BX BX ;(;(AXAX)()(BXBX)JNBJNBNEXTNEXT ;若若AX=BXAX=BX,转转移移到到NEXTNEXTXCHGXCHGAXAX,BX BX ;若若AXBXAX=BXAX=BX,转转移移到到NEXTNEXTXCHGXCHGAXAX,BXBX;若若AXBXAXBX,交换交换NEXTNEXT:2.6.2 无条件转移指令无条件转移指令表表2.4 无条件转移指令的语句格式及功能无条件转移指令的语句格式及功能2.6.3 2.6.3 循环指令循环指令 1循环指令循环指令LOOP
3、2相等相等/为零循环指令为零循环指令LOOPE3 不不 相相 等等/不不 为为 零零 循循 环环 指指 令令LOOPNE 4CX为零转移指令为零转移指令JCXZ1 1循环指令循环指令LOOPLOOP语句格式:语句格式:LOOP LOOP 短标号短标号功功能能:(CXCX)1 1 00,则则程程序序转转移(循环);否则,顺序执行。移(循环);否则,顺序执行。说说明明:使使用用LOOPLOOP指指令令可可代代替替两两条条指指令:令:DEC CXDEC CXJNE JNE 短标号短标号2 2相等相等/为零循环指令为零循环指令LOOPELOOPE语句格式:语句格式:LOOPE LOOPE 短标号短标号
4、 LOOPZ LOOPZ 短标号短标号功功能能:(CXCX)1 1 00且且ZF=1ZF=1,则则程程序转移(循环);否则,顺序执行序转移(循环);否则,顺序执行。3 3不不相相等等/不不为为零零循循环环指指令令LOOPNELOOPNE语句格式:语句格式:LOOPNE LOOPNE 短标号短标号 LOOPNZ LOOPNZ 短标号短标号功功能能:(CXCX)1010,则则程程序序转转移(循环);否则,顺序执行。移(循环);否则,顺序执行。4 4CXCX为零转移指令为零转移指令JCXZJCXZ语句格式:语句格式:JCXZ JCXZ 短标号短标号功功能能:(CXCX)1010,则则程程序序转转移移
5、(循循环环);否否则则,顺顺序序执执行。行。2.6.4 子程序调用指令1 1子程序调用指令子程序调用指令CALLCALL(1 1)段内直接调用段内直接调用(2 2)段间直接调用段间直接调用(3 3)段内间接调用段内间接调用(4 4)段间间接调用段间间接调用2 2返回指令返回指令RETRET(1 1)语句格式:语句格式:RETRET(2 2)语句格式:语句格式:RET nRET n(n n为偶数)为偶数)2.6.5 中断指令1 1中断调用指令中断调用指令INTINT语句格式:语句格式:INT nINT n功能:功能:(FLAGSFLAGS)(SPSP),),0 IF0 IF、TFTF。(CSCS
6、)(SPSP),(),(4*n+24*n+2)CS CS。(IPIP)(SPSP),(),(4*n4*n)IP IP。2 2中断返回指令中断返回指令IRETIRET语句格式:语句格式:IRETIRET功能:功能:(SPSP)IP IP (SPSP)CSCS (SPSP)FLAGS FLAGS 3、2、5 控制转移指令控制转移指令控制转移指令分成控制转移指令分成无条件转移指令无条件转移指令和和条件转移指令条件转移指令。1无条件转移指令无条件转移指令转移可以分成两类:转移可以分成两类:段内转移段内转移和和段间转移段间转移。段内转移段内转移是指在同一段的范围之内进行转移,此时只需是指在同一段的范围之
7、内进行转移,此时只需改变改变IP寄存器的内容,即用新的转移目标地址代替原有寄存器的内容,即用新的转移目标地址代替原有的的IP的值就可达到转移的目的。的值就可达到转移的目的。段间转移段间转移则是要转到另一个段去执行程序,此时不仅要则是要转到另一个段去执行程序,此时不仅要修改修改IP寄存器的内容,还需要修改寄存器的内容,还需要修改CS寄存器的内容才寄存器的内容才能达到目的,因此此时的转移目标地址应由新的段地址能达到目的,因此此时的转移目标地址应由新的段地址和偏移地址两部分组成和偏移地址两部分组成。(1)直接短转移)直接短转移 JMP SHORT OPR ;操作:(操作:(IP)(IP)+8位位移量
8、位位移量(2)段内直接转移)段内直接转移 JMP NEAR PTR OPR;操作:(操作:(IP)(IP)+16位位移量位位移量(3)段内间接转移)段内间接转移 JMP WORD PTR OPR;操作:(操作:(IP)(有效地址)有效地址)(4)段间直接(远)转移)段间直接(远)转移 JMP NEAR PTR OPR操作:(操作:(IP)OPR的段内偏移地址的段内偏移地址 (CS)OPR所在段的段地址所在段的段地址(5)段间间接转移)段间间接转移 JMP DWORD PTR OPR操作:(操作:(IP)(EA)(CS)(EA+2)2、条件转移指令、条件转移指令状态标志作为转移的条件,当满足一定
9、的条件时,转移到指定状态标志作为转移的条件,当满足一定的条件时,转移到指定的地址,否则,将顺序执行下条指令。的地址,否则,将顺序执行下条指令。作为判断条件的状态标志位有:作为判断条件的状态标志位有:CF、PF、ZF、SF和和OF。(1)根据单个标志位的设置情况转移这组包括10种指令,它们一般适用于测试某一次运算的结果并根据其不同特征产生程序分支作不同处理的情况。(2)结果为零(或相等)转移结果为零(或相等)转移 JZ/JE OPR ;ZF=1 结果不为零(或不相等)转移结果不为零(或不相等)转移 JNZ/JNE OPR;ZF=0 结果为负转移结果为负转移 JS OPR ;SF=1 结果为正转移
10、结果为正转移 JNS OPR ;SF=0溢出转移溢出转移 JO OPR;OF=1无溢出转移无溢出转移 JNO OPR;OF=0奇偶位为奇偶位为1转移转移 JP/PE OPR;PF=1奇偶位为奇偶位为0转移转移 JNP/JPO OPR;PF=0低于低于/不高于或等于不高于或等于/进位为进位为1转移转移 JB/JNAE/JC OPR;CF=1不低于不低于/高于或等于高于或等于/进位为进位为0转移转移 JNB/JAE/JNC OPR;CF=0(2)比较两个无符号数,并根据比较的结果转移。低于低于/不高于或不等于不高于或不等于/进位为进位为1转移转移 JB/JNAE/JC OPR;CF=1且且ZF=0
11、不低于不低于/高于或等于高于或等于/进位为进位为0转移转移 JNB/JAE/JNC OPR;CF=0或或ZF=1低于或等于低于或等于/不高于转移不高于转移 JBE/JNA OPR;CF=1或或CF=1不低于或不等于不低于或不等于/高于转移高于转移 JNBE/JA OPR;CF=0且且ZF=0(3)比较两个带符号数,并根据比较结果转移。比较两个带符号数,并根据比较结果转移。小于或者不大于或者等于转移小于或者不大于或者等于转移 JL(或或JNGE)OPR SF ZF=1小于或者不大于或者等于转移小于或者不大于或者等于转移 JNL(或或JGE)OPR SF ZF=0 小于或等于,或者不大于转移小于或
12、等于,或者不大于转移 JLE(或或JNG)OPR(SF ZF)ZF=1小于或等于,或者不大于转移小于或等于,或者不大于转移 JNLE(或或JG)OPR(SF ZF)ZF=0(4)测试)测试CX的值为的值为0则转移指令则转移指令 JCXZ OPR;(CX)=0则转移则转移 3、循环控制指令、循环控制指令(1)LOOP(LOOP)循环指令循环指令 格式:格式:LOOP OPR 测试条件:(测试条件:(CX)0(2)LOOPZ/LOOPE(Loop while zero or equal)当为零或相等时循环指令当为零或相等时循环指令 格式:格式:LOOPZ(或或LOOPE)OPR 测试条件:测试条件
13、:ZF=1且(且(CX)0(3)LOOPNZ/LOOPNE(Loop while nonzero,or not equal)当不为零或不相等时循环指令当不为零或不相等时循环指令 格式:格式:LOOPNZ(或或LOOPNE)OPR 测试条件:测试条件:ZF=0且(且(CX)0 4、子程序、子程序CALL调用指令(1)段内直接调用)段内直接调用 格式:格式:CALL DST 执行的操作:(执行的操作:(IP)(SP)2;(SP)1,(,(SP)(IP););(IP)(IP)D16;()()段内间接调用段内间接调用 格式:格式:CALL DST 执行的操作:(执行的操作:(SP)(SP)2;(SP)
14、1,(,(SP)(IP);(IP)(EA)()()段间直接调用段间直接调用 格式:格式:CALL DST执行的操作:(执行的操作:(SP)(SP)2;(SP)1,(,(SP)(CS););(SP)(SP)2;(SP)1,(,(SP)(IP););(IP)偏移地址(指令的第偏移地址(指令的第2,3个字节);个字节);(CS)段地址(指令的第段地址(指令的第4,5个字节)。个字节)。(4)段间间接调用)段间间接调用 格式:格式:CALL DST 执行的操作:(执行的操作:(SP)(SP)2;(SP)1,(,(SP)(CS););(SP)(SP)2;(SP)1,(,(SP)(IP););(IP)(E
15、A););(CS)(EA2)RET返回指令返回指令段内返回段内返回 RET ;(;(IP)(SP)+1,(,(SP)(SP)()(SP)+2段内带立即数返回段内带立即数返回 RET EXP;(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段间带立即数返回段间带立即数返回 RET EXP;(IP)()(SP)+1,(,(SP)(SP)()(SP)+2 (CS)()(SP)+1,(,(SP)(SP)()(SP)+2 (SP)()(SP)+DISP16位移量位移量3、2、6 处理机控制指令处理机控制指令1标志处理指令标志处理指令(1)CLC进位位置进位位置0指令指令(Clear carry)CF 0 (2)CMC进位位求反指令(进位位求反指令(Complement carry)CFCF(3)STC进位位置进位位置1指令(指令(Set carry)CF1(4)CLD方向标志置方向标志置0指令指令(Clear direction)DF0
限制150内