summaryrefslogtreecommitdiffstats
path: root/private/sdktools/masm/asmopcod.h
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