美文网首页
常量入栈指令

常量入栈指令

作者: Shaw_Young | 来源:发表于2021-08-19 10:12 被阅读0次

常量入栈指令的功能是将常数压入操作数栈,根据数据类型和入栈内容的不同,又可以分为const系列、push系列和ldc指令。

指令const系列:用于对特定的常量入栈,入栈的常量隐含在指令本身里。指令有:iconst_<i>(i从-1到5)、lconst_<l>(l从0到1)、fconst_<f>(f从0到2)、dconst_<d从0到1>、aconst_null。
比如:

  • iconst_m1将-1压入操作数栈;
  • iconst_x(x为0到5)将x压入栈;
  • lconst_0、lconst_1分别将长整数0和1压入栈;
  • fconst_0、fconst_1、fconst_2分别将浮点数0、1、2压入栈;
  • dconst_0和dconst_1分别将double型0和1压入栈
  • aconst_null将null压入操作数栈;

从指令的命名上不难找出规律,指令助记符的第一个字符总是喜欢表示数据类型,i表示整数,l表示长整数,f表示浮点数,d表示双精度浮点,习惯上用a表示对象引用。如果指令隐含操作的参数,会以下划线形式给出。

指令push系列:主要包括bipush和sipush。它们的区别在于接收数据类型的不同,bipush接收8位整数作为参数,sipush接收16位整数,它们都将参数压入栈。

指令ldc系列:如果以上指令都不能满足需求,那么可以使用万能的ldc指令,它可以接收一个8位的参数,该参数指向常量池中的int、float或者String的索引,将指定的内容压入堆栈。
类似的还有ldc_w,它接收两个8位参数,能支持的索引范围大于ldc。
如果要压入的元素是long或者double类型的,则使用ldc2_w指令,使用方式都是类似的。

总结如下:

类型 常数指令 范围
int(boolean,byte,char,short) iconst [-1,5]
bipush [-127,128]
sipush [-32768,32767]
ldc any int value
long iconst 0,1
ldc any long value
float fconst 0,1,2
ldc any float value
double dconst 0,1
ldc any double value
reference aconst null
ldc String literal,Class literal

梦想很模糊,去追,它会渐变清晰。青春励志,奋斗下去别放弃。

相关文章

  • JVM指令手册

    将常量压入栈的指令 aconst_null 将null对象引用压入栈iconst_m1 将int类型常量-1压入栈...

  • 常量入栈指令

    常量入栈指令的功能是将常数压入操作数栈,根据数据类型和入栈内容的不同,又可以分为const系列、push系列和ld...

  • JVM 指令表

    常量入栈指令 局部变量值转载到栈中指令 将栈顶值保存到局部变量中指令 wide指令 通用(无类型)栈操作指令 类型...

  • javap生成的汇编语言指令表

    栈和局部变量操作 将常量压入栈的指令 aconst_null 将null对象引用压入栈iconst...

  • JVM-4 字节码指令

    常量入栈指令指令码操作码(助记符)操作数描述(栈指操作数栈)0x01aconst_nullnull值入栈。0x02...

  • 转-javap -c 字节码含义

    栈和局部变量操作将常量压入栈的指令aconst_null 将null对象引用压入栈iconst_m...

  • javap 指令集

    标签:floatintdouble局部变量longjavap指令集类型 栈和局部变量操作 将常量压入栈的指令 ac...

  • Java字节码指令大全

    一、Java字节码指令大全 1.1.常量入栈指令 1.2.局部变量值转载到栈中指令 1.3.将栈顶值保存到局部变量...

  • JVM指令集

    1. 栈和局部变量操作 1.1 将常量压入栈的指令 aconst_null 将null对象引用压入栈iconst_...

  • java-JVM-01指令

    栈和局部变量操作 将常量压入栈的指令 aconst_null 将null对象引用压入栈 iconst_m1 将in...

网友评论

      本文标题:常量入栈指令

      本文链接:https://www.haomeiwen.com/subject/isambltx.html