Jasmin ассемблер, использующий назначения массива - PullRequest
0 голосов
/ 30 ноября 2018
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 голосов
/ 30 ноября 2018

Это инструкция istore, вызывающая проблему.В спецификации Virtual Machine она определена как

Сохранить int в локальной переменной

Вы пытаетесь сохранить ссылку на массив, так что astore - это правильный тип инструкции, именно так, как вы это делали после newarray инструкции.

...