jvm指令集

指令碼    助記符    說明
0×00    nop    什麼都不做
0×01    aconst_null    將null推送至棧頂
0×02    iconst_m1    將int型-1推送至棧頂
0×03    iconst_0    將int型0推送至棧頂
0×04    iconst_1    將int型1推送至棧頂
0×05    iconst_2    將int型2推送至棧頂
0×06    iconst_3    將int型3推送至棧頂
0×07    iconst_4    將int型4推送至棧頂
0×08    iconst_5    將int型5推送至棧頂
0×09    lconst_0    將long型0推送至棧頂
0x0a    lconst_1    將long型1推送至棧頂
0x0b    fconst_0    將float型0推送至棧頂
0x0c    fconst_1    將float型1推送至棧頂
0x0d    fconst_2    將float型2推送至棧頂
0x0e    dconst_0    將double型0推送至棧頂
0x0f    dconst_1    將double型1推送至棧頂
0×10    bipush    將單字節的常量值(-128~127)推送至棧頂
0×11    sipush    將一個短整型常量值(-32768~32767)推送至棧頂
0×12    ldc    將int, float或String型常量值從常量池中推送至棧頂
0×13    ldc_w    將int, float或String型常量值從常量池中推送至棧頂(寬索引)
0×14    ldc2_w    將long或double型常量值從常量池中推送至棧頂(寬索引)
0×15    iload    將指定的int型本地變量推送至棧頂
0×16    lload    將指定的long型本地變量推送至棧頂
0×17    fload    將指定的float型本地變量推送至棧頂
0×18    dload    將指定的double型本地變量推送至棧頂
0×19    aload    將指定的引用類型本地變量推送至棧頂
0x1a    iload_0    將第0個int型本地變量推送至棧頂
0x1b    iload_1    將第1個int型本地變量推送至棧頂
0x1c    iload_2    將第2個int型本地變量推送至棧頂
0x1d    iload_3    將第3個int型本地變量推送至棧頂
0x1e    lload_0    將第0個long型本地變量推送至棧頂
0x1f    lload_1    將第1個long型本地變量推送至棧頂
0×20    lload_2    將第2個long型本地變量推送至棧頂
0×21    lload_3    將第3個long型本地變量推送至棧頂
0×22    fload_0    將第0個float型本地變量推送至棧頂
0×23    fload_1    將第1個float型本地變量推送至棧頂
0×24    fload_2    將第2個float型本地變量推送至棧頂
0×25    fload_3    將第3個float型本地變量推送至棧頂
0×26    dload_0    將第0個double型本地變量推送至棧頂
0×27    dload_1    將第1個double型本地變量推送至棧頂
0×28    dload_2    將第2個double型本地變量推送至棧頂
0×29    dload_3    將第3個double型本地變量推送至棧頂
0x2a    aload_0    將第0個引用類型本地變量推送至棧頂
0x2b    aload_1    將第1個引用類型本地變量推送至棧頂
0x2c    aload_2    將第2個引用類型本地變量推送至棧頂
0x2d    aload_3    將第3個引用類型本地變量推送至棧頂
0x2e    iaload    將int型數組指定索引的值推送至棧頂
0x2f    laload    將long型數組指定索引的值推送至棧頂
0×30    faload    將float型數組指定索引的值推送至棧頂
0×31    daload    將double型數組指定索引的值推送至棧頂
0×32    aaload    將引用型數組指定索引的值推送至棧頂
0×33    baload    將boolean或byte型數組指定索引的值推送至棧頂
0×34    caload    將char型數組指定索引的值推送至棧頂
0×35    saload    將short型數組指定索引的值推送至棧頂
0×36    istore    將棧頂int型數值存入指定本地變量
0×37    lstore    將棧頂long型數值存入指定本地變量
0×38    fstore    將棧頂float型數值存入指定本地變量
0×39    dstore    將棧頂double型數值存入指定本地變量
0x3a    astore    將棧頂引用型數值存入指定本地變量
0x3b    istore_0    將棧頂int型數值存入第0個本地變量
0x3c    istore_1    將棧頂int型數值存入第1個本地變量
0x3d    istore_2    將棧頂int型數值存入第2個本地變量
0x3e    istore_3    將棧頂int型數值存入第3個本地變量
0x3f    lstore_0    將棧頂long型數值存入第0個本地變量
0×40    lstore_1    將棧頂long型數值存入第1個本地變量
0×41    lstore_2    將棧頂long型數值存入第2個本地變量
0×42    lstore_3    將棧頂long型數值存入第3個本地變量
0×43    fstore_0    將棧頂float型數值存入第0個本地變量
0×44    fstore_1    將棧頂float型數值存入第1個本地變量
0×45    fstore_2    將棧頂float型數值存入第2個本地變量
0×46    fstore_3    將棧頂float型數值存入第3個本地變量
0×47    dstore_0    將棧頂double型數值存入第0個本地變量
0×48    dstore_1    將棧頂double型數值存入第1個本地變量
0×49    dstore_2    將棧頂double型數值存入第2個本地變量
0x4a    dstore_3    將棧頂double型數值存入第3個本地變量
0x4b    astore_0    將棧頂引用型數值存入第0個本地變量
0x4c    astore_1    將棧頂引用型數值存入第1個本地變量
0x4d    astore_2    將棧頂引用型數值存入第2個本地變量
0x4e    astore_3    將棧頂引用型數值存入第3個本地變量
0x4f    iastore    將棧頂int型數值存入指定數組的指定索引位置
0×50    lastore    將棧頂long型數值存入指定數組的指定索引位置
0×51    fastore    將棧頂float型數值存入指定數組的指定索引位置
0×52    dastore    將棧頂double型數值存入指定數組的指定索引位置
0×53    aastore    將棧頂引用型數值存入指定數組的指定索引位置
0×54    bastore    將棧頂boolean或byte型數值存入指定數組的指定索引位置
0×55    castore    將棧頂char型數值存入指定數組的指定索引位置
0×56    sastore    將棧頂short型數值存入指定數組的指定索引位置
0×57    pop    將棧頂數值彈出 (數值不能是long或double類型的)
0×58    pop2    將棧頂的一個(long或double類型的)或兩個數值彈出(其它)
0×59    dup    複製棧頂數值並將複製值壓入棧頂
0x5a    dup_x1    複製棧頂數值並將兩個複製值壓入棧頂
0x5b    dup_x2    複製棧頂數值並將三個(或兩個)複製值壓入棧頂
0x5c    dup2    複製棧頂一個(long或double類型的)或兩個(其它)數值並將複製值壓入棧頂
0x5d    dup2_x1    <待補充>
0x5e    dup2_x2    <待補充>
0x5f    swap    將棧最頂端的兩個數值互換(數值不能是long或double類型的)
0×60    iadd    將棧頂兩int型數值相加並將結果壓入棧頂
0×61    ladd    將棧頂兩long型數值相加並將結果壓入棧頂
0×62    fadd    將棧頂兩float型數值相加並將結果壓入棧頂
0×63    dadd    將棧頂兩double型數值相加並將結果壓入棧頂
0×64    isub    將棧頂兩int型數值相減並將結果壓入棧頂
0×65    lsub    將棧頂兩long型數值相減並將結果壓入棧頂
0×66    fsub    將棧頂兩float型數值相減並將結果壓入棧頂
0×67    dsub    將棧頂兩double型數值相減並將結果壓入棧頂
0×68    imul    將棧頂兩int型數值相乘並將結果壓入棧頂
0×69    lmul    將棧頂兩long型數值相乘並將結果壓入棧頂
0x6a    fmul    將棧頂兩float型數值相乘並將結果壓入棧頂
0x6b    dmul    將棧頂兩double型數值相乘並將結果壓入棧頂
0x6c    idiv    將棧頂兩int型數值相除並將結果壓入棧頂
0x6d    ldiv    將棧頂兩long型數值相除並將結果壓入棧頂
0x6e    fdiv    將棧頂兩float型數值相除並將結果壓入棧頂
0x6f    ddiv    將棧頂兩double型數值相除並將結果壓入棧頂
0×70    irem    將棧頂兩int型數值作取模運算並將結果壓入棧頂
0×71    lrem    將棧頂兩long型數值作取模運算並將結果壓入棧頂
0×72    frem    將棧頂兩float型數值作取模運算並將結果壓入棧頂
0×73    drem    將棧頂兩double型數值作取模運算並將結果壓入棧頂
0×74    ineg    將棧頂int型數值取負並將結果壓入棧頂
0×75    lneg    將棧頂long型數值取負並將結果壓入棧頂
0×76    fneg    將棧頂float型數值取負並將結果壓入棧頂
0×77    dneg    將棧頂double型數值取負並將結果壓入棧頂
0×78    ishl    將int型數值左移位指定位數並將結果壓入棧頂
0×79    lshl    將long型數值左移位指定位數並將結果壓入棧頂
0x7a    ishr    將int型數值右(符號)移位指定位數並將結果壓入棧頂
0x7b    lshr    將long型數值右(符號)移位指定位數並將結果壓入棧頂
0x7c    iushr    將int型數值右(無符號)移位指定位數並將結果壓入棧頂
0x7d    lushr    將long型數值右(無符號)移位指定位數並將結果壓入棧頂
0x7e    iand    將棧頂兩int型數值作“按位與”並將結果壓入棧頂
0x7f    land    將棧頂兩long型數值作“按位與”並將結果壓入棧頂
0×80    ior    將棧頂兩int型數值作“按位或”並將結果壓入棧頂
0×81    lor    將棧頂兩long型數值作“按位或”並將結果壓入棧頂
0×82    ixor    將棧頂兩int型數值作“按位異或”並將結果壓入棧頂
0×83    lxor    將棧頂兩long型數值作“按位異或”並將結果壓入棧頂
0×84    iinc    將指定int型變量增加指定值,可以有兩個變量,分別表示index, const,index指第index個int型本地變量,const增加的值
0×85    i2l    將棧頂int型數值強制轉換成long型數值並將結果壓入棧頂
0×86    i2f    將棧頂int型數值強制轉換成float型數值並將結果壓入棧頂
0×87    i2d    將棧頂int型數值強制轉換成double型數值並將結果壓入棧頂
0×88    l2i    將棧頂long型數值強制轉換成int型數值並將結果壓入棧頂
0×89    l2f    將棧頂long型數值強制轉換成float型數值並將結果壓入棧頂
0x8a    l2d    將棧頂long型數值強制轉換成double型數值並將結果壓入棧頂
0x8b    f2i    將棧頂float型數值強制轉換成int型數值並將結果壓入棧頂
0x8c    f2l    將棧頂float型數值強制轉換成long型數值並將結果壓入棧頂
0x8d    f2d    將棧頂float型數值強制轉換成double型數值並將結果壓入棧頂
0x8e    d2i    將棧頂double型數值強制轉換成int型數值並將結果壓入棧頂
0x8f    d2l    將棧頂double型數值強制轉換成long型數值並將結果壓入棧頂
0×90    d2f    將棧頂double型數值強制轉換成float型數值並將結果壓入棧頂
0×91    i2b    將棧頂int型數值強制轉換成byte型數值並將結果壓入棧頂
0×92    i2c    將棧頂int型數值強制轉換成char型數值並將結果壓入棧頂
0×93    i2s    將棧頂int型數值強制轉換成short型數值並將結果壓入棧頂
0×94    lcmp    比較棧頂兩long型數值大小,並將結果(1,0,-1)壓入棧頂
0×95    fcmpl    比較棧頂兩float型數值大小,並將結果(1,0,-1)壓入棧頂;當其中一個數值爲NaN時,將-1壓入棧頂
0×96    fcmpg    比較棧頂兩float型數值大小,並將結果(1,0,-1)壓入棧頂;當其中一個數值爲NaN時,將1壓入棧頂
0×97    dcmpl    比較棧頂兩double型數值大小,並將結果(1,0,-1)壓入棧頂;當其中一個數值爲NaN時,將-1壓入棧頂
0×98    dcmpg    比較棧頂兩double型數值大小,並將結果(1,0,-1)壓入棧頂;當其中一個數值爲NaN時,將1壓入棧頂
0×99    ifeq    當棧頂int型數值等於0時跳轉
0x9a    ifne    當棧頂int型數值不等於0時跳轉
0x9b    iflt    當棧頂int型數值小於0時跳轉
0x9c    ifge    當棧頂int型數值大於等於0時跳轉
0x9d    ifgt    當棧頂int型數值大於0時跳轉
0x9e    ifle    當棧頂int型數值小於等於0時跳轉
0x9f    if_icmpeq    比較棧頂兩int型數值大小,當結果等於0時跳轉
0xa0    if_icmpne    比較棧頂兩int型數值大小,當結果不等於0時跳轉
0xa1    if_icmplt    比較棧頂兩int型數值大小,當結果小於0時跳轉
0xa2    if_icmpge    比較棧頂兩int型數值大小,當結果大於等於0時跳轉
0xa3    if_icmpgt    比較棧頂兩int型數值大小,當結果大於0時跳轉
0xa4    if_icmple    比較棧頂兩int型數值大小,當結果小於等於0時跳轉
0xa5    if_acmpeq    比較棧頂兩引用型數值,當結果相等時跳轉
0xa6    if_acmpne    比較棧頂兩引用型數值,當結果不相等時跳轉
0xa7    goto    無條件跳轉
0xa8    jsr    跳轉至指定16位offset位置,並將jsr下一條指令地址壓入棧頂
0xa9    ret    返回至本地變量指定的index的指令位置(一般與jsr, jsr_w聯合使用)
0xaa    tableswitch    用於switch條件跳轉,case值連續(可變長度指令)
0xab    lookupswitch    用於switch條件跳轉,case值不連續(可變長度指令)
0xac    ireturn    從當前方法返回int
0xad    lreturn    從當前方法返回long
0xae    freturn    從當前方法返回float
0xaf    dreturn    從當前方法返回double
0xb0    areturn    從當前方法返回對象引用
0xb1    return    從當前方法返回void
0xb2    getstatic    獲取指定類的靜態域,並將其值壓入棧頂
0xb3    putstatic    爲指定的類的靜態域賦值
0xb4    getfield    獲取指定類的實例域,並將其值壓入棧頂
0xb5    putfield    爲指定的類的實例域賦值
0xb6    invokevirtual    調用實例方法
0xb7    invokespecial    調用超類構造方法,實例初始化方法,私有方法
0xb8    invokestatic    調用靜態方法
0xb9    invokeinterface    調用接口方法
0xba    –
0xbb    new    創建一個對象,並將其引用值壓入棧頂
0xbc    newarray    創建一個指定原始類型(如int, float, char…)的數組,並將其引用值壓入棧頂
0xbd    anewarray    創建一個引用型(如類,接口,數組)的數組,並將其引用值壓入棧頂
0xbe    arraylength    獲得數組的長度值並壓入棧頂
0xbf    athrow    將棧頂的異常拋出
0xc0    checkcast    檢驗類型轉換,檢驗未通過將拋出ClassCastException
0xc1    instanceof    檢驗對象是否是指定的類的實例,如果是將1壓入棧頂,否則將0壓入棧頂
0xc2    monitorenter    獲得對象的鎖,用於同步方法或同步塊
0xc3    monitorexit    釋放對象的鎖,用於同步方法或同步塊
0xc4    wide    當本地變量的索引超過255時使用該指令擴展索引寬度。
0xc5    multianewarray    create a new array of dimensions dimensions with elements of type identified by class reference in constant pool index (indexbyte1 << 8 + indexbyte2); the sizes of each dimension is identified by count1, [count2, etc.]
0xc6    ifnull    if value is null, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
0xc7    ifnonnull    if value is not null, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
0xc8    goto_w    goes to another instruction at branchoffset (signed int constructed from unsigned bytes branchbyte1 << 24 + branchbyte2 << 16 + branchbyte3 << 8 + branchbyte4)
0xc9    jsr_w    jump to subroutine at branchoffset (signed int constructed from unsigned bytes branchbyte1 << 24 + branchbyte2 << 16 + branchbyte3 << 8 + branchbyte4) and place the return address on the stack
0xca    breakpoint    reserved for breakpoints in Java debuggers; should not appear in any class file
0xcb-0xfd    未命名    these values are currently unassigned for opcodes and are reserved for future use
0xfe    impdep1    reserved for implementation-dependent operations within debuggers; should not appear in any class file
0xff    impdep2    reserved for implementation-dependent operations within debuggers; should not appear in any class file
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章