blob: fc47712689ec6b24d6bf40757d7114175c204ac6 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
# QDMA - Quick and Dirty MIPS Assembler
## Intro
QDMA is a simple MIPS assembler written in Go for
[QDME](https://github.com/JacobMcDonnell/QDME), which is my simple MIPS
emulator. Currently this assembler can only handle standard instructions,
which means no sections and no predefined data outside of an I-Type
instruction.
## Instructions
Here is a list of supported instructions.
|Instruction|Type|Action|
|-----------|----|------|
|add |R |rd = rs + rt|
|addu |R |rd = rs + rt|
|and |R |rd = rs & rt|
|or |R |rd = rs \| rt|
|slt |R |rd = rs < rt|
|sltu |R |rd = rs < rt|
|sub |R |rd = rs - rt|
|subu |R |rd = rs - rt|
|xor |R |rd = rs ^ rt|
|sll |R |rd = rt << shamt|
|sra |R |rd = rt >> shamt|
|srl |R |rd = rt >> shamt|
|div |R |hi = rs % rt lo = rs / rt|
|divu |R |hi = rs % rt lo = rs / rt|
|mult |R |hi, lo = rs * rt|
|multu |R |hi, lo = rs * rt|
|MFHI |R |rd = hi|
|MFLO |R |rd = lo|
|MTHI |R |rs = hi|
|MTLO |R |rs = lo|
|jr |R |pc = addr, pc = $ra|
|jalr |R |rd = pc, pc = addr|
|syscall |R |System Call|
|jal |J |$ra = pc, pc = addr|
|j |J |pc = addr|
|beq |I | pc = (rs == rt) ? imm + pc + 4 : pc|
|bne |I | pc = (rs != rt) ? imm + pc + 4 : pc|
|addi |I |rt = rs + imm|
|addiu |I |rt = rs + imm|
|andi |I |rt = rs & imm|
|ori |I |rt = rs \| imm|
|xori |I |rt = rs ^ imm|
|slti |R |rt = rs < imm|
|sltiu |R |rt = rs < imm|
|lui |I |rt = rs << 16|
|lw |I |rs = imm(rt)|
|sw |I |imm(rt) = rs|
|