Ich versuche, Arrays in MIPS zu verstehen. Ich weiß, dass Sie den Stapelzeiger entweder um ein Wort vor oder zurück (in Schritten von 4) verschieben müssen. Aber ich weiß nicht, wie ich diese Idee in MIPS-Code umsetzen soll.Brauchen Sie Hilfe beim Implementieren eines Arrays in MIPS
j = 0
x = a[j+k]
a[j+k] = a[j]
Was weiß ich sicher ist, 0 in ein Register zu laden (j = 0), dann denke ich, du Wort, um die Basisadresse $ a0 geladen wird und ein [j], dann fügen Sie k, um es vor sw diesen Wert in 0 ($ a0).
li $t0, 0
lw $t0 0($a0)
add $t0, $t0, $a2
sw $t0, ($a0)
Wir wurden zugewiesen, um diesen Code in MIPS zu konvertieren, und der vorherige war der erste Teil davon.
# Register usage
# $a0 = base address of array
# $a1 = n, size of array
# $a2 = k, the shift amount
# j = 0
# x = a[j+k]
# a[j+k] = a[j]
# repeat n-1 times
# j = (j+k) mod n
# m = (j+k) mod n
# y = a[m]
# a[m] = x
# x = y
# end repeat
Meine Frage ist, wie kann ich tun, um die n-1 mal Schleife in MIPS? Ist es eine Bedingung dann nur
subi $a1 $a1
Und schließlich, wie man den Umb. findet? Ich glaube, es ist mit Div und dann das $ HI. Das habe ich bisher.
add $t1, $t0, $a2 #j+k
div $t1, $a1 #divide (j+k) by n
mfhi $t2 #move rem into t2
move $t2, $t0 #j = (j+k) mod n
add $t1, $t0, $a2 #j+k
div $t1, $a1 #divide (j+k) by n
mfhi $t2 #move rem into t2
move $t2, $t0 #m = (j+k) mod n
sw $t0, 0($t0)
lw $t3, 0($t0)
Ich bin verwirrend ich glaube. Aufklärung wäre erwünscht.