⚠️ Please use a computer for the best experience

MIPS Reference

MIPS instruction set reference with machine code format diagrams

Instruction Formats

MIPS uses three instruction formats. All instructions are 32 bits wide.

R-Type (Register)

opcode
6 bits
[31:26]
rs
5 bits
[25:21]
rt
5 bits
[20:16]
rd
5 bits
[15:11]
shamt
5 bits
[10:6]
funct
6 bits
[5:0]

Used for arithmetic, logical, and shift operations between registers.

I-Type (Immediate)

opcode
6 bits
[31:26]
rs
5 bits
[25:21]
rt
5 bits
[20:16]
immediate
16 bits
[15:0]

Used for immediate arithmetic, load/store, and branch operations.

J-Type (Jump)

opcode
6 bits
[31:26]
address
26 bits
[25:0]

Used for jump instructions (j, jal).

Notes

(1) May cause overflow exception
(2) SignExtImm = { 16{ immediate[15] }, immediate }
(3) ZeroExtImm = { 16{ 1'b0 }, immediate }
(4) BranchAddr = { 14{ immediate[15] }, immediate, 2'b0 }
(5) JumpAddr = { PC+4[31:28], address, 2'b0 }
(6) Lots of unsigned operations still sign-extend the immediate

Machine Code Translator

Select an instruction above to translate it to 32-bit machine code.

Instruction Reference

NameMnemonicFormatAssemblyOperationOpcodeFunct
AddaddRadd $rd, $rs, $rtR[rd]=R[rs]+R[rt]; PC=PC+4020hex
Add ImmediateaddiIaddi $rt, $rs, immR[rt]=R[rs]+SignExtImm; PC=PC+48hex-
Add Imm UnsignedaddiuIaddiu $rt, $rs, immR[rt]=R[rs]+SignExtImm; PC=PC+49hex-
Add UnsignedadduRaddu $rd, $rs, $rtR[rd]=R[rs]+R[rt]; PC=PC+4021hex
AndandRand $rd, $rs, $rtR[rd]=R[rs] & R[rt]; PC=PC+4024hex
And ImmediateandiIandi $rt, $rs, immR[rt]=R[rs] & ZeroExtImm; PC=PC+4chex-
Branch on EqualbeqIbeq $rs, $rt, immif(R[rs]==R[rt]) PC=PC+4+BranchAddr else PC=PC+44hex-
Branch on Not EqualbneIbne $rs, $rt, immif(R[rs]!=R[rt]) PC=PC+4+BranchAddr else PC=PC+45hex-
JumpjJj addressPC=JumpAddr2hex-
Jump and LinkjalJjal addressR[31]=PC+4; PC=JumpAddr3hex-
Jump RegisterjrRjr $rsPC=R[rs]008hex
Load BytelbIlb $rt, imm($rs)R[rt]=SignExt(M[R[rs]+SignExtImm](7:0)); PC=PC+420hex-
Load Byte UnsignedlbuIlbu $rt, imm($rs)R[rt]=ZeroExt(M[R[rs]+SignExtImm](7:0)); PC=PC+424hex-
Load HalfwordlhIlh $rt, imm($rs)R[rt]=SignExt(M[R[rs]+SignExtImm](15:0)); PC=PC+421hex-
Load Halfword UnsignedlhuIlhu $rt, imm($rs)R[rt]=ZeroExt(M[R[rs]+SignExtImm](15:0)); PC=PC+425hex-
Load Upper ImmediateluiIlui $rt, immR[rt]={imm, 16'b0}; PC=PC+4fhex-
Load WordlwIlw $rt, imm($rs)R[rt]=M[R[rs]+SignExtImm]; PC=PC+423hex-
Move From Coproc 0mfc0Rmfc0 $rt, $rdR[rt]=CPR[0,rd]; PC=PC+410hex0
Move To Coproc 0mtc0Rmtc0 $rt, $rdCPR[0,rd]=R[rt]; PC=PC+410hex0
NornorRnor $rd, $rs, $rtR[rd]=~(R[rs] | R[rt]); PC=PC+4027hex
OrorRor $rd, $rs, $rtR[rd]=R[rs] | R[rt]; PC=PC+4025hex
Or ImmediateoriIori $rt, $rs, immR[rt]=R[rs] | ZeroExtImm; PC=PC+4dhex-
Set Less ThansltRslt $rd, $rs, $rtR[rd]=(R[rs]<R[rt]) ? 1 : 0; PC=PC+402ahex
Set Less Than ImmsltiIslti $rt, $rs, immR[rt]=(R[rs]<SignExtImm) ? 1 : 0; PC=PC+4ahex-
Set Less Than Imm UnssltiuIsltiu $rt, $rs, immR[rt]=(R[rs]<SignExtImm) ? 1 : 0; PC=PC+4bhex-
Set Less Than UnsignedsltuRsltu $rd, $rs, $rtR[rd]=(R[rs]<R[rt]) ? 1 : 0; PC=PC+402bhex
Shift Left LogicalsllRsll $rd, $rt, shamtR[rd]=R[rt]<<shamt; PC=PC+4000hex
Shift Right ArithmeticsraRsra $rd, $rt, shamtR[rd]=R[rt]>>shamt (arithmetic); PC=PC+4003hex
Shift Right LogicalsrlRsrl $rd, $rt, shamtR[rd]=R[rt]>>shamt (logical); PC=PC+4002hex
Store BytesbIsb $rt, imm($rs)M[R[rs]+SignExtImm](7:0)=R[rt](7:0); PC=PC+428hex-
Store HalfwordshIsh $rt, imm($rs)M[R[rs]+SignExtImm](15:0)=R[rt](15:0); PC=PC+429hex-
Store WordswIsw $rt, imm($rs)M[R[rs]+SignExtImm]=R[rt]; PC=PC+42bhex-
SubtractsubRsub $rd, $rs, $rtR[rd]=R[rs]-R[rt]; PC=PC+4022hex
Subtract UnsignedsubuRsubu $rd, $rs, $rtR[rd]=R[rs]-R[rt]; PC=PC+4023hex
XorxorRxor $rd, $rs, $rtR[rd]=R[rs]^R[rt]; PC=PC+4026hex
Xor ImmediatexoriIxori $rt, $rs, immR[rt]=R[rs]^ZeroExtImm; PC=PC+4ehex-

36 instructions shown