Begrijpen hoe `lw` en `sw` eigenlijk werken in een MIPS-programma

Ik heb een beetje moeite om te begrijpen wat swen lwdoen in een MIPS-programma. Ik begrijp het onderwerp dat we lwgebruiken om gegevens van het geheugen naar het register over te brengen en vice versa voor sw. Maar hoe wordt dit precies bereikt?

Stel dat we de volgende regel code hebben:

lw Reg.Dest, Offset(Reg.Source)
sw Reg.Source, Offset(Reg.Dest)

Als we ons concentreren op lw, slaat het in wezen de gegevens op uit het geheugen, Reg.Sourceen vermenigvuldigt het adres van die gegevens met de Offset, altijd een veelvoud van $4$ omdat de registers omgaan met $32$ bits en het geheugen $8$ bits gebruikt, naar een specifiek adres in het register dat gelijk is aan Offset + Reg.Source– dus als we zeggen dat Offset = 16, Reg.Source = $s1 = 12dan zal het register de gegevens uit het geheugen opslaan op het adres $28$ in het register.

Ervan uitgaande dat mijn begrip van lwcorrect is, is mijn vraag hoe werkt sw?

PS: Het zou geweldig zijn als de antwoorden ook slechts een one-liner-voorbeeld zouden kunnen bevatten, zoals sw $t0, 32($s3).


Antwoord 1, autoriteit 100%

lw (laad woord) laadt een woord uit het geheugen naar een register.

lw $2, 4($4) # $2 <- mem($4+4)

$2 is het bestemmingsregister en $4 het adresregister. En de bron van informatie is het geheugen.

4 is een offset die wordt toegevoegd (niet vermenigvuldigd) aan het adresregister. Dit soort geheugentoegang wordt gebaseerde adressering genoemd en is in veel situaties erg handig. Als bijvoorbeeld $ 4 het adres van een struct bevat, maakt de offset het mogelijk om de verschillende velden van de struct te kiezen. Of het volgende of vorige element in een array, etc. offset hoeft geen veelvoud van 4 te zijn, maar (adresregister + offset) wel en meestal beide.

Sw is vergelijkbaar, maar slaat een register op in het geheugen.

sw $5, 8($7) # mem[$7+8] <- $5

Wederom is $7 het register dat het geheugenadres bevat, 8 een offset en $5 is de bron van de informatie die in het geheugen wordt geschreven.

Merk op dat, in tegenstelling tot andere MIPS-instructies, de eerste operand de bron is, niet de bestemming. Waarschijnlijk is dit om het feit af te dwingen dat het adresregister een vergelijkbare rol speelt in beide instructies, terwijl het in lw wordt gebruikt om het geheugenadres van de gegevensbron te berekenen en in sw het geheugenbestemmingsadres.

Other episodes