10
votes

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

1
Since on MIPS every branch has a delay slot after it, the next instruction to be executed after the branch will always be the instruction following the branch. However, I don't think that's the answer you were looking for. I think you need to be more clear about what it is you're trying to understand.Ross Ridge
Row 8 is beq, so it is another comparison and potential branch. I think I might be missing the point of your question, though.Dko
It's hard to read, but the screen shot appears to have a jump instruction placed in the delay of the branch instruction you call "row 5". This causes undefined behaviour on MIPS. Also, the target of the branch on "row 5" doesn't appear to be "row 7", instead somewhere beyond that. Address 0x0040003C, I think.Ross Ridge
@RossRidge added a link to the image, please see edit, thank you very much.Assaf

1 Answers

2
votes

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.