目录
上一篇日志里用到的指令如bipush,iload等都是JVM常用的指令,它们有各自的分类,如bipush是常量压入操作数栈,iload是将数组指令索引压入操作数栈,根据操作的数据类型不同还可以分为,i开头的是对integer类型操作指令,f开头是对float类型操作指令。每一条字节码指令由一个字节的助记符加上后面的参数组成,例如sipush 100指令一共占用3个字节,sipush占一字节加上后面的参数占两个字节。这些指令有专门负责类型转换的,运算的指令和存储指令,这篇日志总结下从操作范围,也就是从局部变量表到操作数栈之间数据传递,来分类一些JVM常用的指令。
常量压栈指令
常量压栈指令作用是将常数压入操作数栈中,大致有push,ldc和const三类,push前面见过了,在一个两数相加的代码中,首先用到bipush指令将两个常量压入操作数栈里,根据数据大小可以使用bipush或sipush,前者可处理的数据范围在-128~127,后者更大在-32768~32767之间。第二种const类指令负责将一些特定的常量压栈,例如iconst_m1将-1压入操作数栈,aconst_null将null压栈,如果想将浮点类型数据压栈,使用fconst_x,x=1,2,3表示分别将1,2,3压栈&#x