1. 程式人生 > 其它 >一點JVM位元組碼指令介紹

一點JVM位元組碼指令介紹

Java虛擬機器的指令由一個位元組長度的、代表著某種特定操作含義的數字(操作碼)以及跟隨其後的零至多個代表此操作所需引數(運算元)構成。位元組碼指令集是一種具有鮮明特點、優劣勢都很突出的指令集架構,由於限制了Java虛擬機器操作碼的長度為一個位元組,所以指令集的操作碼總數不可能超過256條。

載入和儲存指令

  • 將一個區域性變數載入到操作棧

    iload、iload_<n>、lload、lload_<n>、fload、fload_<n>、dload、dload_<n>、aload、aload_<n>
    
  • 將一個數值從運算元棧儲存到區域性變量表

    fstore、fstore_<n>、dstore、dstore_<n>、astore、astore_<n>、istore、istore_<n>、lstore、lstore_<n>
    
  • 將一個常量載入到運算元棧

    bipush、sipush、ldc、ldc_w、ldc2_w、aconst_null、iconst_ml、iconst_<i>、lconst_<l>、fconst_<f>、dconst_<d>
    
  • 擴充區域性變量表的訪問索引的指令

    wide
    

運算指令

  • 加法指令

    iadd、ladd、fadd、dadd
    
  • 減法指令

    isub、lsub、fsub、dsub
    
  • 乘法指令

    imul、lmul、fmul、dmul
    
  • 除法指令

    idiv、ldiv、fdiv、ddiv
    
  • 求餘指令

    irem、lrem、frem、drem
    
  • 取反指令

    ineg、lneg、fneg、dneg
    
  • 位移指令

    ishl、ishr、iushr、lshl、lshe、lushr
    
  • 按位或指令

    ior、lor
    
  • 按位與指令

    iand、land
    
  • 按位異或指令

    ixor、lxor
    
  • 區域性變數自增指令

    iinc
    
  • 比較指令

    dcmpg、dcmpl、fcmpg、fcmpl、lcmp