Skip to content

Instantly share code, notes, and snippets.

@tilkinsc
Last active July 12, 2018 01:18
Show Gist options
  • Save tilkinsc/18536449ad3d8661884bb76d0281978a to your computer and use it in GitHub Desktop.
Save tilkinsc/18536449ad3d8661884bb76d0281978a to your computer and use it in GitHub Desktop.
// 32-bit Instructions Types
op a b c d f
_____________________
R-Type 6 5 5 5 5 6
I-type 6 5 5 16
J-Type 6 24
Bit Length
R-Types
//____________________________________________________________________________________________________________________
ADD overflow | 000000 RS RT RD 00000 100000 AKA (RD = RS + RT)
ADDU noverflow | 000000 RS RT RD 00000 100001 AKA (RD = RS + RT)
SUB overflow | 000000 RS RT RD 00000 100010 AKA (RD = RS - RT)
SUBU noverflow | 000000 RS RT RD 00000 100011 AKA (RD = RS - RT)
MUL noverflow | 000000 RS RT 00000 00000 011000 AKA (HI&&LO = RS * RT)
MULU noverflow | 000000 RS RT 00000 00000 011001 AKA (HI&&LO = RS * RT)
DIV noverflow | 000000 RS RT 00000 00000 011010 AKA (Lo = RS / RT ; Hi = RS mod RT)
DIV noverflow | 000000 RS RT 00000 00000 011011 AKA (Lo = RS / RT ; Hi = RS mod RT)
SLT noverflow | 000000 RS RT RD 00000 101010 AKA (if[RS < RT] RD = 0 || 1; else RD = 0)
SLTU noverflow | 000000 RS RT RD 00000 101011 AKA (if[RS < RT] RD = 0 || 1; else RD = 0)
AND noverflow | 000000 RS RT RD 00000 100100 AKA (RD = RS AND RT)
OR noverflow | 000000 RS RT RD 00000 100101 AKA (RD = RS OR RT)
NOR noverflow | 000000 RS RT RD 00000 100111 AKA (RD = RS NOR RT)
XOR noverflow | 000000 RS RT RD 00000 101000 AKA (RD = RS XOR RT)
NOP noverflow | 000000 00000 00000 00000 00000 000000 AKA (nop)
MFHI noverflow | 000000 00000 00000 RD 00000 010000 AKA (RD = HI)
MFLO noverflow | 000000 00000 00000 RD 00000 010010 AKA (RD = LO)
I-Types
//____________________________________________________________________________________________________________________
ADDI overflow | 001000 RS RT Imm AKA (RT = RS + Imm) !16 bits!
ADDIU noverflow | 001001 RS RT Imm AKA (RT = RS + Imm) !16 bits!
SLTI noverflow | 001010 RS RT Imm AKA (if[RS < Imm] RT = 0 || 1; else RT = 0) !16 bits!
SLTIU noverflow | 001011 RS RT Imm AKA (if[RS < Imm] RT = 0 || 1; else RT = 0) !16 bits!
ANDI noverflow | 001100 RS RT Imm AKA (RT = RS AND Imm) !16 bits!
ORI noverflow | 001101 RS RT Imm AKA (RT = RS OR Imm) !16 bits!
XORI noverflow | 001110 RS RT Imm AKA (RT = RS XOR Imm) !16 bits!
LW illegal | 100011 RS RT Off AKA (RT = &{RS+Off}) !16 bits! remember to know the difference between memory addresses and values
SW illegal | 101011 RS RT Off AKA (&{RS+Off} = RT) !16 bits!
LBU illegal | 100100 RS RT Off AKA (RT = &{RS + Off}) !16 bits!
LB illegal | 100000 RS RT Off AKA (RT = &{RS + Off}) !16 bits!
SB illegal | 101000 RS RT Off AKA (&{RS + Off} = RT) !16 bits!
LUI illegal | 001111 00000 RT Imm AKA (RT = Imm)
BEQ | 000100 RS RT Off AKA (if[RS == RT] goto Off)
BNE | 000101 RS RT Off AKA (if[RS != RT] goto Off)
BLEZ | 000110 RS 00000 Off AKA (if[RS <= 0] goto Off)
BGTZ | 000111 RS 00000 Off AKA (if[RS > 0] goto Off)
BLTZ | 000001 RS 00000 Off AKA (if[RS < 0] goto Off)
Jumps / J-Types
//____________________________________________________________________________________________________________________
J | 000010 Off AKA (goto Off)
JAL | 000011 Off AKA (goto Off)
JR R-Type | 000000 RS 00000 00000 00000 001000 AKA (goto RS)
JALR R-Type | 000000 RS 00000 RD 00000 001001 AKA (goto ??)
Exceptions
//____________________________________________________________________________________________________________________
MFEPC R-Type | 010000 00000 RD 01110 00000 000000 AKA (RD = EPC)
MFCO R-Type | 010000 00000 RD 01101 00000 000000 AKA (RD = CR)
Floating Point
//____________________________________________________________________________________________________________________
LWC1 I-Type noverflow | 110001 RS FT Off AKA (FT = RS + Off)
SWC1 I-Type noverflow | 111001 RS FT Off AKA (RS + Off = FT)
ADD.S R-Type overflow | 010001 00000 FT FS FD 000000 AKA (FD = FS + FT)
ADD.D R-Type overflow | 010001 00001 FT FS FD 000000 AKA (FD = FS + FT)
SUB.S R-Type overflow | 010001 00000 FT FS FD 000001 AKA (FD = FS - FT)
SUB.D R-Type overflow | 010001 00001 FT FS FD 000001 AKA (FD = FS - FT)
MUL.S R-Type overflow | 010001 00000 FT FS FD 000002 AKA (FD = FS * FT)
MUL.D R-Type overflow | 010001 00001 FT FS FD 000002 AKA (FD = FS * FT)
DIV.S R-Type overflow | 010001 00000 FT FS FD 000003 AKA (FD = FS * FT)
DIV.D R-Type overflow | 010001 00001 FT FS FD 000003 AKA (FD = FS * FT)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment