Increment-register in MIPS assembly?
Ich Schreibe ein MIPS-Programm zum Sortieren von 8 ascii-atrings, die Adressen sind im Register $t0-7. Beim Vergleich von zwei strings, die ich übergeben zu müssen, die Adressen in eine Funktion (mit speichern in $s0 und $s1). Wenn ich das tun möchte in einer Schleife, wie kann ich increment register Werte? Kann ich dies tun? Oder muss ich die Adressen alle im Speicher statt?
Zum Beispiel, wenn mein loop ist wie diese, in pseudocode:
for loop with index i:
move address from register j into $s0
move address from register j+1 into $s1
call function for return value
use return value to perform swapping operation
increment i
jump back to loop if i<bound
Wobei j ist willkürlich, ich bin mir nur zeigen, wie ich brauche zum abrufen von zwei aufeinander folgenden Registern.
Gibt es eine Möglichkeit, offset-notation für Register wie können Sie memory locations?
Du musst angemeldet sein, um einen Kommentar abzugeben.
"Gibt es eine Möglichkeit, offset-notation für Register wie können Sie memory locations?"
Nein ! Zugang zu den Registern sind hardcoded in der bauanleitung. Sie können nicht Zugriff auf eine berechnete registrieren.
$t0-7
im Speicher.Inkrementieren eines Registers, fügen Sie 1 hinzu es. Wie diese:
Gibt es viele Register auf MIPS. Wenn Sie nicht wollen, in den Papierkorb, die base-Adresse in einigen registrieren, verwenden Sie ein anderes register für die Basis+offset, und erhöhen Sie bei Bedarf. Oder verwenden Sie einen Dritten register als Schleifenzähler, und berechnen base+offset als notwendig.
i
ist in einem anderen register. Also ich glaube nicht, dass Sie die Frage beantworten.Können Sie, wenn Sie wirklich wollen, mit self-modifying code. Aber ich bezweifle, dass Sie wollen, würde wahrscheinlich verheerend auf den cache und erzeugen overhead-bit-twiddling der Maschine Anweisungen.