Question: Given two registers `$s0`, `$s1`, how can I convert the following pseudocode into MIPS assembly language using only the `slt` (set on less than) and `beq` and `bne` (branch if equal, branch if not equal) instructions.

```
   if ($s0 > $s1) { goto label1 }
   if ($s0 >= $s1) { goto label2 }
   if ($s0 <= $s1) { go to label3 }

```

Answer: 
I'm assuming that the pseudocode executes sequentially, so an earlier condition being true means you go there and never reach the later `if` statements. This makes the last branch guaranteed taken if it's reached at all, so it doesn't even need to be conditional. (Also assuming that this is a MIPS without a branch-delay slot.)

```
slt  $t1,$s1,$s0      # checks if $s0 > $s1
bne  $t1,$zero,label1 # if $s0 >  $s1, goes to label1
beq  $s1,$s2,label2   # if $s0 == $s2, goes to label2 
# beq  $t1,$zero,label3 # if $s0 <  $s1, goes to label3
b    label3            # only possibility left

```

If that's not the case, you'll want to implement `$s0 >= $s1` as  

`!($s0 < $s1)` with `slt $t1, $s0, $s1` / `beqz $t1, target`, for example,  

as shown in Ahmed's answer.
To implement each compare *separately*, without optimizing across multiple compares with earlier true conditions making later ones unreachable:

```
slt $at, $s1, $s0           # $s0 > $s1  as ($s1 < $s0) != 0
bne $at, $zero, label1

slt $t0, $s0, $s1           # $s0 >= $s1 as (s0<s1) == 0
beq $t0, $zero, label2

slt $t1, $s1, $s0           # $s0 <= $s1 the same but reversing the inputs
beq $t1, $zero, label3

label1:
label2:
label3:

```

Related:

* [How to do less than or equal in Assembly Language(MIPS)?](https://stackoverflow.com/questions/22736836/how-to-do-less-than-or-equal-in-assembly-languagemips) - branchless compare-into-register for things like C `return (z<=y);` as an `int`.