揭秘java虚拟机(三)JVM指令集

目录

nop

处理栈

算数运算

强制类型装换

方法调用


官方说明是jvms14.pdf

nop

0x00 无操作

处理栈

说明 Stringintfloatbooleancharshortlongdouble
xconst_n x类型的n进栈0x01 aconst_null null进栈 0x02 iconst_m1 -1进栈      
  0x03 iconst_0 0x0B fconst_0    0x09 lconst_0 0x0E dconst_0 
  0x04 iconst_1 0x0C fconst_1    0x0A lconst_1 0x0F dconst_1 
  0x05 iconst_2 0x0D fconst_2      
  0x06 iconst_3       
  0x07 iconst_4       
  0x08 iconst_5 5进栈      
ldc 0x12 ldc 将常量值从常量池推栈顶     
 0x13 ldc_w将常量值从常量池推栈顶(宽索引)   0x14 ldc2_w 将常量值从常量池推栈顶
tload [index] 将局部变量进栈0x19 aload 将index执行局部变量进栈 0x15 iload0x17 fload    0x16 lload0x18 dload
tload_n 将第n个t形局部变量进栈0x2A aload_0 0x1A iload_00x22 fload_0   0x1E lload_00x26 dload_0
0x2B aload_1 0x1B iload_10x23 fload_1   0x1F lload_10x27 dload_1
0x2C aload_2 0x1C iload_20x24 fload_2   0x20 lload_20x28 dload_2
0x2D aload_3 0x1D iload_30x25 fload_2   0x21 lload_30x29 dload_3
taload 将t形数组第index值进栈0x32 aaload 

0x2E iaload

0x30 faload0x33 baload0x34 caload0x35 saload0x2F laload0x31 daload
tstore 将栈顶数值存入局部变量0x3A astore 0x36 istore0x38 fstore   0x37 lstore0x39 dstore

tstore_n

将栈顶存入第n个局部变量

0x4B astore_0 0x3B istore_00x43 fstore_0   0x3F lstore_00x47 dstore_0
0x4C astore_1 0x3C istore_10x44 fstore_1   0x40 lstore_10x48 dstore_1
0x4D astore_2 0x3D istore_20x45 fstore_2   0x41 lstore_20x49 dstore_2
0x4E astore_3 0x3E istore_30x46 fstore_3   0x42 lstore_30x4A dstore_3
tastore 将栈顶数值存入数组0x53 aastore 0x4F iastore0x51 fastore0x54 bastore0x55 castore0x56 sastore0x50 lastore0x52 dastore
pop  0x57 pop 栈顶出栈  
  0x58 pop2 栈顶一个(long/double)/两个(其他类型)出栈
dup  0x59 dup 复制栈顶并进栈  
  0x5A dup_x1 复制栈顶并插入栈中(必须看官网文档)  
  0x5B dup_x2 复制栈顶并插入栈中(必须看官网文档)  
  0x5C dup2
  0x5D dup2_x1
  0x5E dup2_x2
swap  0x5F swap 交换栈顶两个数值  
cmp   0x95 fcmpl 一个为NaN则为-1   0x94 lcmp比较栈顶0x97 dcmpl 一个为NaN则为-1
   0x96 fcompg 一个为NaN则为1    0x98 dcmpg
          

 

算数运算

 ifld
tadd 栈顶两数值相加并进栈(原数消失)iadd 0x60fadd 0x62ladd 0x61dadd 0x63
tsub(栈顶是减数)isub 0x64fsub 0x66lsub 0x65dsub 0x67
tmulimul 0x68fmul 0x6Almul 0x69dmul 0x6B
tdiv(遵循IEEE规范)0x6C idiv0x6E fdiv0x6D ldiv0x6F ddiv
trem(取模)    
tneg(取相反数)    
 0x84 iinc 自增1   

位运算

 

tshl(左移)
tshr(带符号右移>>)
tushr(>>>)
tand(按位与)
tor(按位或)
txor(按位异或)

类型装换

 ilfd
i l2i 0x88f2i 0x8Bd2i 0x8E
li2l 0x85 f2l 0x8Cd2l 0x8F
fi2f 0x86l2f 0x89 d2f 0x90
di2d 0x87l2d 0x8A0x8D 
bi2b 0x91   
ci2c 0x92   
si2s 0x93   

方法调用

invokevitual

invokeinterface

invokespecial:调用不会被重写的方法(私有方法,初始化方法,父类方法)

invokestatic:调用静态方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值