Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What exactly does the lb instruction do?

Tags:

assembly

mips

I have an exam coming up, and one of the practice problems was:

Assume that $t0 contains the value 0x12121212 and $t1 contains the address 0x1000000.

Assume that the memory data, starting from address 0x1000000 is: 88 77 66 55.

What will be the value of $t0 after the following code is executed:

lb $t0, 0($t1)

a) 0x00000088 b) 0x88121212 c) 0xffffff88 d) 0x12121288

The answer I gave was a, because the byte that the lb instruction will read (by my understanding of what the instruction does) is 88. The 88 will then be stored in $t0, thus the value will be 0x00000088. But the answer given was c. I feel like I have a fundamental misunderstanding about how lb works - can someone please explain why the answer is c?

like image 244
Daniel Avatar asked Dec 21 '22 09:12

Daniel


1 Answers

The answer would be c) 0xffffff88. The lb instructions sign-extends the byte into a 32-bit value. I.e. the most significant bit (msb) is copied into the upper 24 bits.

0x88 == 0b10001000, i.e. the msb is 1. So the upper 24 bits will be 0b111111111111111111111111 == 0xffffff.

like image 99
Michael Avatar answered Jan 13 '23 13:01

Michael