Clarifications on signed/unsigned load and store instructions (MIPS)
Asked Answered
M

1

15

I can't seem to grasp the concept on these stuff, even with the help of Google and a textbook in my hand.

Following the format (opcode, rs, rt, offset)...

  • Do you sign extend the offset before adding it to the value of the address? Or add before extending?
  • In the case of lb and lbu, what's the difference? Does it also follow the MIPS arithmetic definition that 'unsigned' just means it won't report an overflow?
  • Why doesn't lw have an unsigned version? Even the store instructions don't have one...
Muddle answered 29/8, 2011 at 4:44 Comment(0)
E
41

In the case of lb and lbu, what's the difference?

The "load byte" instructions lb and lbu load a single byte into the right-most byte of a 32-bit register. How do you set the upper 24 bits? The unsigned operation will set them to zero; the signed operation will sign-extend the loaded byte.

For example, suppose you read the byte 0xFF from memory. lbu will 0-extend this value to 0x000000FF and interpret it as 255, while lb will sign-extend it to 0xFFFFFFFF, which is interpreted as -1.

Why doesn't lw have an unsigned version? Even the store instructions don't have one...

The "load word" instruction (lw), on the other hand, loads a 32-bit quantity into a 32-bit register, so there is no ambiguity, and no need to have a special signed version.

If you are storing less than a full 32-bit word, there is nothing you can do with the extra bits in the register except throw them away (ignore them).

Does it also follow the MIPS arithmetic definition that 'unsigned' just means it won't report an overflow?

I think this convention is only for the add and subtract instructions. For the other instructions, signed/unsigned indicates whether sign-extension will be performed.

Do you sign extend the offset before adding it to the value of the address? Or add before extending?

If an offset is sign-extended, it only makes sense to do it before adding it to the base address. I think a review of two's complement arithmetic will make this clear.

Ellie answered 29/8, 2011 at 5:24 Comment(3)
What about save byte sb? Is the byte sign-extended or zero-extended before storing?Cofer
@NoName: Since it's store byte, I think it should be zero-extended or one will store more information than one mean to. (good question btw)Expansive
@Kindred: not really, store byte has neither zero-extension or signed-extension. By definition, it only stores the rightmost byte in the register to 1 byte of the memory, leaving other bytes untempered.Revet

© 2022 - 2024 — McMap. All rights reserved.