Forum: PC-Programmierung Verstehe MIPS Übersetzung nicht


von Andi (Gast)


Lesenswert?

Hallo Leute, ich verstehe gerade eine MIPS Assembler Lösung in einer 
Klausur nicht wirklich. Man sollte da ein C-Code in MIPS übersetzen.

do
  i = i + j;
while ( A[i] == k )

Nehmen Sie an, dass die Variablen i, j und k in den Registern $s3, $s4 
und $s5 stehen und dass sich die Anfangsadresse von A im Register $s6 
befindet. Dabei ist A ein Feld aus 32-Bit Integerzahlen. Verwenden Sie 
die Register $t0 und $t1 zur Speicherung temporärer Variablen.

Muserlösung sagt nun folgendes:

Loop:
add $s3, $s3, $s4
add $t1, $s3, $s3
add $t1, $t1, $t1
add $t1, $t1, $s6
lw $t0, 0($t1)
beq $t0, $s5, Loop


Die erste und letzte Zeile ist klar, nicht klar ist die Berechnung der 
Adresse, in der A[i] steht. Mein i steht ja nach der Berechnung in $s3. 
$s6 gibt an, wo A anfängt. Müsste es dann nicht

add $ti, $s3, $s6
lw $t0, 0($t1)

sein? Oder verstehe ich da irgendetwas falsch?

von Arc N. (arc)


Lesenswert?

add $s3, $s3, $s4 ; i = i + j
add $t1, $s3, $s3 ; t1 = 2 * i
add $t1, $t1, $t1 ; t1 = 2 * t1 ( = 4 * i)
add $t1, $t1, $s6 ; t1 = (4 * i) + Anfangsadresse
lw $t0, 0($t1)
beq $t0, $s5, Loop

32-Bit = 4-Bytes...

von Andi (Gast)


Lesenswert?

Hi,

danke dir!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.