Basic MIPS Instructions

These are the assembly language statements covered in these notes that each directly correspond to one machine language instruction. There are additional basic assembly language statements that are not covered in these notes.

When pseudoinstructions are enabled, many of these instructions also correspond to pseudoinstructions that have greater flexibility in the arguments that they allow.

 

Instruction Operands Description
add d,s,t
d <-- s+t ; with overflow trap
addu d,s,t
d <-- s+t ; without overflow trap
addi d,s,const
d <-- s+const ; with overflow trap
      const is 16-bit two's comp
addiu d,s,const
d <-- s+const ; without overflow trap
      const is 16-bit two's comp
and d,s,t
d <-- bitwise AND of s with t
andi d,s,const
d <-- bitwise AND of s with const 
beq s,t,addr
branch if s == t
A branch delay slot follows the instruction.
bgez s,addr
Branch if the two's comp. integer
in register s is >= 0
A branch delay slot follows the instruction.
bltz s,addr
Branch if the two's comp. integer
in register s is < 0
A branch delay slot follows the instruction.
bne s,t,addr
branch if s != t
A branch delay slot follows the instruction.
div s,t
lo <-- s div t ; hi <-- s mod t
   two's comp. operands
divu s,t
lo <-- s div t ; hi <-- s mod t
   unsigned operands
j target
after a delay of one machine cycle,
PC  <-- address of target 
lb d,off(b)
d <-- Sign-extended byte from 
      memory address b+off
  off is 16-bit two's complement
lbu d,off(b)
d <-- Zero-extended byte 
      from memory address b+off
      off is 16-bit two's complement
lh d,off(b)
t <-- Sign-extended halfword 
      from memory address b+off
      off is 16-bit two's complement
lhu d,off(b)
t <-- Zero-extended halfword 
      from memory address b+off
      off is 16-bit two's complement
lui d,const
upper two bytes of $t <-- two byte const 
lower two bytes of $t <-- 0x0000 
lw d,off(b)
d <-- Word from memory address b+off
      off is 16-bit two's complement. 
mfhi d
d <-- hi ;  Move From Hi
mflo d
d <-- lo ;  Move From Lo
mult s,t
hi / lo < -- s * t ;  two's comp operands 
multu s,t
hi / lo < -- s * t ;  unsigned operands 
nor d,s,$0
d <-- bitwise NOT of s
nor d,s,t
d <-- bitwise NOR of s with t
or d,s,$0
d <-- s
or d,s,t
d <--bitwise OR of s with t 
ori d,$0,const
d <-- zero-extended const
ori d,s,const
d <-- s OR zero-extended const
sb d,off(b)
byte at off+b <-- low-order byte 
                  from register $d.
off is 16-bit two's complement 
sh d,off(b)
two bytes at off+b <-- two low-order bytes 
                      from register $d.
off is 16-bit two's complement 
sll $0,$0,0
no operation
sll d,s,shft
d <-- logical left shift of s by shft positions 
      where  0 <= shft < 32
slt d,s,t
if s < t
  d <-- 1
else
  d <-- 0

two's comp. operands 
slti d,s,imm
if s < imm
  d <-- 1
else
  d <-- 0

two's comp. operands 
sltiu d,s,imm
if s < imm
  d <-- 1
else
  d <-- 0

unsigned operands 
sltu d,s,t
if s < t
  d <-- 1
else
  d <-- 0

unsigned operands 
sra d,s,shft
d <-- arithmetic right shift of s by shft positions 
      where  0 <= shft < 32
srl d,s,shft
d <-- logical right shift of s by shft positions 
      where  0 <= shft < 32
sub d,s,t
d <-- s - t; with overflow trap
subu d,s,t
d <-- s - t; no overflow trap
sw d,off(b)
Word at memory address (b+off) <-- $t
b is a register. off is 16-bit twos complement. 
xor d,s,t
d <-- bitwise exclusive or of s with t
xori d,s,const
d <-- bitwise exclusive or of s with const