Dieses Programm druckt die ASCII-Zeichen von 0 bis Z. Der Ausgang istKann nicht verstehen kleinen Teil einer MIPS Montageanleitung
:;<=>[email protected]
Die Frage ist, wie das Programm zu ändern, so dass es jedes drittes ASCII-Zeichen druckt . So dass die Ausgabe wie diese
0369<?BEHKNQTWZ]
aussehen muss, wenn ich die Konstante in addi $s0,$s0,1
-addi $s0,$s0,3
die Ausgabe ändern, ist eine Menge von ASCII-Zeichen und es ist wie eine Endlosschleife.
.text
main:
li $s0,0x30
loop:
move $a0,$s0
li $v0,11
syscall
addi $s0,$s0,1 # what happens if the constant is changed?
li $t0,0x5b
bne $s0,$t0,loop
nop
stop: j stop
nop
Ich verstehe nicht den Grund, warum das Programm verrückt wird, wenn ich diese Konstante ändere.
Ich habe meinen eigenen Code geschrieben, wie unten gezeigt, der gut funktioniert und den Job erledigt, aber ich möchte den Code oben verstehen, weil es eine Aufgabe ist.
.data
.text
main:
li $s0,0x30
for:
addi $a0,$s0,0
li $v0,11
syscall
li $t0,0x5a
bgt $s0,$t0, done
addi $s0,$s0,3
j for
done:
Was Christian als Antwort sagt, in Bezug auf die innere Berechnung: Original beginnt mit Nummer 0x30, dann erhöht es um 1, und Schleifen, bis es Wert 0x5b erreicht (das ist 0x2b = 43-mal Schleifen). Sie haben das Inkrement auf 3 geändert, so dass Sie die Werte 0x33, 0x36, ..., 0x57, 0x5a, 0x5d ... erreichen, die über die 0x5b springen, die auf Gleichheit getestet wird. Die Schleife wird also auf "s0" enden, wird einmal überlaufen, da dies die Werte um 1 versetzt und nach einiger Zeit den Wert 0x31 erreicht, und von dort auch 0x5b. (MARS/SPIM haben Debugger, wo Sie diese Schrittanweisung über die Anweisung beobachten können) – Ped7g
@ Ped7g Vielen Dank für die Erklärung! –