随笔三十三:跳转指令及其编码

        跳转指令有两种跳转方式:

       1)直接跳转 。即跳转目标是作为指令的一部分编码的;

       2)间接跳转。即跳转目标是从寄存器或存储器位置中读出的。


        直接跳转是给出一个标号作为跳转目标的,间接跳转的写法是‘*’ 后面跟一个操作数指示符。

        表中所示的其他跳转指令都是有条件的——它们根据条件码的某个组合,或者跳转,或者继续执行代码序列中的下一条指令。

指令

同义名

跳转条件

描述

  jmp   Label

  jmp   *Operand

 

  je     Label

  jne    Label

 

  jg     Label

  jge    Label

  jl     Label

  jle    Label

 

  ja     Label

  jae    Label

  jb     Label

  jbe    Label

 

 

 

  jz

  jnz

 

  jnle

  jnl  

  jnge

  jng

 

  jnbe

  jnb

  jnae

  jna

1

1

 

ZF

~ZF

 

~(SF ^ OF)& ~ZF

~(SF ^ OF)

SF ^ OF

(SF ^ OF)| ZF

 

~CF ^ ~ZF

~CF

CF

CF | ZF

直接跳转

间接跳转

 

相等/零

不相等/非零

 

大于(有符号>)

大于或等于(有符号>=)

小于(有符号<)

小于或等于(有符号<=)

 

超过(无符号>)

超过或相等(无符号>=)

低于(无符号<)

低于或等于(无符号<=)


        跳转指令有几种不同的编码,但是最常用的都是 PC 相关的(PC-relative,PC,程序计数器)。它们会将目标指令的地址与紧跟在跳转指令后面的那条指令的地址之间的差作为编码。这些地址偏移量可以编码为1、2 或者 4 个字节。第二种编码方式是给出 “绝对” 地址,用 4 个字节直接指定目标。汇编器和链接器会选择适当的跳转目的编码。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值