控制转移指令

一 控制转移指令

比较指令

lcmp 比较 long 类型值

fcmpl 比较 float 类型值(当遇到NaN时,返回-1)

fcmpg 比较 float 类型值(当遇到NaN时,返回1)

dcmpl 比较 double 类型值(当遇到NaN时,返回-1)

dcmpg 比较 double 类型值(当遇到NaN时,返回1)

条件分支指令

ifeq 如果等于0,则跳转

ifne 如果不等于0,则跳转

iflt 如果小于0,则跳转

ifle 如果小于等于0,则跳转

ifgt 如果大于0,则跳转

ifge 如果大于等于0,则跳转

ifnull 为 null 时跳转

ifnonnull 不为 null 时跳转

比较条件分支指令

if_icmpeq 如果两个 int 值相等,则跳转

if_icmpne 如果两个 int 类型值不相等,则跳转

if_icmplt 如果一个 int 类型值小于另外一个 int 类型值,则跳转

if_icmple 如果一个 int 类型值小于或者等于另外一个 int 类型值,则跳转

if_icmpgt 如果一个 int 类型值大于另外一个 int 类型值,则跳转

if_icmpge 如果一个 int 类型值大于或者等于另外一个 int 类型值,则跳转

ifnull 如果等于null,则跳转

ifnonnull 如果不等于null,则跳转

if_acmpeq 如果两个对象引用相等,则跳转

if_acmpne 如果两个对象引用不相等,则跳转

多条件分支跳转指令

tableswitch 通过索引访问跳转表,并跳转

lookupswitch 通过键值匹配访问跳转表,并执行跳转操作

无条件跳转指令

goto 无条件跳转

goto_w 无条件跳转(宽索引)

二 比较指令

比较指令的作用是比较占栈顶两个元素的大小,并将比较结果入栽。

比较指令有: dcmpg、dcmpl、fcmpg、fcmpl、lcmp

首字符 d 表示 double 类型,f 表示 float,l 表示 long

对于 double 和 float 类型的数字,由于 NaN 的存在,各有两个版本的比较指令。以 float 为例,有 fcmpg 和 fcmpl 两个指令,它们的区别在于在数字比较时,若遇到 NaN 值,处理结果不同。

指令 dcmpl 和 dcmpg 也是类似的,根据其命名可以推测其含义,在此不再赘述。

举例

指令 fcmp 和 fcmpl 都从操作数栈中弹出两个操作数,并将它们做比较,设栈顶的元素为 v2 ,顶顺位第2位的元素为 v1,若 v1 = v2 ,则压入0,若 v1 > v2 则压入1,若 v1 < v2 则压入 -1。

两个指令的不同之处在于,如果遇到NaN值, fcmpg会压入1,而fcmpl会压入-1

三 条件跳转指令

<

<=

==

!=

>=

>

null

not null

iflt

ifle

ifeq

ifng

ifge

ifgt

ifnull

ifnonnull

四 比较条件跳转指令

<

<=

==

!=

>=

>

if_icmplt

if_icmple

if_icmpeq、if_acmpeq

if_icmpne、if_acmpne

if_icmpge

if_icmpgt

五 多条件分支跳转

六 无条件跳转

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值