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
Load Immediate (li)
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 one register into another register.
move $1, $2
translates to
add $1, $2, $0
Load Address (la)
la $a0,address
translates to
lui $at, 4097 (0x1001 → upper 16 bits of $at). ori $a0,$at,disp
where the immediate (“disp”) is the number of bytes between the first data location (always 0x 1001 0000) and the address of the first byte in the string.