目录
程序的顺序执行需要由条件控制指令来控制,例如条件跳转、比较和分支跳转等,JVM常用指令中有一类控制指令,负责虚拟机有条件地或者无条件地从指定位置执行指令,使得程序按照我们希望的顺序执行。总的来说控制指令分为比较、跳转、比较跳转和有/无条件的分支跳转,同样控制程序执行的还有函数调用和返回指令,这篇日志就来总结这两部分常用的指令。
比较控制
比较指令
比较指令有fcmpg、fcmpl、dcmpg、dcmpl等,和上一篇日志里讲的指令类似,前面的f、d分别表示数据类型float和double,所以如果是long类型的数据则用lcmp。可以看到float和double类型的比较指令都有两个,xcmpg和xcmpl,两者的区别在于处理未定义或者不可表示的值(NaN)时,得到的结果不同,拿fcmpg和fcmpl举例,两条指令都是将栈中弹出两个元素作比较,如果进行比较的两个float值都不是NaN值,两个值相等时,fcmpg和fcmpl都会将“0”压栈,如果第一个值大于第二个值,压入“1”,第一个值小于第二个值,压入“-1”。当有一个或两个值为NaN时,也就是出现未定义或不可表示的值,此时两者无法比较,fcmpg会将“1”压栈,而fcmpl会将“-1”压栈。
条件跳转

本文详细介绍了JVM中的比较控制指令,包括比较、条件跳转和分支跳转,以及函数调用和返回的相关指令。通过实例解析了如何在JVM层面实现条件判断和函数调用的过程,帮助理解JVM指令在程序执行中的作用。
最低0.47元/天 解锁文章
86万+

被折叠的 条评论
为什么被折叠?



