Wie rum popt IJVM?

berserkerdq2

Bekanntes Mitglied
Hi, wir haben ein Beispiel wo steht:

ILOAD i
ILOAD k
IADD //i+k

Was ich nicht kapiere, ich dachte, der Stack wäre so aufgebaut:

Wenn ich habe

ILOAD 1
ILOAD 2

Dann ist im Stack:
2
1

Also die 2 ist über der 1.

Müsste es dann nicht 2+1 heißen?

Also 2+1 und nicht 1+2, wie im Beispiel?
 

KonradN

Super-Moderator
Mitarbeiter
Wie man das schreibt, ist erst einmal egal. Da es ein Stapel ist, ist die Vorstellung durchaus so, dass auf den Stapel oben etwas drauf gelegt wird.

Die Frage ist hier maximal: Wird der erste Wert + zweiter Wert gerechnet oder zweiter Wert + erster Wert?
Aber das macht schlicht keinen Unterschied - a + b = b + a!

Also ist die Frage, wie sieht es bei isub aus?
Pop two words from stack; subtract the top word from the second to top word, push the difference;

ILOAD i
ILOAD k
ISUB

Nach den beiden ILOAD Aufrufen ist das oberste Element k, das zweitoberste Element das i. Somit wird i-k berechnet.
Um hier nicht durcheinander zu kommen würde ich daher auch beim add schreiben: i+k
Oder um bei dem 1 + 2 Bespiel zu bleiben: Ich tendiere auch zu dem 1+2

Und bitte: Lies die Dokumentation, die es so gibt! Durch das Lesen der Dokumentation kann man sich die meisten Deiner Frage selbst beantworten.
 

berserkerdq2

Bekanntes Mitglied
Wie man das schreibt, ist erst einmal egal. Da es ein Stapel ist, ist die Vorstellung durchaus so, dass auf den Stapel oben etwas drauf gelegt wird.

Die Frage ist hier maximal: Wird der erste Wert + zweiter Wert gerechnet oder zweiter Wert + erster Wert?
Aber das macht schlicht keinen Unterschied - a + b = b + a!

Also ist die Frage, wie sieht es bei isub aus?
Pop two words from stack; subtract the top word from the second to top word, push the difference;

ILOAD i
ILOAD k
ISUB

Nach den beiden ILOAD Aufrufen ist das oberste Element k, das zweitoberste Element das i. Somit wird i-k berechnet.
Um hier nicht durcheinander zu kommen würde ich daher auch beim add schreiben: i+k
Oder um bei dem 1 + 2 Bespiel zu bleiben: Ich tendiere auch zu dem 1+2

Und bitte: Lies die Dokumentation, die es so gibt! Durch das Lesen der Dokumentation kann man sich die meisten Deiner Frage selbst beantworten.
Danke, aber im Normalfall, wenn ich z. B. IFLT nutze, da steht ja nur, dass was vom Stack gepopt wird, wenn ich hätte

ILOAD i
ILOAD k
IFLT label
wird jetzt von IFLT i oder k gepopt?
 

Ähnliche Java Themen

Neue Themen


Oben