控制转移指令

JMPJ**JCXZLOOPCALLRET

 

JMP ( JuMP ) 无条件转移指令

名称

格式

执行操作

段内直接短跳转JMP    SHORT OPRIP=IP+8位偏移量
段内直接近转移JMP    NEAR PTR OPRIP=IP+16位偏移量
段内间接转移JMP    WORD PTR OPRIP=(EA)
段间直接转移JMP    FAR PTR OPRIP=OPR偏移地址,CS=OPR段地址
段间间接转移JMP    DWORD PTR OPRIP=(EA),CS=(EA+2)

1.无条件转移到指定的地址去执行从该地址开始的指令.

2.段内转移是指在同一代码段的范围内进行转移,只需改变IP寄存器内容.

3.段间转移则要转移到另一个代码段执行程序,此时要改变IP寄存器和CS段寄存器的内容.

 

 

条件转移指令根据上一条指令所设置的条件码(标志位)来判断测试条件.

根据五个标志位:ZFSFOF PF CF的两种状态(0 FALSE或1 TRUE)产生10种测试条件.

NameFlagFlag == TRUE [1]Flag ==FALSE [ 0]
Zero FalgZFJZ    OPR  //结果为零转移JNZ    OPR  //结果不为零转移
Sign FalgSFJS    OPR  //结果为负转移JNS    OPR  //结果为正转移
Overflow FlagOFJO   OPR  //溢出转移JNO   OPR  //不溢出转移
Parity FlagPFJP    OPR  //结果为偶转移JNP    OPR  //结果为奇转移
Carry FlagCFJC    OPR  //有进位转移JNC    OPR  //无进位转移

 

 

两个数比较:

情况无符号数有符号数
指令满足条件指令满足条件
A < BJCCF==1JLSF^OF==1 && ZF==0
A BJNCCF==0JNLSF^OF==0  ||  ZF==1
A BJNACF==1 || ZF==1JLGSF^OF==1  ||  ZF==1
A > BJACF==0 && ZF==0JGSF^OF==0 && ZF==0

 

测试CX转移指令

JCXZ    OPR          //CX==0时转移

 

 

LOOP(LOOP)循环指令

LOOP           OPR测试条件:CX 0               //OPR在程序中实际是个标号
LOOPZ        OPR测试条件:ZF == 1 && CX ≠ 0
LOOPNZ     OPR测试条件:ZF == 0 && CX ≠ 0

执行操作: 先执行CX=CX-1,再检测上面的测试条件,如满足则IP=IP+符号扩展的D8,不满足则退出循环.

 

 

过程调用及返回指令

CALL (CALL) 过程调用指令

CALL    DST            //DST在程序中实际是子程序标号

执行操作:先将过程的返回地址(即CALL的下一条指令的首地址)存入堆栈,然后转移到过程入口地址执行子程序.

调用方式格式断点保护入栈情况过程入口地址
段内直接CALL  NEAR  PTR  PR1(SP-1)(SP-2)IP , CS不进栈CS值保持不变,IPDST
段内间接CALL  WORD PTR  (EA)(SP-1)(SP-2)IP , CS不进栈CS值保持不变,IP(EA)
段间直接CALL  FAR  PTR  PR1(SP-1)(SP-2)CS , (SP-3)(SP-4)IPIP←DST偏移地址,CS←DST段地址
段间间接CALL  DWORD PTR  (EA)(SP-1)(SP-2)CS , (SP-3)(SP-4)IPIP←(EA),CS←(EA+2)

注:为了表明是段内调用,可使用NEAR PTR属性操作符作说明.

 

 

RET(RETurn)子程序返回指令

RET   

RET    EXP        //带立即数返回

子程序返回指令RET放在子程序末尾,它使子程序在执行完全部任务后返回主程序继续执行被打断后的程序.返回地址在子程序调用时入栈保存的断点地址-IP或IP和CS.

 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值