Ich arbeite an einem Projekt für eine meiner Klassen, bei dem C-Code in MIPS-Assembly übersetzt wird. Ich habe diesen Code Probleme übersetzen:Zugriffsregister, dessen Nummer in einem anderen Register gespeichert ist
r[extract(ir,15,11)] = aluout;
Grundsätzlich r [] ist ein Array, das die Register in C repräsentiert Wie Sie sehen können, bestimmt sie, welche basierend auf dem Ergebnis aus der extract
Funktion für den Zugriff registrieren. Gibt es so etwas in MIPS? Der einzige Weg, wie ich es mir vorstellen kann, ist, den Wert zu nehmen, den ich von der Extraktionssubroutine erhalten werde, und sie mit allen Registernummern zu vergleichen. Die C-Darstellung würde dies wie folgt aussehen:
regNum = extract(ir, 15, 11);
if (regNum == 1) {
r[1] = aluout;
} else if (regNum == 2) {
r[2] = aluout;
} else if (regNum == 3) {
r[3] = aluout;
} ...
Irgendwelche Ideen? Ist das der einzige Weg?
Umm, können Sie ein Array indizieren. Sie können die Rohregister jedoch nicht indizieren. – Jester
Ja, ich weiß. Der C-Code ist etwas, was unser Professor uns gesagt hat, dass wir in MIPS übersetzen sollen. r [index] stellt nur das Register $ [index] dar, wenn Sie es in MIPS – wKavey
übersetzen würden. Sie schreiben also ein MIPS-Assembly-Programm, das eine (MIPS?) CPU emulieren soll. Ich würde nur die emulierten Register in einem Array behalten, wie Sie es bei C tun würden. Sie können wahrscheinlich nicht alle emulierten Register in echten Registern behalten, weil Sie einige echte Register für etwas anderes in Ihrem Programm benötigen. –