常量入栈指令

2021-08-19  本文已影响0人  Shaw_Young

常量入栈指令的功能是将常数压入操作数栈,根据数据类型和入栈内容的不同,又可以分为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。
比如:

从指令的命名上不难找出规律,指令助记符的第一个字符总是喜欢表示数据类型,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

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

上一篇 下一篇

猜你喜欢

热点阅读