-
Notifications
You must be signed in to change notification settings - Fork 1
/
mnemonics
244 lines (209 loc) · 3.92 KB
/
mnemonics
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
234
235
236
237
238
239
240
241
242
243
244
; Directives
equ F8000000 ; <31-28> = F is directive flag
org F8010000 ; <27> indicates can redefine label
origin F8010000 ; <26> indicates can define non-label
align F8020000
def F8030000
record F8040000
structure F8040000
struct F8040000
rec_align F8050000
struct_align F8050000
alias F8100000 ; Encodes size of operation
byte F8110000
halfword F8120000
half F8120000
word F8140000
double F8180000
doubleword F8180000
rn F4000000
cn F4010000
cp F4020000
defb F0000000
dcb F0000000
defh F0010000
dcw F0010000
defw F0020000
dcd F0020000
defs F0030000
export F0040000
include F0050000
get F0050000
literal F0060000
literals F0060000
pool F0060000
ltorg F0060000
arch F0070000
architecture F0070000
entry F0080000
arm F0090000
thumb F00A0000
set F00B0000
define F00B0000
if F00C0000
endif F00D0000
fi F00D0000
else F00E0000
import F00F0000
nop 00000000 ; <31> indicates "just condition F"
undef 40100000 ; <30> indicates "all conditions"
undefined 40100000
and 40017000 ; <27-20> op code
eor 40217000 ; <19-16> token category
sub 40417000 ; <15> possibly variable length
rsb 40617000 ; <14-12> operand field flags
add 40817000 ; <11> Fxxxxxxx `always' instruction (except RRX)
adc 40A17000 ; <8> Thumb instruction
sbc 40C17000 ; <5-0> instruction set versions
rsc 40E17000
tst 41113000
teq 41313000
cmp 41513000
cmn 41713000
orr 41817000
mov 41A15000
bic 41C17000
mvn 41E15000
lsl 41A24000 ; Auxiliary mnemonics for shifts
asl 41A24000
lsr 41A24200
asr 41A24400
ror 41A24600
rrx 41A24E00 ; Note: see 'always' as well.
mul 40021000
mla 40221000
smull 40C21001
smlal 40E21001
umull 40821001
umlal 40A21001
swp 41022000
clz 4162000E ; Note - no suffix
str 44030000
ldr 44138000
b 4A040000
bl 4B040000
swi 4F050000 ; Miscellaneous
svc 4F050000
bx 41251006
bkpt 0125200E
blx 4005300E
pld 0455483E
push 49255000 ; Aliases - newly allowed
pop 48B55000
stm 48060000
ldm 48160000
mrs 41070000
msr 41270000
adr 42080000
adr1 42080000
adr2 42089000
adr3 4208A000
adr4 4208B000
adrl 42088000 ; Variable length version
;adrl 42089000
str 40090002 ; Half word load/store
ldr 40198002
cdp 4E0A0000 ; Conditional
cdp2 0E0A080E ; Unconditional (<11> => formerly "NV")
mcr 4E0A1000
mcr2 0E0A180E
mrc 4E1A1000
mrc2 0E1A180E
mcrr 4C4A203E
mrrc 4C5A203E
ldc 4C1B0000
ldc2 0C1B0800
stc 4C0B0000
stc2 0C0B0800
str 400C003E ; STRD
ldr 400C103E ; LDRD
andx 420DF000 ; Potentially synthesized sequences
eorx 422DF000
subx 424DF000
rsbx 426DF000
addx 428DF000
adcx 42ADF000
sbcx 42CDF000
rscx 42EDF000
orrx 438DF000
movx 43ADD000
bicx 43CDF000
qadd 4102301E
qdadd 4142301E
qsub 4122301E
qdsub 4162301E
smlabb 4102801E
smlatb 4102901E
smlabt 4102A01E
smlatt 4102B01E
smlalbb 4142801E
smlaltb 4142901E
smlalbt 4142A01E
smlaltt 4142B01E
smulbb 4162801E
smultb 4162901E
smulbt 4162A01E
smultt 4162B01E
smulwb 4122901E
smulwt 4122B01E
smlawb 4122801E
smlawt 4122A01E
adc 00500100 ; Thumb mnemonics
and 00000100
bic 00E00100
cmn 00B00100
eor 00100100
mul 00D00100
mvn 00F00100
neg 00900100
orr 00C00100
ror 00700100
sbc 00600100
tst 00800100
asr 00210100
lsl 00010100
lsr 00110100
add 00020100
sub 00120100
mov 00030100
cmp 00130100
b 00E40100
bal 00E40100
beq 00040100
bne 00140100
bcs 00240100
bhs 00240100
bcc 00340100
blo 00340100
bmi 00440100
bpl 00540100
bvs 00640100
bvc 00740100
bhi 00840100
bls 00940100
bge 00A40100
blt 00B40100
bgt 00C40100
ble 00D40100
bx 00050100
bl 00068100 ; Marked as "variable length" because
blx 00168100 ; BLX may vary and BL is `long' => unpleasant
swi 0DF70100
bkpt 0BE70100
nop 00080100
undef 00180100
undefined 00180100
str 02095100 ; <14> [Rn, #]
strb 00294100 ; <13> [SP, #]
strh 01194100 ; <12> [PC, #]
ldr 0249F100 ; [Rn, Rm] always allowed
ldrb 00694100 ; <22-20> are op_code <11> & <10-9> when used
ldrh 01594100 ; <25-24> are size
ldrsb 00390100 ; Note: <15> indicates variable length
ldrsh 01790100 ; (i.e. "LDR R0, =nn" case)
stmia 0C0A0100
ldmia 0C8A0100
push 0B4A0100
pop 0BCA0100
adr 000B0100
adr1 000B0100