beq
),
Branch if not equal (bne
):
Syntax for beq
and bne
:
beq reg1, reg2, label # if reg1 == reg2, branch to label bne reg1, reg2, label # if reg1 != reg2, branch to label
C FORTRAN ------- ------- temp = a; TEMP = A if ( a != b ) IF (A .EQ. B) GOTO ENDIF temp = (a+b)/2; TEMP = (A+B)/2 temp += c; ENDIF: TEMP = TEMP + C
Assume that$s0
= a,$s1
= b,$s2
= c,$t0
= temp.
move $t0, $s0 # temp = a beq $s0, $s1, ENDIF # if ( a == b ) goto endif add $t0, $t0, $s1 # temp += b, i.e., temp = a + b srl $t0, $t0, 1 # temp /= 2 (shift right logical) ENDIF: add $t0, $t0, $s2 # temp += c
There is also a
j
instruction (jump no matter what):
j label # jump to label
NOTE: labels must be unique.
slt
).
slt destReg, srcReg1, srcReg2 # set destReg to 1 if srcReg1 < srcReg2
slt
.
It's easier to compare to 0 ($zero) than to 1, so we have:
bne destReg, $zero, label # branch if srcReg1 < srcReg2 (destReg is 1) beq destReg, $zero, label # branch if srcReg1 >= srcReg2
Assume that$s0
= a,$s1
= b,$s2
= c,$s3
= diff,$s7
= max. Write the MIPS assembly code for the following C code fragment.
/* compute diff = c - max(a, b) */
max = a;
if ( a < b )
max = b;
diff = c - max;