返回

字节码指令简明速记表:为开发者扫清障碍

Android

引言

Java虚拟机(JVM)是Java程序运行的平台,它将Java字节码解释为机器指令,从而实现跨平台的可执行性。字节码指令是JVM的基本组成部分,理解这些指令对于深入理解Java程序的运行机制至关重要。

然而,字节码指令的名称冗长且晦涩难懂,这给开发者带来了不小的学习障碍。本文旨在提供一份简明扼要的字节码指令速记表,帮助开发者快速掌握这些指令的含义和用法,让字节码不再成为编程障碍。

字节码指令速记表

字节码 助记符 指令含义
0x00 nop 无操作
0x01 aconst_null 将null推送至栈顶
0x02 iconst_m1 将-1推送至栈顶
0x03 iconst_0 将0推送至栈顶
0x04 iconst_1 将1推送至栈顶
0x05 iconst_2 将2推送至栈顶
0x06 iconst_3 将3推送至栈顶
0x07 iconst_4 将4推送至栈顶
0x08 iconst_5 将5推送至栈顶
0x09 lconst_0 将long型0推送至栈顶
0x0a lconst_1 将long型1推送至栈顶
0x0b fconst_0 将float型0.0推送至栈顶
0x0c fconst_1 将float型1.0推送至栈顶
0x0d fconst_2 将float型2.0推送至栈顶
0x0e dconst_0 将double型0.0推送至栈顶
0x0f dconst_1 将double型1.0推送至栈顶
0x10 bipush 将一个字节(-128~127)推送至栈顶
0x11 sipush 将一个short型(-32768~32767)推送至栈顶
0x12 ldc 将一个常量(int、float、string等)推送至栈顶
0x13 ldc_w 将一个宽常量(int、float、string等)推送至栈顶
0x14 ldc2_w 将一个宽常量(long、double)推送至栈顶
0x15 iload 将一个局部变量(int型)加载至栈顶
0x16 lload 将一个局部变量(long型)加载至栈顶
0x17 fload 将一个局部变量(float型)加载至栈顶
0x18 dload 将一个局部变量(double型)加载至栈顶
0x19 aload 将一个局部变量(引用类型)加载至栈顶
0x1a iload_0 将第一个局部变量(int型)加载至栈顶
0x1b iload_1 将第二个局部变量(int型)加载至栈顶
0x1c iload_2 将第三个局部变量(int型)加载至栈顶
0x1d iload_3 将第四个局部变量(int型)加载至栈顶
0x1e lload_0 将第一个局部变量(long型)加载至栈顶
0x1f lload_1 将第二个局部变量(long型)加载至栈顶
0x20 lload_2 将第三个局部变量(long型)加载至栈顶
0x21 lload_3 将第四个局部变量(long型)加载至栈顶
0x22 fload_0 将第一个局部变量(float型)加载至栈顶
0x23 fload_1 将第二个局部变量(float型)加载至栈顶
0x24 fload_2 将第三个局部变量(float型)加载至栈顶
0x25 fload_3 将第四个局部变量(float型)加载至栈顶
0x26 dload_0 将第一个局部变量(double型)加载至栈顶
0x27 dload_1 将第二个局部变量(double型)加载至栈顶
0x28 dload_2 将第三个局部变量(double型)加载至栈顶
0x29 dload_3 将第四个局部变量(double型)加载至栈顶
0x2a aload_0 将第一个局部变量(引用类型)加载至栈顶
0x2b aload_1 将第二个局部变量(引用类型)加载至栈顶
0x2c aload_2 将第三个局部变量(引用类型)加载至栈顶
0x2d aload_3 将第四个局部变量(引用类型)加载至栈顶
0x2e iaload 将数组中指定索引处的int元素加载至栈顶
0x2f laload 将数组中指定索引处的long元素加载至栈顶
0x30 faload 将数组中指定索引处的float元素加载至栈顶
0x31 daload 将数组中指定索引处的double元素加载至栈顶
0x32 aaload 将数组中指定索引处的引用元素加载至栈顶
0x33 baload 将数组中指定索引处的byte元素加载至栈顶
0x34 caload 将数组中指定索引处的char元素加载至栈顶
0x35 saload 将数组中指定索引处的short元素加载至栈顶
0x36 istore 将栈顶int元素存储到局部变量中
0x37 lstore 将栈顶long元素存储到局部变量中
0x38 fstore 将栈顶float元素存储到局部变量中
0x39 dstore 将栈顶double元素存储到局部变量中
0x3a astore 将栈顶引用元素存储到局部变量中
0x3b istore_0 将栈顶int元素存储到第一个局部变量中
0x3c istore_1 将栈顶int元素存储到第二个局部变量中
0x3d istore_2 将栈顶int元素存储到第三个局部变量中
0x3e istore_3 将栈顶int元素存储到第四个局部变量中
0x3f lstore_0 将栈顶long元素存储到第一个局部变量中
0x40 lstore_1 将栈顶long元素存储到第二个局部变量中
0x41 lstore_2 将栈顶long元素存储到第三个局部变量中
0x42 lstore_3 将栈顶long元素存储到第四个局部变量中
0x43 fstore_0 将栈顶float元素存储到第一个局部变量中
0x44 fstore_1 将栈顶float元素存储到第二个局部变量中
0x45 fstore_2 将栈顶float元素存储到第三个局部变量中
0x46 fstore_3 将栈顶float元素存储到第四个局部变量中
0x47 dstore_0 将栈顶double元素存储到第一个局部变量中
0x48 dstore_1 将栈顶double元素存储到第二个局部变量中
0x4