blob: 9d14d07339f7d5774b7ef10d4e62f169be7a1c43 (
plain) (
blame)
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
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
|
/* asmopcod.h -- include file for microsoft 80x86 assembler
**
** microsoft (r) macro assembler
** copyright (c) microsoft corp 1986. all rights reserved
**
** randy nevin
*/
#define IMUL3 0x69 /* 3 argument integer multiply */
#define ARITHBASE 0xF6 /* base opcode for arithmetic opcodes */
/* base opcode for all instructions */
#define O_AAA 0x37
#define O_AAD 0xD5
#define O_AAM 0xD4
#define O_AAS 0x3F
#define O_ADC 0x10 /* ?????? */
#define O_ADD 0x00 /* ?????? */
#define O_AND 0x20 /* ?????? */
#define O_ARPL 0x63
#define O_BOUND 0x62
#define O_CALL 0xE8
#define O_CALLGATE 0xFF
#define O_CBW 0x98
#define O_CLC 0xF8
#define O_CLD 0xFC
#define O_CLI 0xFA
#define O_CLTS 0x0F
#define O_CMC 0xF5
#define O_CMP 0x38 /* ?????? */
#define O_CMPS 0xA6
#define O_CMPSB 0xA6
#define O_CMPSW 0xA7
#define O_CWD 0x99
#define O_DAA 0x27
#define O_DAS 0x2F
#define O_DEC 0x48 /* ?????? */
#define O_DIV 0xF6
#define O_ENTER 0xC8
#define O_ESC 0x36 /* not opcode */
#define O_HLT 0xF4
#define O_IDIV 0xF6
#define O_IMUL 0xF6
#define O_IN 0xE4
#define O_INC 0x40
#define O_INS 0x6C
#define O_INSB 0x6C
#define O_INSW 0x6D
#define O_INT 0xCC
#define O_INTO 0xCE
#define O_IRET 0xCF
#define O_JA 0x77
#define O_JAE 0x73
#define O_JB 0x72
#define O_JBE 0x76
#define O_JC 0x72
#define O_JCXZ 0xE3
#define O_JE 0x74
#define O_JG 0x7F
#define O_JGE 0x7D
#define O_JL 0x7C
#define O_JLE 0x7E
#define O_JMP 0xE9
#define O_JNA 0x76
#define O_JNAE 0x72
#define O_JNB 0x73
#define O_JNBE 0x77
#define O_JNC 0x73
#define O_JNE 0x75
#define O_JNG 0x7E
#define O_JNGE 0x7C
#define O_JNL 0x7D
#define O_JNLE 0x7F
#define O_JNO 0x71
#define O_JNP 0x7B
#define O_JNS 0x79
#define O_JNZ 0x75
#define O_JO 0x70
#define O_JP 0x7A
#define O_JPE 0x7A
#define O_JPO 0x7B
#define O_JS 0x78
#define O_JZ 0x74
#define O_LAHF 0x9F
#define O_LAR 0x0F
#define O_LDS 0xC5
#define O_LEA 0x8D
#define O_LES 0xC4
#define O_LEAVE 0xC9
#define O_LGDT 0x0F
#define O_LIDT 0x0F
#define O_LLDT 0x0F
#define O_LMSW 0x0F
#define O_LOCK 0xF0
#define O_LODS 0xAC
#define O_LODSB 0xAC
#define O_LODSW 0xAD
#define O_LOOP 0xE2
#define O_LOOPE 0xE1
#define O_LOOPNE 0xE0
#define O_LOOPNZ 0xE0
#define O_LOOPZ 0xE1
#define O_LSL 0x0F
#define O_LTR 0x0F
#define O_MOV 0xA2
#define O_MOVBOFF 0xA0
#define O_MOVBREA 0x88
#define O_MOVFSEG 0x8C
#define O_MOVTSEG 0x8E
#define O_MOVS 0xA4
#define O_MOVSB 0xA4
#define O_MOVSW 0xA5
#define O_MUL 0xF6
#define O_NEG 0xF6
#define O_NOP 0x90
#define O_NOT 0xF6
#define O_OR 0x08
#define O_OUT 0xE6
#define O_OUTS 0x6E
#define O_OUTSB 0x6E
#define O_OUTSW 0x6F
#define O_POP 0x58
#define O_POPA 0x61
#define O_POPF 0x9D
#define O_POPM 0x8F
#define O_PUSH 0x50
#define O_PUSHA 0x60
#define O_PUSHF 0x9C
#define O_PUSHM 0xFF
#define O_RCL 0xD0
#define O_RCR 0xD0
#define O_REP 0xF3
#define O_REPE 0xF3
#define O_REPNE 0xF2
#define O_REPNZ 0xF2
#define O_REPZ 0xF3
#define O_RET 0xC3
#define O_ROL 0xD0
#define O_ROR 0xD0
#define O_SAHF 0x9E
#define O_SAL 0xD0
#define O_SAR 0xD0
#define O_SBB 0x18
#define O_SCAS 0xAE
#define O_SCASB 0xAE
#define O_SCASW 0xAF
#define O_SGDT 0x0F
#define O_SHL 0xD0
#define O_SHR 0xD0
#define O_SIDT 0x0F
#define O_SLDT 0x0F
#define O_SMSW 0x0F
#define O_STC 0xF9
#define O_STD 0xFD
#define O_STI 0xFB
#define O_STOS 0xAA
#define O_STOSB 0xAA
#define O_STOSW 0xAB
#define O_STR 0x0F
#define O_SUB 0x28
#define O_TEST 0x84
#define O_VERR 0x0F
#define O_VERW 0x0F
#define O_WAIT 0x9B
#define O_XCHG 0x90
#define O_XCHGBREA 0x86
#define O_XCHGWRAX 0x90
#define O_XLAT 0xD7
#define O_XLATB 0xD7
#define O_XOR 0x30
#ifdef V386
#define O_MOVSX 0x0FBE
#define O_MOVZX 0x0FB6
#define O_CWDE 0x98
#define O_CDQ 0x99
#define O_LFS 0xB4
#define O_LGS 0xB5
#define O_LSS 0xB2
#define O_SHLD 0xA4
#define O_SHRD 0xAC
#define O_CMPSD 0xA7
#define O_INSD 0x6D
#define O_LODSD 0xAD
#define O_MOVSD 0xA5
#define O_OUTSD 0x6F
#define O_SCASD 0xAF
#define O_STOSD 0xAB
#define O_BSF 0x0F
#define O_BSR 0x0F
#define O_BT 0x0F
#define O_BTC 0x0F
#define O_BTR 0x0F
#define O_BTS 0x0F
#define O_IBTS 0x0F
#define O_XBTS 0x0F
#define O_JECXZ 0xE3
#define O_SETO 0x0F
#define O_SETNO 0x0F
#define O_SETB 0x0F
#define O_SETNAE 0x0F
#define O_SETNB 0x0F
#define O_SETAE 0x0F
#define O_SETE 0x0F
#define O_SETZ 0x0F
#define O_SETNE 0x0F
#define O_SETNZ 0x0F
#define O_SETBE 0x0F
#define O_SETNA 0x0F
#define O_SETNBE 0x0F
#define O_SETA 0x0F
#define O_SETS 0x0F
#define O_SETNS 0x0F
#define O_SETP 0x0F
#define O_SETPE 0x0F
#define O_SETNP 0x0F
#define O_SETPO 0x0F
#define O_SETL 0x0F
#define O_SETNGE 0x0F
#define O_SETC 0x0F
#define O_SETNC 0x0F
#define O_SETLE 0x0F
#define O_SETNG 0x0F
#define O_SETNL 0x0F
#define O_SETGE 0x0F
#define O_SETNLE 0x0F
#define O_SETG 0x0F
#define O_PUSHAD 0x60
#define O_POPAD 0x61
#define O_POPFD 0x9D
#define O_PUSHFD 0x9C
#define O_IRETD 0xCF
#endif
#define O_RETN 0xC3
#define O_RETF 0xCB
/* modrm bits for 8086/186/286/386 instructions */
#define R_AAD 0x0A
#define R_AAM 0x0A
#define R_CLTS 0x06
#define R_DIV 0x06
#define R_IDIV 0x07
#define R_IMUL 0x05
#define R_LAR 0x02
#define R_LGDT 0x02
#define R_LIDT 0x03
#define R_LLDT 0x02
#define R_LMSW 0x06
#define R_LSL 0x03
#define R_LTR 0x03
#define R_MUL 0x04
#define R_NEG 0x03
#define R_NOT 0x02
#define R_RCL 0x02
#define R_RCR 0x03
#define R_ROL 0x00
#define R_ROR 0x01
#define R_SAL 0x04
#define R_SAR 0x07
#define R_SGDT 0x00
#define R_SHL 0x04
#define R_SHR 0x05
#define R_SIDT 0x01
#define R_SLDT 0x00
#define R_SMSW 0x04
#define R_STR 0x01
#define R_VERR 0x04
#define R_VERW 0x05
#define R_BT 0x04
#define R_BTC 0x07
#define R_BTR 0x06
#define R_BTS 0x05
#define R_SETO 0x90
#define R_SETNO 0x91
#define R_SETB 0x92
#define R_SETNAE 0x92
#define R_SETNB 0x93
#define R_SETAE 0x93
#define R_SETE 0x94
#define R_SETZ 0x94
#define R_SETNE 0x95
#define R_SETNZ 0x95
#define R_SETBE 0x96
#define R_SETNA 0x96
#define R_SETNBE 0x97
#define R_SETA 0x97
#define R_SETS 0x98
#define R_SETNS 0x99
#define R_SETP 0x9A
#define R_SETPE 0x9A
#define R_SETNP 0x9B
#define R_SETPO 0x9B
#define R_SETL 0x9C
#define R_SETNGE 0x9C
#define R_SETC 0x92
#define R_SETNC 0x93
#define R_SETLE 0x9E
#define R_SETNG 0x9E
#define R_SETNL 0x9D
#define R_SETGE 0x9D
#define R_SETNLE 0x9F
#define R_SETG 0x9F
/* 8087/287 instructions */
#define O_F2XM1 0xD9
#define O_FABS 0xD9
#define O_FADD 0xD8
#define O_FADDP 0xDE
#define O_FBLD 0xDF
#define O_FBSTP 0xDF
#define O_FCHS 0xD9
#define O_FCLEX 0xDB
#define O_FCOM 0xD8
#define O_FCOMP 0xD8
#define O_FCOMPP 0xDE
#define O_FDECSTP 0xD9
#define O_FDISI 0xDB
#define O_FDIV 0xD8
#define O_FDIVP 0xDE
#define O_FDIVR 0xD8
#define O_FDIVRP 0xDE
#define O_FENI 0xDB
#define O_FFREE 0xDD
#define O_FIADD 0xDA
#define O_FICOM 0xDA
#define O_FICOMP 0xDA
#define O_FIDIV 0xDA
#define O_FIDIVR 0xDA
#define O_FILD 0xDB
#define O_FIMUL 0xDA
#define O_FINCSTP 0xD9
#define O_FINIT 0xDB
#define O_FIST 0xDB
#define O_FISTP 0xDB
#define O_FISUB 0xDA
#define O_FISUBR 0xDA
#define O_FLD 0xD9
#define O_FLD1 0xD9
#define O_FLDCW 0xD9
#define O_FLDENV 0xD9
#define O_FLDL2E 0xD9
#define O_FLDL2T 0xD9
#define O_FLDLG2 0xD9
#define O_FLDLN2 0xD9
#define O_FLDPI 0xD9
#define O_FLDZ 0xD9
#define O_FMUL 0xD8
#define O_FMULP 0xDE
#define O_FNCLEX 0xDB
#define O_FNDISI 0xDB
#define O_FNENI 0xDB
#define O_FNINIT 0xDB
#define O_FNOP 0xD9
#define O_FNSAVE 0xDD
#define O_FNSTCW 0xD9
#define O_FNSTENV 0xD9
#define O_FNSTSW 0xDD
#define O_FPATAN 0xD9
#define O_FPREM 0xD9
#define O_FPTAN 0xD9
#define O_FRNDINT 0xD9
#define O_FRSTOR 0xDD
#define O_FSAVE 0xDD
#define O_FSCALE 0xD9
#define O_FSETPM 0xDB
#define O_FSQRT 0xD9
#define O_FST 0xD9
#define O_FSTCW 0xD9
#define O_FSTENV 0xD9
#define O_FSTP 0xD9
#define O_FSTSW 0xDD
#define O_FSTSWAX 0xDF
#define O_FSUB 0xD8
#define O_FSUBP 0xDE
#define O_FSUBR 0xD8
#define O_FSUBRP 0xDE
#define O_FTST 0xD9
#define O_FWAIT 0xD8
#define O_FXAM 0xD9
#define O_FXCH 0xD9
#define O_FXTRACT 0xD9
#define O_FYL2X 0xD9
#define O_FYL2XP1 0xD9
#define O_FNRSTOR 0xDD
#ifdef V386
#define O_FSIN 0xD9
#define O_FSINCOS 0xD9
#define O_FCOS 0xD9
#define O_FPREM1 0xD9
#define O_FUCOM 0xDD
#define O_FUCOMP 0xDD
#define O_FUCOMPP 0xDA
#endif
/* 8087/287 modrm bits */
#define R_F2XM1 0xF0
#define R_FABS 0xE1
#define R_FADD 0x00
#define R_FADDP 0x00
#define R_FBLD 0x04
#define R_FBSTP 0x06
#define R_FCHS 0xE0
#define R_FCLEX 0xE2
#define R_FCOM 0x02
#define R_FCOMP 0x03
#define R_FCOMPP 0xD9
#define R_FDECSTP 0xF6
#define R_FDISI 0xE1
#define R_FDIV 0x06
#define R_FDIVP 0x07
#define R_FDIVR 0x07
#define R_FDIVRP 0x06
#define R_FENI 0xE0
#define R_FFREE 0x00
#define R_FIADD 0x00
#define R_FICOM 0x02
#define R_FICOMP 0x03
#define R_FIDIV 0x06
#define R_FIDIVR 0x07
#define R_FILD 0x00
#define R_FIMUL 0x01
#define R_FINCSTP 0xF7
#define R_FINIT 0xE3
#define R_FIST 0x02
#define R_FISTP 0x03
#define R_FISUB 0x04
#define R_FISUBR 0x05
#define R_FLD 0x00
#define R_FLD1 0xE8
#define R_FLDCW 0x05
#define R_FLDENV 0x04
#define R_FLDL2E 0xEA
#define R_FLDL2T 0xE9
#define R_FLDLG2 0xEC
#define R_FLDLN2 0xED
#define R_FLDPI 0xEB
#define R_FLDZ 0xEE
#define R_FMUL 0x01
#define R_FMULP 0x01
#define R_FNCLEX 0xE2
#define R_FNDISI 0xE1
#define R_FNENI 0xE0
#define R_FNINIT 0xE3
#define R_FNOP 0xD0
#define R_FNSAVE 0x06
#define R_FNSTCW 0x07
#define R_FNSTENV 0x06
#define R_FNSTSW 0x07
#define R_FPATAN 0xF3
#define R_FPREM 0xF8
#define R_FPTAN 0xF2
#define R_FRNDINT 0xFC
#define R_FRSTOR 0x04
#define R_FSAVE 0x06
#define R_FSCALE 0xFD
#define R_FSETPM 0xE4
#define R_FSQRT 0xFA
#define R_FST 0x02
#define R_FSTCW 0x07
#define R_FSTENV 0x06
#define R_FSTP 0x03
#define R_FSTSW 0x07
#define R_FSTSWAX 0x04 /* sleazy trick to make fltmodrm work */
#define R_FSUB 0x04
#define R_FSUBP 0x05
#define R_FSUBR 0x05
#define R_FSUBRP 0x04
#define R_FTST 0xE4
#define R_FWAIT 0x9B
#define R_FXAM 0xE5
#define R_FXCH 0x01
#define R_FXTRACT 0xF4
#define R_FYL2X 0xF1
#define R_FYL2XP1 0xF9
#define R_FNRSTOR 0x04
#ifdef V386
#define R_FPREM1 0xF5
#define R_FSIN 0xFE
#define R_FCOS 0xFF
#define R_FSINCOS 0xFB
#define R_FUCOM 0x04
#define R_FUCOMP 0x05
#define R_FUCOMPP 0xE9
#endif
|