2016-03-28 7 views
0

Ich habe diese Jasmin-Assembly, die der Vereinfachung der JVM-Assembly entspricht, die von einem Bytecode-Rewriter erzeugt wird, den ich schreibe. Es stürzt beim Ausführen ab, funktioniert aber, wenn ich den sipush und den ersten Speicher lösche.Nutzloser Speicher verursacht Absturz

.method public simple()V 
    .limit stack 4 
    sipush  12345 
    istore_1 
    getstatic java/lang/System/out Ljava/io/PrintStream; 
    sipush  12345 
    ldc 12345 
    iadd 
    invokevirtual java/io/PrintStream/println(I)V 
    return 
.end method 

Muss die JVM jedes Geschäft von einer Last verwenden?

Antwort

1

istore_1 speichert einen Wert für die lokale Variable # 1, aber Ihre Methoden haben keine lokalen Variablen.

Das Verfahren wird gültig, wenn Sie die folgende Zeile hinzufügen:

.limit locals 2