'MARS disassembly of BEQ shows a number as the branch target. What does it mean?
I have copied a picture of an assignment I have on MIPS assembly.
I understand (I think) what happens in the code until the line:
beq $11, $0, 3
I understand that the code now makes a PC-RELATIVE branch for the address:
PC+4+3*4
But I don't understand how it comes to happen on this code right here - what is the branch target address? (MARS is simulating a simplified MIPS without branch-delay slots, so that's the next instruction to be executed.)
Row 1: adds 15 to zero, puts it in $a0 register.
Row 2: ANDs $a0 register with 3, puts the result in $a0.
Row 3: ORs $a0 register with 22, puts the result in $a0.
Row 4: shifts $a0 to the left by 5 bits. Result in $a0.
Row 5: if $a0 equals $a0, go to PC+4+6*24 address. The address is Row 7 which is:
slt $11, $10, $9
Which puts the value 0 in $t3 register, because $10=$9.
Now I get to ROW 8:
beq $11, $0, 3
What does row 8 do?
Direct link to my image - please click if you can't read properly.

Solution 1:[1]
beq $11, $0, 3 means jump to the third instruction ahead from beq if $11 == $0. For instance:
beq $11, $0, 3
instruction 1
instruction 2
instruction 3 < the target
the number 3 will be first sign extended and then added to the program counter $pc as:
$pc = $pc + 3 * 4
or simply:
$pc = $pc + 3 << 2
the 4 is because every MIPS instruction is 4 bytes size.
Solution 2:[2]
beq $11, $0, 3
This condition means, firstly check if $11 and $0 are equal or not, if these are equal then control jumps to 3.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | |
| Solution 2 | Suraj Rao |
