Ich bin neu in Assembly-Codierung und ich stieß auf ein Problem, das besagt, den folgenden C-Code zu MIPS-Assembly zu übertragen.C zu MIPS Assembly Verwirrung
b[8] = b[i-j] + x ;
und Variablen i, j, x sind in den Registern 7,4 und 15 und die Basisadresse des Arrays B ist in 2.870.220 Dezimal.
kam ich mit der folgenden Lösung bis
lui $2, 0x002B
ori $2, $2, 0xCBCC
sub $3, $7, $4
add $3, $2, $3
lw $12, 0($3)
addu $12, $12, $15
sw $12, 32($2)
aber wenn ich die Antwort überprüft, gab es eine zusätzliche Zeile von
sll $3, $3, 2
nach der subtrahieren Anweisung.
Könnte jemand bitte erklären, warum wir den Inhalt von Register $ 3 mit 4 multiplizieren müssen?
das Array ist Wort (32 Bit) Größe nicht Byte-Größe? –
Das Problem gibt nichts über das Array an. –
ist es wahrscheinlich Wortgröße. eigentlich vergesse ich die Syntax für Mips, lw ist Ladewort ja? eine 32-Bit-Sache? Was ist Ladebyte? Pfund? Wenn lw eine 32-Bit-Last ist, dann müssen Sie den Offset auf ein Wort ausrichten, also die Multiplikation mit 4, um den Offset auf die Adresse und nicht den Index zu bekommen –