# MIPS Assembly/Pseudoinstructions

The MIPS instruction set is very small, so to do more complicated tasks we need to employ assembler macros called pseudoinstructions.

## List of Pseudoinstructions

The following is a list of the standard MIPS instructions that are implemented as pseudoinstructions:

• abs
• blt
• bgt
• ble
• neg
• negu
• not
• bge
• li
• la
• move
• sge
• sgt

## Branch Pseudoinstructions

Branch if less than (blt)

The blt instruction compares 2 registers, treating them as signed integers, and takes a branch if one register is less than another.

```blt \$8, \$9, label
```

translates to

```slt \$1, \$8, \$9
bne \$1, \$0, label
```

## Other Pseudoinstructions

The li pseudo instruction loads an immediate value into a register.

```li \$8, 0x3BF20
```

translates to

```lui \$at, 0x0003
ori \$8, \$at, 0xBF20
```

Absolute Value (abs)

The absolute value pseudo instruction loads the absolute value contained in one register into another register.

```abs \$1, \$2
```

translates to

```addu \$1, \$2, \$0
bgez \$2, 8 (offset=8 → skip 'sub' instruction)
sub \$1, \$0, \$2
```

Move (move)

The move pseudo instruction moves the contents of the second register operand into the first register operand.

```move \$1, \$2
```

translates to

```add \$1, \$2, \$0
```

```la \$a0,address
```  lui \$at, 4097 (0x1001 → upper 16 bits of \$at).