-
Notifications
You must be signed in to change notification settings - Fork 88
/
Copy pathpentium-instruction-set.txt
1385 lines (1374 loc) · 82.7 KB
/
pentium-instruction-set.txt
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
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
The Complete Pentium Instruction Set Table
(32 Bit Addressing Mode Only)
by Sang Cho
**********************************************
Explanation of the Notation used in this Table
**********************************************
/digit -- A digit between 0 and 7 indicates that the ModR/M byte of the instruction uses
only the r/m (register or memory) operand. The reg field contains the digit
that provides an extension to the instruction's opcode.
/r -- Indicates that the ModR/M byte of the instruction contains both a register operand
and an r/m operand.
cb -- A relative byte offset from the next instruction for JMP, CALL etc.
cw -- A relative word offset from the next instruciton for JMP, CALL etc.
cd -- A relative doubleword offset from the next instruction for JMP, CALL etc.
cp -- An absolute far pointer for JMP, CALL etc.
ib, iw, id
-- 1-byte (ib), 2-byte (iw), or 4-byte (id) immediate operand
+rb, +rw, +rd
-- register code, from 0 through 7, added to an opcode byte.
rb rw rd
----------------------
AL = 0 AX = 0 EAX = 0
CL = 1 CX = 1 ECX = 1
DL = 2 DX = 2 EDX = 2
BL = 3 BX = 3 EBX = 3
AH = 4 SP = 4 ESP = 4
CH = 5 BP = 5 EBP = 5
DH = 6 SI = 6 ESI = 6
BH = 7 DI = 7 EDI = 7
+i -- A number used in floating-point instructions when one of the operands is ST(i) from
the FPU register stack.
rel8 -- A relative address in the range from -128 to 127 bytes from the end of the instruction.
rel16 and rel32
-- A relative address within the same code segment as the instruction assembled.
ptr16:16 and ptr16:32
-- A far pointer, typically in a code segment different from that of the instruction.
r8 -- One of the byte general-purpose registers.
r16 -- One of the word general-purpose registers.
r32 -- One of the doubleword general-purpose registers.
imm8 -- An immediate byte value.
imm16 -- An immediate word value.
imm32 -- An immediate doubleword value.
r/m8 -- A byte general-purpose register, or a byte from memory.
r/m16 -- A word general-purpose register, or a word memory operand.
r/m32 -- A doubleword general-purpose register, or a doubleword memory operand.
m -- A 16- or 32-bit operand in memory.
m8 -- A byte operand in memory, pointed to by the DS:(E)SI or ES:(E)DI registers.
Used with the string instructions and the XLAT instruction.
m16 -- A word operand in memory, pointed to by the DS:(E)SI or ES:(E)DI registers.
Used only with the string instructions.
m32 -- A doubleword operand in memory, pointed to by the DS:(E)SI or ES:(E)DI registers.
Used only with the string instructions.
m64 -- A memory quadword operand in memory. Used only with the CMPXCHG8B instruction.
m16:16, m16:32
-- A memory operand containing a far pointer composed of two numbers.
The number to the left of the colon corresponds to the pointer's segment selector.
The number to the right corresponds to its offset.
m16&32, m16&16, m32&32
-- A memory operand consisting of data item pairs whose
sizes are indicated on the left and the right side of the ampersand.
All memory addressing modes are allowed. The m16&16 and m32&32 operands are used
by the BOUND instruction to provide an operand containing an upper and lower bounds
for array indices. The m16&32 operand is used by LIDT and LGDT to provide
a word with which to load the limit field, and a doubleword with which to load
the base field of the corresponding GDTR and IDTR registers.
moffs8, moffs16, moffs32
-- A simple memory variable (memory offset) of type byte,
word, or doubleword used by some variants of the MOV instruction.
The actual address is given by a simple offset relative to the segment base.
No ModR/M byte is used in the instruction. The number shown with moffs indicates
its size, which is determined by the address-size attribute of the instruction.
Sreg -- A segment register. The segment register bit assignments are ES=0, CS=1, SS=2,
DS=3, FS=4, and GS=5.
m32real, m64real, m80real
-- A single-, double-, and extended-real floating-point operand in memory.
m16int, m32int, m64int
-- A word-, short-, and long-integer floating-point operand in memory.
ST or ST(0)
-- The top element of the FPU register stack.
ST(i) -- The i th element from the top of the FPU register stack. (i = 0 through 7)
mm -- An MMX register. The 64-bit MMX registers are: MM0 through MM7.
mm/m32 -- The low order 32 bits of an MMX register or a 32-bit memory operand.
mm/m64 -- An MMX register or a 64-bit memory operand.
Alphabetical Listing
===============================================================================
Opcode,Data Instruction Explanation
-------------------------------------------------------------------------------
37 AAA ASCII adjust AL after addition
D5 0A AAD ASCII adjust AX before division
D4 0A AAM ASCII adjust AX after multiplication
3F AAS ASCII adjust AL after subtraction
14 ib ADC AL,imm8 Add with carry
15 id ADC EAX,imm32 Add with carry
80 /2 ib ADC r/m8,imm8 Add with carry
81 /2 id ADC r/m32,imm32 Add with carry
83 /2 ib ADC r/m32,imm8 Add with carry
10 /r ADC r/m8,r8 Add with carry
11 /r ADC r/m32,r32 Add with carry
12 /r ADC r8,r/m8 Add with carry
13 /r ADC r32,r/m32 Add with carry
04 ib ADD AL,imm8 Add
05 id ADD EAX,imm32 Add
80 /0 ib ADD r/m8,imm8 Add
81 /0 id ADD r/m32,imm32 Add
83 /0 ib ADD r/m32,imm8 Add
00 /r ADD r/m8,r8 ADD
01 /r ADD r/m32,r32 ADD
02 /r ADD r8,r/m8 ADD
03 /r ADD r32,r/m32 ADD
24 ib AND AL,imm8 AND
25 id AND EAX,imm32 AND
80 /4 ib AND r/m8,imm8 AND
81 /4 id AND r/m32,imm32 AND
83 /4 ib AND r/m32,imm8 AND
20 /r AND r/m8,r8 AND
21 /r AND r/m32,r32 AND
22 /r AND r8,r/m8 AND
23 /r AND r32,r/m32 AND
63 /r ARPL r/m16,r16 Adjust Request Privilege Level of Sel.
62 /r BOUND r32,m32&32 Check Array Index Against Bounds
0F BC /r BSF r32,r/m32 Bit scan forward on r/m32
0F BD /r BSR r32,r/m32 Bit scan reverse on r/m32
0F C8+rd BSWAP r32 Reverses the byte order of a r32
0F A3 /r BT r/m32,r32 Bit Test
0F BA /4 ib BT r/m32,imm8 Bit Test
0F BB /r BTC r/m32,r32 Bit Test and Complement
0F BA /7 ib BTC r/m32,imm8 Bit Test and Complement
0F B3 /r BTR r/m32,r32 Bit Test and Clear
0F BA /6 ib BTR r/m32,imm8 Bit Test and Clear
0F AB /r BTS r/m32,r32 Bit Test and Set
0F BA /5 ib BTS r/m32,imm8 Bit Test and Set
E8 cd CALL rel32 Call near, rel to n.inst
FF /2 CALL r/m32 Call near, abs.ind.add. given in r/m32
9A cp CALL ptr16:32 Call far, abs.add. given in operand
FF /3 CALL m16:32 Call far, abs.ind.add. given in m16:32
98 CBW Convert Byte to Word
99 CWD Convert Word to Doubleword
99 CDQ Convert Doubleword to Quadword
F8 CLC Clear CF flag
FC CLD Clear DF flag
FA CLI Clear interrupt flag
0F 06 CLTS Clear Task-Switched Flag in Control Reg. Zero
F5 CMC Complement CF flag
0F 47 /r CMOVA r32,r/m32 Move if above
0F 43 /r CMOVAE r32,r/m32 Move if above or equal
0F 42 /r CMOVB r32,r/m32 Move if below
0F 46 /r CMOVBE r32,r/m32 Move if below or equal
0F 42 /r CMOVC r32,r/m32 Move if carry
0F 44 /r CMOVE r32,r/m32 Move if equal
0F 4F /r CMOVG r32,r/m32 Move if greater
0F 4D /r CMOVGE r32,r/m32 Move if greater or equal
0F 4C /r CMOVL r32,r/m32 Move if less
0F 4E /r CMOVLE r32,r/m32 Move if less or equal
0F 46 /r CMOVNA r32,r/m32 Move if not above
0F 42 /r CMOVNAE r32,r/m32 Move if not above or equal
0F 43 /r CMOVNB r32,r/m32 Move if not below
0F 47 /r CMOVNBE r32,r/m32 Move if not below or equal
0F 43 /r CMOVNC r32,r/m32 Move if not carry
0F 45 /r CMOVNE r32,r/m32 Move if not equal
0F 4E /r CMOVNG r32,r/m32 Move if not greater
0F 4C /r CMOVNGE r32,r/m32 Move if not greater or equal
0F 4D /r CMOVNL r32,r/m32 Move if not less
0F 4F /r CMOVNLE r32,r/m32 Move if not less or equal
0F 41 /r CMOVNO r32,r/m32 Move if not overflow
0F 4B /r CMOVNP r32,r/m32 Move if not parity
0F 49 /r CMOVNS r32,r/m32 Move if not sign
0F 45 /r CMOVNZ r32,r/m32 Move if not zero
0F 40 /r CMOVO r32,r/m32 Move if overflow
0F 4A /r CMOVP r32,r/m32 Move if parity
0F 4A /r CMOVPE r32,r/m32 Move if parity even
0F 4B /r CMOVPO r32,r/m32 Move if parity odd
0F 48 /r CMOVS r32,r/m32 Move if sign
0F 44 /r CMOVZ r32,r/m32 Move if zero
3C ib CMP AL,imm8 Compare
3D id CMP EAX,imm32 Compare
80 /7 ib CMP r/m8,imm8 Compare
81 /7 id CMP r/m32,imm32 Compare
83 /7 ib CMP r/m32,imm8 Compare
38 /r CMP r/m8,r8 Compare
39 /r CMP r/m32,r32 Compare
3A /r CMP r8,r/m8 Compare
3B /r CMP r32,r/m32 Compare
A6 CMPSB Compare byte at DS:(E)SI with ES:(E)DI
A7 CMPSD Compare dw at DS:(E)SI with ES:(E)DI
0F B0 /r CMPXCHG r/m8,r8 Compare and Exchange
0F B1 /r CMPXCHG r/m32,r32 Compare and Exchange
0F C7 /1 m64 CMPXCHG8B m64 Compare and Exchange
0F A2 CPUID EAX := Processor id.info.
27 DAA Decimal adjust AL after addition
2F DAS Decimal adjust AL after subtraction
FE /1 DEC r/m8 Decrement r/m8 by 1
FF /1 DEC r/m32 Decrement r/m32 by 1
48+rd DEC r32 Decrement r32 by 1
F6 /6 DIV r/m8 Unsigned divide AX by r/m8
F7 /6 DIV r/m16 Unsigned divide DX:AX by r/m16
F7 /6 DIV r/m32 Unsigned divide EDX:EAX by r/m32
0F 77 EMMS Set the FP tag word to empty
C8 iw 00 ENTER imm16,0 Create a stack frame for a procedure
C8 iw 01 ENTER imm16,1 Create a nested stack frame for a proc.
C8 iw ib ENTER imm16,imm8 Create a nested stack frame for a proc.
D9 F0 F2XM1 Replace ST(0) with 2**ST(0) - 1
D9 E1 FABS Replace ST(0) with its absolute value
D8 /0 FADD m32real Add m32real to ST(0) and s.r. in ST(0)
DC /0 FADD m64real Add m64real to ST(0) and s.r.in ST(0)
D8 C0+i FADD ST(0),ST(i) Add ST(0) to ST(i) and s.r.in ST(0)
DC C0+i FADD ST(i),ST(0) Add ST(i) to ST(0) and s.r. in ST(i)
DE C0+i FADDP ST(i),ST(0) Add ST(0) to ST(i), s.r.in ST(i),pop r.stack
DE C1 FADDP Add ST(0) to ST(1), s.r.in ST(1),pop r.stack
DA /0 FIADD m32int Add m32int to ST(0) and s.r.in ST(0)
DE /0 FIADD m16int Add m16int to ST(0) and s.r.in ST(0)
DF /4 FBLD m80bcd Convert m80BCD to real and push
DF /6 FBSTP m80bcd Store ST(0) in m80bcd and pop ST(0)
D9 E0 FCHS Complements sign of ST(0)
9B DB E2 FCLEX Clear f.e.f. after checking for ..
DB E2 FNCLEX Clear f.e.f. without checking for ..
DA C0+i FCMOVB ST(0),ST(i) Move if below
DA C8+i FCMOVE ST(0),ST(i) Move if equal
DA D0+i FCMOVBE ST(0),ST(i) Move if below or equal
DA D8+i FCMOVU ST(0),ST(i) Move if unordered
DB C0+i FCMOVNB ST(0),ST(i) Move if not below
DB C8+i FCMOVNE ST(0),ST(i) Move if not equal
DB D0+i FCMOVNBE ST(0),ST(i) Move if not below or equal
DB D8+i FCMOVNU ST(0),ST(i) Move if not unordered
D8 /2 FCOM m32real Compare ST(0) with m32real.
DC /2 FCOM m64real Compare ST(0) with m64real.
D8 D0+i FCOM ST(i) Compare ST(0) with ST(i).
D8 D1 FCOM Compare ST(0) with ST(1).
D8 /3 FCOMP m32real Compare ST(0) with m32real,pop r.stack.
DC /3 FCOMP m64real Compare ST(0) with m64real,pop r.stack.
D8 D8+i FCOMP ST(i) Compare ST(0) with ST(i), pop
D8 D9 FCOMP Compare ST(0) with ST(1), pop
DE D9 FCOMPP Compare ST(0) with ST(1), pop pop
DB F0+i FCOMI ST,ST(i) Compare ST(0) with ST(i), set status flags
DF F0+i FCOMIP ST,ST(i) Compare ST(0) with ST(i), set s.f. ,pop
DB E8+i FUCOMI ST,ST(i) Compare ST(0) with ST(i), check o.v.set s.f.
DF E8+i FUCOMIP ST,ST(i) Compare ST(0) with ST(i), check ovssf pop
D9 FF FCOS Replace ST(0) with its cosine
D9 F6 FDECSTP Decrement TOP field in FPU status word.
D8 /6 FDIV m32real Divide ST(0) by m32real and s.r.in ST(0)
DC /6 FDIV m64real Divide ST(0) by m64real and s.r.in ST(0)
D8 F0+i FDIV ST(0),ST(i) Divide ST(0) by ST(i) and s.r.in ST(0)
DC F8+i FDIV ST(i),ST(0) Divide ST(i) by ST(0) and s.r.in ST(i)
DE F8+i FDIVP ST(i),ST(0) Divide ST(i) by ST(0), s.r.in ST(i) pop
DE F9 FDIVP Divide ST(1) by ST(0), s.r.in ST(1) pop
DA /6 FIDIV m32int Divide ST(0) by m32int and s.r.in ST(0)
DE /6 FIDIV m16int Divide ST(0) by m64int and s.r.in ST(0)
D8 /7 FDIVR m32real Divide m32real by ST(0) and s.r.in ST(0)
DC /7 FDIVR m64real Divide m64real by ST(0) and s.r.in ST(0)
D8 F8+i FDIVR ST(0),ST(i) Divide ST(i) by ST(0) and s.r.in ST(0)
DC F0+i FDIVR ST(i),ST(0) Divide ST(0) by ST(i) and s.r.in ST(i)
DE F0+i FDIVRP ST(i),ST(0) Divide ST(0) by ST(i), s.r.in ST(i) pop
DE F1 FDIVRP Divide ST(0) by ST(1), s.r.in ST(1) pop
DA /7 FIDIVR m32int Divide m32int by ST(0) and s.r.in ST(0)
DE /7 FIDIVR m16int Divide m64int by ST(0) and s.r.in ST(0)
DD C0+i FFREE ST(i) Sets tag for ST(i) to empty
DE /2 FICOM m16int Compare ST(0) with m16int
DA /2 FICOM m32int Compare ST(0) with m32int
DE /3 FICOMP m16int Compare ST(0) with m16int and pop
DA /3 FICOMP m32int Compare ST(0) with m32int and pop
DF /0 FILD m16int Push m16int
DB /0 FILD m32int Push m32int
DF /5 FILD m64int Push m64int
D9 F7 FINCSTP Increment the TOP field FPU status r.
9B DB E3 FINIT Initialize FPU after ...
DB E3 FNINIT Initialize FPU without ...
DF /2 FIST m16int Store ST(0) in m16int
DB /2 FIST m32int Store ST(0) in m32int
DF /3 FISTP m16int Store ST(0) in m16int and pop
DB /3 FISTP m32int Store ST(0) in m32int and pop
DF /7 FISTP m64int Store ST(0) in m64int and pop
D9 /0 FLD m32real Push m32real
DD /0 FLD m64real Push m64real
DB /5 FLD m80real Push m80real
D9 C0+i FLD ST(i) Push ST(i)
D9 E8 FLD1 Push +1.0
D9 E9 FLDL2T Push log2 10
D9 EA FLDL2E Push log2 e
D9 EB FLDPI Push pi
D9 EC FLDLG2 Push log10 2
D9 ED FLDLN2 Push loge 2
D9 EE FLDZ Push +0.0
D9 /5 FLDCW m2byte Load FPU control word from m2byte
D9 /4 FLDENV m14/28byte Load FPU environment from m14/m28
D8 /1 FMUL m32real Multiply ST(0) by m32real and s.r.in ST(0)
DC /1 FMUL m64real Multiply ST(0) by m64real and s.r.in ST(0)
D8 C8+i FMUL ST(0),ST(i) Multiply ST(0) by ST(i) and s.r.in ST(0)
DC C8+i FMUL ST(i),ST(0) Multiply ST(i) by ST(0) and s.r.in ST(i)
DE C8+i FMULP ST(i),ST(0) Multiply ST(i) by ST(0), s.r.in ST(i) pop
DE C9 FMULP Multiply ST(1) by ST(0), s.r.in ST(1) pop
DA /1 FIMUL m32int Multiply ST(0) by m32int and s.r.in ST(0)
DE /1 FIMUL m16int Multiply ST(0) by m16int and s.r.in ST(0)
D9 D0 FNOP No operation is performed
D9 F3 FPATAN Repalces ST(1) with arctan(ST(1)/ST(0)) pop
D9 F8 FPREM Replaces ST(0) with rem (ST(0)/ST(1))
D9 F5 FPREM1 Replaces ST(0) with IEEE rem(ST(0)/ST(1))
D9 F2 FPTAN Replaces ST(0) with its tangent push 1.0
D9 FC FRNDINT Round ST(0) to an integer
DD /4 FRSTOR m94/108byte Load FPU status from m94 or m108 byte
9B DD /6 FSAVE m94/108byte Store FPU status to m94 or m108
DD /6 FNSAVE m94/108byte Store FPU environment to m94 or m108
D9 FD FSCALE Scale ST(0) by ST(1)
D9 FE FSIN Replace ST(0) with its sine
D9 FB FSINCOS Compute sine and consine of ST(0) s push c
D9 FA FSQRT square root of ST(0)
D9 /2 FST m32real Copy ST(0) to m32real
DD /2 FST m64real Copy ST(0) to m64real
DD D0+i FST ST(i) Copy ST(0) to ST(i)
D9 /3 FSTP m32real Copy ST(0) to m32real and pop
DD /3 FSTP m64real Copy ST(0) to m64real and pop
DB /7 FSTP m80real Copy ST(0) to m80real and pop
DD D8+i FSTP ST(i) Copy ST(0) to ST(i) and pop
9B D9 /7 FSTCW m2byte Store FPU control word
D9 /7 FNSTCW m2byte Store FPU control word without
9B D9 /6 FSTENV m14/28byte Store FPU environment
D9 /6 FNSTENV m14/28byte Store FPU env without
9B DD /7 FSTSW m2byte Store FPU status word at m2byte after
9B DF E0 FSTSW AX Store FPU status word in AX after
DD /7 FNSTSW m2byte Store FPU status word at m2byte without
DF E0 FNSTSW AX Store FPU status word in AX without
D8 /4 FSUB m32real Sub m32real from ST(0) and s.r.in ST(0)
DC /4 FSUB m64real Sub m64real from ST(0) and s.r.in ST(0)
D8 E0+i FSUB ST(0),ST(i) Sub ST(i) from ST(0) and s.r.in ST(0)
DC E8+i FSUB ST(i),ST(0) Sub ST(0) from ST(i) and s.r.in ST(i)
DE E8+i FSUBP ST(i),ST(0) Sub ST(0) from ST(i), s.r.in ST(i) pop
DE E9 FSUBP Sub ST(0) from ST(1), s.r.in ST(1) pop
DA /4 FISUB m32int Sub m32int from ST(0) and s.r.in ST(0)
DE /4 FISUB m16int Sub m16int from ST(0) and s.r.in ST(0)
D8 /5 FSUBR m32real Sub ST(0) from m32real and s.r.in ST(0)
DC /5 FSUBR m64real Sub ST(0) from m64real and s.r.in ST(0)
D8 E8+i FSUBR ST(0),ST(i) Sub ST(0) from ST(i) and s.r.in ST(0)
DC E0+i FSUBR ST(i),ST(0) Sub ST(i) from ST(0) and s.r.in ST(i)
DE E0+i FSUBRP ST(i),ST(0) Sub ST(i) from ST(0), s.r. in ST(i) pop
DE E1 FSUBRP Sub ST(1) from ST(0), s.r.in ST(1) pop
DA /5 FISUBR m32int Sub ST(0) from m32int and s.r.in ST(0)
DE /5 FISUBR m16int Sub ST(0) from m16int and s.r.in ST(0)
D9 E4 FTST Compare ST(0) with 0.0
DD E0+i FUCOM ST(i) Compare ST(0) with ST(i)
DD E1 FUCOM Compare ST(0) with ST(1)
DD E8+i FUCOMP ST(i) Compare ST(0) with ST(i) and pop
DD E9 FUCOMP Compare ST(0) with ST(1) and pop
DA E9 FUCOMPP Compare ST(0) with ST(1) and pop pop
D9 E5 FXAM Classify value or number in ST(0)
D9 C8+i FXCH ST(i) Exchange ST(0) and ST(i)
D9 C9 FXCH Exchange ST(0) and ST(1)
D9 F4 FXTRACT Seperate value in ST(0) exp. and sig.
D9 F1 FYL2X Replace ST(1) with ST(1)*log2ST(0) and pop
D9 F9 FYL2XP1 Replace ST(1) with ST(1)*log2(ST(0)+1) pop
F4 HLT Halt
F6 /7 IDIV r/m8 Divide
F7 /7 IDIV r/m32 Divide
F6 /5 IMUL r/m8 Multiply
F7 /5 IMUL r/m32 Multiply
0F AF /r IMUL r32,r/m32 Multiply
6B /r ib IMUL r32,r/m32,imm8 Multiply
6B /r ib IMUL r32,imm8 Multiply
69 /r id IMUL r32,r/m32,imm32 Multiply
69 /r id IMUL r32,imm32 Multiply
E4 ib IN AL,imm8 Input byte from imm8 I/O port address into AL
E5 ib IN EAX,imm8 Input byte from imm8 I/O port address into EAX
EC IN AL,DX Input byte from I/O port in DX into AL
ED IN EAX,DX Input doubleword from I/O port in DX into EAX
FE /0 INC r/m8 Increment 1
FF /0 INC r/m32 Increment 1
40+rd INC r32 Increment register by 1
6C INS m8 Input byte from I/O(DX) into ES:(E)DI
6D INS m32 Input dw from I/O(DX) into ES:(E)DI
CC INT 3 Interrupt 3--trap to debugger
CD ib INT imm8 Interrupt vector number (imm8)
CE INTO Interrupt 4--if overflow flag is 1
0F 08 INVD Flush internal caches
0F 01 /7 INVLPG m Invalidate TLB Entry for page (m)
CF IRETD Interrupt return(32)
77 cb JA rel8 Jump short if above
73 cb JAE rel8 Jump short if above or equal
76 cb JBE rel8 Jump short if below or equal
72 cb JC rel8 Jump short if carry
E3 cb JECXZ rel8 Jump short if ECX register is 0
74 cb JE rel8 Jump short if equal
7F cb JG rel8 Jump short if greater
7D cb JGE rel8 Jump short if greater or equal
7C cb JL rel8 Jump short if less
7E cb JLE rel8 Jump short if less or equal
75 cb JNE rel8 Jump short if not equal
71 cb JNO rel8 Jump short if not overflow
79 cb JNS rel8 Jump short if not sign
70 cb JO rel8 Jump short if overflow
7A cb JPE rel8 Jump short if parity even
7B cb JPO rel8 Jump short if parity odd
78 cb JS rel8 Jump short if sign
0F 87 cd JA rel32 Jump near if above
0F 83 cd JAE rel32 Jump near if above or equal
0F 82 cd JB rel32 Jump near if below
0F 86 cd JBE rel32 Jump near if below or equal
0F 84 cd JE rel32 Jump near if equal
0F 8F cd JG rel32 Jump near if greater
0F 8D cd JGE rel32 Jump near if greater or equal
0F 8C cd JL rel32 Jump near if less
0F 8E cd JLE rel32 Jump near if less or equal
0F 85 cd JNE rel32 Jump near if not equal
0F 81 cd JNO rel32 Jump near if not overflow
0F 89 cd JNS rel32 Jump near if not sign
0F 80 cd JO rel32 Jump near if overflow
0F 8A cd JPE rel32 Jump near if parity even
0F 8B cd JPO rel32 Jump near if parity odd
0F 88 cd JS rel32 Jump near if sign
EB cb JMP rel8 Jump short, relative,
E9 cd JMP rel32 Jump near, relative,
FF /4 JMP r/m32 Jump near, abs.ind.in r/m32
EA cp JMP ptr16:32 Jump far, abs.add given in operand
FF /r JMP m16:32 Jump far, abs.ind.in m16:32
9F LAHF Load Status Flags into AH
0F 02 /r LAR r32,r/m32 Load Access Rights Byte
C5 /r LDS r32,m16:32 Load DS:r32 with far ptr
8D /r LEA r32,m Load effective address
C9 LEAVE Set ESP to EBP, then pop EBP
C4 /r LES r32,m16:32 Load ES:r32 with far ptr
0F B4 /r LFS r32,m16:32 Load FS:r32 with far ptr
0F B5 /r LGS r32,m16:32 Load GS:r32 with far ptr
0F 01 /2 LGDT m16&32 Load m into GDTR
0F 01 /3 LIDT m16&32 Load m into IDTR
0F 00 /2 LLDT r/m16 Load segment selector r/m16 into LDTR
0F 01 /6 LMSW r/m16 Load r/m16 in machine status word of CR0
F0 LOCK Asserts LOCK signal for duration ..
AC LODS m8 Load byte at address DS:(E)SI into AL
AD LODS m32 Load dword at address DS:(E)SI into EAX
E2 cb LOOP rel8 Dec count;jump if count # 0
E1 cb LOOPE rel8 Dec count;jump if count # 0 and ZF=1
E1 cb LOOPZ rel8 Dec count;jump if count # 0 and ZF=1
E0 cb LOOPNE rel8 Dec count;jump if count # 0 and ZF=0
E0 cb LOOPNZ rel8 Dec count;jump if count # 0 and ZF=0
0F 03 /r LSL r16,r/m16 Load Segment Limit
0F 03 /r LSL r32,r/m32 Load Segment Limit
0F B2 /r LSS r32,m16:32 Load SS:r32 with far ptr
0F 00 /3 LTR r/m16 Load Task Register
88 /r MOV r/m8,r8 Move
89 /r MOV r/m32,r32 Move
8A /r MOV r8,r/m8 Move
8B /r MOV r32,r/m32 Move
8C /r MOV r/m16,Sreg** Move segment register to r/m16
8E /r MOV Sreg,r/m16** Move r/m16 to segment register
A0 MOV AL, moffs8* Move byte at ( seg:offset) to AL
A1 MOV AX, moffs16* Move word at ( seg:offset) to AX
A1 MOV EAX, moffs32* Move dword at ( seg:offset) to EAX
A2 MOV moffs8*,AL Move AL to ( seg:offset)
A3 MOV moffs16*,AX Move AX to ( seg:offset)
A3 MOV moffs32*,EAX Move EAX to ( seg:offset)
B0+rb MOV r8,imm8 Move imm8 to r8
B8+rd MOV r32,imm32 Move imm32 to r32
C6 /0 ib MOV r/m8,imm8 Move imm8 to r/m8
C7 /0 id MOV r/m32,imm32 Move imm32 to r/m32
0F 22 /r MOV CR0, r32 Move r32 to CR0
0F 22 /r MOV CR2, r32 Move r32 to CR2
0F 22 /r MOV CR3, r32 Move r32 to CR3
0F 22 /r MOV CR4, r32 Move r32 to CR4
0F 20 /r MOV r32,CR0 Move CR0 to r32
0F 20 /r MOV r32,CR2 Move CR2 to r32
0F 20 /r MOV r32,CR3 Move CR3 to r32
0F 20 /r MOV r32,CR4 Move CR4 to r32
0F 21 /r MOV r32,DR0-DR7 Move debug register to r32
0F 23 /r MOV DR0-DR7,r32 Move r32 to debug register
0F 6E /r MOVD mm,r/m32 Move doubleword from r/m32 to mm
0F 7E /r MOVD r/m32,mm Move doubleword from mm to r/m32
0F 6F /r MOVQ mm,mm/m64 Move quadword from mm/m64 to mm
0F 7F /r MOVQ mm/m64,mm Move quadword from mm to mm/m64
A4 MOVS m8,m8 Move byte at DS:(E)SI to ES:(E)DI
A5 MOVS m32,m32 Move dword at DS:(E)SI to ES:(E)DI
0F BE /r MOVSX r32,r/m8 Move byte to doubleword, sign-extension
0F BF /r MOVSX r32,r/m16 Move word to doubleword, sign-extension
0F B6 /r MOVZX r32,r/m8 Move byte to doubleword, zero-extension
0F B7 /r MOVZX r32,r/m16 Move word to doubleword, zero-extension
F6 /4 MUL r/m8 Unsigned multiply
F7 /4 MUL r/m32 Unsigned multiply
F6 /3 NEG r/m8 Two's complement negate r/m8
F7 /3 NEG r/m32 Two's complement negate r/m32
90 NOP No operation
F6 /2 NOT r/m8 Reverse each bit of r/m8
F7 /2 NOT r/m32 Reverse each bit of r/m32
0C ib OR AL,imm8 OR
0D id OR EAX,imm32 OR
80 /1 ib OR r/m8,imm8 OR
81 /1 id OR r/m32,imm32 OR
83 /1 ib OR r/m32,imm8 OR
08 /r OR r/m8,r8 OR
09 /r OR r/m32,r32 OR
0A /r OR r8,r/m8 OR
0B /r OR r32,r/m32 OR
E6 ib OUT imm8,AL Output byte in AL to I/O(imm8)
E7 ib OUT imm8,EAX Output dword in EAX to I/O(imm8)
EE OUT DX,AL Output byte in AL to I/O(DX)
EF OUT DX,EAX Output dword in EAX to I/O(DX)
6E OUTS DX,m8 Output byte from DS:(E)SI to I/O(DX)
6F OUTS DX,m32 Output dword from DS:(E)SI to I/O (DX)
0F 63 /r PACKSSWB mm,mm/m64 Pack with Signed Saturation
0F 6B /r PACKSSDW mm,mm/m64 Pack with Signed Saturation
0F 67 /r PACKUSWB mm,mm/m64 Pack with Unsigned Saturation
0F FC /r PADDB mm,mm/m64 Add packed bytes
0F FD /r PADDW mm,mm/m64 Add packed words
0F FE /r PADDD mm,mm/m64 Add packed dwords
0F EC /r PADDSB mm,mm/m64 Add signed packed bytes
0F ED /r PADDSW mm,mm/m64 Add signed packed words
0F DC /r PADDUSB mm,mm/m64 Add unsigned pkd bytes
0F DD /r PADDUSW mm,mm/m64 Add unsigned pkd words
0F DB /r PAND mm,mm/m64 AND quadword from .. to ..
0F DF /r PANDN mm,mm/m64 And qword from .. to NOT qw in mm
0F 74 /r PCMPEQB mm,mm/m64 Packed Compare for Equal
0F 75 /r PCMPEQW mm,mm/m64 Packed Compare for Equal
0F 76 /r PCMPEQD mm,mm/m64 Packed Compare for Equal
0F 64 /r PCMPGTB mm,mm/m64 Packed Compare for GT
0F 65 /r PCMPGTW mm,mm/m64 Packed Compare for GT
0F 66 /r PCMPGTD mm,mm/m64 Packed Compare for GT
0F F5 /r PMADDWD mm,mm/m64 Packed Multiply and Add
0F E5 /r PMULHW mm,mm/m64 Packed Multiply High
0F D5 /r PMULLW mm,mm/m64 Packed Multiply Low
8F /0 POP m32 Pop m32
58+rd POP r32 Pop r32
1F POP DS Pop DS
07 POP ES Pop ES
17 POP SS Pop SS
0F A1 POP FS Pop FS
0F A9 POP GS Pop GS
61 POPAD Pop EDI,... and EAX
9D POPFD Pop Stack into EFLAGS Register
0F EB /r POR mm,mm/m64 OR qword from .. to mm
0F F1 /r PSLLW mm,mm/m64 Packed Shift Left Logical
0F 71 /6 ib PSLLW mm,imm8 Packed Shift Left Logical
0F F2 /r PSLLD mm,mm/m64 Packed Shift Left Logical
0F 72 /6 ib PSLLD mm,imm8 Packed Shift Left Logical
0F F3 /r PSLLQ mm,mm/m64 Packed Shift Left Logical
0F 73 /6 ib PSLLQ mm,imm8 Packed Shift Left Logical
0F E1 /r PSRAW mm,mm/m64 Packed Shift Right Arithmetic
0F 71 /4 ib PSRAW mm,imm8 Packed Shift Right Arithmetic
0F E2 /r PSRAD mm,mm/m64 Packed Shift Right Arithmetic
0F 72 /4 ib PSRAD mm,imm8 Packed Shift Right Arithmetic
0F D1 /r PSRLW mm,mm/m64 Packed Shift Right Logical
0F 71 /2 ib PSRLW mm,imm8 Packed Shift Right Logical
0F D2 /r PSRLD mm,mm/m64 Packed Shift Right Logical
0F 72 /2 ib PSRLD mm,imm8 Packed Shift Right Logical
0F D3 /r PSRLQ mm,mm/m64 Packed Shift Right Logical
0F 73 /2 ib PSRLQ mm,imm8 Packed Shift Right Logical
0F F8 /r PSUBB mm,mm/m64 Packed Subtract
0F F9 /r PSUBW mm,mm/m64 Packed Subtract
0F FA /r PSUBD mm,mm/m64 Packed Subtract
0F E8 /r PSUBSB mm,mm/m64 Packed Subtract with Saturation
0F E9 /r PSUBSW mm,mm/m64 Packed Subtract with Saturation
0F D8 /r PSUBUSB mm,mm/m64 Packed Subtract Unsigned with S.
0F D9 /r PSUBUSW mm,mm/m64 Packed Subtract Unsigned with S.
0F 68 /r PUNPCKHBW mm,mm/m64 Unpack High Packed Data
0F 69 /r PUNPCKHWD mm,mm/m64 Unpack High Packed Data
0F 6A /r PUNPCKHDQ mm,mm/m64 Unpack High Packed Data
0F 60 /r PUNPCKLBW mm,mm/m64 Unpack Low Packed Data
0F 61 /r PUNPCKLWD mm,mm/m64 Unpack Low Packed Data
0F 62 /r PUNPCKLDQ mm,mm/m64 Unpack Low Packed Data
FF /6 PUSH r/m32 Push r/m32
50+rd PUSH r32 Push r32
6A ib PUSH imm8 Push imm8
68 id PUSH imm32 Push imm32
0E PUSH CS Push CS
16 PUSH SS Push SS
1E PUSH DS Push DS
06 PUSH ES Push ES
0F A0 PUSH FS Push FS
0F A8 PUSH GS Push GS
60 PUSHAD Push All g-regs
9C PUSHFD Push EFLAGS
0F EF /r PXOR mm,mm/m64 XOR qword
D0 /2 RCL r/m8,1 Rotate 9 bits left once
D2 /2 RCL r/m8,CL Rotate 9 bits left CL times
C0 /2 ib RCL r/m8,imm8 Rotate 9 bits left imm8 times
D1 /2 RCL r/m32,1 Rotate 33 bits left once
D3 /2 RCL r/m32,CL Rotate 33 bits left CL times
C1 /2 ib RCL r/m32,imm8 Rotate 33 bits left imm8 times
D0 /3 RCR r/m8,1 Rotate 9 bits right once
D2 /3 RCR r/m8,CL Rotate 9 bits right CL times
C0 /3 ib RCR r/m8,imm8 Rotate 9 bits right imm8 times
D1 /3 RCR r/m32,1 Rotate 33 bits right once
D3 /3 RCR r/m32,CL Rotate 33 bits right CL times
C1 /3 ib RCR r/m32,imm8 Rotate 33 bits right imm8 times
D0 /0 ROL r/m8,1 Rotate 8 bits r/m8 left once
D2 /0 ROL r/m8,CL Rotate 8 bits r/m8 left CL times
C0 /0 ib ROL r/m8,imm8 Rotate 8 bits r/m8 left imm8 times
D1 /0 ROL r/m32,1 Rotate 32 bits r/m32 left once
D3 /0 ROL r/m32,CL Rotate 32 bits r/m32 left CL times
C1 /0 ib ROL r/m32,imm8 Rotate 32 bits r/m32 left imm8 times
D0 /1 ROR r/m8,1 Rotate 8 bits r/m8 right once
D2 /1 ROR r/m8,CL Rotate 8 bits r/m8 right CL times
C0 /1 ib ROR r/m8,imm8 Rotate 8 bits r/m16 right imm8 times
D1 /1 ROR r/m32,1 Rotate 32 bits r/m32 right once
D3 /1 ROR r/m32,CL Rotate 32 bits r/m32 right CL times
C1 /1 ib ROR r/m32,imm8 Rotate 32 bits r/m32 right imm8 times
0F 32 RDMSR Read from Model Specific Register
0F 33 RDPMC Read Performance-Monitoring counters
0F 31 RDTSC Read Time-Stamp Counter
F3 6C REP INS m8,DX Input ECX bytes from port DX into ES:[(E)DI]
F3 6D REP INS m32,DX Input ECX dwords from port DX into ES:[(E)DI]
F3 A4 REP MOVS m8,m8 Move ECX bytes from DS:[(E)SI] to ES:[(E)DI]
F3 A5 REP MOVS m32,m32 Move ECX dwords from DS:[(E)SI] to ES:[(E)DI]
F3 6E REP OUTS DX,m8 Output ECX bytes from DS:[(E)SI] to port DX
F3 6F REP OUTS DX,m32 Output ECX dwords from DS:[(E)SI] to port DX
F3 AC REP LODS AL Load ECX bytes from DS:[(E)SI] to AL
F3 AD REP LODS EAX Load ECX dwords from DS:[(E)SI] to EAX
F3 AA REP STOS m8 Fill ECX bytes at ES:[(E)DI] with AL
F3 AB REP STOS m32 Fill ECX dwords at ES:[(E)DI] with EAX
F3 A6 REPE CMPS m8,m8 Find nonmatching bytes in m and m
F3 A7 REPE CMPS m32,m32 Find nonmatching dwords in m and m
F3 AE REPE SCAS m8 Find non-AL byte starting at
F3 AF REPE SCAS m32 Find non-EAX dword starting at
F2 A6 REPNE CMPS m8,m8 Find matching bytes in m and m
F2 A7 REPNE CMPS m32,m32 Find matching dwords in m and m
F2 AE REPNE SCAS m8 Find AL, starting at ES:[(E)DI]
F2 AF REPNE SCAS m32 Find EAX, starting at ES:[(E)DI]
C3 RET Near return
CB RET Far return
C2 iw RET imm16 Near return, pop imm16 bytes from stack
CA iw RET imm16 Far return, pop imm16 bytes from stack
0F AA RSM Resume from System Management
9E SAHF Store AH into Flags
D0 /4 SAL r/m8,1 Shift Arithmetic Left
D2 /4 SAL r/m8,CL Shift Arithmetic Left
C0 /4 ib SAL r/m8,imm8 Shift Arithmetic Left
D1 /4 SAL r/m32,1 Shift Arithmetic Left
D3 /4 SAL r/m32,CL Shift Arithmetic Left
C1 /4 ib SAL r/m32,imm8 Shift Arithmetic Left
D0 /7 SAR r/m8,1 Shift Arithmetic Right
D2 /7 SAR r/m8,CL Shift Arithmetic Right
C0 /7 ib SAR r/m8,imm8 Shift Arithmetic Right
D1 /7 SAR r/m32,1 Shift Arithmetic Right
D3 /7 SAR r/m32,CL Shift Arithmetic Right
C1 /7 ib SAR r/m32,imm8 Shift Arithmetic Right
D0 /4 SHL r/m8,1 Shift Logical Left
D2 /4 SHL r/m8,CL Shift Logical Left
C0 /4 ib SHL r/m8,imm8 Shift Logical Left
D1 /4 SHL r/m32,1 Shift Logical Left
D3 /4 SHL r/m32,CL Shift Logical Left
C1 /4 ib SHL r/m32,imm8 Shift Logical Left
D0 /5 SHR r/m8,1 Shift Logical Right
D2 /5 SHR r/m8,CL Shift Logical Right
C0 /5 ib SHR r/m8,imm8 Shift Logical Right
D1 /5 SHR r/m32,1 Shift Logical Right
D3 /5 SHR r/m32,CL Shift Logical Right
C1 /5 ib SHR r/m32,imm8 Shift Logical Right
1C ib SBB AL,imm8 Subtract with borrow
1D id SBB EAX,imm32 Subtract with borrow
80 /3 ib SBB r/m8,imm8 Subtract with borrow
81 /3 id SBB r/m32,imm32 Subtract with borrow
83 /3 ib SBB r/m32,imm8 Subtract with borrow
18 /r SBB r/m8,r8 Subtract with borrow
19 /r SBB r/m32,r32 Subtract with borrow
1A /r SBB r8,r/m8 Subtract with borrow
1B /r SBB r32,r/m32 Subtract with borrow
AE SCAS m8 Scan String
AF SCAS m32 Scan String
0F 97 /r SETA r/m8 Set byte if above
0F 93 /r SETAE r/m8 Set byte if above or equal
0F 92 /r SETB r/m8 Set byte if below
0F 96 /r SETBE r/m8 Set byte if below or equal
0F 94 /r SETE r/m8 Set byte if equal
0F 9F /r SETG r/m8 Set byte if greater
0F 9D /r SETGE r/m8 Set byte if greater or equal
0F 9C /r SETL r/m8 Set byte if less
0F 9E /r SETLE r/m8 Set byte if less or equal
0F 95 /r SETNE r/m8 Set byte if not equal
0F 91 /r SETNO r/m8 Set byte if not overflow
0F 99 /r SETNS r/m8 Set byte if not sign
0F 90 /r SETO r/m8 Set byte if overflow
0F 9A /r SETPE r/m8 Set byte if parity even
0F 9B /r SETPO r/m8 Set byte if parity odd
0F 98 /r SETS r/m8 Set byte if sign
0F 01 /0 SGDT m Store GDTR to m
0F 01 /1 SIDT m Store IDTR to m
0F A4 /r ib SHLD r/m32,r32,imm8 Double Precision Shift Left
0F A5 /r SHLD r/m32,r32,CL Double Precision Shift Left
0F AC /r ib SHRD r/m32,r32,imm8 Double Precision Shift Right
0F AD /r SHRD r/m32,r32,CL Double Precision Shift Right
0F 00 /0 SLDT r/m32 Store Local Descriptor Table Register
0F 01 /4 SMSW r/m32 Store Machine Status Word
F9 STC Set Carry Flag
FD STD Set Direction Flag
FB STI Set Interrup Flag
AA STOS m8 Store String
AB STOS m32 Store String
0F 00 /1 STR r/m16 Store Task Register
2C ib SUB AL,imm8 Subtract
2D id SUB EAX,imm32 Subtract
80 /5 ib SUB r/m8,imm8 Subtract
81 /5 id SUB r/m32,imm32 Subtract
83 /5 ib SUB r/m32,imm8 Subtract
28 /r SUB r/m8,r8 Subtract
29 /r SUB r/m32,r32 Subtract
2A /r SUB r8,r/m8 Subtract
2B /r SUB r32,r/m32 Subtract
A8 ib TEST AL,imm8 Logical Compare
A9 id TEST EAX,imm32 Logical Compare
F6 /0 ib TEST r/m8,imm8 Logical Compare
F7 /0 id TEST r/m32,imm32 Logical Compare
84 /r TEST r/m8,r8 Logical Compare
85 /r TEST r/m16,r16 Logical Compare
85 /r TEST r/m32,r32 Logical Compare
0F 0B UD2 Undifined Instruction
0F 00 /4 VERR r/m16 Verify a Segment for Reading
0F 00 /5 VERW r/m16 Verify a Segment for Writing
9B WAIT Wait
9B FWAIT Wait
0F 09 WBINVD Write Back and Invalidate Cache
0F 30 WRMSR Write to Model Specific Register
0F C0 /r XADD r/m8,r8 Exchange and Add
0F C1 /r XADD r/m16,r16 Exchange and Add
0F C1 /r XADD r/m32,r32 Exchange and Add
90+rd XCHG EAX,r32 Exchange r32 with EAX
90+rd XCHG r32,EAX Exchange EAX with r32
86 /r XCHG r/m8,r8 Exchange byte
86 /r XCHG r8,r/m8 Exchange byte
87 /r XCHG r/m32,r32 Exchange doubleword
87 /r XCHG r32,r/m32 Exchange doubleword
D7 XLAT m8 Table Look-up Translation
34 ib XOR AL,imm8 Logical Exclusive OR
35 id XOR EAX,imm32 Logical Exclusive OR
80 /6 ib XOR r/m8,imm8 Logical Exclusive OR
81 /6 id XOR r/m32,imm32 Logical Exclusive OR
83 /6 ib XOR r/m32,imm8 Logical Exclusive OR
30 /r XOR r/m8,r8 Logical Exclusive OR
31 /r XOR r/m32,r32 Logical Exclusive OR
32 /r XOR r8,r/m8 Logical Exclusive OR
33 /r XOR r32,r/m32 Logical Exclusive OR
Opcode ordered Listing
===============================================================================
Opcode,Data Instruction Explanation
-------------------------------------------------------------------------------
00 /r ADD r/m8,r8 ADD
01 /r ADD r/m32,r32 ADD
02 /r ADD r8,r/m8 ADD
03 /r ADD r32,r/m32 ADD
04 ib ADD AL,imm8 Add
05 id ADD EAX,imm32 Add
06 PUSH ES Push ES
07 POP ES Pop ES
08 /r OR r/m8,r8 OR
09 /r OR r/m32,r32 OR
0A /r OR r8,r/m8 OR
0B /r OR r32,r/m32 OR
0C ib OR AL,imm8 OR
0D id OR EAX,imm32 OR
0E PUSH CS Push CS
0F 00 /0 SLDT r/m32 Store Local Descriptor Table Register
0F 00 /1 STR r/m16 Store Task Register
0F 00 /2 LLDT r/m16 Load segment selector r/m16 into LDTR
0F 00 /3 LTR r/m16 Load Task Register
0F 00 /4 VERR r/m16 Verify a Segment for Reading
0F 00 /5 VERW r/m16 Verify a Segment for Writing
0F 01 /0 SGDT m Store GDTR to m
0F 01 /1 SIDT m Store IDTR to m
0F 01 /2 LGDT m16&32 Load m into GDTR
0F 01 /3 LIDT m16&32 Load m into IDTR
0F 01 /4 SMSW r/m32 Store Machine Status Word
0F 01 /6 LMSW r/m16 Load r/m16 in machine status word of CR0
0F 01 /7 INVLPG m Invalidate TLB Entry for page (m)
0F 02 /r LAR r32,r/m32 Load Access Rights Byte
0F 03 /r LSL r16,r/m16 Load Segment Limit
0F 03 /r LSL r32,r/m32 Load Segment Limit
0F 06 CLTS Clear Task-Switched Flag in Control Reg. Zero
0F 08 INVD Flush internal caches
0F 09 WBINVD Write Back and Invalidate Cache
0F 0B UD2 Undifined Instruction
0F 20 /r MOV r32,CR0 Move CR0 to r32
0F 20 /r MOV r32,CR2 Move CR2 to r32
0F 20 /r MOV r32,CR3 Move CR3 to r32
0F 20 /r MOV r32,CR4 Move CR4 to r32
0F 21 /r MOV r32,DR0-DR7 Move debug register to r32
0F 22 /r MOV CR0, r32 Move r32 to CR0
0F 22 /r MOV CR2, r32 Move r32 to CR2
0F 22 /r MOV CR3, r32 Move r32 to CR3
0F 22 /r MOV CR4, r32 Move r32 to CR4
0F 23 /r MOV DR0-DR7,r32 Move r32 to debug register
0F 30 WRMSR Write to Model Specific Register
0F 31 RDTSC Read Time-Stamp Counter
0F 32 RDMSR Read from Model Specific Register
0F 33 RDPMC Read Performance-Monitoring counters
0F 40 /r CMOVO r32,r/m32 Move if overflow
0F 41 /r CMOVNO r32,r/m32 Move if not overflow
0F 42 /r CMOVB r32,r/m32 Move if below
0F 42 /r CMOVC r32,r/m32 Move if carry
0F 42 /r CMOVNAE r32,r/m32 Move if not above or equal
0F 43 /r CMOVAE r32,r/m32 Move if above or equal
0F 43 /r CMOVNB r32,r/m32 Move if not below
0F 43 /r CMOVNC r32,r/m32 Move if not carry
0F 44 /r CMOVE r32,r/m32 Move if equal
0F 44 /r CMOVZ r32,r/m32 Move if zero
0F 45 /r CMOVNE r32,r/m32 Move if not equal
0F 45 /r CMOVNZ r32,r/m32 Move if not zero
0F 46 /r CMOVBE r32,r/m32 Move if below or equal
0F 46 /r CMOVNA r32,r/m32 Move if not above
0F 47 /r CMOVA r32,r/m32 Move if above
0F 47 /r CMOVNBE r32,r/m32 Move if not below or equal
0F 48 /r CMOVS r32,r/m32 Move if sign
0F 49 /r CMOVNS r32,r/m32 Move if not sign
0F 4A /r CMOVP r32,r/m32 Move if parity
0F 4A /r CMOVPE r32,r/m32 Move if parity even
0F 4B /r CMOVNP r32,r/m32 Move if not parity
0F 4B /r CMOVPO r32,r/m32 Move if parity odd
0F 4C /r CMOVL r32,r/m32 Move if less
0F 4C /r CMOVNGE r32,r/m32 Move if not greater or equal
0F 4D /r CMOVGE r32,r/m32 Move if greater or equal
0F 4D /r CMOVNL r32,r/m32 Move if not less
0F 4E /r CMOVLE r32,r/m32 Move if less or equal
0F 4E /r CMOVNG r32,r/m32 Move if not greater
0F 4F /r CMOVG r32,r/m32 Move if greater
0F 4F /r CMOVNLE r32,r/m32 Move if not less or equal
0F 60 /r PUNPCKLBW mm,mm/m64 Unpack Low Packed Data
0F 61 /r PUNPCKLWD mm,mm/m64 Unpack Low Packed Data
0F 62 /r PUNPCKLDQ mm,mm/m64 Unpack Low Packed Data
0F 63 /r PACKSSWB mm,mm/m64 Pack with Signed Saturation
0F 64 /r PCMPGTB mm,mm/m64 Packed Compare for GT
0F 65 /r PCMPGTW mm,mm/m64 Packed Compare for GT
0F 66 /r PCMPGTD mm,mm/m64 Packed Compare for GT
0F 67 /r PACKUSWB mm,mm/m64 Pack with Unsigned Saturation
0F 68 /r PUNPCKHBW mm,mm/m64 Unpack High Packed Data
0F 69 /r PUNPCKHWD mm,mm/m64 Unpack High Packed Data
0F 6A /r PUNPCKHDQ mm,mm/m64 Unpack High Packed Data
0F 6B /r PACKSSDW mm,mm/m64 Pack with Signed Saturation
0F 6E /r MOVD mm,r/m32 Move doubleword from r/m32 to mm
0F 6F /r MOVQ mm,mm/m64 Move quadword from mm/m64 to mm
0F 71 /2 ib PSRLW mm,imm8 Packed Shift Right Logical
0F 71 /4 ib PSRAW mm,imm8 Packed Shift Right Arithmetic
0F 71 /6 ib PSLLW mm,imm8 Packed Shift Left Logical
0F 72 /2 ib PSRLD mm,imm8 Packed Shift Right Logical
0F 72 /4 ib PSRAD mm,imm8 Packed Shift Right Arithmetic
0F 72 /6 ib PSLLD mm,imm8 Packed Shift Left Logical
0F 73 /2 ib PSRLQ mm,imm8 Packed Shift Right Logical
0F 73 /6 ib PSLLQ mm,imm8 Packed Shift Left Logical
0F 74 /r PCMPEQB mm,mm/m64 Packed Compare for Equal
0F 75 /r PCMPEQW mm,mm/m64 Packed Compare for Equal
0F 76 /r PCMPEQD mm,mm/m64 Packed Compare for Equal
0F 77 EMMS Set the FP tag word to empty
0F 7E /r MOVD r/m32,mm Move doubleword from mm to r/m32
0F 7F /r MOVQ mm/m64,mm Move quadword from mm to mm/m64
0F 80 cd JO rel32 Jump near if overflow
0F 81 cd JNO rel32 Jump near if not overflow
0F 82 cd JB rel32 Jump near if below
0F 83 cd JAE rel32 Jump near if above or equal
0F 84 cd JE rel32 Jump near if equal
0F 85 cd JNE rel32 Jump near if not equal
0F 86 cd JBE rel32 Jump near if below or equal
0F 87 cd JA rel32 Jump near if above
0F 88 cd JS rel32 Jump near if sign
0F 89 cd JNS rel32 Jump near if not sign
0F 8A cd JPE rel32 Jump near if parity even
0F 8B cd JPO rel32 Jump near if parity odd
0F 8C cd JL rel32 Jump near if less
0F 8D cd JGE rel32 Jump near if greater or equal
0F 8E cd JLE rel32 Jump near if less or equal
0F 8F cd JG rel32 Jump near if greater
0F 90 /r SETO r/m8 Set byte if overflow
0F 91 /r SETNO r/m8 Set byte if not overflow
0F 92 /r SETB r/m8 Set byte if below
0F 93 /r SETAE r/m8 Set byte if above or equal
0F 94 /r SETE r/m8 Set byte if equal
0F 95 /r SETNE r/m8 Set byte if not equal
0F 96 /r SETBE r/m8 Set byte if below or equal
0F 97 /r SETA r/m8 Set byte if above
0F 98 /r SETS r/m8 Set byte if sign
0F 99 /r SETNS r/m8 Set byte if not sign
0F 9A /r SETPE r/m8 Set byte if parity even
0F 9B /r SETPO r/m8 Set byte if parity odd
0F 9C /r SETL r/m8 Set byte if less
0F 9D /r SETGE r/m8 Set byte if greater or equal
0F 9E /r SETLE r/m8 Set byte if less or equal
0F 9F /r SETG r/m8 Set byte if greater
0F A0 PUSH FS Push FS
0F A1 POP FS Pop FS
0F A2 CPUID EAX := Processor id.info.
0F A3 /r BT r/m32,r32 Bit Test
0F A4 /r ib SHLD r/m32,r32,imm8 Double Precision Shift Left
0F A5 /r SHLD r/m32,r32,CL Double Precision Shift Left
0F A8 PUSH GS Push GS
0F A9 POP GS Pop GS
0F AA RSM Resume from System Management
0F AB /r BTS r/m32,r32 Bit Test and Set
0F AC /r ib SHRD r/m32,r32,imm8 Double Precision Shift Right
0F AD /r SHRD r/m32,r32,CL Double Precision Shift Right
0F AF /r IMUL r32,r/m32 Multiply
0F B0 /r CMPXCHG r/m8,r8 Compare and Exchange
0F B1 /r CMPXCHG r/m32,r32 Compare and Exchange
0F B2 /r LSS r32,m16:32 Load SS:r32 with far ptr
0F B3 /r BTR r/m32,r32 Bit Test and Clear
0F B4 /r LFS r32,m16:32 Load FS:r32 with far ptr
0F B5 /r LGS r32,m16:32 Load GS:r32 with far ptr
0F B6 /r MOVZX r32,r/m8 Move byte to doubleword, zero-extension
0F B7 /r MOVZX r32,r/m16 Move word to doubleword, zero-extension
0F BA /4 ib BT r/m32,imm8 Bit Test
0F BA /5 ib BTS r/m32,imm8 Bit Test and Set
0F BA /6 ib BTR r/m32,imm8 Bit Test and Clear
0F BA /7 ib BTC r/m32,imm8 Bit Test and Complement
0F BB /r BTC r/m32,r32 Bit Test and Complement
0F BC /r BSF r32,r/m32 Bit scan forward on r/m32
0F BD /r BSR r32,r/m32 Bit scan reverse on r/m32
0F BE /r MOVSX r32,r/m8 Move byte to doubleword, sign-extension
0F BF /r MOVSX r32,r/m16 Move word to doubleword, sign-extension
0F C0 /r XADD r/m8,r8 Exchange and Add
0F C1 /r XADD r/m16,r16 Exchange and Add
0F C1 /r XADD r/m32,r32 Exchange and Add
0F C7 /1 m64 CMPXCHG8B m64 Compare and Exchange
0F C8+rd BSWAP r32 Reverses the byte order of a r32
0F D1 /r PSRLW mm,mm/m64 Packed Shift Right Logical
0F D2 /r PSRLD mm,mm/m64 Packed Shift Right Logical
0F D3 /r PSRLQ mm,mm/m64 Packed Shift Right Logical
0F D5 /r PMULLW mm,mm/m64 Packed Multiply Low
0F D8 /r PSUBUSB mm,mm/m64 Packed Subtract Unsigned with S.
0F D9 /r PSUBUSW mm,mm/m64 Packed Subtract Unsigned with S.
0F DB /r PAND mm,mm/m64 AND quadword from .. to ..
0F DC /r PADDUSB mm,mm/m64 Add unsigned pkd bytes
0F DD /r PADDUSW mm,mm/m64 Add unsigned pkd words
0F DF /r PANDN mm,mm/m64 And qword from .. to NOT qw in mm
0F E1 /r PSRAW mm,mm/m64 Packed Shift Right Arithmetic
0F E2 /r PSRAD mm,mm/m64 Packed Shift Right Arithmetic
0F E5 /r PMULHW mm,mm/m64 Packed Multiply High
0F E8 /r PSUBSB mm,mm/m64 Packed Subtract with Saturation
0F E9 /r PSUBSW mm,mm/m64 Packed Subtract with Saturation
0F EB /r POR mm,mm/m64 OR qword from .. to mm
0F EC /r PADDSB mm,mm/m64 Add signed packed bytes
0F ED /r PADDSW mm,mm/m64 Add signed packed words
0F EF /r PXOR mm,mm/m64 XOR qword
0F F1 /r PSLLW mm,mm/m64 Packed Shift Left Logical
0F F2 /r PSLLD mm,mm/m64 Packed Shift Left Logical
0F F3 /r PSLLQ mm,mm/m64 Packed Shift Left Logical
0F F5 /r PMADDWD mm,mm/m64 Packed Multiply and Add
0F F8 /r PSUBB mm,mm/m64 Packed Subtract
0F F9 /r PSUBW mm,mm/m64 Packed Subtract
0F FA /r PSUBD mm,mm/m64 Packed Subtract
0F FC /r PADDB mm,mm/m64 Add packed bytes
0F FD /r PADDW mm,mm/m64 Add packed words
0F FE /r PADDD mm,mm/m64 Add packed dwords
10 /r ADC r/m8,r8 Add with carry
11 /r ADC r/m32,r32 Add with carry
12 /r ADC r8,r/m8 Add with carry
13 /r ADC r32,r/m32 Add with carry
14 ib ADC AL,imm8 Add with carry
15 id ADC EAX,imm32 Add with carry
16 PUSH SS Push SS
17 POP SS Pop SS
18 /r SBB r/m8,r8 Subtract with borrow
19 /r SBB r/m32,r32 Subtract with borrow
1A /r SBB r8,r/m8 Subtract with borrow
1B /r SBB r32,r/m32 Subtract with borrow
1C ib SBB AL,imm8 Subtract with borrow
1D id SBB EAX,imm32 Subtract with borrow
1E PUSH DS Push DS
1F POP DS Pop DS
20 /r AND r/m8,r8 AND
21 /r AND r/m32,r32 AND
22 /r AND r8,r/m8 AND
23 /r AND r32,r/m32 AND
24 ib AND AL,imm8 AND
25 id AND EAX,imm32 AND
26 ES: Segment overide prefix
27 DAA Decimal adjust AL after addition
28 /r SUB r/m8,r8 Subtract
29 /r SUB r/m32,r32 Subtract
2A /r SUB r8,r/m8 Subtract
2B /r SUB r32,r/m32 Subtract
2C ib SUB AL,imm8 Subtract
2D id SUB EAX,imm32 Subtract
2E CS: Segment overide prefix
2F DAS Decimal adjust AL after subtraction
30 /r XOR r/m8,r8 Logical Exclusive OR
31 /r XOR r/m32,r32 Logical Exclusive OR
32 /r XOR r8,r/m8 Logical Exclusive OR
33 /r XOR r32,r/m32 Logical Exclusive OR
34 ib XOR AL,imm8 Logical Exclusive OR
35 id XOR EAX,imm32 Logical Exclusive OR
36 SS: Segment overide prefix
37 AAA ASCII adjust AL after addition
38 /r CMP r/m8,r8 Compare
39 /r CMP r/m32,r32 Compare
3A /r CMP r8,r/m8 Compare
3B /r CMP r32,r/m32 Compare
3C ib CMP AL,imm8 Compare
3D id CMP EAX,imm32 Compare
3E DS: Segment overide prefix
3F AAS ASCII adjust AL after subtraction
40+rd INC r32 Increment register by 1
48+rd DEC r32 Decrement r32 by 1
50+rd PUSH r32 Push r32
58+rd POP r32 Pop r32
60 PUSHAD Push All g-regs
61 POPAD Pop EDI,... and EAX
62 /r BOUND r32,m32&32 Check Array Index Against Bounds
63 /r ARPL r/m16,r16 Adjust Request Privilege Level of Sel.
64 FS: Segment overide prefix
65 GS: Segment overide prefix
66 Opsize: Operand size overide prefix