Saved:

  • s7

Temp:

  • t9

Arg:

  • a3

Return:

  • $v0 for lower 32
  • $v1 for upper 32 but still only one register

Floating point:

  • f31

Stack

  • $sp

Frame

  • $fp

Return address

  • $ra

8-bit = byte (b)
16-bit = half-world (h)
32-bit = word (w)
64-bit = does not exist

lb/lh/lw <dest>, <src>

  • Reads from <src> and writes to <dest> where <src> is a var

li <dest>, <src>

  • Reads from <src> and writes to <dest> where <src> is an immediate

la <dest>, <src>

  • Reads from <src> and writes to <dest> where <src> is an address

move <dest>, <src>

  • Same as load, but for reg to reg

sb/sh/sw <src>, <dest>

  • Reads from <src> and writes to <dest> where <dest> is a var

add <dest>, <src1>, <src2>

  • <dest> = <src1> + <src2>
  • sub, mul, div, rem are the same

Branch commands:

  • b <src1>, <src2>, <dest>
  • bgt, bge, blt, ble
  • beq, bne
  • Compares to zero: bgtz, bgez, bltz, blez

Declaring .data:

  • <varName>: .<size> <value>
  • ex: length: .byte 5
  • <varName>: .space <value>
  • ex: length: .space 5 (in bytes)

.globl <label>
label:
some code
jr $ra

jal <funcName>