CS 208: Computer Organization & Architecture

MIPS instructions

Adapted from this unattributed source, with help from some others.

Arithmetic and Logical Instructions

Instruction Type Opcode/Function Syntax Operation
add R 000000 / 100000 add $d, $s, $t $d = $s + $t
addu R 000000 / 100001 addu $d, $s, $t $d = $s + $t
addi I 001000 / - addi $d, $s, i $d = $s + SE(i)
addiu I 001001 / - addiu $d, $s, i $d = $s + SE(i)
and R 000000 / 100100 and $d, $s, $t $d = $s & $t
andi I 001100 / - andi $d, $s, i $t = $s & ZE(i)
div R 000000 / 011010 div $s, $t lo = $s / $t; hi = $s % $t
divu R 000000 / 011011 divu $s, $t lo = $s / $t; hi = $s % $t
mult R 000000 / 011000 mult $s, $t hi:lo = $s * $t
multu R 000000 / 011001 multu $s, $t hi:lo = $s * $t
nor R 000000 / 100111 nor $d, $s, $t $d = ~($s | $t)
or R 000000 / 100101 or $d, $s, $t $d = $s | $t
ori I 001101 / - ori $d, $s, i $t = $s | ZE(i)
sll R 000000 / 000000 sll $d, $t, a $d = $t << a
sllv R 000000 / 000100 sllv $d, $t, $s $d = $t << $s
sra R 000000 / 000011 sra $d, $t, a $d = $t >> a
srav R 000000 / 000111 srav $d, $t, $s $d = $t >> $s
srl R 000000 / 000010 srl $d, $t, a $d = $t >>> a
srlv R 000000 / 000110 srlv $d, $t, $s $d = $t >>> $s
sub R 000000 / 100010 sub $d, $s, $t $d = $s - $t
subu R 000000 / 100011 subu $d, $s, $t $d = $s - $t
xor R 000000 / 100110 xor $d, $s, $t $d = $s ^ $t
xori I 001110 / - xori $d, $s, i $d = $s ^ ZE(i)

Comparison Instructions

Instruction Type Opcode/Function Syntax Operation
slt R 000000 / 101010 slt $d, $s, $t $d = ($s < $t)
sltu R 000000 / 101001 sltu $d, $s, $t $d = ($s < $t)
slti I 001010 / - slti $d, $s, i $t = ($s < SE(i))
sltiu I 001011 / - sltiu $d, $s, i $t = ($s < SE(i))

Branch Instructions

Instruction Type Opcode/Function Syntax Operation
beq I 000100 / - beq $s, $t, label if ($s == $t) pc += i << 2
bgtz I 000111 / - bgtz $s, label if ($s > 0) pc += i << 2
blez I 000110 / - blez $s, label if ($s <= 0) pc += i << 2
bne I 000101 / - bne $s, $t, label if ($s != $t) pc += i << 2

Jump Instructions

Instruction Type Opcode/Function Syntax Operation
j J 000010 / - o label pc += i << 2
jal J 000011 / - o label $31 = pc; pc += i << 2
jr R 000000 / 001000 o labelR pc = $s
jalr R 000000 / 001001 o labelR $31 = pc; pc = $s

Load Instructions

Instruction Type Opcode/Function Syntax Operation
lw I 100011 / - lw $t, i ($s) $t = MEM [$s + i]:4
lb I 100000 / - lb $t, i ($s) $t = SE (MEM [$s + i]:1)
lbu I 100100 / - lbu $t, i ($s) $t = ZE (MEM [$s + i]:1)

Store Instructions

Instruction Type Opcode/Function Syntax Operation
sw I 101011 / - sw $t, i ($s) MEM [$s + i]:4 = $t
sb I 101000 / - sb $t, i ($s) MEM [$s + i]:1 = LB ($t)

Data Movement Instructions

Instruction Type Opcode/Function Syntax Operation
mfhi R 000000 / 010000 mfhi $d $d = hi
mflo R 000000 / 010010 mflmflo $d $d = lo