2016-05-05 15 views
0

Ich muss eine Erweiterung von MAL erstellen. Also, zuerst hatte ich versucht, auf mic1sim.malWie erstelle ich ein IUSHR4 auf IJVM?

MAR = SP = SP + 1; rd    // read top of the stack 
H = TOS       // H will be a SP 
MDR = H = H >> 1; wr    // SHIFT 1 and write on MDR 
MDR = H = H >> 1; wr     // SHIFT 1 + 1 = 2 
MDR = H = H >> 1; wr    // SHIFT 1 + 1 + 1 = 3 
MDR = H = H >> 1: wr    // 4th shift 
TOS = MDR; goto Main1    // TOS updated 

hinzufügen, aber funktioniert nicht! Kann mir jemand erklären, wo ich falsch liege?

Antwort

0

SP zeigt auf die Spitze des Stapels. SP + 1 zeigt auf Daten, die nicht mehr auf dem Stapel liegen. Wenn Sie diesen Wert lesen, wird Müll zurückgegeben. Sie haben eine Bedingung, bei der im dritten Befehl zwei verschiedene Werte in das MDR geschrieben werden: das Ergebnis der ALU-Operation und die Daten aus dem Speicher aus dem gelesenen in der ersten Anweisung.

Es ist nicht notwendig, nach jeder Schicht zu schreiben. Berechnen Sie das Ergebnis in H. Wenn Sie fertig sind, speichern Sie den Wert von H in MDR und schreiben Sie den Wert in den Stapel.

TOS hat bereits am Anfang der Anweisung den obersten Wert auf dem Stapel. Es ist nicht notwendig, es zu lesen.