aboutsummaryrefslogtreecommitdiff
path: root/assembler/instructions
blob: ebe31b8856d417c5aa7d1217b48061a296f9b183 (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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
Clobber
R0: arg1, uart result
R1: arg2
R2:
R3: shift_amount
-------------
Save
R4: octal result, register result
R5: second-level (octal or register) scratch
R6: word under construction
R7: parse instructions
R8: end_char
R8:
R9:
R10:
R11:
R12:

Encoding

start with all 0

0xxxxxxx // 7-bit field xxxxxxx at [15:9] (non zero)
100xxxxx // 5-bit field xxxxx at [15:11]
101xxxxx // 5-bit field xxxxx at [10:6]
1100yyyy // octal immediate with shift amount 0 and bit-width yyyy
1101yyyy // octal immediate with shift amount 6 and bit-width yyyy
1110yyyy // 3-bit reg with shift amount yyyy
1111yyyy // 4-bit reg with shift amount yyyy

ADCS (register)     T1  01000 00101 Rm Rdn    E3 E0 A5 88
ADDSI3 (immediate)  T1  0001110 imm3 Rn Rd    D3 E3 E0 0E
ADDSI8 (immediate)  T2  00110 Rdn imm8        00 C8 E3 86
ADDSR (register)    T1  0001100 Rm Rn Rd      E6 E3 E0 0C
ADDRHI (register)   T2  010001001 Rm4 Rdn     F3 E0 B2 88     TODO (dn + 8)
ADDRLO (register)   T2  010001000 Rm4 Rdn     F3 E0 B0 88
ADR                 T1  10100 Rd imm8         00 C8 E3 94
ANDS (register)     T1  01000 00000 Rm Rdn    E3 E0 A0 88
ASRSI (immediate)   T1  00010 imm5 Rm Rd      D5 E3 E0 82
ASRSR (register)    T1  01000 00100 Rm Rdn    E3 E0 A4 88
BEQ                 T1  11010 000 imm8        00 C8 A0 9A     TODO overlap
BNE                 T1  11010 001 imm8        00 C8 A4 9A
BHS                 T1  11010 010 imm8        00 C8 A8 9A
BLO                 T1  11010 011 imm8        00 C8 AC 9A
BMI                 T1  11010 100 imm8        00 C8 B0 9A
BPL                 T1  11010 101 imm8        00 C8 B4 9A
BVS                 T1  11010 110 imm8        00 C8 B8 9A
BVC                 T1  11010 111 imm8        00 C8 BC 9A
BHI                 T1  11011 000 imm8        00 C8 A0 9B
BLS                 T1  11011 001 imm8        00 C8 A4 9B
BGE                 T1  11011 010 imm8        00 C8 A8 9B
BLT                 T1  11011 011 imm8        00 C8 AC 9B
BGT                 T1  11011 100 imm8        00 C8 B0 9B
BLE                 T1  11011 101 imm8        00 C8 B4 9B
B                   T2  11100 imm11           00 00 CB 9C
BICS (register)     T1  01000 01110 Rm Rdn    E3 E0 AE 88
BLHI                T1  11110 imm11           00 00 CB 9E
BLLO                T1  11111 imm11           00 00 CB 9F
BLX                 T1  01000 1111 Rm 000     00 E3 BE 88
BX                  T1  01000 1110 Rm 000     00 E3 BC 88
CMN (register)      T1  01000 01011 Rm Rn     E3 E0 AB 88
CMPI (immediate)    T1  00101 Rn imm8         00 C8 E8 85
CMPR (register)     T1  01000 01010 Rm Rn     E3 E0 AA 88
CMPRHI (register)   T2  010001011 Rm4 Rd      F3 E0 B6 88      TODO (d + 8)
CMPRLO (register)   T2  010001010 Rm4 Rd      F3 E0 B4 88 
EORS (register)     T1  01000 00001 Rm Rdn    E3 E0 A1 88
LDRI5 (immediate)   T1  01101 imm5 Rn Rt      D5 E3 E0 8D
LDRI8 (immediate)   T2  10011 Rt imm8         00 C8 E8 93
LDRL (literal)      T1  01001 Rt imm8         00 C8 E8 89
LDRR (register)     T1  0101100 Rm Rn Rt      E6 E3 E0 2C
LDRBI (immediate)   T1  01111 imm5 Rn Rt      D5 E3 E0 8F
LDRBR (register)    T1  0101110 Rm Rn Rt      E6 E3 E0 2E
LDRHI (immediate)   T1  10001 imm5 Rn Rt      D5 E3 E0 91
LDRHR (register)    T1  0101101 Rm Rn Rt      E6 E3 E0 2D
LDRSB (register)    T1  0101011 Rm Rn Rt      E6 E3 E0 2B
LDRSH (register)    T1  0101111 Rm Rn Rt      E6 E3 E0 2F
LSLSI (immediate)   T1  00000 imm5 Rm Rd      D5 E3 E0 80
LSLSR (register)    T1  01000 00010 Rm Rdn    E3 E0 A2 88
LSRSI (immediate)   T1  00001 imm5 Rm Rd      D5 E3 E0 81
LSRSR (register)    T1  01000 00011 Rm Rdn    E3 E0 A3 88
MOVSI (immediate)   T1  00100 Rd imm8         00 C8 E8 84
MOVRHI (register)   T1  010001101 Rm4 Rd      F3 E0 BA 88     TODO (d + 8)
MOVRLO (register)   T1  010001100 Rm4 Rd      F3 E0 B8 88
MOVSR (register)    T2  00000 00000 Rm Rd     E3 E0 A0 80
MULS                T1  01000 01101 Rn Rdm    E3 E0 AD 88
MVNS (register)     T1  01000 01111 Rm Rd     E3 E0 AF 88
ORRS (register)     T1  01000 01100 Rm Rdn    E3 E0 AC 88
PUSHLR              T1  10110 10100 000000    00 00 B4 96     TODO nothing to do
POPPC               T1  10111 10100 000000    00 00 B4 97
REV                 T1  10111 01000 Rm Rd     E3 E0 A8 97
REV16               T1  10111 01001 Rm Rd     E3 E0 A9 97
REVSH               T1  10111 01011 Rm Rd     E3 E0 AB 97
RORS (register)     T1  01000 00111 Rm Rdn    E3 E0 A7 88
NEG (immediate)     T1  01000 01001 Rn Rd     E3 E0 A9 88     TODO it's negate
SBCS (register)     T1  01000 00110 Rm Rdn    E3 E0 A6 88
STRI5 (immediate)   T1  01100 imm5 Rn Rt      D5 E3 E0 8C
STRI8 (immediate)   T2  10010 Rt imm8         00 C8 E8 92
STRR (register)     T1  0101000 Rm Rn Rt      E6 E3 E0 28
STRBI (immediate)   T1  01110 imm5 Rn Rt      D5 E3 E0 8E
STRBR (register)    T1  0101010 Rm Rn Rt      E6 E3 E0 2A
STRHI (immediate)   T1  10000 imm5 Rn Rt      D5 E3 E0 90
STRHR (register)    T1  0101001 Rm Rn Rt      E6 E3 E0 29
SUBSI3 (immediate)  T1  0001111 imm3 Rn Rd    D3 E3 E0 0F
SUBSI8 (immediate)  T2  00111 Rdn imm8        00 C8 E8 87
SUBSR (register)    T1  0001101 Rm Rn Rd      E6 E3 E0 0D
SVC                 T1  11011 111 imm8        00 C8 BC 9B
SXTB                T1  10110 01001 Rm Rd     E3 E0 A9 96
SXTH                T1  10110 01000 Rm Rd     E3 E0 A8 96
TST (register)      T1  01000 01000 Rm Rd     E3 E0 A8 88
UXTB                T1  10110 01011 Rm Rd     E3 E0 AB 96
UXTH                T1  10110 01010 Rm Rd     E3 E0 AA 96

A for ARITHMETIC 
B for BITWISE
C for COMPARE
D for DUPLICATE
J for JUMP
L for LOAD
P for PUSH or POP
R for ROTATE or REVERSE
S for STORE
T for TRANSLATE

A for ARITHMETIC 
 
AAC     ADCS (register)     T1  01000 00101 Rm Rdn    E3 E0 A5 88
AAI3    ADDSI3 (immediate)  T1  0001110 imm3 Rn Rd    D3 E3 E0 0E
AAI8    ADDSI8 (immediate)  T2  00110 Rdn imm8        00 C8 E3 86
AARF    ADDSR (register)    T1  0001100 Rm Rn Rd      E6 E3 E0 0C
AARH    ADDRHI (register)   T2  010001001 Rm4 Rdn     F3 E0 B2 88
AARL    ADDRLO (register)   T2  010001000 Rm4 Rdn     F3 E0 B0 88
AAA     ADR                 T1  10100 Rd imm8         00 C8 E3 94
ASC     SBCS (register)     T1  01000 00110 Rm Rdn    E3 E0 A6 88
ASI3    SUBSI3 (immediate)  T1  0001111 imm3 Rn Rd    D3 E3 E0 0F
ASI8    SUBSI8 (immediate)  T2  00111 Rdn imm8        00 C8 E8 87
ASR     SUBSR (register)    T1  0001101 Rm Rn Rd      E6 E3 E0 0D
AHI     SRSI (immediate)    T1  00010 imm5 Rm Rd      D5 E3 E0 82
AHR     SRSR (register)     T1  01000 00100 Rm Rdn    E3 E0 A4 88
AM      MULS                T1  01000 01101 Rn Rdm    E3 E0 AD 88
AN      NEG (immediate)     T1  01000 01001 Rn Rd     E3 E0 A9 88

J for JUMP

JE      BEQ                 T1  11010 000 imm8        00 C8 A0 9A
JN      BNE                 T1  11010 001 imm8        00 C8 A4 9A
JHS     BHS                 T1  11010 010 imm8        00 C8 A8 9A
JLO     BLO                 T1  11010 011 imm8        00 C8 AC 9A
JM      BMI                 T1  11010 100 imm8        00 C8 B0 9A
JP      BPL                 T1  11010 101 imm8        00 C8 B4 9A
JVS     BVS                 T1  11010 110 imm8        00 C8 B8 9A
JVC     BVC                 T1  11010 111 imm8        00 C8 BC 9A
JHI     BHI                 T1  11011 000 imm8        00 C8 A0 9B
JLS     BLS                 T1  11011 001 imm8        00 C8 A4 9B
JGE     BGE                 T1  11011 010 imm8        00 C8 A8 9B
JLT     BLT                 T1  11011 011 imm8        00 C8 AC 9B
JGT     BGT                 T1  11011 100 imm8        00 C8 B0 9B
JLE     BLE                 T1  11011 101 imm8        00 C8 B4 9B
JA      B                   T2  11100 imm11           00 00 CB 9C
JIH     BLHI                T1  11110 imm11           00 00 CB 9E
JIL     BLLO                T1  11111 imm11           00 00 CB 9F
JLR     BLX                 T1  01000 1111 Rm 000     00 E3 BE 88
JR      BX                  T1  01000 1110 Rm 000     00 E3 BC 88
JS      SVC                 T1  11011 111 imm8        00 C8 BC 9B

C for COMPARE

CN      CMN (register)      T1  01000 01011 Rm Rn     E3 E0 AB 88
CI      CMPI (immediate)    T1  00101 Rn imm8         00 C8 E8 85
CR3     CMPR (register)     T1  01000 01010 Rm Rn     E3 E0 AA 88
CR4H    CMPRHI (register)   T2  010001011 Rm4 Rd      F3 E0 B6 88
CR4L    CMPRLO (register)   T2  010001010 Rm4 Rd      F3 E0 B4 88 

L for LOAD

LI5     LDRI5 (immediate)   T1  01101 imm5 Rn Rt      D5 E3 E0 8D
LI8     LDRI8 (immediate)   T2  10011 Rt imm8         00 C8 E8 93
LL      LDRL (literal)      T1  01001 Rt imm8         00 C8 E8 89
LR      LDRR (register)     T1  0101100 Rm Rn Rt      E6 E3 E0 2C
LBI     LDRBI (immediate)   T1  01111 imm5 Rn Rt      D5 E3 E0 8F
LBR     LDRBR (register)    T1  0101110 Rm Rn Rt      E6 E3 E0 2E
LHI     LDRHI (immediate)   T1  10001 imm5 Rn Rt      D5 E3 E0 91
LHR     LDRHR (register)    T1  0101101 Rm Rn Rt      E6 E3 E0 2D
LSB     LDRSB (register)    T1  0101011 Rm Rn Rt      E6 E3 E0 2B
LSH     LDRSH (register)    T1  0101111 Rm Rn Rt      E6 E3 E0 2F

S for STORE

SI5     STRI5 (immediate)   T1  01100 imm5 Rn Rt      D5 E3 E0 8C
SI8     STRI8 (immediate)   T2  10010 Rt imm8         00 C8 E8 92
SR      STRR (register)     T1  0101000 Rm Rn Rt      E6 E3 E0 28
SBI     STRBI (immediate)   T1  01110 imm5 Rn Rt      D5 E3 E0 8E
SBR     STRBR (register)    T1  0101010 Rm Rn Rt      E6 E3 E0 2A
SHI     STRHI (immediate)   T1  10000 imm5 Rn Rt      D5 E3 E0 90
SHR     STRHR (register)    T1  0101001 Rm Rn Rt      E6 E3 E0 29

D for DUPLICATE

DI      MOVSI (immediate)   T1  00100 Rd imm8         00 C8 E8 84
DRH     MOVRHI (register)   T1  010001101 Rm4 Rd      F3 E0 BA 88
DRL     MOVRLO (register)   T1  010001100 Rm4 Rd      F3 E0 B8 88
DRF     MOVSR (register)    T2  00000 00000 Rm Rd     E3 E0 A0 80
DSB     SXTB                T1  10110 01001 Rm Rd     E3 E0 A9 96
DSH     SXTH                T1  10110 01000 Rm Rd     E3 E0 A8 96
DUB     UXTB                T1  10110 01011 Rm Rd     E3 E0 AB 96
DUH     UXTH                T1  10110 01010 Rm Rd     E3 E0 AA 96

B for BITWISE

BC      BICS (register)     T1  01000 01110 Rm Rdn    E3 E0 AE 88
BA      ANDS (register)     T1  01000 00000 Rm Rdn    E3 E0 A0 88
BX      EORS (register)     T1  01000 00001 Rm Rdn    E3 E0 A1 88
BO      ORRS (register)     T1  01000 01100 Rm Rdn    E3 E0 AC 88
BI      MVNS (register)     T1  01000 01111 Rm Rd     E3 E0 AF 88
BT      TST (register)      T1  01000 01000 Rm Rd     E3 E0 A8 88

T for TRANSLATE

TLI     LSLSI (immediate)   T1  00000 imm5 Rm Rd      D5 E3 E0 80
TLR     LSLSR (register)    T1  01000 00010 Rm Rdn    E3 E0 A2 88
TRI     LSRSI (immediate)   T1  00001 imm5 Rm Rd      D5 E3 E0 81
TRR     LSRSR (register)    T1  01000 00011 Rm Rdn    E3 E0 A3 88

R for ROTATE or REVERSE

RR      RORS (register)     T1  01000 00111 Rm Rdn    E3 E0 A7 88
RBW     REV                 T1  10111 01000 Rm Rd     E3 E0 A8 97
RBH     REV16               T1  10111 01001 Rm Rd     E3 E0 A9 97
RBS     REVSH               T1  10111 01011 Rm Rd     E3 E0 AB 97

P for PUSH or POP

PL      PUSHLR              T1  10110 10100 000000    00 00 B4 96
PP      POPPC               T1  10111 10100 000000    00 00 B4 97