2
"comment": "Instruction set of the reference book, with some additional instructions.",
4
"R": [{"id": "op", "size": 6}, {"id": "rs", "size": 5}, {"id": "rt", "size": 5}, {"id": "rd", "size": 5}, {"id": "shamt", "size": 5}, {"id": "func", "size": 6}],
5
"I": [{"id": "op", "size": 6}, {"id": "rs", "size": 5}, {"id": "rt", "size": 5}, {"id": "imm", "size": 16}],
6
"J": [{"id": "op", "size": 6}, {"id": "target", "size": 26}]
9
"nop": {"type": "R", "fields": {"op": 0, "rs": 0, "rt": 0, "rd": 0, "shamt": 0, "func": 0}},
10
"add": {"type": "R", "args": ["reg", "reg", "reg"], "fields": {"op": 0, "rs": "#2", "rt": "#3", "rd": "#1", "shamt": 0, "func": 32}, "desc": "$t1 = $t2 + $t3"},
11
"sub": {"type": "R", "args": ["reg", "reg", "reg"], "fields": {"op": 0, "rs": "#2", "rt": "#3", "rd": "#1", "shamt": 0, "func": 34}, "desc": "$t1 = $t2 - $t3"},
12
"and": {"type": "R", "args": ["reg", "reg", "reg"], "fields": {"op": 0, "rs": "#2", "rt": "#3", "rd": "#1", "shamt": 0, "func": 36}, "desc": "$t1 = $t2 & $t3"},
13
"or": {"type": "R", "args": ["reg", "reg", "reg"], "fields": {"op": 0, "rs": "#2", "rt": "#3", "rd": "#1", "shamt": 0, "func": 37}, "desc": "$t1 = $t2 | $t3"},
14
"nor": {"type": "R", "args": ["reg", "reg", "reg"], "fields": {"op": 0, "rs": "#2", "rt": "#3", "rd": "#1", "shamt": 0, "func": 39}, "desc": "$t1 = ~($t2 | $t3)"},
15
"slt": {"type": "R", "args": ["reg", "reg", "reg"], "fields": {"op": 0, "rs": "#2", "rt": "#3", "rd": "#1", "shamt": 0, "func": 42}, "desc": "$t1 = ($t2 < $t3) ? 1 : 0"},
16
"xor": {"type": "R", "args": ["reg", "reg", "reg"], "fields": {"op": 0, "rs": "#2", "rt": "#3", "rd": "#1", "shamt": 0, "func": 38}, "desc": "$t1 = $t2 ^ $t3"},
17
"mult": {"type": "R", "args": ["reg", "reg"], "fields": {"op": 0, "rs": "#1", "rt": "#2", "rd": 0, "shamt": 0, "func": 24}, "desc": "(HI,LO) = $t1 * $t2"},
18
"div": {"type": "R", "args": ["reg", "reg"], "fields": {"op": 0, "rs": "#1", "rt": "#2", "rd": 0, "shamt": 0, "func": 26}, "desc": "LO = $t1 / $t2; HI = $t1 % $t2"},
19
"mfhi": {"type": "R", "args": ["reg"], "fields": {"op": 0, "rs": 0, "rt": 0, "rd": "#1", "shamt": 0, "func": 16}, "desc": "$t1 = HI"},
20
"mflo": {"type": "R", "args": ["reg"], "fields": {"op": 0, "rs": 0, "rt": 0, "rd": "#1", "shamt": 0, "func": 18}, "desc": "$t1 = LO"},
21
"j": {"type": "J", "args": ["target"], "fields": {"op": 2, "target": "#1"}, "desc": "PC = target"},
22
"addi": {"type": "I", "args": ["reg", "reg", "int"], "fields": {"op": 8, "rs": "#2", "rt": "#1", "imm": "#3"}, "desc": "$t1 = $t2 + 23"},
23
"beq": {"type": "I", "args": ["reg", "reg", "offset"], "fields": {"op": 4, "rs": "#1", "rt": "#2", "imm": "#3"}, "desc": "PC += ($t1 == $t2) ? (offset * 4 + 4) : 4"},
24
"lw": {"type": "I", "args": ["reg", "data"], "fields": {"op": 35, "rs": "#2.offset", "rt": "#1", "imm": "#2.base"}, "desc": "$t1 = MEM[base + $t2]"},
25
"sw": {"type": "I", "args": ["reg", "data"], "fields": {"op": 43, "rs": "#2.offset", "rt": "#1", "imm": "#2.base"}, "desc": "MEM[base + $t2] = $t1"}
28
"li": {"args": ["reg", "int"], "to": ["addi #1, $0, #2"], "desc": "$t1 = 22"},
29
"la": {"args": ["reg", "label"], "to": ["addi #1, $0, #2"], "desc": "$t1 = ADDR(label)"},
30
"move": {"args": ["reg", "reg"], "to": ["add #1, #2, $0"], "desc": "$t1 = $t2"},
31
"subi": {"args": ["reg", "reg", "int"], "to": ["li $1, #3", "sub #1, #2, $1"], "desc": "$t1 = $t2 - 23"},
32
"sgt": {"args": ["reg", "reg", "reg"], "to": ["slt #1, #3, #2"], "desc": "$t1 = ($t2 > $t3) ? 1 : 0"},
33
"bge": {"args": ["reg", "reg", "offset"], "to": ["slt $1, #1, #2", "beq $1, $0, #3"], "desc": "PC += ($t1 >= $t2) ? (offset * 4 + 4) : 4"},
34
"ble": {"args": ["reg", "reg", "offset"], "to": ["sgt $1, #1, #2", "beq $1, $0, #3"], "desc": "PC += ($t1 <= $t2) ? (offset * 4 + 4) : 4"},
35
"b": {"args": ["offset"], "to": ["beq $0, $0, #1"], "desc": "PC += offset * 4 + 4"},
36
"neg": {"args": ["reg", "reg"], "to": ["sub #1, $0, #2"], "desc": "$t1 = -$t2"},
37
"not": {"args": ["reg", "reg"], "to": ["nor #1, #2, $0"], "desc": "$t1 = ~$t2"},
38
"mul": {"args": ["reg", "reg", "reg"], "to": ["mult #2, #3", "mflo #1"], "desc": "$t1 = $t2 * $t3"},
39
"rem": {"args": ["reg", "reg", "reg"], "to": ["div #2, #3", "mfhi #1"], "desc": "$t1 = $t2 % $t3"}
42
"0": {"RegDst": 1, "RegWrite": 1, "ALUOp": 2, "ALUSrc": 0, "MemToReg": 0},
43
"8": {"RegDst": 0, "RegWrite": 1, "ALUOp": 0, "ALUSrc": 1, "MemToReg": 0},
45
"4": {"ALUOp": 1, "ALUSrc": 0, "Branch": 1},
46
"35": {"ALUOp": 0, "ALUSrc": 1, "RegDst": 0, "RegWrite": 1, "MemRead": 1, "MemWrite": 0, "MemToReg": 1},
47
"43": {"ALUOp": 0, "ALUSrc": 1, "RegDst": 0, "RegWrite": 0, "MemRead": 0, "MemWrite": 1, "MemToReg": 0}
54
{"aluop": 0, "out": {"Operation": 2}},
55
{"aluop": 1, "out": {"Operation": 6}},
56
{"aluop": 2, "func": 16, "out": {"Operation": 10}},
57
{"aluop": 2, "func": 18, "out": {"Operation": 11}},
58
{"aluop": 2, "func": 24, "out": {"Operation": 8}},
59
{"aluop": 2, "func": 26, "out": {"Operation": 9}},
60
{"aluop": 2, "func": 32, "out": {"Operation": 2}},
61
{"aluop": 2, "func": 34, "out": {"Operation": 6}},
62
{"aluop": 2, "func": 36, "out": {"Operation": 0}},
63
{"aluop": 2, "func": 37, "out": {"Operation": 1}},
64
{"aluop": 2, "func": 38, "out": {"Operation": 3}},
65
{"aluop": 2, "func": 39, "out": {"Operation": 12}},
66
{"aluop": 2, "func": 42, "out": {"Operation": 7}}