棧和局部變量操作
將常量壓入棧的指令
- aconst_null 將null對象引用壓入棧
- iconst_m1 將int類型常量-1壓入棧
- iconst_0 將int類型常量0壓入棧
- iconst_1 將int類型常量1壓入棧
- iconst_2 將int類型常量2壓入棧
- iconst_3 將int類型常量3壓入棧
- iconst_4 將int類型常量4壓入棧
- iconst_5 將int類型常量5壓入棧
- lconst_0 將long類型常量0壓入棧
- lconst_1 將long類型常量1壓入棧
- fconst_0 將float類型常量0壓入棧
- fconst_1 將float類型常量1壓入棧
- dconst_0 將double類型常量0壓入棧
- dconst_1 將double類型常量1壓入棧
- bipush 將一個8位帶符號整數(shù)壓入棧
- sipush 將16位帶符號整數(shù)壓入棧
- ldc 把常量池中的項壓入棧
- ldc_w 把常量池中的項壓入棧(使用寬索引)
- ldc2_w 把常量池中l(wèi)ong類型或者double類型的項壓入棧(使用寬索引)
從棧中的局部變量中裝載值的指令
- iload 從局部變量中裝載int類型值
- lload 從局部變量中裝載long類型值
- fload 從局部變量中裝載float類型值
- dload 從局部變量中裝載double類型值
- aload 從局部變量中裝載引用類型值(refernce)
- iload_0 從局部變量0中裝載int類型值
- iload_1 從局部變量1中裝載int類型值
- iload_2 從局部變量2中裝載int類型值
- iload_3 從局部變量3中裝載int類型值
- lload_0 從局部變量0中裝載long類型值
- lload_1 從局部變量1中裝載long類型值
- lload_2 從局部變量2中裝載long類型值
- lload_3 從局部變量3中裝載long類型值
- fload_0 從局部變量0中裝載float類型值
- fload_1 從局部變量1中裝載float類型值
- fload_2 從局部變量2中裝載float類型值
- fload_3 從局部變量3中裝載float類型值
- dload_0 從局部變量0中裝載double類型值
- dload_1 從局部變量1中裝載double類型值
- dload_2 從局部變量2中裝載double類型值
- dload_3 從局部變量3中裝載double類型值
- aload_0 從局部變量0中裝載引用類型值
- aload_1 從局部變量1中裝載引用類型值
- aload_2 從局部變量2中裝載引用類型值
- aload_3 從局部變量3中裝載引用類型值
- iaload 從數(shù)組中裝載int類型值
- laload 從數(shù)組中裝載long類型值
- faload 從數(shù)組中裝載float類型值
- daload 從數(shù)組中裝載double類型值
- aaload 從數(shù)組中裝載引用類型值
- baload 從數(shù)組中裝載byte類型或boolean類型值
- caload 從數(shù)組中裝載char類型值
- saload 從數(shù)組中裝載short類型值
將棧中的值存入局部變量的指令
- istore 將int類型值存入局部變量
- lstore 將long類型值存入局部變量
- fstore 將float類型值存入局部變量
- dstore 將double類型值存入局部變量
- astore 將將引用類型或returnAddress類型值存入局部變量
- istore_0 將int類型值存入局部變量0
- istore_1 將int類型值存入局部變量1
- istore_2 將int類型值存入局部變量2
- istore_3 將int類型值存入局部變量3
- lstore_0 將long類型值存入局部變量0
- lstore_1 將long類型值存入局部變量1
- lstore_2 將long類型值存入局部變量2
- lstore_3 將long類型值存入局部變量3
- fstore_0 將float類型值存入局部變量0
- fstore_1 將float類型值存入局部變量1
- fstore_2 將float類型值存入局部變量2
- fstore_3 將float類型值存入局部變量3
- dstore_0 將double類型值存入局部變量0
- dstore_1 將double類型值存入局部變量1
- dstore_2 將double類型值存入局部變量2
- dstore_3 將double類型值存入局部變量3
- astore_0 將引用類型或returnAddress類型值存入局部變量0
- astore_1 將引用類型或returnAddress類型值存入局部變量1
- astore_2 將引用類型或returnAddress類型值存入局部變量2
- astore_3 將引用類型或returnAddress類型值存入局部變量3
- iastore 將int類型值存入數(shù)組中
- lastore 將long類型值存入數(shù)組中
- fastore 將float類型值存入數(shù)組中
- dastore 將double類型值存入數(shù)組中
- aastore 將引用類型值存入數(shù)組中
- bastore 將byte類型或者boolean類型值存入數(shù)組中
- castore 將char類型值存入數(shù)組中
- sastore 將short類型值存入數(shù)組中
wide指令
- wide 使用附加字節(jié)擴展局部變量索引
通用(無類型)棧操作
- nop 不做任何操作
- pop 彈出棧頂端一個字長的內(nèi)容
- pop2 彈出棧頂端兩個字長的內(nèi)容
- dup 復制棧頂部一個字長內(nèi)容
- dup_x1 復制棧頂部一個字長的內(nèi)容,然后將復制內(nèi)容及原來彈出的兩個字長的內(nèi)容壓入棧
- dup_x2 復制棧頂部一個字長的內(nèi)容,然后將復制內(nèi)容及原來彈出的三個字長的內(nèi)容壓入棧
- dup2 復制棧頂部兩個字長內(nèi)容
- dup2_x1 復制棧頂部兩個字長的內(nèi)容,然后將復制內(nèi)容及原來彈出的三個字長的內(nèi)容壓入棧
- dup2_x2 復制棧頂部兩個字長的內(nèi)容,然后將復制內(nèi)容及原來彈出的四個字長的內(nèi)容壓入棧
- swap 交換棧頂部兩個字長內(nèi)容
類型轉(zhuǎn)換
- i2l 把int類型的數(shù)據(jù)轉(zhuǎn)化為long類型
- i2f 把int類型的數(shù)據(jù)轉(zhuǎn)化為float類型
- i2d 把int類型的數(shù)據(jù)轉(zhuǎn)化為double類型
- l2i 把long類型的數(shù)據(jù)轉(zhuǎn)化為int類型
- l2f 把long類型的數(shù)據(jù)轉(zhuǎn)化為float類型
- l2d 把long類型的數(shù)據(jù)轉(zhuǎn)化為double類型
- f2i 把float類型的數(shù)據(jù)轉(zhuǎn)化為int類型
- f2l 把float類型的數(shù)據(jù)轉(zhuǎn)化為long類型
- f2d 把float類型的數(shù)據(jù)轉(zhuǎn)化為double類型
- d2i 把double類型的數(shù)據(jù)轉(zhuǎn)化為int類型
- d2l 把double類型的數(shù)據(jù)轉(zhuǎn)化為long類型
- d2f 把double類型的數(shù)據(jù)轉(zhuǎn)化為float類型
- i2b 把int類型的數(shù)據(jù)轉(zhuǎn)化為byte類型
- i2c 把int類型的數(shù)據(jù)轉(zhuǎn)化為char類型
- i2s 把int類型的數(shù)據(jù)轉(zhuǎn)化為short類型
整數(shù)運算
- iadd 執(zhí)行int類型的加法
- ladd 執(zhí)行l(wèi)ong類型的加法
- isub 執(zhí)行int類型的減法
- lsub 執(zhí)行l(wèi)ong類型的減法
- imul 執(zhí)行int類型的乘法
- lmul 執(zhí)行l(wèi)ong類型的乘法
- idiv 執(zhí)行int類型的除法
- ldiv 執(zhí)行l(wèi)ong類型的除法
- irem 計算int類型除法的余數(shù)
- lrem 計算long類型除法的余數(shù)
- ineg 對一個int類型值進行取反操作
- lneg 對一個long類型值進行取反操作
- iinc 把一個常量值加到一個int類型的局部變量上
邏輯運算
移位操作
- ishl 執(zhí)行int類型的向左移位操作
- lshl 執(zhí)行l(wèi)ong類型的向左移位操作
- ishr 執(zhí)行int類型的向右移位操作
- lshr 執(zhí)行l(wèi)ong類型的向右移位操作
- iushr 執(zhí)行int類型的向右邏輯移位操作
- lushr 執(zhí)行l(wèi)ong類型的向右邏輯移位操作
按位布爾運算
- iand 對int類型值進行“邏輯與”操作
- land 對long類型值進行“邏輯與”操作
- ior 對int類型值進行“邏輯或”操作
- lor 對long類型值進行“邏輯或”操作
- ixor 對int類型值進行“邏輯異或”操作
- lxor 對long類型值進行“邏輯異或”操作
浮點運算
- fadd 執(zhí)行float類型的加法
- dadd 執(zhí)行double類型的加法
- fsub 執(zhí)行float類型的減法
- dsub 執(zhí)行double類型的減法
- fmul 執(zhí)行float類型的乘法
- dmul 執(zhí)行double類型的乘法
- fdiv 執(zhí)行float類型的除法
- ddiv 執(zhí)行double類型的除法
- frem 計算float類型除法的余數(shù)
- drem 計算double類型除法的余數(shù)
- fneg 將一個float類型的數(shù)值取反
- dneg 將一個double類型的數(shù)值取反
對象和數(shù)組
對象操作指令
- new 創(chuàng)建一個新對象
- checkcast 確定對象為所給定的類型
- getfield 從對象中獲取字段
- putfield 設(shè)置對象中字段的值
- getstatic 從類中獲取靜態(tài)字段
- putstatic 設(shè)置類中靜態(tài)字段的值
- instanceof 判斷對象是否為給定的類型
數(shù)組操作指令
- newarray 分配數(shù)據(jù)成員類型為基本上數(shù)據(jù)類型的新數(shù)組
- anewarray 分配數(shù)據(jù)成員類型為引用類型的新數(shù)組
- arraylength 獲取數(shù)組長度
- multianewarray 分配新的多維數(shù)組
控制流
條件分支指令
- ifeq 如果等于0,則跳轉(zhuǎn)
- ifne 如果不等于0,則跳轉(zhuǎn)
- iflt 如果小于0,則跳轉(zhuǎn)
- ifge 如果大于等于0,則跳轉(zhuǎn)
- ifgt 如果大于0,則跳轉(zhuǎn)
- ifle 如果小于等于0,則跳轉(zhuǎn)
- if_icmpcq 如果兩個int值相等,則跳轉(zhuǎn)
- if_icmpne 如果兩個int類型值不相等,則跳轉(zhuǎn)
- if_icmplt 如果一個int類型值小于另外一個int類型值,則跳轉(zhuǎn)
- if_icmpge 如果一個int類型值大于或者等于另外一個int類型值,則跳轉(zhuǎn)
- if_icmpgt 如果一個int類型值大于另外一個int類型值,則跳轉(zhuǎn)
- if_icmple 如果一個int類型值小于或者等于另外一個int類型值,則跳轉(zhuǎn)
- ifnull 如果等于null,則跳轉(zhuǎn)
- ifnonnull 如果不等于null,則跳轉(zhuǎn)
- if_acmpeq 如果兩個對象引用相等,則跳轉(zhuǎn)
- if_acmpnc 如果兩個對象引用不相等,則跳轉(zhuǎn)
比較指令
- lcmp 比較long類型值
- fcmpl 比較float類型值(當遇到NaN時,返回-1)
- fcmpg 比較float類型值(當遇到NaN時,返回1)
- dcmpl 比較double類型值(當遇到NaN時,返回-1)
- dcmpg 比較double類型值(當遇到NaN時,返回1)
無條件轉(zhuǎn)移指令
- goto 無條件跳轉(zhuǎn)
- goto_w 無條件跳轉(zhuǎn)(寬索引)
- 表跳轉(zhuǎn)指令
- tableswitch 通過索引訪問跳轉(zhuǎn)表,并跳轉(zhuǎn)
- lookupswitch 通過鍵值匹配訪問跳轉(zhuǎn)表,并執(zhí)行跳轉(zhuǎn)操作
異常
- athrow 拋出異常或錯誤
- finally子句
- jsr 跳轉(zhuǎn)到子例程
- jsr_w 跳轉(zhuǎn)到子例程(寬索引)
- rct 從子例程返回
方法調(diào)用與返回
方法調(diào)用指令
- invokcvirtual 運行時按照對象的類來調(diào)用實例方法
- invokespecial 根據(jù)編譯時類型來調(diào)用實例方法
- invokestatic 調(diào)用類(靜態(tài))方法
- invokcinterface 調(diào)用接口方法
方法返回指令
- ireturn 從方法中返回int類型的數(shù)據(jù)
- lreturn 從方法中返回long類型的數(shù)據(jù)
- freturn 從方法中返回float類型的數(shù)據(jù)
- dreturn 從方法中返回double類型的數(shù)據(jù)
- areturn 從方法中返回引用類型的數(shù)據(jù)
- return 從方法中返回,返回值為void
線程同步
- montiorenter 進入并獲取對象監(jiān)視器
- monitorexit 釋放并退出對象監(jiān)視器
- JVM指令助記符
變量到操作數(shù)棧:iload,iload_,lload,lload_,fload,fload_,dload,dload_,aload,aload_
操作數(shù)棧到變量:istore,istore_,lstore,lstore_,fstore,fstore_,dstore,dstor_,astore,astore_
常數(shù)到操作數(shù)棧:bipush,sipush,ldc,ldc_w,ldc2_w,aconst_null,iconst_ml,iconst_,lconst_,fconst_,dconst_
加:iadd,ladd,fadd,dadd
減:isub,lsub,fsub,dsub
乘:imul,lmul,fmul,dmul
除:idiv,ldiv,fdiv,ddiv
余數(shù):irem,lrem,frem,drem
取負:ineg,lneg,fneg,dneg
移位:ishl,lshr,iushr,lshl,lshr,lushr
按位或:ior,lor
按位與:iand,land
按位異或:ixor,lxor
類型轉(zhuǎn)換:i2l,i2f,i2d,l2f,l2d,f2d(放寬數(shù)值轉(zhuǎn)換)
i2b,i2c,i2s,l2i,f2i,f2l,d2i,d2l,d2f(縮窄數(shù)值轉(zhuǎn)換)
創(chuàng)建類實便:new
創(chuàng)建新數(shù)組:newarray,anewarray,multianwarray
訪問類的域和類實例域:getfield,putfield,getstatic,putstatic
把數(shù)據(jù)裝載到操作數(shù)棧:baload,caload,saload,iaload,laload,faload,daload,aaload
從操作數(shù)棧存存儲到數(shù)組:bastore,castore,sastore,iastore,lastore,fastore,dastore,aastore
獲取數(shù)組長度:arraylength
檢相類實例或數(shù)組屬性:instanceof,checkcast
操作數(shù)棧管理:pop,pop2,dup,dup2,dup_xl,dup2_xl,dup_x2,dup2_x2,swap
有條件轉(zhuǎn)移:ifeq,iflt,ifle,ifne,ifgt,ifge,ifnull,ifnonnull,if_icmpeq,if_icmpene,
if_icmplt,if_icmpgt,if_icmple,if_icmpge,if_acmpeq,if_acmpne,lcmp,fcmpl
fcmpg,dcmpl,dcmpg
復合條件轉(zhuǎn)移:tableswitch,lookupswitch
無條件轉(zhuǎn)移:goto,goto_w,jsr,jsr_w,ret
調(diào)度對象的實便方法:invokevirtual
調(diào)用由接口實現(xiàn)的方法:invokeinterface
調(diào)用需要特殊處理的實例方法:invokespecial
調(diào)用命名類中的靜態(tài)方法:invokestatic
方法返回:ireturn,lreturn,freturn,dreturn,areturn,return
異常:athrow
finally關(guān)鍵字的實現(xiàn)使用:jsr,jsr_w,ret
有需要編程視頻的可以私信小七"學習"哦!需要其他資源的也可以私聊小七的!