操控搬运指令经过改动CS:IP来操控程序的履行流程。这类指令包含无条件搬运指令、条件搬运指令、循环指令、子程序调用和回来指令以及中止和中止回来指令。
JMP 跳转
⑵ 条件搬运
JZ/JNZ 成果为零/不为零则搬运
JS/JNS 成果为负/为正则搬运
JO/JNO 溢出/不溢出则搬运
JP/JNP 奇偶位为1/为0则搬运
JB/JNB 低于/不低于则搬运
JBE/JNBE 低于等于/高于则搬运
JL/JNL 小于/不小于则搬运
JLE/JNLE 小于等于/大于则搬运
JCXZ CX为零则搬运
⑶ 循环指令
LOOP 循环
LOOPZ/LOOPE 为零/持平时循环
LOOPNZ/LOOPNE 不为零/不等时循环
⑷ 子程序调用与回来
CALL 调用
RET 回来
⑸ 中止及中止回来
INT 中止
INTO 溢出则中止
IRET 中止回来
程序中指令的履行次序是由CS:IP来决议的,程序搬运类指令可改动IP或CS、IP的内容,然后操控指令的履行次序,完成指令搬运、程序调用等功能。
1 无条件搬运指令
JMP指令操控程序无条件地跳转到意图单元,运用JMP指令可有三种格局:
⑴ JMP SHORT label 短搬运(short jump)
⑵ JMP NEAR PTR label 近搬运(near jump)
● JMP label 直接搬运(direct jump)
● JMP reg 寄存器直接搬运(register indirect jump)
● JMP WORD PTR OPR 存储器直接搬运(memory indirect jump)
⑶ JMP FAR PTR label 远搬运(far jump)
⑴ JMP SHORT label 短搬运(short jump)
履行操作:(IP) ← (IP)当时+8位位移量
短搬运示意图
⑵ JMP NEAR PTR label 近搬运(near jump)
近搬运是JMP指令的缺省格局,能够写为”JMP label”。它可在当时代码段内搬运,机器指令的操作码是E9,位移量是16位的带符号补码数。指令中的转向地址能够是直接寻址方法、寄存器寻址方法、寄存器直接方法和存储器寻址方法。
● JMP label 直接搬运(direct jump)
履行操作:(IP) ← OFFSET label = (IP)当时+16位位移量
搬运的方针地址在指令中可直接运用符号地址,因为位移量为16位,它的搬运规模应是-32768至+32767,也就是说,近搬运指令能够搬运到段内的任一个方位。
● JMP reg 寄存器直接搬运(register indirect jump)
履行操作:(IP) ← (reg)
搬运的方针地址在寄存器中,例如指令”JMP BX”履行的成果,将BX的内容送给IP。
● JMP WORD PTR OPR 存储器直接搬运(memory indirect jump)
履行操作:(IP) ← (PA+1,PA)
存储器的物理地址PA由指令中的寻址方法确认,JMP指令履行的成果,把PA单元的字内容送到IP寄存器中。例如”JMP WORD PTR [DI]”,物理地址PA = (DS)×24+(DI),指令履行的成果是(IP)= (PA+1,PA)。
⑶ JMP FAR PTR label 远搬运(far jump)
履行操作:(IP) ← label的段内偏移地址
(CS) ← label地点段的段地址
远搬运完成的是段间的跳转,即从当时代码段跳转到另一个代码段中,这意味着指令履行后,不只要改动IP的值,CS也会得到一个新的段地址。在汇编指令中,远搬运的方针地址也能够运用除当即寻址方法外的任何寻址方法来表明。