MIPS - assembly BEQ command

Assaf picture Assaf · Aug 7, 2014 · Viewed 21.3k times · Source

I have copied a picture of an assignment I have on MIPS - Aseembly.

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 next line to be excecuted?

I will make my question more clear:

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?

Any help is appriciated.

Direct link to my image - please click if you can't read properly.

enter image description here

Answer

user1129665 picture user1129665 · Aug 8, 2014

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.