码迷,mamicode.com
首页 > 其他好文 > 详细

Jvm(47),指令集----控制转移指令

时间:2018-09-22 23:13:56      阅读:277      评论:0      收藏:0      [点我收藏+]

标签:算术   处理   sys   return   一个   print   技术   lcm   oat   

控制转移指令可以让Java虚拟机有条件或无条件地从指定的位置指令而不是控制转移指令的下一条指令继续执行程序,从概念模型上理解,可以认为控制转移指令就是在有条件或无条件地修改PC寄存器的值。控制转移指令如下。

条件分支:ifeq、iflt、ifle、ifne、ifgt、ifge、ifnull、ifnonnull、if_icmpeq、 if_icmpne、if_icmplt、if_icmpgt、if_icmple、if_icmpge、if_acmpeq和if_acmpne。

复合条件分支:tableswitch、lookupswitch。无条件分支:goto、goto_w、jsr、jsr_w、ret。

在Java虚拟机中有专门的指令集用来处理int和reference类型的条件分支比较操作,为了可以无须明显标识一个实体值是否null,也有专门的指令用来检测null值。

与前面算术运算时的规则一致,对于boolean类型、byte类型、char类型和short类型的条件分支比较操作,都是使用int类型的比较指令来完成,而对于long类型、float类型和 double类型的条件分支比较操作,则会先执行相应类型的比较运算指令(dcmpg、

dcmpl、fcmpg、fcmpl、lcmp,见6.4.3节),运算指令会返回一个整型值到操作数栈中,随后再执行int类型的条件分支比较操作来完成整个分支跳转。由于各种类型的比较最终都会转化为int类型的比较操作,int类型比较是否方便完善就显得尤为重要,所以Java虚拟机提供的int类型的条件分支指令是最为丰富和强大的。

public class Demo5 {

    public static void main(String[] args) {

         int a = 10;

         if (a > 10) {

              System.out.println("大于10");

         } else {

              System.out.println("小于10");

         }

    }

}

技术分享图片

上面的步骤就是先将10入栈,然后存到局部变量表中,之后在讲10入栈和20进行比较,这个时候发现小于20就会走20行的代码,getstatic就是从方法区中获取标准的输入流,这个时候就会然后经过idc这一行获取打印出小于10的最后return。

Jvm(47),指令集----控制转移指令

标签:算术   处理   sys   return   一个   print   技术   lcm   oat   

原文地址:https://www.cnblogs.com/qingruihappy/p/9691453.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!