JVM指令集

一卓鹿、JVM指令助記符

(1)操作數(shù)棧

變量到操作數(shù)棧:iload,iload_,lload,fload,fload_,dload,dload_,aload,aload_

操作數(shù)棧到變量:istore,istore_,lstore,lstore_,fstore,fstore_,dstore,dstore_,astore,astore_

常數(shù)到操作數(shù)棧:bipush,sipush,ldc,ldc_w,ldc2_w,aconst_null,iconst_,lconst_,fconst_,dconst_

把數(shù)據(jù)裝載到操作數(shù)棧:baload,caload,saload,iaload,laload,faload,daload,aaload

從操作數(shù)棧存儲(chǔ)到數(shù)組:bastore,castore,sastore,iastore,lastore,fastore,dastore,aastore

操作數(shù)棧管理:pop,pop2,dup,dup2,dup_xl,dup2_xl,dup_x2,dup2_x2,swap

1着降、從棧中的局部變量中裝載值的指令:
-----------------------------
變量到操作數(shù)棧
-----------------------------
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中裝載引用類型值
--------------------------------------------
把數(shù)據(jù)裝載到操作數(shù)棧
--------------------------------------------
iaload 從數(shù)組中裝載int類型值
laload 從數(shù)組中裝載long類型值
faload 從數(shù)組中裝載float類型值
daload 從數(shù)組中裝載double類型值
aaload 從數(shù)組中裝載引用類型值
baload 從數(shù)組中裝載byte類型或boolean類型值
caload 從數(shù)組中裝載char類型值
saload 從數(shù)組中裝載short類型值
2最欠、操作數(shù)棧到變量(將棧中的值存入局部變量的指令):
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
--------------------------------------------
從操作數(shù)棧中存儲(chǔ)到數(shù)組
--------------------------------------------
iastore 將int類型值存入數(shù)組中
lastore 將long類型值存入數(shù)組中
fastore 將float類型值存入數(shù)組中
dastore 將double類型值存入數(shù)組中
aastore 將引用類型值存入數(shù)組中
bastore 將byte類型或者boolean類型值存入數(shù)組中
castore 將char類型值存入數(shù)組中
sastore 將short類型值存入數(shù)組中
3醉途、常數(shù)到操作數(shù)棧(將常量壓入棧的指令):
aconst_null 將null對(duì)象引用壓入棧
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 將一個(gè)8位帶符號(hào)整數(shù)壓入棧
sipush 將16位帶符號(hào)整數(shù)壓入棧
ldc 把常量池中的項(xiàng)壓入棧
ldc_w 把常量池中的項(xiàng)壓入棧(使用寬索引)
ldc2_w 把常量池中l(wèi)ong類型或者double類型的項(xiàng)壓入棧(使用寬索引)
4、操作數(shù)棧管理(通風(fēng)無類型)
nop 不做任何操作
pop 彈出棧頂端一個(gè)字長的內(nèi)容
pop2 彈出棧頂端兩個(gè)字長的內(nèi)容
dup 復(fù)制棧頂部一個(gè)字長內(nèi)容
dup_x1 復(fù)制棧頂部一個(gè)字長的內(nèi)容,然后將復(fù)制內(nèi)容及原來彈出的兩個(gè)字長的內(nèi)容壓入棧
dup_x2 復(fù)制棧頂部一個(gè)字長的內(nèi)容湖雹,然后將復(fù)制內(nèi)容及原來彈出的三個(gè)字長的內(nèi)容壓入棧
dup2 復(fù)制棧頂部兩個(gè)字長內(nèi)容
dup2_x1 復(fù)制棧頂部兩個(gè)字長的內(nèi)容,然后將復(fù)制內(nèi)容及原來彈出的三個(gè)字長的內(nèi)容壓入棧
dup2_x2 復(fù)制棧頂部兩個(gè)字長的內(nèi)容二鳄,然后將復(fù)制內(nèi)容及原來彈出的四個(gè)字長的內(nèi)容壓入棧
swap 交換棧頂部兩個(gè)字長內(nèi)容
5赴涵、wide 指令
wide 使用附加字節(jié)擴(kuò)展局部變量索引

(2)運(yùn)算與轉(zhuǎn)換

加:iadd,ladd,fadd,dadd
減:is,ls,fs,ds
乘:imul,lmul,fmul,dmul
除:idiv,ldiv,fdiv,ddiv
余數(shù):irem,lrem,frem,drem
取負(fù):ineg,lneg,fneg,dneg
移位:ishl,lshr,iushr,lshl,lshr,lushr
按位或:ior,lor
按位與:iand,ladn
按位異或: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)換)
1、整數(shù)運(yùn)算
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 計(jì)算int類型除法的余數(shù)
lrem 計(jì)算long類型除法的余數(shù)
ineg 對(duì)一個(gè)int類型值進(jìn)行取反操作
lneg 對(duì)一個(gè)long類型值進(jìn)行取反操作
iinc 把一個(gè)常量值加到一個(gè)int類型的局部變量上
2订讼、浮數(shù)運(yùn)算
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 計(jì)算float類型除法的余數(shù)
drem 計(jì)算double類型除法的余數(shù)
fneg 將一個(gè)float類型的數(shù)值取反
dneg 將一個(gè)double類型的數(shù)值取反
3髓窜、移位操作
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類型的向右邏輯移位操作
4、按位布爾運(yùn)算
iand 對(duì)int類型值進(jìn)行“邏輯與”操作
land 對(duì)long類型值進(jìn)行“邏輯與”操作
ior 對(duì)int類型值進(jìn)行“邏輯或”操作
lor 對(duì)long類型值進(jìn)行“邏輯或”操作
ixor 對(duì)int類型值進(jìn)行“邏輯異或”操作
lxor 對(duì)long類型值進(jìn)行“邏輯異或”操作
5欺殿、類型轉(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類型

(3)條件轉(zhuǎn)移

有條件轉(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
復(fù)合條件轉(zhuǎn)移:tableswitch,lookupswitch
無條件轉(zhuǎn)移:goto,goto_w,jsr,jsr_w,ret
1寄纵、條件分支指令
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 如果兩個(gè)int值相等,則跳轉(zhuǎn)
if_icmpne 如果兩個(gè)int類型值不相等亦歉,則跳轉(zhuǎn)
if_icmplt 如果一個(gè)int類型值小于另外一個(gè)int類型值恤浪,則跳轉(zhuǎn)
if_icmpge 如果一個(gè)int類型值大于或者等于另外一個(gè)int類型值,則跳轉(zhuǎn)
if_icmpgt 如果一個(gè)int類型值大于另外一個(gè)int類型值肴楷,則跳轉(zhuǎn)
if_icmple 如果一個(gè)int類型值小于或者等于另外一個(gè)int類型值水由,則跳轉(zhuǎn)
ifnull 如果等于null,則跳轉(zhuǎn)
ifnonnull 如果不等于null赛蔫,則跳轉(zhuǎn)
if_acmpeq 如果兩個(gè)對(duì)象引用相等砂客,則跳轉(zhuǎn)
if_acmpnc 如果兩個(gè)對(duì)象引用不相等泥张,則跳轉(zhuǎn)
2、比較指令
lcmp 比較long類型值
fcmpl 比較float類型值(當(dāng)遇到NaN時(shí)鞭盟,返回-1)
fcmpg 比較float類型值(當(dāng)遇到NaN時(shí)圾结,返回1)
dcmpl 比較double類型值(當(dāng)遇到NaN時(shí),返回-1)
dcmpg 比較double類型值(當(dāng)遇到NaN時(shí)齿诉,返回1)
3筝野、表跳轉(zhuǎn)指令
tableswitch 通過索引訪問跳轉(zhuǎn)表,并跳轉(zhuǎn)
lookupswitch 通過鍵值匹配訪問跳轉(zhuǎn)表粤剧,并執(zhí)行跳轉(zhuǎn)操作
4歇竟、無條件轉(zhuǎn)移指令
goto 無條件跳轉(zhuǎn)
goto_w 無條件跳轉(zhuǎn)(寬索引)
jsr 跳轉(zhuǎn)到子例程
jsr_w 跳轉(zhuǎn)到子例程(寬索引)
rct 從子例程返回

(4)類與數(shù)組

創(chuàng)建類實(shí)便:new
創(chuàng)建新數(shù)組:newarray,anewarray,multianwarray
訪問類的域和類實(shí)例域:getfield,putfield,getstatic,putstatic
獲取數(shù)組長度:arraylength
檢相類實(shí)例或數(shù)組屬性:instanceof,checkcast
1、對(duì)象操作指令
new 創(chuàng)建一個(gè)新對(duì)象
checkcast 確定對(duì)象為所給定的類型
getfield 從對(duì)象中獲取字段
putfield 設(shè)置對(duì)象中字段的值
getstatic 從類中獲取靜態(tài)字段
putstatic 設(shè)置類中靜態(tài)字段的值
instanceof 判斷對(duì)象是否為給定的類型
2抵恋、數(shù)組操作指令
newarray 分配數(shù)據(jù)成員類型為基本上數(shù)據(jù)類型的新數(shù)組
anewarray 分配數(shù)據(jù)成員類型為引用類型的新數(shù)組
arraylength 獲取數(shù)組長度
multianewarray 分配新的多維數(shù)組

(5)調(diào)度與返回加finally

調(diào)度對(duì)象的實(shí)例方法:invokevirtual
調(diào)用由接口實(shí)現(xiàn)的方法:invokeinterface
調(diào)用需要特殊處理的實(shí)例方法:invokespecial
調(diào)用命名類中的靜態(tài)方法:invokestatic
方法返回:ireturn,lreturn,freturn,dreturn,areturn,return
異常:athrow
finally關(guān)鍵字的實(shí)現(xiàn)使用:jsr,jsr_w,ret
1焕议、方法的調(diào)用指令
invokcvirtual 運(yùn)行時(shí)按照對(duì)象的類來調(diào)用實(shí)例方法
invokespecial 根據(jù)編譯時(shí)類型來調(diào)用實(shí)例方法
invokestatic 調(diào)用類(靜態(tài))方法
invokcinterface 調(diào)用接口方法
2、方法返回指令
ireturn 從方法中返回int類型的數(shù)據(jù)
lreturn 從方法中返回long類型的數(shù)據(jù)
freturn 從方法中返回float類型的數(shù)據(jù)
dreturn 從方法中返回double類型的數(shù)據(jù)
areturn 從方法中返回引用類型的數(shù)據(jù)
return 從方法中返回弧关,返回值為void
3盅安、異常
athrow 拋出異常或錯(cuò)誤
finally子句
jsr 跳轉(zhuǎn)到子例程
jsr_w 跳轉(zhuǎn)到子例程(寬索引)
rct 從子例程返回

(6)線程同步

montiorenter 進(jìn)入并獲取對(duì)象監(jiān)視器
monitorexit 釋放并退出對(duì)象監(jiān)視器
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末世囊,一起剝皮案震驚了整個(gè)濱河市别瞭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌株憾,老刑警劉巖蝙寨,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異嗤瞎,居然都是意外死亡墙歪,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門贝奇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來虹菲,“玉大人,你說我怎么就攤上這事弃秆〗焱铮” “怎么了?”我有些...
    開封第一講書人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵菠赚,是天一觀的道長脑豹。 經(jīng)常有香客問我,道長衡查,這世上最難降的妖魔是什么瘩欺? 我笑而不...
    開封第一講書人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上俱饿,老公的妹妹穿的比我還像新娘歌粥。我一直安慰自己,他們只是感情好拍埠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開白布失驶。 她就那樣靜靜地躺著,像睡著了一般枣购。 火紅的嫁衣襯著肌膚如雪嬉探。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評(píng)論 1 305
  • 那天棉圈,我揣著相機(jī)與錄音涩堤,去河邊找鬼。 笑死分瘾,一個(gè)胖子當(dāng)著我的面吹牛胎围,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播德召,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼白魂,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了上岗?” 一聲冷哼從身側(cè)響起碧聪,我...
    開封第一講書人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎液茎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辞嗡,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡捆等,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了续室。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片栋烤。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖挺狰,靈堂內(nèi)的尸體忽然破棺而出明郭,到底是詐尸還是另有隱情,我是刑警寧澤丰泊,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布薯定,位于F島的核電站,受9級(jí)特大地震影響瞳购,放射性物質(zhì)發(fā)生泄漏话侄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望年堆。 院中可真熱鬧吞杭,春花似錦、人聲如沸变丧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽痒蓬。三九已至童擎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間谊却,已是汗流浹背柔昼。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留炎辨,地道東北人捕透。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像碴萧,于是被迫代替她去往敵國和親乙嘀。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容