`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.

- There is no branch-if-less-than or branch-if-greater-than.
- There is a set-on-less-than
(
`slt`

).- sets destination register to 1 if the first source register is less than the second source register
- sets destination register to 0 otherwise

```
slt destReg, srcReg1, srcReg2 # set destReg to 1 if srcReg1 < srcReg2
```

- Follow with a branch. 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;
```

Alyce Brady, Kalamazoo College