2016-04-19 8 views
0

ich gerade frage mich, warum das nicht funktioniert:Syscall Druck int

Print Integer: li $v0, 1 
      li, $a0, $v0  #with $v0 being an added up value 
      syscall 

Aber das funktioniert:

Print Integer: li $v0, 1 
     li, $a0, 100 
     syscall 

Gibt es ein Register, das ich eine ganze Zahl verwenden können, drucken, hat wurde durch einen Algorithmus verändert? Ich dachte immer, dass v0 das Register ist, das die Renditen speichert.

Antwort

2

Zunächst einmal haben Sie einen Syntaxfehler hier bekommen:

li, $a0, $v0 

Es soll nach li kein Komma sein. Zweitens ist der Zweck der li Pseudo-Anweisung, Unmittelbar (z. B. 1, 0x42 oder 12345) zu laden. Wenn Sie den Inhalt eines Registers in ein anderes verschieben (kopieren) wollen, verwenden Sie move (wie in move $a0, $v0).

Und schließlich haben Sie $v0 den Wert 1 in der ersten Zeile Ihres Codes zugewiesen, also selbst wenn Sie richtig gesagt move $a0, $v0 würden Sie immer $a0 = 1 erhalten. Wenn Sie den vorherigen Wert von $v0 möchten, müssen Sie move $a0, $v0 vor tun.

+0

Das Komma war nur ein Fehler, als ich es hier eingefügt habe, und danke, was ich getan habe, war, die Antwort auf $ s0 zu verschieben und das über die 'li $ v0, 1 'zu setzen, wie du gesagt hast. – Submersed24