Jasmin assebler使用数组分配状态

时间:2018-11-30 17:07:10

标签: java compiler-construction jvm jasmin

var a int[1];
var aa int[1];
aa = a;

假设我们要在Java jvm中编译类似的内容。可能有人会做

ldc 1
newarray    int
astore  0
ldc 1
newarray    int
astore  1
aload   0
istore  1

但是,这不起作用,它会抛出(class: test, method: main signature: ()V) Expecting to find integer on stack数组aload到局部变量中吗?

1 个答案:

答案 0 :(得分:2)

这是引起问题的istore指令。在Virtual Machine Specification中,它定义为

  

将int存储到局部变量中

您正在尝试存储数组引用,因此astore是正确的指令类型,就像您在newarray指令之后所做的一样。