zoukankan      html  css  js  c++  java
  • 《深入Java虚拟机》笔记:指令集 (转)

    《深入Java虚拟机》笔记:指令集

     
    指令 含义
    iconst_m1 把int型常量-1压入栈中
    iconst_0 把int型常量压入栈中
    fconst_1 把float型常量1压入栈中
    lconst_2 把long型常量2压入栈中
    dconst_3 把double型常量3压入栈中
    bipush byte1 把byte1转换成int型压入栈中
    sipush byte1,byte2 把byte1,byte2组成的short转换成int压入栈中
    aconst_null 把空对象压入栈中
    ldc indexbyte1 把常量池中指定下标的一个字长压入栈
    ldc_w indexbyte1,indexbyte2 把常量池中指定下标的一个字长压入栈
    ldc2_w indexbyte1,intexbyte2 把常量池中指定下标的两个字长压入栈
    pop 弹出栈顶的一个字
    pop2 弹出栈顶的两个字
    swap 交换栈顶的两个字
    dup 复制栈顶的一个字
    dup2 复制栈顶的两个字
    dup_x1 复制一字,并将弹出的两字压栈
    dup_x2 复制一字,并将弹出的三字压栈
    dup2_x1 复制两字,并将弹出的三字压栈
    dup2_x2 复制两字,并将弹出的四字压栈
    iload vindex 将位置vindex的int型局部变量压入栈
    iload_0 将位置0的int型局部变量压入栈
    fload vindex 将位置vindex的float型局部变量压入栈
    fload_0 将位置0的float型局部变量压入栈
    lload vindex 将位置vindex的long型局部变量压入栈
    lload_0 将位置0的long型局部变量压入栈
    dload vindex 将位置vindex的double型局部变量压入栈
    dload_0 将位置0的double型局部变量压入栈
    aload vindex 将位置vindex的对象引用局部变量压入栈
    aload_0 将位置0的对象引用局部变量压入栈
    istore vindex 弹出int型,存储在vindex处的局部变量
    istore_0 弹出int型,存储在0处的局部变量
    fstore vindex 弹出float型,存储在vindex处的局部变量
    fstore_0 弹出float型,存储在0处的局部变量
    lstore vindex 弹出long型,存储在vindex处的局部变量
    lstore_0 弹出long型,存储在0处的局部变量
    dstore vindex 弹出double型,存储在vindex处的局部变量
    dstore_0 弹出double型,存储在0处的局部变量
    astore vindex 弹出对象引用类型,存储在vindex处的局部变量
    astore_0 弹出对象引用类型,存储在0处的局部变量
    wide iload byte1,byte2 wide能把原来的一字节的参数变成处理两字节
    i2l 把int类型转换成long类型,其他类似,不再举例
    iadd 弹出两个int型,相加后结果压入栈
    ladd 弹出两个long型,相加后结果压入栈
    iinc vindex,const 把常量const与位于vindex的局部变量相加
    wide iinc index1,intdex2,const1,const2 把常量与位于vindex1,vindex2的局部变量相加
    isub 弹出两个int型,相减后lint型结果压入栈
    lsub 弹出两个long型,相减后long型结果压入栈
    imul 弹出两个int型,相乘后int型结果压入栈
    lmul 弹出两个long型,相乘后long型结果压入栈
    idev 弹出两个int型,相除后int型结果压入栈
    ldev 弹出两个long型,相除后long型结果压入栈
    irem 弹出两个int型,取余后int型结果压入栈
    lrem 弹出两个long型,取余后long型结果压入栈
    ineg 弹出一个int型,取反后int型结果压入栈
    lneg 弹出一个long型,取反后long型结果压入栈
    ishl 向左对int型值进行移位操作(long类似)
    ishr 向右对int型值进行算术移位操作
    iushr 向右对int型值进行逻辑移位操作
    iand 对两个int类型值进行逻辑与运算(long类似)
    ior 对两个int类型值进行逻辑或运算
    ixor 对两个int类型值进行逻辑异或运算
    fadd 弹出两个float型,相加后float型结果压入栈
    fsub 弹出两个float型,相减后float型结果压入栈
    fmul 弹出两个float型,相乘后float型结果压入栈
    fdiv 弹出两个float型,相除后float型结果压入栈
    frem 弹出两个float型,取余后float型结果压入栈
    new indexbyte1,indexbyte2 在堆中创建一个新的对象,将其压入栈中
    putfield indexbyte1,intdebyte2 设置对象字段的值,值和对象引用都从栈获取
    getfield indexbyte1,indexbyte2 将对象字段压入栈,对象引用从栈中获取
    putstatic indexbyte1,indexbyte2 设置类静态变量的值,从栈中获取
    getstatic indexbyte1,indexbyte2 将静态变量压入栈
    checkcast indexbyte1,indexbyte2 如果栈中的引用不是指定位置的类,则抛出异常
    instanceof indexbyte1,indexbyte2 同上,不过是往结果中压入true或false
    newarray atype 从栈中弹出长度,分配atype类型的数组
    anewarray indexbyte1,intdexbyte2 从栈中取长度,index取类型
    multianewarray index1,index2,dimensions 分配多维数组
    arraylength 从栈中弹出一个引用,并将其长度压入栈
    baload 从栈中取数组引用和下标,把对应boolean压入栈
    caload 同上,char
    saload 同上,short
    iaload 同上,int
    laload 同上,long
    faload 同上,folat
    daload 同上,double
    aaload 同上,array
    bastore

    将byte或boolean类型的值value、索引index、数组引用arrayref弹出栈,赋值为arrayref[index]=value

    其他类型同上

    ifeq branchbyte1,branchbyte2 从栈中弹出int型,为0则跳转到指定的分支执行
    ifne branchbyte1,branchbyte2 同上,不为0则跳转到指定的分支执行
    iflt branchbyte1,branchbyte2 同上,如果小于0,则跳转到指定的分支执行
    ifle branchbyte1,branchbyte2 同上,如果小于等于0,则跳转到指定的分支执行
    ifgt branchbyte1,branchbyte2 同上,如果大于0,则跳转到指定的分支执行
    ifge branchbyte1,branchbyte2 同上,如果大于等于0,则跳转到指定的分支执行
    if_icmpeq branchbyte1,branchbyte2 栈中弹出两个int,如果的一个等于第二个,跳转
    if_icmpme branchbyte1,branchbyte2 栈中弹出两个int,如果的一个不等于第二个,跳转
    if_icmplt branchbyte1,branchbyte2 栈中弹出两个int,如果的一个小于第二个,跳转
    if_icmple branchbyte1,branchbyte2 栈中弹出两个int,如果的一个小于等于第二个,跳转
    if_icmpgt branchbyte1,branchbyte2 栈中弹出两个int,如果的一个大于第二个,跳转
    if_icmpge branchbyte1,branchbyte2 栈中弹出两个int,如果的一个大于等于第二个,跳转
    lcmp 从栈中弹出两个long,把结果-1、0、1放入栈
    fcmpg 从栈中弹出两个float,把结果-1、0、1放入栈
    fcmpl 从栈中弹出两个float,把结果-1、0、1放入栈
    dcmpg 从栈中弹出两个double,把结果-1、0、1放入栈
    dcmpl 从栈中弹出两个double,把结果-1、0、1放入栈
    ifnull branchbyte1,branchbyte2 从栈中弹出,如果是null就跳到分支
    ifnonnull branchbyte1,branchbyte2 从栈中弹出,如果不是null就跳到分支
     
     



  • 相关阅读:
    如今我这样编程,你呢?
    专注UI——是alert()打败了你!
    创业公司十分钟简单搭建GIT私有库
    小胖说事22-----iOS开发技巧之取消键盘响应和截屏功能
    C++运算符重载的妙用
    汽水瓶
    Android 应用按返回键异常退出的问题
    053第256题
    Activity、FragmentActivity和AppCompatActivity的区别
    Android中Activity和AppcompatActivity的区别(详细解析)
  • 原文地址:https://www.cnblogs.com/softidea/p/5289262.html
Copyright © 2011-2022 走看看