I'm studying for an exam tomorrow and I'm quit confused on the loading/storing bytes topic. I have this example:
I don't understand how he got the answers in red at all. Could someone help explain this to me?
add $s3, $zero, $zero
This performs the addition $s3 = 0 + 0
, effectively setting the register $s3
to a value of zero.
lb $t0, 1($s3)
This loads a byte from a location in memory into the register $t0
. The memory address is given by 1($s3)
, which means the address $s3+1
. This would be the 0+1=1st byte in memory. Since we have a big-endian architecture, we read bytes the 4-byte chunks "big end first".
byte: 0 1 2 3
00 90 12 A0
The 0th byte is 00
, and the 1st byte is 90
. So we load the byte 90
into $t0
.
sb $t0, 6($s3)
This stores a byte from the register $t0
into a memory address given by 6($s3)
. Again this means the address $s3+6
.
byte: 4 5 6 7
FF FF FF FF
becomes
byte: 4 5 6 7
FF FF 90 FF
Now, what if the architecture was little-endian? This would mean bytes are arranged "little end first" in memory, so the effect of the 2nd and 3rd instructions change.
lb $t0, 1($s3)
This loads the byte in memory address 1 into register $t0
. But now the addresses are "little end first", so we read 12
into the register instead.
byte: 3 2 1 0
00 90 12 A0
Next...
sb $t0, 6($s3)
This stores the byte in register $t0
, which is 12
into a memory address 6. Again with little-endian architecture:
byte: 7 6 5 4
FF FF FF FF
becomes
byte: 7 6 5 4
FF 12 FF FF
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With