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