home *** CD-ROM | disk | FTP | other *** search
/ The Unsorted BBS Collection / thegreatunsorted.tar / thegreatunsorted / programming / misc_programming / opcodes.lst < prev    next >
File List  |  1997-06-29  |  259KB  |  10,228 lines

  1. OPCODES LIST            Release 54        Last change 29jun97
  2.  
  3. ------------------  OPCODE.LST    ----------------------------
  4. This is DOC 'bout undocument command and document command
  5. of any last processors. And 'bout some registers and
  6. Chips specific stuffs.
  7. ------------------------------------------------------------
  8.  (C) (P) Potemkin's Hackers Group 1994,1995,1996
  9. ------------------------------------------------------------
  10. Revision 2.20b                   10 Nov 1996
  11. ------------------------------------------------------------
  12. All Your messages send to ->
  13. E-mail: root@aleste.misa.ac.ru
  14. AirMail:
  15.     111538 RUSSIA,    Moscow
  16.     P.O.        box 430.
  17.     Potemkin's Hackers Group (PHG)
  18. -------------------------------------------------------------
  19. [New In Revision 2.00]
  20.  
  21.   o  MMX instruction set
  22.   o  Undefined Instruction  (UD,UD2)
  23.   o  Story About Undocument Flags
  24.   o  AMD Am5k86 MSRs
  25.   o  News in CPUID for AMD K5/Intel Pentium Pro
  26.   o  CR4 Update                    ... and more
  27. --------------------------------------------------------------
  28.  
  29. ----------O-AAA------------------------------------
  30. OPCODE AAA   -     ASCII adjust AX after addition
  31.  
  32. CPU:  8086+
  33. Type of Instruction: User
  34.  
  35. Instruction:  AAA   ; (no operands)
  36.  
  37. Description:
  38.     IF ((( AL and 0FH ) > 9 ) or (AF==1)
  39.     THEN {
  40.         IF CPU<286 THEN {  AL <- AL+6 }
  41.                ELSE {  AX <- AX+6 }
  42.         AH <- AH+1
  43.         CF <- 1
  44.         AF <- 1
  45.     } ELSE {
  46.         CF <- 0
  47.         AF <- 0
  48.     }
  49.     AL <- AL and 0Fh
  50.  
  51.  
  52. Note: This istruction incorrectly documented in Intel's materials.
  53.       See description field.
  54.  
  55. Flags Affected: AF,CF        (modified)
  56.         OF,SF,ZF,PF (undefined)
  57.  
  58. Faults:
  59.     RM    PM    V86    VME
  60.     None
  61.  
  62. CPU mode: RM,PM,VM,SMM
  63.  
  64. +++++++++++++++++++++++
  65. Physical Form:
  66. COP (Code of Operation)     : 37H
  67.  
  68. Clocks:
  69.         AAA
  70. 8086:        4
  71. 8088:        4
  72. 80186:        8
  73. 80286:        3
  74. 80386:        4
  75. i486:        3
  76. Pentium:    3
  77.  
  78. Cx486SLC:    4
  79. Cx486DX:    4
  80. IBM 486BL3X:    4
  81. UMC U5S:    1
  82. ----------O-AAD------------------------------------
  83. OPCODE AAD    - ASCII adjust AX before Division
  84.  
  85. CPU:  8086+
  86. Type of Instruction: User
  87.  
  88. Instruction:  AAD basen
  89.  
  90. Description:
  91.         AL <- (AH*basen) + AL
  92.         AH <- 0
  93.  
  94.  
  95. Flags Affected: SF,ZF,PF    (modified)
  96.         OF,AF,CF    (undefined)
  97.  
  98. Faults:
  99.     RM    PM    V86    VME    SMM
  100.     None
  101.  
  102. CPU mode: RM,PM,VM,SMM
  103.  
  104. Note:    AAD    without operands means AAD with operand 0AH.
  105.  
  106. Note: NECs understand only AAD 0AH form.
  107.  
  108. +++++++++++++++++++++++
  109.  
  110. Physical Form: AAD imm8
  111.  
  112. COP (Code of Operation)     : D5H    imm8
  113.  
  114. Clocks:        AAD 0AH
  115. 8086:        60
  116. 80186:        15
  117. 80286:        14
  118. 80386:        19
  119. i486:        14
  120. Pentium:    10
  121.  
  122. Cx486SLC:    4
  123. Cx486DX:    4
  124.  
  125. IBM 486BL3X:    15
  126. UMC    U5S:    11
  127. ----------O-AAM------------------------------------
  128. OPCODE AAM    - ASCII adjust AX after Multiply
  129.  
  130. CPU:  8086+
  131. Type of Instruction: User
  132.  
  133. Instruction:  AAM basen
  134.  
  135. Description:
  136.         AH <- AL  / basen
  137.         AL <- AL MOD basen
  138.  
  139.  
  140. Flags Affected: SF,ZF,PF    (modified)
  141.         OF,AF,CF    (undefined)
  142.  
  143. Faults:
  144.     RM    PM    V86    VME    SMM
  145.     None
  146. CPU mode: RM,PM,VM,SMM
  147.  
  148. Note:    AAM    without operands means AAM with operand 0AH.
  149.  
  150. WARNING: NECs understand only AAM 0Ah form.
  151.  
  152. +++++++++++++++++++++++
  153.  
  154. Physical Form: AAM imm8
  155.  
  156. COP (Code of Operation)     : D4H    imm8
  157.  
  158. Clocks:        AAM 0AH
  159. 8086:        83
  160. 80186:        19
  161. 80286:        16
  162. 80386:        17
  163. i486:        15
  164. Pentium:    18
  165.  
  166. Cx486SLC:    16
  167. Cx486DX:    16
  168.  
  169. IBM 486BL3X:    17
  170. UMC    U5S:    12
  171. ----------O-ADD4S----------------------------------
  172. OPCODE ADD4S  -     Addition for packed BCD strings
  173.  
  174.  
  175. CPU: all NECs  V-series
  176. Type of Instruction: User
  177.  
  178. Instruction:  ADD4S
  179.  
  180. Description:
  181.     BCD STRING (ADDRESS=ES:DI,LENGTH=CL) <-
  182.       BCD STRING (ADDRESS=DS:SI,LENGTH=CL) +
  183.       BCD STRING (ADDRESS=ES:DI,LENGTH=CL);
  184.  
  185. Note:    si,di, other registers not changed
  186.  
  187. Flags Affected: OF,CF,ZF
  188.     ;;  ZF set if both strings are zeros.
  189.     ;;  CF,OF set as result of operation with most
  190.     ;;  signification BCDs.
  191. CPU mode: RM
  192.  
  193. +++++++++++++++++++++++
  194. Physical Form: ADD4S
  195. COP (Code of Operation)     : 0FH 20H
  196.  
  197. Clocks:        ADD4S
  198. NEC V20:    ~19*(CL/2)+7
  199. ----------O-BOUND----------------------------------
  200. OPCODE BOUND    -  Chack Array Index Against Bounds
  201.  
  202. CPU:  80186+,NECs
  203. Type of Instruction: User - HLL support
  204.  
  205. Instruction:  BOUND index,bound_array
  206.  
  207. Description:
  208.         IF (index < (opsize ptr [bound_array]))
  209.            OR
  210.            (index > (opsize ptr [bound_array+opsize]))
  211.         THEN  INT 5;
  212.  
  213.  
  214. Flags Affected: No Flags Affected
  215. CPU mode: RM,PM,VM,SMM
  216.  
  217. Faults:
  218.     RM    PM    V86    VME    SMM
  219.         #GP(0)                if result is nonwritable seg.
  220.         #GP(0)                illegal memory operand
  221.                         in CS..GS (exc. SS)
  222.         #SS(0)                illegal memory operand in SS
  223.         #PF    #PF
  224.     #UD    #UD    #UD            if 2nd operand is register
  225.     #13                    if any part of operand lie
  226.                         outside of 0..FFFFh
  227.         #AC    #AC            if CPL=3 and enable AC.
  228.  
  229.  
  230. Note:     (186s&NECs) saved CS:IP BOUND interrupt as pointer to following
  231.       instruction that self.
  232.      (286+) saved as pointer to BOUND instruction.
  233.  
  234.  
  235.  
  236. +++++++++++++++++++++++
  237.  
  238. Physical Form: BOUND reg16,mem32
  239.            BOUND reg32,mem64
  240.  
  241. COP (Code of Operation)     : 62H    Postbyte
  242. Note: for 32bit op. add Pfix 66h if in 16bit mode
  243.  
  244. Clocks:        BOUND reg16,mem16
  245.         In Range    Out Range
  246. 80186:                33-35
  247. 80286:        13        int+13
  248. 80386:        10
  249. i486:        7
  250. Pentium:    8        int+32
  251.  
  252. Cx486SLC:    11        int+11
  253. Cx486DX:    11        int+11
  254. ----------O-BRKCS----------------------------------
  255. OPCODE BRKCS  -     Break with Contex Switch
  256.  
  257. CPU:  NEC V25,V35,V25 Plus,V35 Plus,V25 Software Guard
  258. Type of Instruction: System
  259.  
  260. Instruction:  BRKCS  bank
  261.  
  262. Description:
  263.     Perform a High-Speed Software Interrupt with contex-switch to
  264.     register bank indicated by the lower 3-bits of 'bank'.
  265.  
  266.  
  267. Info:    NEC V25/V35/V25 Plus/V35 Plus Bank System
  268.  
  269.     This Chips have     8 32bytes register banks, which placed in
  270.     Internal chip RAM by addresses:
  271.     xxE00h..xxE1Fh Bank 0
  272.     xxE20h..xxE3Fh Bank 1
  273.        .........
  274.     xxEC0h..xxEDFh Bank 6
  275.     xxEE0h..xxEFFh Bank 7
  276.     xxF00h..xxFFFh Special Functions Register
  277.     Where xx is Value of IDB register.
  278.     IBD is Byte Register contained Internal data area base
  279.     IBD addresses is FFFFFh and xxFFFh where xx is data in IBD.
  280.  
  281.  
  282.  
  283.     Format of Bank:
  284.     +0    Reserved
  285.     +2    Vector PC
  286.     +4    Save   PSW
  287.     +6    Save   PC
  288.     +8    DS0        ;DS
  289.     +A    SS        ;SS
  290.     +C    PS        ;CS
  291.     +E    DS1        ;ES
  292.     +10    IY        ;DI
  293.     +11    IX        ;SI
  294.     +14    BP        ;BP
  295.     +16    SP        ;SP
  296.     +18    BW        ;BX
  297.     +1A    DW        ;DX
  298.     +1C    CW        ;CX
  299.     +1E    AW        ;AX
  300.  
  301.     Format of V25 etc. PSW (FLAGS):
  302.     Bit    Description
  303.     15    1
  304.     14    RB2 \
  305.     13    RB1  >    Current Bank Number
  306.     12    RB0 /
  307.     11    V    ;OF
  308.     10    DIR    ;DF
  309.     9    IE    ;IF
  310.     8    BRK    ;TF
  311.     7    S    ;SF
  312.     6    Z    ;ZF
  313.     5    F1    General Purpose user flag #1
  314.             (accessed by Flag Special Function Register)
  315.     4    AC    ;AF
  316.     3    F0    General purpose user flag #0
  317.             (accessed by Flag Special Function Register)
  318.     2    P    ;PF
  319.     1    BRKI    I/O Trap Enable Flag
  320.     0    CY    ;CF
  321.  
  322. Flags Affected:     None
  323. CPU mode: RM
  324.  
  325. +++++++++++++++++++++++
  326. Physical Form:    BRKCS reg16
  327. COP (Code of Operation)     : 0Fh 2Dh <1111 1RRR>
  328.  
  329. Clocks:     15
  330. ----------O-BRKEM----------------------------------
  331. OPCODE BRKEM  -     Break for Emulation
  332.  
  333.  
  334. CPU: NEC/Sony V20/V30/V40/V50
  335. Type of Instruction: System
  336.  
  337. Instruction:  BRKEM  intnum
  338.  
  339. Description:
  340.         PUSH    FLAGS
  341.         PUSH    CS
  342.         PUSH    IP
  343.         MOV    CS,0:[intnum*4+2]
  344.         MOV    IP,0:[intnum*4]
  345.         MD <- 0;    // Enable 8080 emulation
  346.  
  347.  
  348. Note:    BRKEM instruction do software interrupt and then New CS,IP loaded
  349.     it switch to 8080 mode i.e. CPU will execute 8080 code.
  350.     Mapping Table of Registers in 8080 Mode
  351.     8080 Md.   A  B     C  D  E  H  L    SP PC  F
  352.     native.       AL CH CL DH DL BH BL BP IP  FLAGS(low)
  353.     For Return of 8080 mode use CALLN instruction.
  354. Note:    I.e. 8080 addressing only 64KB then "Real Address" is CS*16+PC
  355.  
  356. Flags Affected: MD
  357. CPU mode: RM
  358.  
  359. +++++++++++++++++++++++
  360. Physical Form:           BRKEM imm8
  361. COP (Code of Operation)     : 0FH FFH imm8
  362.  
  363. Clocks:        BRKEM  imm8
  364. NEC V20:    38
  365. ----------O-BRKN-----------------------------------
  366. OPCODE BRKN    -  Break to Native Mode
  367.  
  368. CPU:  NEC (V25/V35) Software Guard only
  369. Type of Instruction: System
  370.  
  371. Instruction:  BRKN int_vector
  372.  
  373. Description:
  374.          [sp-1,sp-2] <- PSW        ; PSW EQU FLAGS
  375.          [sp-3,sp-4] <- PS        ; PS  EQU CS
  376.          [sp-5,sp-6] <- PC        ; PC  EQU IP
  377.          SP     <-  SP -6
  378.          IE     <-  0
  379.          BRK <-  0
  380.          MD     <-  1
  381.          PC     <- [int_vector*4 +0,+1]
  382.          PS     <- [int_vector*4 +2,+3]
  383.  
  384. Note:    The BRKN instruction switches operations in Native Mode
  385.     from Security Mode via Interrupt call. In Normal Mode
  386.     Instruction executed as     mPD70320/70322 (V25) operation mode.
  387.  
  388. Flags Affected:     None
  389. CPU mode: RM
  390.  
  391. +++++++++++++++++++++++
  392. Physical Form:    BRKN  imm8
  393. COP (Code of Operation)     : 63h imm8
  394.  
  395. Clocks:     56+10T [44+10T]
  396. ----------O-BRKS-----------------------------------
  397. OPCODE BRKS    -  Break to Security Mode
  398.  
  399. CPU:  NEC (V25/V35) Software Guard  only
  400. Type of Instruction: System
  401.  
  402. Instruction:  BRKS int_vector
  403.  
  404. Description:
  405.          [sp-1,sp-2] <- PSW        ; PSW EQU FLAGS
  406.          [sp-3,sp-4] <- PS        ; PS  EQU CS
  407.          [sp-5,sp-6] <- PC        ; PC  EQU IP
  408.          SP     <-  SP -6
  409.          IE     <-  0
  410.          BRK <-  0
  411.          MD     <-  0
  412.          PC     <- [int_vector*4 +0,+1]
  413.          PS     <- [int_vector*4 +2,+3]
  414.  
  415. Note:    The BRKS instruction switches operations in Security Mode
  416.     via Interrupt call. In Security Mode the fetched operation
  417.     code is executed after conversion in accordance with build-in
  418.     translation table
  419.  
  420. Flags Affected:     None
  421. CPU mode: RM
  422.  
  423. +++++++++++++++++++++++
  424. Physical Form:    BRKS  imm8
  425. COP (Code of Operation)     : F1h imm8
  426.  
  427. Clocks:     56+10T [44+10T]
  428. ----------O-BRKXA----------------------------------
  429. OPCODE BRKXA    -  Break to Expansion Address
  430.  
  431. CPU:  NEC V33/V53  only
  432. Type of Instruction: System
  433.  
  434. Instruction:  BRKXA int_vector
  435.  
  436. Description:
  437.          [sp-1,sp-2] <- PSW        ; PSW EQU FLAGS
  438.          [sp-3,sp-4] <- PS        ; PS  EQU CS
  439.          [sp-5,sp-6] <- PC        ; PC  EQU IP
  440.          SP     <-  SP -6
  441.          IE     <-  0
  442.          BRK <-  0
  443.          MD     <-  0
  444.          PC     <- [int_vector*4 +0,+1]
  445.          PS     <- [int_vector*4 +2,+3]
  446.          Enter Expansion Address Mode.
  447.  
  448. Note:    In NEC V53 Memory Space dividing into 1024 16K pages.
  449.     The programming model is Same as in Normal mode.
  450.  
  451.     Mechanism is:
  452.     20 bit Logical Address:     19..14 Page Num  13..0 Offset
  453.  
  454.     page Num convertin by internal table to 23..14 Page Base
  455.     tHE pHYSICAL ADDRESS is both Base and Offset.
  456.  
  457.     Address Expansion Registers:
  458.     logical Address A19..A14    I/O Address
  459.     0                FF00h
  460.     1                FF02h
  461.     ...                ...
  462.     63                FF7Eh
  463.  
  464.     Register XAM aliased with port # FF80h indicated current mode
  465.     of operation.
  466.     Format of XAM register (READ ONLY):
  467.     15..1    reserved
  468.     0    XA Flag, if=1 then in XA mode.
  469.  
  470.  
  471. Format    of  V53 PSW:
  472.     15..12    1
  473.     11    V
  474.     10    DIR
  475.     9    IE
  476.     8    BRK
  477.     7    S
  478.     6    Z
  479.     5    0
  480.     4    AC
  481.     3    0
  482.     2    P
  483.     1    1
  484.     0    CY
  485.  
  486. Flags Affected:     None
  487. CPU mode: RM
  488.  
  489. +++++++++++++++++++++++
  490. Physical Form:    BRKXA  imm8
  491. COP (Code of Operation)     : 0Fh E0h imm8
  492.  
  493. Clocks:     12
  494. ----------O-BSWAP----------------------------------
  495. OPCODE BSWAP  - Bytes Swap
  496.  
  497.  
  498. CPU:  I486 +
  499. Type of Instruction: User
  500.  
  501. Instruction: BSWAP dwordr
  502. Description:
  503.          XCHG  BYTE dwordr[31:24],dwordr[7:0]
  504.          XCHG  BYTE dwordr[23:16],dwordr[15:8]
  505.  
  506.          ; Need Good Picture to Show It
  507.  
  508. Notes: This instruction used for converting big-endian
  509. (Intel) format to little-endian (Motorolla etc.) format.
  510.  
  511. Flags Affected: None
  512. CPU mode: RM,PM,VM,SMM
  513.  
  514. Physical Form:         BSWAP r32
  515. COP (Code of Operation): 0FH 11001rrr  (For 32bit segment)
  516. Clocks: Cyrix Cx486SLC : 4
  517.           i486     : 1
  518.           Pentium  : 1
  519.     Cyrix Cx486DX  : 4
  520.     UMC   U5S      : 2
  521.     IBM 486BL3X    : 9
  522. ----------O-BTCLR----------------------------------
  523. OPCODE BTCLR    -  Bit Test, If it True Clear and Branch
  524.  
  525. CPU:  NEC V25,V35,V25 Plus,V35 Plus,V25 Software Guard
  526. Type of Instruction: User
  527.  
  528. Instruction:  BTCLR var,bitnumber,Short_Label
  529.  
  530. Description:
  531.           IF  BIT(bitnumber OF var) =1 THEN
  532.             {
  533.             PC <- PC + ext - disp8;
  534.             BIT(bitnumber OF var) <-0
  535.             }
  536.  
  537. Flags Affected:     None
  538. CPU mode: RM
  539.  
  540. +++++++++++++++++++++++
  541. Physical Form:    BTCLR reg/mem8,imm3, short_label
  542. COP (Code of Operation)     : 0Fh 9Ch PostByte imm3  Short_Label (Total=5 bytes)
  543.  
  544. Clocks:     29
  545. ----------O-CALLN----------------------------------
  546. OPCODE CALLN      - Call Native Mode Routine
  547.  
  548.  
  549. CPU: NEC/Sony V20/V30 etc
  550. Type of Instruction: System
  551.  
  552. Instruction:  CALLN intnum
  553.  
  554. Description:
  555.     CALLN instruction call (interrupt service in Native Mode)
  556.     from 8080 emulation mode:
  557.         PUSH    FLAGS
  558.         PUSH    CS
  559.         PUSH    IP
  560.         IF <- 0
  561.         TF <- 0
  562.         MD <- 1
  563.         MOV    CS,0:[intnum*4+2]
  564.         MOV    IP,0:[intnum*4]
  565.  
  566.  
  567. Flags Affected: IF,TF,MD
  568. CPU mode: 8080 Emulation
  569.  
  570. +++++++++++++++++++++++
  571. Physical Form: CALLN imm8
  572. COP (Code of Operation)     : EDH EDH imm8
  573.  
  574. Clocks:
  575. NEC V20/V30:    38-58
  576. ----------O-CLEAR1---------------------------------
  577. OPCODE CLEAR1    -  Clear one bit
  578.  
  579.  
  580. CPU: NEC/Sony all V-series.
  581. Type of Instruction: User
  582.  
  583. Instruction:  CLEAR1 dest,bitnumb
  584.  
  585. Description:
  586.         BIT  bitnumb OF dest <- 0;
  587.  
  588.  
  589. Flags Affected: None
  590.  
  591. CPU mode: RM
  592.  
  593. +++++++++++++++++++++++
  594. Physical Form:           CLEAR1 reg/mem8,CL
  595. COP (Code of Operation)     : 0FH 12H  Postbyte
  596.  
  597. Physical Form:           CLEAR1 reg/mem8,imm8
  598. COP (Code of Operation)     : 0FH 1AH  Postbyte imm8
  599.  
  600. Physical Form:           CLEAR1 reg/mem16,CL
  601. COP (Code of Operation)     : 0FH 13H  Postbyte
  602.  
  603. Physical Form:           CLEAR1 reg/mem16,imm8
  604. COP (Code of Operation)     : 0FH 1BH  Postbyte  imm8
  605.  
  606.  
  607. Clocks:                 CLEAR1
  608.          r/m8,CL    r/m8,i8        r/m16,CL   r/m16,i8
  609. NEC V20:      5/14     6/15          5/14         6/15
  610. ----------O-CMOVcc---------------------------------
  611. OPCODE CMOVcc     -    Conditional Move
  612.  
  613. CPU:  P6
  614. Type of Instruction:  User
  615.  
  616. Instruction:  CMOVcc  dest,sorc
  617.  
  618. Description:
  619.           IF condition(cc) is true THEN dest <- sorc;
  620.  
  621. Flags Affected: None
  622.  
  623.  
  624. CPU mode: RM,PM,VM,SMM
  625.  
  626.  
  627. +++++++++++++++++++++++
  628. Physical Form & COPs:
  629.  
  630. CMOVO    reg,reg/mem    0FH 40H Postbyte
  631. CMOVNO    reg,reg/mem    0FH 41H Postbyte
  632. CMOVC    reg,reg/mem    0FH 42H Postbyte
  633. CMOVNC    reg,reg/mem    0FH 43H Postbyte
  634. CMOVZ    reg,reg/mem    0FH 44H Postbyte
  635. CMOVNZ    reg,reg/mem    0FH 45H Postbyte
  636. CMOVNA    reg,reg/mem    0FH 46H Postbyte
  637. CMOVA    reg,reg/mem    0FH 47H Postbyte
  638. CMOVS    reg,reg/mem    0FH 48H Postbyte
  639. CMOVNS    reg,reg/mem    0FH 49H Postbyte
  640. CMOVP    reg,reg/mem    0FH 4AH Postbyte
  641. CMOVNP    reg,reg/mem    0FH 4BH Postbyte
  642. CMOVL    reg,reg/mem    0FH 4CH Postbyte
  643. CMOVNL    reg,reg/mem    0FH 4DH Postbyte
  644. CMOVNG    reg,reg/mem    0FH 4EH Postbyte
  645. CMOVG    reg,reg/mem    0FH 4FH Postbyte
  646.  
  647. Clocks:     ~1  (~pairing with other instructions)
  648. ----------O-CMP4S----------------------------------
  649. OPCODE CMP4S  -     Compare for packed BCD strings
  650.  
  651.  
  652. CPU: NEC/Sony all  V-series
  653. Type of Instruction: User
  654.  
  655. Instruction:  CMP4S
  656.  
  657. Description:
  658.       SetFlaGS( BCD STRING (ADDRESS=ES:DI,LENGTH=CL) -
  659.             BCD STRING (ADDRESS=DS:SI,LENGTH=CL) );
  660.  
  661.  
  662. Note:    si,di, other registers not changed
  663.  
  664. Flags Affected: OF,CF,ZF
  665.     ;;  ZF set if RESULT of subtraction is zero.
  666.     ;;  CF,OF set as result of operation with most
  667.     ;;  signification BCDs.
  668. CPU mode: RM
  669.  
  670. +++++++++++++++++++++++
  671. Physical Form: CMP4S
  672. COP (Code of Operation)     : 0FH 26H
  673.  
  674. Clocks:        CMP4S
  675. NEC V20:    ~7+19*CL
  676. ----------O-CMPXCHG8B------------------------------
  677. OPCODE CMPXCHG8B  - Compare and exchange 8 bytes
  678.  
  679.  
  680. CPU:  Pentium (tm), Pentium Pro(tm), AMD Am5k86
  681. Type of Instruction: Operation
  682.  
  683. Instruction: CMPXCHG8B dest
  684.  
  685. Note: dest is memory operand: QWORD PTR [memory]
  686. Description:
  687.     IF ( QWORD(EDX:EAX) = dest) THEN
  688.              {
  689.              ZF <- 1;
  690.              dest <- QWORD(ECX:EBX);
  691.              }
  692.            ELSE
  693.              {
  694.              ZF <- 0;
  695.              EDX:EAX <- dest
  696.              }
  697.       END
  698.  
  699. Flags Affected:     ZF
  700. CPU mode: RM,PM,VM,SMM
  701.  
  702. Physical Form:           CMPXCHG8B mem64
  703. COP (Code of Operation)     : 0FH C7H Postbyte
  704. Clocks:          Pentium     : 10
  705.  
  706. Note: Postbyte MMRRRMMM:  MM<>11 if (==) then INT 6
  707. ----------O-CMPXCHG--------------------------------
  708. OPCODE CMPXCHG     - Compare and exchange
  709.  
  710.  
  711.  
  712. CPU:  i486+
  713. Type of Instruction: User
  714.  
  715. Instruction: CMPXCHG dest,sorc
  716.  
  717. Description:
  718.     Acc = if OperationSize(8)  -> AL
  719.          OperationSize(16) -> AX
  720.          OperationSize(32) -> EAX
  721.  
  722.     IF ( Acc = dest) THEN
  723.              {
  724.              ZF <- 1;
  725.              dest <- sorc;
  726.              }
  727.            ELSE
  728.              {
  729.              ZF <- 0;
  730.              Acc <- dest;
  731.              }
  732.       END
  733.  
  734. Note: This instruction used to support semaphores
  735.  
  736. Flags Affected:     ZF ( see description)
  737.          OF,SF,AF,PF,CF ( like CMP instruction ) ( see description)
  738. CPU mode: RM,PM,VM,SMM
  739.  
  740. +++++++++++++++++++++++
  741. Physical Form:           CMPXCHG  r/m8,r8
  742. COP (Code of Operation)     : 0FH A6H Postbyte    ; i486 (A-B0 step)
  743.              : 0FH B0H Postbyte    ; i486 (B1+ step clones
  744.                            ;      and upgrades)
  745.  
  746. Clocks:
  747.        Intel i486     :  6/7     if compare OK
  748.              :  6/10 if compare FAIL
  749.      Cyrix Cx486SLC     :  5/7
  750.      Pentium (tm)     :  6
  751.  
  752. Penalty if cache miss     :
  753.       Intel i486     : 2
  754.      Cyrix Cx486SLC     : 1
  755. +++++++++++++++++++++
  756. Physical Form:           CMPXCHG  r/m16,r16
  757.                CMPXCHG  r/m32,r32
  758. COP (Code of Operation)     : 0FH A7H Postbyte    ; i486 (A-B0 step)
  759.              : 0FH B1H Postbyte    ; i486 (B1+ step clones
  760.                            ;      and upgrades)
  761.  
  762. Clocks:
  763.        Intel i486     :  6/7     if compare OK
  764.              :  6/10 if compare FAIL
  765.      Cyrix Cx486SLC     :  5/7
  766.      Pentium (tm)     :  6
  767.  
  768. Penalty if cache miss     :
  769.       Intel i486     : 2
  770.      Cyrix Cx486SLC     : 1
  771. ----------O-CPUID----------------------------------
  772. OPCODE CPUID - CPU Identification
  773.  
  774.  
  775. CPU:  Intel 486DX/SX/DX2 SL Enhanced and all later
  776. Intel processors include ( IntelDX4, IntelSX2,
  777. Pentium etc.), UMC microprocessors: U5S,U5SD,U5S-VL.
  778. Cyrix M1, AMD K5, Intel P6, and AMD Ehnanced Am486 CPU,
  779. such as A80486DX4-100SV8B.
  780.  
  781. Note: i.e.  1993+ years processors produced by Intel
  782. Note: To know if your CPU support CPUID instruction
  783. try to set ID flag ( bit 21 of EFLAGS ) to 1, and
  784. if it sets this mean that CPUID support.(Soft).
  785. Or If Your CPU is Intel Look for '&E' signature on
  786. Top side of Chip.(Hard)
  787. Type of Instruction: Operation
  788.  
  789. Instruction: CPUID
  790. Description:
  791.     IF (EAX=0) THEN        // All
  792.           {
  793.           EAX <- Maximum value of EAX to CALL CPUID instruction
  794.             1 for all processors (date 1 September 1994)
  795.             may be >1 in future microprocessors
  796.  
  797.           ;; EBX,EDX and ECX contain a OEM name string
  798.           ;; for Intel this string is 'GenuineIntel'
  799.  
  800.            EBX <- 756E6547H i.e. 'Genu'
  801.            EDX <- 49656E69H i.e. 'ineI'
  802.            ECX <- 6C65746EH i.e. 'ntel'
  803.  
  804.           ;; for UMC   this string is 'UMC UMC UMC '
  805.  
  806.            EBX <- 32434D55H i.e. 'UMC '
  807.            EDX <- 32434D55H i.e. 'UMC '
  808.            ECX <- 32434D55H i.e. 'UMC '
  809.  
  810.           ;; for Cyrix this string is 'CyrixInstead'  (Cx6x86,Cx5x86 steps B+)
  811.           ;; for AMD   this string is 'AuthenticAMD'  (K6,K5,486 Enhanced CPUs)
  812.  
  813.           }
  814.     ELSEIF (EAX=1) THEN        // All
  815.           {
  816.           EAX[3:0]    <- Stepping ID
  817.           EAX[7:4]    <- Model
  818.           EAX[11:8] <- Family
  819.              ;    3 - 386 family
  820.              ;    4 - i486 family
  821.              ;    5 - Pentium family
  822.              ;    6 - Pentium Pro family
  823.           EAX[15:12] <- Reserved
  824.              ;    0 - Original OEM processor
  825.              ;    1 - OverDrive
  826.              ;    2 - Dual Processor
  827.              Note: Pentium P54C have pin CPUTYPE which
  828.                define is this CPU First or Second e.t.c
  829.                in System.
  830.                So, if this chip set in "First" socket it
  831.                    return for example  0425h, but THIS chip
  832.                    return 2425h if we insert it in "Second"
  833.                    socket.
  834.         Note: Refer to Appendix B for more information.
  835.  
  836.  
  837.           EAX[31:16] <- Reserved and set to 0s now
  838.  
  839.           EDX <- Compability flags
  840.           ;; below all info if bit flag =1
  841.          EDX[0] <- FPU:     FPU on Chip
  842.          EDX[1] <- VME:     Virtual Mode Extention present
  843.          EDX[2] <- DE:     Debbuging Extentions
  844.          EDX[3] <- PSE:     CPU support  4MB size pages
  845.          EDX[4] <- TSC:     TSC present (See RDTSC command)
  846.          EDX[5] <- MSR:     CPU have Pentium Compatible MSRs
  847.          EDX[6] <- PAE:     Physical Address Extension
  848.          EDX[7] <- MCE:     Machine Check exception
  849.          EDX[8] <- CX8:     Support CMPXCHG8B instruction
  850.          EDX[9] <- APIC: Local APIC on Chip (Intel)
  851.                PGE:     Page Global Extension (K5)
  852.          EDX[10]<-  reserved
  853.          EDX[11]<-  reserved
  854.          EDX[12]<- MTRR: CPU support Memory Type Range Register (MTRR)
  855.          EDX[13]<- PGE:     Page Global Feature support
  856.          EDX[14]<- MCA:     Machine Check Architecture
  857.          EDX[15]<- CMOV: CPU support CMOV instruction
  858.          EDX[22..16] <- Reserved
  859.          EDX[23] <- MMX: CPU support IA MMX
  860.          EDX[31:24] <- Reserved and set to 0s now
  861.  
  862.           }
  863.     ELSEIF (EAX=2)        // Pentium Pro only
  864.           {
  865.           AL = 1    (Pentium Pro)
  866.           remainder of EAX and EBX,ECX,EDX contain bytes which
  867.           described cache architecture on this chip.
  868.           Description of this bytes is:
  869.           Value        Description
  870.           00h        None
  871.           01h        Instruction TLB, 4K page, 4way, 64 entry
  872.           02h        Instruction TLB, 4M page, 4way, 4 entry
  873.           03h        Data TLB, 4K page, 4way, 64 entry
  874.           04h        Data TLB, 4M page, 4way, 8 entry
  875.           06h        Instruction Cache, 8K, 4 way, 32 byte per line
  876.           0Ah        Data cache, 8K, 2 way, 32 byte per line
  877.           41h        Unifed cache, 32 byte per line, 4 way, 128KB
  878.           42h        Unifed cache, 32 byte per line, 4 way, 256KB
  879.           43h        Unifed cache, 32 byte per line, 4 way, 512KB
  880.          }
  881.     ELSEIF (EAX = 80000000h) // AMD 5k86 (K5 not SSA/5)
  882.          {
  883.         EBX,ECX,EDX <- Undefined
  884.         EAX <- Largest Extended function value recognized by CPUID.
  885.         (Note: Extended CPUID functions started with 80000000h)
  886.         (Example: For AMD 5k86 (K5) =  80000005h )
  887.          }
  888.     ELSEIF (EAX = 80000001h) // AMD 5k86 (K5 not SSA/5)
  889.          {
  890.         EAX <- AMD Processor Signature
  891.             0000051Xh  - for AMD 5k86 (K5 not SSA/5)
  892.             0000066Xh  - for AMD 6k86 (K6)
  893.         EBX,ECX <- Undefined
  894.         EDX <- Extended Feature Flags
  895.               EDX[0] <- FPU:  FPU on Chip
  896.               EDX[1] <- VME:  Virtual Mode Extention present
  897.               EDX[2] <- DE:   Debbuging Extentions
  898.               EDX[3] <- PSE:  CPU support  4MB size pages
  899.               EDX[4] <- TSC:  TSC present (See RDTSC command)
  900.               EDX[5] <- MSR:  CPU have K5 Compatible MSRs
  901.               EDX[6] <- 0  (Reserved)
  902.               EDX[7] <- MCE:  Machine Check exception
  903.               EDX[8] <- CX8:  Support CMPXCHG8B instruction
  904.               EDX[9] <- Reserved
  905.               EDX[10]<- Support SYSCALL and SYSRET instruction    (!!!)
  906.               EDX[11,12]<-  reserved
  907.               EDX[13]<- PGE:  Page Global Feature support
  908.               EDX[14]<- reserved
  909.               EDX[15]<- CMOV: CPU support CMOV instruction
  910.               EDX[16]<- FCMOV: CPU support FP. FCMOV    (!!!)
  911.               EDX[22..16] <- Reserved
  912.               EDX[23] <- MMX: CPU support IA MMX
  913.               EDX[31..24] <- Reserved
  914.         ;Note: For AMD K5 = 000021BFh
  915.                For AMD K6 = 008005BFh
  916.          }
  917.     ELSEIF (EAX = 80000002h,80000003h,80000004h)    // AMD K5,K6
  918.          {
  919.         EAX, EBX, ECX ,EDX = CPU Name
  920.  
  921.         // Note: for AMD K5  (Don't forget x86 is BIG-Endian!!)
  922.         // CPUID(EAX)    EAX     EBX      ECX       EDX
  923.         // 80000002h  2D444D41 7428354B 5020296D 65636F72
  924.         //        AMD-     K5(r      m) P      roce
  925.         // 80000003h  726F7373 00000000 00000000 00000000
  926.         //        ssor
  927.         // 80000004h  00000000 00000000 00000000 00000000
  928.          }
  929.     ELSEIF (EAX = 80000005h)    // AMD K5,K6
  930.         {        // TLB and Cache information
  931.         EAX <- Reserved
  932.         EBX <- TLB Information:
  933.             EBX[31..24] <- Data TLB: Associativity
  934.                       (if Full assocuiativity = FFh)
  935.             EBX[23..16] <- Data TLB: Number of Entryes
  936.             EBX[15..8]  <- Instruction TLB: Associativity
  937.                       (if Full assocuiativity = FFh)
  938.             EBX[7..0]   <- Instruction TLB: Number of Entryes
  939.         ECX <- L1 Data Cache Information
  940.             ECX[31..24] <- Size in KB
  941.             ECX[23..16] <- Associativity (if full = FFh)
  942.             ECX[15..8]  <- Lines per Tag
  943.             ECX[7..0]   <- Line size in Bytes
  944.         EDX <- L1 Instruction Cache Information
  945.             ECX[31..24] <- Size in KB
  946.             ECX[23..16] <- Associativity (if full = FFh)
  947.             ECX[15..8]  <- Lines per Tag
  948.             ECX[7..0]   <- Line size in Bytes
  949.         // Note:  after execution CPUID with EAX = 80000005h
  950.         //     reg      AMD K5    AMD K6
  951.         //     EBX     04800000      02800140
  952.         //     ECX     08040120      20020220
  953.         //     EDX     10040120      20020220
  954.         }
  955.     ELSE THEN
  956.         {
  957.          EAX,EBX,ECX,EDX <- Undefined
  958.          }
  959.     END.
  960.  
  961.  
  962. Global Note:
  963.        This file contain open i.e nonconfiderential information about
  964.        CPUID information.
  965.        If you want MORE try to contact Intel, may be (but I'm sure that not)
  966.          Intelers give you "Yellow Pages" (i.e Supplement to Pentium(tm)
  967.          Processor User's Manual) to read inside office.
  968.  
  969. Refer to:  Appendix B for more informations about CPU codes.
  970.  
  971. Here is 3 examples of Information we can may get from CPUID instruction:
  972.  
  973. 1) UMC U5S
  974.    Note: All UMC Chips: U5S,U5SD, 3V chips never have FPU on-chip,
  975.      and never support VME
  976.  
  977. CPUID return CPUID information
  978. Maximum Available of CPUID info entrys:1
  979. Vendor string is : "UMC UMC UMC "
  980.  
  981. Model Info :
  982. Stepping ID is : 3
  983. Model           : 2
  984. Family           : 4
  985. M field           : 0
  986. Compability Flags:
  987. FPU on Chip               :-
  988. Virtual Mode Extensions present       :-
  989. CPU support I/O breakpoints       :-
  990. CPU support 4MB pages           :-
  991. Time Stamp Counter Presents       :-
  992. CPU have Pentium compatible MSRs   :-
  993. Machine Check Exception Presents   :-
  994. CMPXCHG8B instruction support       :-
  995. APIC on Chip               :-
  996.  
  997.  
  998.  
  999. 2) Intel 486
  1000.    Note: All SL Enhanced 486:  { i486SX,i486DX,i486DX2 marked '&E' on chip
  1001.    surface }, IntelSX2,IntelDX4 support VME !!!!
  1002.    But: Sxs never have FPU on chip.
  1003.  
  1004. CPUID return CPUID information
  1005. Maximum Available of CPUID info entrys:1
  1006. Vendor string is : "GenuineIntel"
  1007.  
  1008. Model Info :
  1009. Stepping ID is : 0
  1010. Model           : 8
  1011. Family           : 4
  1012. M field           : 0
  1013. Compability Flags:
  1014. FPU on Chip               :+
  1015. Virtual Mode Extensions present       :+
  1016. CPU support I/O breakpoints       :-
  1017. CPU support 4MB pages           :-
  1018. Time Stamp Counter Presents       :-
  1019. CPU have Pentium compatible MSRs   :-
  1020. Machine Check Exception Presents   :-
  1021. CMPXCHG8B instruction support       :-
  1022. APIC on Chip               :-
  1023.  
  1024.  
  1025. 3) Pentium
  1026.    Note: P54C may say that build-in APIC not present if it
  1027.    not supported by external hardware !!!!! (This data from
  1028.    P54C in single processor configuration)
  1029.  
  1030. CPUID return CPUID information
  1031. Maximum Available of CPUID info entrys:1
  1032. Vendor string is : "GenuineIntel"
  1033.  
  1034. Model Info :
  1035. Stepping ID is : 1
  1036. Model           : 2
  1037. Family           : 5
  1038. M field           : 0
  1039. Compability Flags:
  1040. FPU on Chip               :+
  1041. Virtual Mode Extensions present       :+
  1042. CPU support I/O breakpoints       :+
  1043. CPU support 4MB pages           :+
  1044. Time Stamp Counter Presents       :+
  1045. CPU have Pentium compatible MSRs   :+
  1046. Machine Check Exception Presents   :+
  1047. CMPXCHG8B instruction support       :+
  1048. APIC on Chip               :-
  1049.  
  1050.  
  1051. 4) Pentium OverDrive
  1052.    Note: P24T never have Machine Check Exception
  1053.  
  1054. CPUID return CPUID information
  1055. Maximum Available of CPUID info entrys:1
  1056. Vendor string is : "GenuineIntel"
  1057.  
  1058. Model Info :
  1059. Stepping ID is : 1
  1060. Model           : 3
  1061. Family           : 5
  1062. M field           : 1
  1063. Compability Flags:
  1064. FPU on Chip               :+
  1065. Virtual Mode Extensions present       :+
  1066. CPU support I/O breakpoints       :+
  1067. CPU support 4MB pages           :+
  1068. Time Stamp Counter Presents       :+
  1069. CPU have Pentium compatible MSRs   :+
  1070. Machine Check Exception Presents   :-
  1071. CMPXCHG8B instruction support       :+
  1072. APIC on Chip               :-
  1073.  
  1074. 5) AMD Am5x86 (also AMD Enhanced 486).
  1075.  
  1076. CPUID return CPUID information
  1077. Maximum Available of CPUID info entrys:1
  1078. Vendor string is : "AuthenticAMD"
  1079.  
  1080. Model Info :
  1081. Stepping ID is : 4
  1082. Model           : 15
  1083. Family           : 4
  1084. M field           : 0
  1085. Compability Flags:
  1086. FPU on Chip               :+
  1087. Virtual Mode Extensions present       :-
  1088. CPU support I/O breakpoints       :-
  1089. CPU support 4MB pages           :-
  1090. Time Stamp Counter Presents       :-
  1091. CPU have Pentium compatible MSRs   :-
  1092. P6 Flag: n/a               :-
  1093. Machine Check Exception Presents   :-
  1094. CMPXCHG8B instruction support       :-
  1095.  
  1096.  
  1097.  
  1098.  
  1099. 6) Pentium Pro (P6)
  1100.  
  1101. GenuineIntelCPUID return CPUID information
  1102. Maximum Available of CPUID info entrys:2     <<-------------- !!!!
  1103. Vendor string is : "GenuineIntel"
  1104.  
  1105. Model Info :
  1106. Stepping ID is : 1
  1107. Model           : 1
  1108. Family           : 6
  1109. M field           : 0
  1110. Compability Flags:
  1111. FPU on Chip               :+
  1112. Virtual Mode Extensions present       :+
  1113. CPU support I/O breakpoints       :+
  1114. CPU support 4MB pages           :+
  1115. Time Stamp Counter Presents       :+
  1116. CPU have Pentium compatible MSRs   :+
  1117. P6 Flag: n/a               :+
  1118. Machine Check Exception Presents   :+
  1119. CMPXCHG8B instruction support       :+
  1120. APIC on Chip               :-
  1121. P6 Flag: n/a               :-
  1122. P6 Flag: n/a               :+  <------ !!!
  1123. P6 Flag: n/a               :+  <------ !!!    (see description above)
  1124. P6 Flag: n/a               :+  <------ !!!
  1125. P6 Flag: n/a               :+  <------ !!!
  1126. P6 Flag: n/a               :+  <------ !!!
  1127.  
  1128.  
  1129. -> END of Examples
  1130.  
  1131.  
  1132. Note: NexGen Nx586, Cyrix 486s    never support CPUID.
  1133.  
  1134. Flags Affected: None
  1135. CPU mode: RM,PM,VM,SMM
  1136.  
  1137. Physical Form:         CPUID
  1138. COP (Code of Operation): 0FH A2H
  1139. Clocks:      486s & Pentium  (EAX=1)        : 14
  1140.       486s & Pentium  (EAX=0 or EAX>1)  : 9
  1141. ----------O-EMMS-----------------------------------
  1142. OPCODE EMMS    -  Empty MMX State
  1143.  
  1144. CPU:  all which supported IA MMX:
  1145.       Pentium (P55C only), Pentium (tm) Pro  (P6) future models
  1146. Type of Instruction: User
  1147.  
  1148. Instruction: EMMS
  1149. Description:
  1150.     FloatPointTagWord  <-  FFFFh
  1151.  
  1152. Note:      The EMMS instruction sets the values of the floating-point (FP) tag
  1153.     word to empty (all ones). EMMS marks the registers as available, so
  1154.     they can subsequently be used by floating-point instructions.
  1155.       If a floating-point instruction loads into one of the registers
  1156.     before it has been reset by the EMMS instruction, a floating-point
  1157.     stack overflow can occur, which results in a FP exception or incorrect
  1158.     result. All other MMX instructions validate the entire FP tag word (all
  1159.     zeros).
  1160.       This instruction must be used to dear the MMX state at the end of all
  1161.     MMX routines, and before calling other routines that may execute
  1162.     floating-point instructions.
  1163.  
  1164. Flags Affected:     None
  1165.  
  1166. Exceptions:
  1167.  
  1168. RM    PM    VM    SMM    Description
  1169. #UD    #UD    #UD    #UD    If CR0.EM = 1
  1170. #NM    #NM    #NM    #NM    If CR0.TS = 1
  1171. #MF    #MF    #MF    #MF    If pending FPU Exception
  1172.  
  1173. ++++++++++++++++++++++++++++++++++++++
  1174. COP & Times:
  1175.  
  1176. EMMS        0FH 77H
  1177.  
  1178.      P55C:    n/a
  1179. future P6:    n/a
  1180. ----------O-ESC------------------------------------
  1181. OPCODE ESC   -     Escape Extrnal Cooprocessors
  1182.  
  1183. CPU:  8086...80386, any Hybrid 486.
  1184. Type of Instruction: User
  1185.  
  1186. Instruction:  ESC Number,R/M
  1187.  
  1188. Description:  This Instruction uses for Link with External Coprocessors
  1189.           Such as NPX. External Coprocessors look at command sequence
  1190.           at get ESC. CPU give Memory Operand sending to A-bus EA
  1191.           doing pseudo-read operation.
  1192.           {     If 2nd Operand is Register then Do Nothing,
  1193.          If 2nd Operand is Memory   then set EA (Effective Address)
  1194.                         in Address Bus   }
  1195.           First operand is Part of Command that Ext. coprocessors get.
  1196.  
  1197. Flags Affected: None
  1198.  
  1199. Example:      ESC 0Fh,DX      means         FSQRT
  1200.  
  1201.  
  1202. Note:    ESC mnemonic was used for 8086 CPU, later all were used alternative
  1203.     mnemonic for cooprocessor instructions, such as FSQRT.
  1204. CPU mode: RM,PM,VM,SMM
  1205.  
  1206. +++++++++++++++++++++++
  1207. Physical Form:
  1208. COP (Code of Operation)     : <1101 1xxx> Postbyte
  1209.  
  1210. Clocks:        ESC  n,Reg    ESC n,Mem8/Mem16
  1211. 8088:           2             8/12+EA
  1212. 286:          9-20              9-20
  1213. 386:          N/A               N/A
  1214. 486:          N/A               N/A
  1215. ----------O-EXT------------------------------------
  1216. OPCODE EXT  -    Extract Bit Field
  1217.  
  1218.  
  1219. CPU: NEC/Sony all  V-series
  1220. Type of Instruction: User
  1221.  
  1222. Instruction:  EXT  start,len
  1223.  
  1224. Description:
  1225.       AX <- BitField [
  1226.                  BASE =  DS:SI
  1227.          START BIT OFFSET =  start
  1228.                LENGTH =  len
  1229.              ];
  1230.  
  1231.  
  1232. Note:    si and start automatically UPDATE
  1233.  
  1234. Flags Affected: None
  1235. CPU mode: RM
  1236.  
  1237. +++++++++++++++++++++++
  1238. Physical Form         : EXT    reg8,reg8
  1239. COP (Code of Operation)     : 0FH 33H  PostByte
  1240.  
  1241.  
  1242. Clocks:        EXT  reg8,reg8
  1243. NEC V20:    26-55
  1244. ----------O-F4X4-----------------------------------
  1245. OPCODE F4X4 - FPU: Multiplicate vector on Matrix 4x4
  1246.  
  1247.  
  1248.  
  1249. FPU:  IIT FPUs.
  1250. Type of Instruction: FPU instruction
  1251.  
  1252. Instruction: F4X4
  1253. Description:
  1254.     ;   This Instruction Multiplicate vector on
  1255.     ; Matrix 4X4
  1256.  
  1257.  _  _        _               _    _  _
  1258. |    |       |            |      |    |
  1259. | Xn |       | A00  A01  A02  A03 |      | X0 |
  1260. | Yn |    =  | A10  A11  A12  A13 |  X   | Y0 |
  1261. | Zn |       | A20  A21  A22  A23 |      | Z0 |
  1262. | Wn |       | A30  A31  A31  A33 |      | W0 |
  1263. |_  _|       |_               _|      |_  _|
  1264.  
  1265.  
  1266.      ; Data fetches/stores from/to FPU registers:
  1267.  
  1268.     # of      F E T C H E S          STORE
  1269.        Register     Bank0 Bank1 Bank2    Bank0
  1270.     ST      X0    A33   A31      Xn
  1271.     ST(1)      Y0    A23   A21      Yn
  1272.     ST(2)      Z0    A13   A11      Zn
  1273.     ST(3)      W0    A03   A01      Wn
  1274.     ST(4)        A32   A30
  1275.     ST(5)        A22   A20
  1276.     ST(6)        A12   A10
  1277.     ST(7)        A02   A00
  1278.  
  1279.  
  1280.  
  1281. Note: See FSBP0,FSBP1,FSBP2 for more information
  1282.  
  1283.  
  1284. FPU Flags Affected:  S
  1285.  
  1286. FPU mode: Any
  1287.  
  1288. Physical Form:         F4X4
  1289. COP (Code of Operation): DBH F1H
  1290. Clocks:       IIT 2c87    : 242
  1291.        IIT 3c87    : 242
  1292.        IIT 3c87SX  : 242
  1293. ----------O-FCMOVcc--------------------------------
  1294. OPCODE FCMOVcc      -  Floating Point Conditional Move
  1295.  
  1296. CPU:  P6
  1297. Type of Instruction:  User
  1298.  
  1299. Instruction:  FCMOVcc  dest,sorc
  1300.  
  1301. Description:
  1302.           IF condition(cc) is true THEN dest <- sorc;
  1303.  
  1304. Flags Affected:      Int: None
  1305.           Fp : None
  1306.  
  1307. Note:  Testing Integer flags:
  1308.  
  1309. cc    Meaning        Test Flags        Description
  1310. B    Below        CF=1            <
  1311. NB    Not Below    CF=0            >=
  1312. E    Equal        ZF=1            =
  1313. NE    Not Equal    ZF=0            !=
  1314. BE    Below Equal    (CF=1 .OR. ZF=1)    <=
  1315. NBE    Not BelowEqual    (CF=0 .AND. ZF=0)    >
  1316. U    Unordered    PF=1
  1317. NU    Not Unordered    PF!=1
  1318.  
  1319.  
  1320.  
  1321.  
  1322. CPU mode: RM,PM,VM,SMM
  1323.  
  1324.  
  1325. +++++++++++++++++++++++
  1326. Physical Form & COPs:
  1327.  
  1328. FCMOVB     ST,STi DA C0+i
  1329. FCMOVE     ST,STi DA C8+i
  1330. FCMOVBE     ST,STi DA D0+i
  1331. FCMOVU     ST,STi DA D8+i
  1332. FCMOVNB     ST,STi DB C0+i
  1333. FCMOVNE     ST,STi DB C8+i
  1334. FCMOVNBE ST,STi DB D0+i
  1335. FCMOVNU     ST,STi DB D8+i
  1336.  
  1337.  
  1338.  
  1339. Clocks:     N/A
  1340. ----------O-FCOMI----------------------------------
  1341. OPCODE FCOMI    -  Floating Point Compare setting Integer Flags
  1342.  
  1343. CPU:  P6
  1344. Type of Instruction:  User
  1345.  
  1346. Instruction:  FuCOMIp  ST0,STi
  1347.  
  1348. Description:
  1349.          CASE ( result (compare(ST0,STi) ) OF
  1350.         {          ; ZF PF CF
  1351.         Not Comparable: 1  1  1
  1352.         ST0 > STi     : 0  0  0
  1353.         ST0 < STi     : 0  0  1
  1354.         ST0 = STi     : 1  0  0
  1355.         }
  1356.  
  1357.          CASE ( FP_stack_status ) OF
  1358.         {          ; SF
  1359.         Overflow      : 1
  1360.         Underflow     : 0
  1361.         Otherwize     : 0
  1362.         }
  1363.  
  1364.          CASE ( instruction ) OF
  1365.         {
  1366.         FCOMI,FUCOMI   : No FP stack adjustment;
  1367.         FCOMIP,FUCOMIP : POP ST;
  1368.         }
  1369.  
  1370. Flags Affected:      Int: CF,ZF,PF,SF
  1371.           Fp : None
  1372.  
  1373.  
  1374. Note: In any case Sign of zero Ignored , so +0.0 = -0.0
  1375.  
  1376. CPU mode: RM,PM,VM,SMM
  1377.  
  1378.  
  1379. +++++++++++++++++++++++
  1380. Physical Form & COPs:
  1381.  
  1382. FCOMI    ST0,STi     DB F0+i
  1383. FCOMIP    ST0,STi     DF F0+i
  1384. FUCOMI    ST0,STi     DB E8+i
  1385. FUCOMIP ST0,STi     DF E8+i
  1386.  
  1387.  
  1388. Clocks:     N/A
  1389. ----------O-FINT-----------------------------------
  1390. OPCODE FINT    -  Finished Interrupt
  1391.  
  1392. CPU:  NEC V25,V35,V25 Plus,V35 Plus,V25 Software Guard
  1393. Type of Instruction: System
  1394.  
  1395. Instruction:  FINT
  1396.  
  1397. Description:
  1398.         Inticate to Internal Interrupt controller that
  1399.         interrupt service Routine is completed. (EOI)
  1400.  
  1401. Flags Affected:     None
  1402. CPU mode: RM
  1403.  
  1404. +++++++++++++++++++++++
  1405. Physical Form:    FINT
  1406. COP (Code of Operation)     : 0Fh 92h
  1407.  
  1408. Clocks: 2
  1409. ----------O-FNSTDW---------------------------------
  1410. OPCODE FNSTDW - FPU Not wait Store Device Word register
  1411.  
  1412.  
  1413. FPU:  i387SL Mobile
  1414. Type of Instruction: FPU instruction
  1415.  
  1416. Instruction: FNSTDW dest
  1417. Description:
  1418.     dest <- Device Word
  1419.  
  1420. Format of Device word:
  1421.     bit(s)    Description    (Table )
  1422.     0-7    Reserved
  1423.      8    S - Status bit:
  1424.             if S=1 then FP device is a static design and OS
  1425.             or APM Bios may set CLK slow to 0 Mhz without
  1426.             lost any data.
  1427.     9-15    Reserved
  1428.  
  1429.  
  1430. Note: Device word register valid only after FNINIT
  1431.  
  1432.  
  1433. FPU Flags Affected: None
  1434. CPU mode: Any
  1435.  
  1436. Physical Form:         FNSTDW     AX
  1437. COP (Code of Operation): DFH E1H
  1438. Clocks:          i387SL Mobile: 13
  1439. ----------O-FNSTSG---------------------------------
  1440. OPCODE FNSTSG - FPU Not wait Store Signature Word register
  1441.  
  1442.  
  1443.  
  1444. FPU:  i387SL Mobile
  1445. Type of Instruction: FPU instruction
  1446.  
  1447. Instruction: FNSTSG dest
  1448. Description:
  1449.     dest <- Signature Word
  1450.  
  1451. Format of Signature word:
  1452.     bit(s)    Description    (Table )
  1453.      3-0    Revision
  1454.      7-4    Steppin
  1455.     11-8    Family
  1456.     15-12    Version
  1457.  
  1458. Note:
  1459.     For i387(tm) SL Mobile Signature is:
  1460.         Version     = 2
  1461.         Family     = 3   ; 387
  1462.         Stepping = 1   ; Ax step
  1463.         Revision = 0   ; x0 step
  1464.                 i.e i387(tm) SL is A0 step
  1465.  
  1466. Note: This FPU is out of life
  1467.  
  1468.  
  1469. Note: Signature word register valid only after FNINIT
  1470.  
  1471.  
  1472. FPU Flags Affected: None
  1473. CPU mode: Any
  1474.  
  1475. Physical Form:         FNSTSG     AX
  1476. COP (Code of Operation): DFH E2H
  1477. Clocks:          i387SL Mobile: 13
  1478. ----------O-FPO2-----------------------------------
  1479. OPCODE FPO2  -     Floating Point Operations 2nd Way
  1480.  
  1481.  
  1482. CPU: NEC/Sony  all V-series
  1483. Type of Instruction: User
  1484.  
  1485. Instruction:  FPO2  fp_op,mem
  1486.  
  1487. Description:
  1488.           This instruction was building for sending FP commands to
  1489.           NEC NPX which never be realized
  1490.  
  1491. Flags Affected: None
  1492. CPU mode: RM
  1493.  
  1494. +++++++++++++++++++++++
  1495. Physical Form         : FPO2 imm4,reg/mem
  1496. COP (Code of Operation)     :
  1497.             If imm4 in range 0-7 then
  1498.                 66H     mmFFFMMM there FFF is imm4.
  1499.             If imm4 in range 7-F then
  1500.                 67H     mmFFFMMM there FFF is imm4.
  1501.  
  1502.  
  1503. Clocks:        FPO2  imm4,reg/mem
  1504. NEC V20:         2/11
  1505. ----------O-FRICHOP--------------------------------
  1506. OPCODE FRICHOP - FPU: Round to Integer chop method
  1507.  
  1508.  
  1509. FPU:  Cyrix FPUs and 486s with FPU on chip
  1510. Type of Instruction: FPU instruction
  1511.  
  1512. Instruction: FRICHOP
  1513. Description:
  1514.     ST <- ROUND ( ST,CHOP )
  1515.  
  1516. Note:
  1517.     This instruction calculate rounding ST toward zero
  1518.     i.e.  ignoring part righter that decimal .
  1519.  
  1520. Examples:
  1521.  
  1522.      1.2   ->   1.0
  1523.     -1.2   ->  -1.0
  1524.      3.0   ->   3.0
  1525.      0.0   ->   0.0
  1526.      1.5   ->   1.0
  1527.     -2.0   ->  -2.0
  1528.  
  1529.  
  1530. FPU Flags Affected:  S,P,D,I,C1
  1531.  
  1532. FPU mode: Any
  1533.  
  1534. Physical Form:         FRICHOP
  1535. COP (Code of Operation): DDH FCH
  1536. Clocks:          Cx83D87  : 15
  1537.           Cx83S87  : 15
  1538.           CxEMC87  : 15
  1539.           Cx487DLC :
  1540. ----------O-FRINEAR--------------------------------
  1541. OPCODE FRINEAR - FPU: Round to Integer Nearest method
  1542.  
  1543.  
  1544. FPU:  Cyrix FPUs and 486s with FPU on chip
  1545. Type of Instruction: FPU instruction
  1546.  
  1547. Instruction: FRINEAR
  1548. Description:
  1549.     ST <- ROUND ( ST,NEAREST )
  1550.  
  1551. Note:
  1552.     This instruction calculate rounding ST toward nearest
  1553.  
  1554. Examples:
  1555.  
  1556.      1.2   ->   1.0
  1557.     -1.2   ->  -1.0
  1558.      3.0   ->   3.0
  1559.      0.0   ->   0.0
  1560.      1.5   ->   1.0
  1561.      1.8   ->   2.0
  1562.     -2.0   ->  -2.0
  1563.  
  1564.  
  1565. FPU Flags Affected:  S,P,D,I,C1
  1566.  
  1567. FPU mode: Any
  1568.  
  1569. Physical Form:         FRINEAR
  1570. COP (Code of Operation): DFH FCH
  1571. Clocks:          Cx83D87  : 15
  1572.           Cx83S87  : 15
  1573.           CxEMC87  : 15
  1574.           Cx487DLC :
  1575. ----------O-FRINT2---------------------------------
  1576. OPCODE FRINT2 - FPU: Round to Integer
  1577.  
  1578.  
  1579. FPU:  Cyrix FPUs and 486s with FPU on chip
  1580. Type of Instruction: FPU instruction
  1581.  
  1582. Instruction: FRINT2
  1583. Description:
  1584.     IF ( exact half ) THEN
  1585.         {
  1586.         ST <- SIGN(ST) * ROUND(ABS(ST)+0.5,NEAREST)
  1587.         }
  1588.         ELSE
  1589.         {
  1590.         ST <- ROUND ( ST,NEAREST )
  1591.         }
  1592.     END
  1593.  
  1594. Note:
  1595.     This instruction calculate rounding ST toward nearest,
  1596.     but if number is exact half then this instruction round
  1597.     it toward signed infinity. Sign of this infinity is same
  1598.     with sign of number.
  1599.  
  1600. Examples:
  1601.  
  1602.      1.2   ->   1.0
  1603.     -1.2   ->  -1.0
  1604.      3.0   ->   3.0
  1605.      0.0   ->   0.0
  1606.      1.5   ->   2.0
  1607.      1.8   ->   2.0
  1608.     -2.0   ->  -2.0
  1609.     -1.5   ->  -2.0
  1610.  
  1611. FPU Flags Affected:  S,P,D,I,C1
  1612.  
  1613. FPU mode: Any
  1614.  
  1615. Physical Form:         FRINT2
  1616. COP (Code of Operation): DBH FCH
  1617. Clocks:          Cx83D87  : 15
  1618.           Cx83S87  : 15
  1619.           CxEMC87  : 15
  1620.           Cx487DLC :
  1621. ----------O-FRSTPM---------------------------------
  1622. OPCODE FRSTPM - FPU Reset Protected Mode
  1623.  
  1624.  
  1625.  
  1626. FPU:  i287XL i287XLT
  1627. Type of Instruction: FPU instruction
  1628.  
  1629. Instruction: FRSTPM
  1630. Description:
  1631.     Reset Cooprocessor from Protected Mode
  1632.     to Real Address mode.
  1633.  
  1634. FPU Flags Affected: None
  1635. CPU mode:Any ???
  1636.  
  1637. Physical Form:         FRSTPM
  1638. COP (Code of Operation): DBH E5H
  1639. Clocks:          i287XL   : 12
  1640.           i287XLT  : 12
  1641. ----------O-FSBP0----------------------------------
  1642. OPCODE FSBP0 - FPU: Set Bank pointer to Bank # 0
  1643.  
  1644.  
  1645. FPU:  IIT FPUs.
  1646. Type of Instruction: FPU instruction
  1647.  
  1648. Instruction: FSBP0
  1649. Description:
  1650.     ;   This Instruction set current bank pointer to
  1651.     ; Bank # 0.
  1652.  
  1653.     ;   Each bank contain eight 80bit registers
  1654.     ;   There are 3 banks (0,1,2) in Chip
  1655.  
  1656.     ;   After initialization FPU select bank # 0.
  1657.  
  1658.  
  1659. FPU Flags Affected:  None
  1660.  
  1661. FPU mode: Any
  1662.  
  1663. Physical Form:         FSBP0
  1664. COP (Code of Operation): DBH E8H
  1665. Clocks:       IIT 2c87    : 6
  1666.        IIT 3c87    : 6
  1667.        IIT 3c87SX  : 6
  1668. ----------O-FSBP1----------------------------------
  1669. OPCODE FSBP1 - FPU: Set Bank pointer to Bank # 1
  1670.  
  1671.  
  1672.  
  1673. FPU:  IIT FPUs.
  1674. Type of Instruction: FPU instruction
  1675.  
  1676. Instruction: FSBP1
  1677. Description:
  1678.     ;   This Instruction set current bank pointer to
  1679.     ; Bank # 1.
  1680.  
  1681.     ;   Each bank contain eight 80bit registers
  1682.     ;   There are 3 banks (0,1,2) in Chip
  1683.  
  1684.     ;   After initialization FPU select bank # 0.
  1685.  
  1686.  
  1687. FPU Flags Affected:  None
  1688.  
  1689. FPU mode: Any
  1690.  
  1691. Physical Form:         FSBP1
  1692. COP (Code of Operation): DBH EBH
  1693. Clocks:       IIT 2c87    : 6
  1694.        IIT 3c87    : 6
  1695.        IIT 3c87SX  : 6
  1696. ----------O-FSBP2----------------------------------
  1697. OPCODE FSBP2 - FPU: Set Bank pointer to Bank # 2
  1698.  
  1699.  
  1700.  
  1701. FPU:  IIT FPUs.
  1702. Type of Instruction: FPU instruction
  1703.  
  1704. Instruction: FSBP2
  1705. Description:
  1706.     ;   This Instruction set current bank pointer to
  1707.     ; Bank # 2.
  1708.  
  1709.     ;   Each bank contain eight 80bit registers
  1710.     ;   There are 3 banks (0,1,2) in Chip
  1711.  
  1712.     ;   After initialization FPU select bank # 0.
  1713.  
  1714.  
  1715. FPU Flags Affected:  None
  1716.  
  1717. FPU mode: Any
  1718.  
  1719. Physical Form:         FSBP2
  1720. COP (Code of Operation): DBH EAH
  1721. Clocks:       IIT 2c87    : 6
  1722.        IIT 3c87    : 6
  1723.        IIT 3c87SX  : 6
  1724. ----------O-IBTS-----------------------------------
  1725. OPCODE IBTS    -  Insert Bits String
  1726.  
  1727.  
  1728. CPU:  80386 step A0-B0 only
  1729. Type of Instruction: User
  1730.  
  1731. Instruction:  IBTS base,bitoffset,len,sorc
  1732.  
  1733. Description:
  1734.          Write bit string length <len> bits from
  1735.          <sorc> [bits <len> .. 0 ]    (lowest bits) to bitfield,
  1736.          defined by <base> and bitsoffset <bitoffset> from this base
  1737.          to start of the field to write. String write from this start
  1738.          field bit to higher memory addresses or register bits.
  1739.  
  1740.  
  1741. Flags Affected: None
  1742. CPU mode: RM,PM,VM
  1743.  
  1744. +++++++++++++++++++++++
  1745. Physical Form:      IBTS    r/m16,AX,CL,r16
  1746.           IBTS    r/m32,EAX,CL,r32
  1747. COP (Code of Operation)     : 0FH A7H Postbyte
  1748.  
  1749. Clocks:        IBTS
  1750. 80386:        12/19
  1751. ----------O-ICEBP----------------------------------
  1752. OPCODE ICEBP  - PWI Mode BreakPoint, ICE address space
  1753.  
  1754.  
  1755.  
  1756. CPU:  IBM 486SLC2
  1757. Type of Instruction: System
  1758.  
  1759. Instruction: ICEBP
  1760. Description:
  1761.     IF (condition) THEN  ; see condition below
  1762.            {
  1763.            SAVE STATUS OF EXECUTION TO ICE space;
  1764.            ENTER SMM;
  1765.            }
  1766.        ELSE
  1767.           {
  1768.           INT 1;
  1769.           }
  1770.        END
  1771.  
  1772. Note:    This condition can be set before execution this instruction:
  1773.     CPL=0
  1774.     MSR1000H.EPCEA=1
  1775.     MSR1000H.EPWI=1
  1776.  
  1777.  
  1778. Flags Affected: None
  1779. CPU mode: RM,PM0
  1780.  
  1781. Physical Form:         ICEBP
  1782. COP (Code of Operation): F1H
  1783. Clocks:     IBM 486SLC2   : 460
  1784. ----------O-ICEBP----------------------------------
  1785. OPCODE ICEBP  -     In-Circuit Emulator Breakpoint
  1786.  
  1787.  
  1788.  
  1789. CPU:  some models of i486, i386
  1790. Type of Instruction: System
  1791.  
  1792. Instruction: ICEBP
  1793. Description:
  1794.     IF (condition) THEN  ; see condition below
  1795.            {
  1796.            CHANGED TO THE ICE instruction mode;
  1797.            }
  1798.        ELSE
  1799.           {
  1800.           INT 1;
  1801.           }
  1802.        END
  1803.  
  1804. Note:    Condition  is  DR7.bit12=1
  1805.  
  1806. Note: This instruction very usefull to debbuging as Single-Byte Interrupt
  1807.       but it generate never int 3, but int 1.
  1808.  
  1809. Note: Frank van Gilluwe in his book "The PC Undocument", 1994 year say
  1810.       that this instruction is VERY UNDOCUMENT.
  1811.  
  1812. Flags Affected: None
  1813. CPU mode: RM,PM0
  1814.  
  1815. Physical Form:         ICEBP
  1816. COP (Code of Operation): F1H
  1817. Clocks:               : N/A
  1818. ----------O-ICERET---------------------------------
  1819. OPCODE ICERET    - Return from PWI mode, ICE space
  1820.  
  1821.  
  1822. CPU: IBM 486SLC2
  1823. Type of Instruction: System Operation
  1824.             (Work only then CPL=0)
  1825.  
  1826. Instruction: ICERET
  1827. Description:
  1828.           Load All Registers (Include Shadow Registers) from Table
  1829.           Which Begin on  place pointed ES:EDI, and return from PWI
  1830.           mode.
  1831.  
  1832. Format of ICERET Table:
  1833.     (Table )
  1834.            Offset  Len  Description
  1835.         0H    4    CR0
  1836.         4H    4    EFLAGS
  1837.         8H    4    EIP
  1838.         CH    4    EDI
  1839.         10H    4    ESI
  1840.         14H    4    EBP
  1841.         18H    4    ESP
  1842.         1CH    4    EBX
  1843.         20H    4    EDX
  1844.         24H    4    ESX
  1845.         28H    4    EAX
  1846.         2CH    4    DR6
  1847.         30H    4    DR7
  1848.         34H    4    TR     (16 bit, zero filled up)
  1849.         38H    4    LDT  ---------
  1850.         3CH    4    GS   ---------
  1851.         40H    4    FS   ---------
  1852.         44H    4    DS   ---------
  1853.         48H    4    SS   ---------
  1854.         4CH    4    CS   ---------
  1855.         50H    4    ES   ---------
  1856.         54H    4    TSS.attrib
  1857.         58H    4    TSS.base
  1858.         5CH    4    TSS.limit
  1859.         60H    4    Reserved
  1860.         64H    4    IDT.base
  1861.         68H    4    IDT.limit
  1862.         6CH    4    REP OUTS overrun flag
  1863.         70H    4    GDT.base
  1864.         74H    4    GDT.limit
  1865.         78H    4    LDT.attrib
  1866.         7CH    4    LDT.base
  1867.         80H    4    LDT.limit
  1868.         84H    4    GS.attrib
  1869.         88H    4    GS.base
  1870.         8CH    4    GS.limit
  1871.         90H    4    FS.attrib
  1872.         94H    4    FS.base
  1873.         98H    4    FS.limit
  1874.         9CH    4    DS.attrib
  1875.         A0H    4    DS.base
  1876.         A4H    4    DS.limit
  1877.         A8H    4    SS.attrib
  1878.         ACH    4    SS.base
  1879.         B0H    4    SS.limit
  1880.         B4H    4    CS.attrib
  1881.         B8H    4    CS.base
  1882.         BCH    4    CS.limit
  1883.         C0H    4    ES.attrib
  1884.         C4H    4    ES.base
  1885.         C8H    4    ES.limit
  1886.                 Unknown Unusable area
  1887.                 ;; Temporary registers:
  1888.         100H    4    TST
  1889.         104H    4    IDX
  1890.         108H    4    TMPH
  1891.         10CH    4    TMPG
  1892.         110H    4    TMPF
  1893.         114H    4    TMPE
  1894.         118H    4    TMPD
  1895.         11CH    4    TMPC
  1896.         120H    4    TMPB
  1897.         124H    4    TMPA
  1898.  
  1899.         128H    4    CR2
  1900.         12CH    4    CR3
  1901.         130H    4    MSR1001H (31-0)
  1902.         134H    4    MSR1001H (63-32)
  1903.         138H    4    MSR1000H (15-0)
  1904.         13CH    4    DR0
  1905.         140H    4    DR1
  1906.         144H    4    DR2
  1907.         148H    4    DR3
  1908.         14CH    4    PEIP
  1909.         Length of table is 150H bytes.
  1910.  
  1911. Note: For descriptor format refer to LOADALL and RES3 instructions.
  1912.  
  1913. Flags Affected: All (FLAGS Register Reload)
  1914. CPU mode: SMM
  1915.  
  1916. Physical Form:         ICERET
  1917. COP (Code of Operation): 0FH 07H  Note: Code is same with Intel's LOADALL
  1918. Clocks:     IBM 486SLC2   : 440
  1919. ----------O-INS------------------------------------
  1920. OPCODE INS  -    Insert Bit String
  1921.  
  1922.  
  1923. CPU: NEC/Sony  all V-series
  1924. Type of Instruction: User
  1925.  
  1926. Instruction:  INS  start,len
  1927.  
  1928. Description:
  1929.       BitField [         BASE =  ES:DI
  1930.          START BIT OFFSET =  start
  1931.                LENGTH =  len
  1932.              ]   <-     AX [ bits= (len-1)..0]
  1933.  
  1934.  
  1935. Note:    di and start automatically UPDATE
  1936. Note:    Alternative Name of this instruction is NECINS
  1937.  
  1938. Flags Affected: None
  1939. CPU mode: RM
  1940.  
  1941. +++++++++++++++++++++++
  1942. Physical Form         : INS    reg8,reg8
  1943. COP (Code of Operation)     : 0FH 31H  PostByte
  1944.  
  1945.  
  1946. Clocks:        INS  reg8,reg8
  1947. NEC V20:    31-117
  1948. ----------O-INVD-----------------------------------
  1949. OPCODE INVD  - Invalidate Cache Buffer
  1950.  
  1951.  
  1952.  
  1953. CPU:  I486 +
  1954. Type of Instruction: System
  1955.  
  1956. Instruction: INVD
  1957. Description:
  1958.          FLUSH INTERNAL CACHE
  1959.    ( It means that all lines of internal caches sets as
  1960.     invalid )
  1961.      SIGNAL EXTERNAL CACHE TO FLUSH
  1962.  
  1963.  
  1964. Notes: This instruction not work in Real Mode and  in
  1965. Protected mode work only in ring 0 ;
  1966.  
  1967. Flags Affected: None
  1968. CPU mode: PM0,SMM?
  1969.  
  1970. Physical Form:         INVD
  1971. COP (Code of Operation): 0FH 08H
  1972. Clocks: Cyrix Cx486SLC : 4
  1973.           i486     : 4
  1974.           Pentium  : 15
  1975. ----------O-INVLPG---------------------------------
  1976. OPCODE INVLPG    - Invalidate Page Entry In TLB
  1977.  
  1978.  
  1979.  
  1980. CPU:  I486 +
  1981. Type of Instruction: System
  1982.  
  1983. Instruction: INVLPG mem
  1984. Description:
  1985.     IF found in data or code (if both) (or common if single)
  1986.        TLB entry with linear address (page part) same as
  1987.        memory operand <mem> then mark this entry as Invalid;
  1988.  
  1989. Notes: This instruction not work in Real Mode and  in
  1990. Protected mode work only in ring 0 ;
  1991.  
  1992. Flags Affected: None
  1993. CPU mode: RM,PM,VM,SMM
  1994.  
  1995. Physical Form:         INVLPG mem
  1996. COP (Code of Operation): 0FH 01H mm111mmm
  1997. Clocks: Cyrix Cx486SLC : 4
  1998.           i486     : 12 if hit
  1999.                : 11 if not hit
  2000.           Pentium  : 25
  2001. ----------O-LOADALL--------------------------------
  2002. OPCODE LOADALL     - Load All Registers
  2003.  
  2004.  
  2005. CPU:  Intel 386+ +all clones
  2006.  
  2007. Type of Instruction: System
  2008.             (Work only then CPL=0)
  2009.  
  2010. Instruction: LOADALL
  2011. Description:
  2012.           Load All Registers (Include Shadow Registers) from Table
  2013.           Which Begin on  place pointed ES:EDI
  2014.  
  2015. Format of LOADALL Table:
  2016.     (Table )
  2017.            Offset  Len  Description
  2018.         0H    4    CR0
  2019.         4H    4    EFLAGS
  2020.         8H    4    EIP
  2021.         CH    4    EDI
  2022.         10H    4    ESI
  2023.         14H    4    EBP
  2024.         18H    4    ESP
  2025.         1CH    4    EBX
  2026.         20H    4    EDX
  2027.         24H    4    ESX
  2028.         28H    4    EAX
  2029.         2CH    4    DR6
  2030.         30H    4    DR7
  2031.         34H    4    TR     (16 bit, zero filled up)
  2032.         38H    4    LDT  ---------
  2033.         3CH    4    GS   ---------
  2034.         40H    4    FS   ---------
  2035.         44H    4    DS   ---------
  2036.         48H    4    SS   ---------
  2037.         4CH    4    CS   ---------
  2038.         50H    4    ES   ---------
  2039.         54H    4    TSS.attrib
  2040.         58H    4    TSS.base
  2041.         5CH    4    TSS.limit
  2042.         60H    4    0s
  2043.         64H    4    IDT.base
  2044.         68H    4    IDT.limit
  2045.         6CH    4    0s
  2046.         70H    4    GDT.base
  2047.         74H    4    GDT.limit
  2048.         78H    4    LDT.attrib
  2049.         7CH    4    LDT.base
  2050.         80H    4    LDT.limit
  2051.         84H    4    GS.attrib
  2052.         88H    4    GS.base
  2053.         8CH    4    GS.limit
  2054.         90H    4    FS.attrib
  2055.         94H    4    FS.base
  2056.         98H    4    FS.limit
  2057.         9CH    4    DS.attrib
  2058.         A0H    4    DS.base
  2059.         A4H    4    DS.limit
  2060.         A8H    4    SS.attrib
  2061.         ACH    4    SS.base
  2062.         B0H    4    SS.limit
  2063.         B4H    4    CS.attrib
  2064.         B8H    4    CS.base
  2065.         BCH    4    CS.limit
  2066.         C0H    4    ES.attrib
  2067.         C4H    4    ES.base
  2068.         C8H    4    ES.limit
  2069.         CCH    4    Length of table
  2070.         D0H    30h    Unused,not loaded
  2071.         100H    4    Temporary Register IST
  2072.         104H    4    Temporary Register I
  2073.         108H    4    Temporary Register H
  2074.         10CH    4    Temporary Register G
  2075.         110H    4    Temporary Register F
  2076.         114H    4    Temporary Register E
  2077.         118H    4    Temporary Register D
  2078.         11CH    4    Temporary Register C
  2079.         120H    4    Temporary Register B
  2080.         124H    4    Temporary Register A
  2081.  
  2082.  
  2083.  
  2084. Format    of Attrib field:
  2085.  
  2086.            Byte    Description
  2087.            0    0s
  2088.            1    AR (Access Right) byte in the Descriptor format
  2089.             Note:
  2090.                P bit is a valid bit
  2091.                if valid bit=0 then Shadow Register is invalid and
  2092.                   INT 0DH - General Protection Fault call
  2093.                DPL of SS,CS det. CPL
  2094.            2-3    0s
  2095.  
  2096. Flags Affected: All (FLAGS Register Reload)
  2097. CPU mode: RM,PM0
  2098.  
  2099. Physical Form:         LOADALL
  2100. COP (Code of Operation): 0FH 07H
  2101. Clocks:          i386XX   : n/a
  2102.           i486XX   : n/a
  2103.  
  2104. Note: This operation used 102 data transfer cycles on 32bit bus
  2105.       Typical clocks:
  2106.           i386SX: ~350
  2107.           i386DX: ~290
  2108.           i486XX: ~220
  2109. ----------O-LOADALL--------------------------------
  2110. OPCODE LOADALL     - Load All Registers From Table
  2111.  
  2112.  
  2113. CPU:  Intel 80286 and all its clones
  2114.  
  2115. Type of Instruction: System
  2116.             (Work only then CPL=0)
  2117.  
  2118. Instruction: LOADALL
  2119. Description:
  2120.           Load All Registers (Include Shadow Registers) from Table
  2121.           Which Begin on  000800H  Address, Len of this table is
  2122.           66H
  2123.  
  2124. Format of LOADALL Table:
  2125.     (Table )
  2126.            Address    Len  Description
  2127.         800H    6    None
  2128.         806H    2    MSW
  2129.         808H    14    None
  2130.         816H    2    TR
  2131.         818H    2    FLAGS
  2132.         81AH    2    IP
  2133.         81CH    2    LDTR
  2134.         81EH    2    DS
  2135.         820H    2    SS
  2136.         822H    2    CS
  2137.         824H    2    ES
  2138.         826H    2    DI
  2139.         828H    2    SI
  2140.         82AH    2    BP
  2141.         82CH    2    SP
  2142.         82EH    2    BX
  2143.         830H    2    DX
  2144.         832H    2    CX
  2145.         834H    2    AX
  2146.         836H    6    ES Shadow Descriptor
  2147.         83CH    6    CS Shadow Descriptor
  2148.         842H    6    SS Shadow Descriptor
  2149.         848H    6    DS Shadow Descriptor
  2150.         84EH    6    GDTR
  2151.         854H    6    LDT Shadow Descriptor
  2152.         85AH    6    IDTR
  2153.         860H    6    TSS Shadow Descriptor
  2154.  
  2155. Format    of Shadow Descriptor:
  2156.  
  2157.            Byte    Description
  2158.            0-2    24bit Phisical Address
  2159.         3    AR (Access Right) byte
  2160.            4-5    16bit Segment Limit
  2161.  
  2162.  
  2163. Format    of GDTR and IDTR:
  2164.  
  2165.            Byte    Description
  2166.            0-2    24bit Phisical Address
  2167.         3    0s
  2168.            4-5    16bit Segment Limit
  2169.  
  2170.  
  2171. Note: Using this instruction we may turn on "Big Real Mode" i.e. mode then
  2172. PG=1,PE=0,cpl=0. This mode very usefull,But Pentium never  support this
  2173. instruction.
  2174.  
  2175. Flags Affected: All (FLAGS Register Reload)
  2176. CPU mode: RM,PM0
  2177.  
  2178. Physical Form:         LOADALL
  2179. COP (Code of Operation): 0FH 05H
  2180. Clocks:          80286    : 195
  2181. ----------O-MOVD-----------------------------------
  2182. OPCODE MOVD   -     Move Dwords
  2183.  
  2184. CPU:  all which supported IA MMX:
  2185.       Pentium (P55C only), Pentium (tm) Pro  (P6) future models
  2186. Type of Instruction: User
  2187.  
  2188. Instruction: MOVD  dest,src
  2189. Description:
  2190.     IF dest is MMi register THEN
  2191.     {
  2192.         dest[63..32] <- 0
  2193.         dest[31..0]  <- src
  2194.     } ELSE      ; If dest is DWORD
  2195.     dest <- src [31..0]
  2196.  
  2197. Note: This instruction moved DWORDs to/from MMX registers
  2198.  
  2199. Flags Affected:     None
  2200.  
  2201. Exceptions:
  2202.  
  2203. RM    PM    VM    SMM    Description
  2204.     #GP(0)            If result in Non-Writable segment
  2205.     #GP(0)            If Illegal memory operand's EA in CS,DS,ES,FS,GS
  2206.     #SS(0)            If illegal memory operand's EA in SS
  2207.       #PF(fcode)        If page fault
  2208.     #AC    #AC        If unaligned memory reference then alignment
  2209.                 check enabled and in ring 3.
  2210. #UD    #UD    #UD    #UD    If CR0.EM = 1
  2211. #NM    #NM    #NM    #NM    If CR0.TS = 1
  2212. #MF    #MF    #MF    #MF    If pending FPU Exception
  2213.  
  2214. ++++++++++++++++++++++++++++++++++++++
  2215. COP & Times:
  2216.  
  2217. MOVD    mm,r/m32    0FH 6EH PostByte
  2218. MOVD    r/m32,mm    0Fh 7Eh PostByte
  2219.  
  2220.             mm,r/m32   r/m32,mm
  2221.      P55C:    n/a    (~1)       (~1)
  2222. future P6:    n/a    (~1)       (~1)
  2223. ----------O-MOVQ-----------------------------------
  2224. OPCODE MOVQ   -     Move Qwords
  2225.  
  2226. CPU:  all which supported IA MMX:
  2227.       Pentium (P55C only), Pentium (tm) Pro  (P6) future models
  2228. Type of Instruction: User
  2229.  
  2230. Instruction: MOVQ  dest,src
  2231. Description:
  2232.     dest <- src
  2233.  
  2234.  
  2235. Note: This instruction moved QWORDs to/from MMX registers
  2236.       Of course, IA support Big-endian QWORDS.
  2237.  
  2238. Flags Affected:     None
  2239.  
  2240. Exceptions:
  2241.  
  2242. RM    PM    VM    SMM    Description
  2243.     #GP(0)            If result in Non-Writable segment
  2244.     #GP(0)            If Illegal memory operand's EA in CS,DS,ES,FS,GS
  2245.     #SS(0)            If illegal memory operand's EA in SS
  2246.       #PF(fcode)        If page fault
  2247.     #AC    #AC        If unaligned memory reference then alignment
  2248.                 check enabled and in ring 3.
  2249. #UD    #UD    #UD    #UD    If CR0.EM = 1
  2250. #NM    #NM    #NM    #NM    If CR0.TS = 1
  2251. #MF    #MF    #MF    #MF    If pending FPU Exception
  2252.  
  2253. ++++++++++++++++++++++++++++++++++++++
  2254. COP & Times:
  2255.  
  2256. MOVQ    mm,mm/m64    0FH 6FH PostByte
  2257. MOVQ    mm/m64,mm    0Fh 7Fh PostByte
  2258.  
  2259. Note: In PostByte instead IU registers used MMX registers,
  2260.       0Fh 6Fh C0h means     MOVQ  MM0,MM0
  2261.  
  2262.             mm,r/m32   r/m32,mm
  2263.      P55C:    n/a    (~1)       (~1)
  2264. future P6:    n/a    (~1)       (~1)
  2265. ----------O-MOVSPA---------------------------------
  2266. OPCODE MOVSPA      -  Move Stack Pointer After Bank Switched
  2267.  
  2268. CPU:  NEC V25,V35,V25 Plus,V35 Plus,V25 Software Guard
  2269. Type of Instruction: System
  2270.  
  2271. Instruction:  MOVSPA
  2272.  
  2273. Description:  This instruction transfer     both SS and SP     of the old register
  2274.           bank to new register bank after the bank has been switched by
  2275.           interrupt or BRKCS instruction.
  2276.  
  2277.  
  2278.  
  2279. Flags Affected:     None
  2280. CPU mode: RM
  2281.  
  2282. +++++++++++++++++++++++
  2283. Physical Form:    MOVSPA
  2284. COP (Code of Operation)     : 0Fh 25h
  2285.  
  2286. Clocks:     16
  2287. ----------O-MOVSPB---------------------------------
  2288. OPCODE MOVSPB      -  Move Stack Pointer Before Bamk Switching
  2289.  
  2290. CPU:  NEC V25,V35,V25 Plus,V35 Plus,V25 Software Guard
  2291. Type of Instruction: System
  2292.  
  2293. Instruction:  MOVSPB  Number_of_bank
  2294.  
  2295. Description:  The MOVSPB instruction transfers the current SP and SS before
  2296.           the bank switching to new register bank.
  2297.  
  2298. Note:          New Register Bank Number indicated by lower 3bit of Number_of_
  2299.           _bank.
  2300.  
  2301. Note:          See BRKCS instruction for more info about banks.
  2302.  
  2303. Flags Affected:     None
  2304. CPU mode: RM
  2305.  
  2306. +++++++++++++++++++++++
  2307. Physical Form:    MOVSPB      reg16
  2308. COP (Code of Operation)     : 0Fh 95h <1111 1RRR>
  2309.  
  2310. Clocks:     11
  2311. ----------O-NOT1-----------------------------------
  2312. OPCODE NOT1  -     Invert a Specified bit
  2313.  
  2314.  
  2315. CPU: NEC/Sony  all  V-series
  2316. Type of Instruction: User
  2317.  
  2318. Instruction:  NOT1 dest,bitnumb
  2319.  
  2320. Description:
  2321.         (BIT bitnumb OF dest) <-  NOT (BIT bitnumb OF dest);
  2322.  
  2323.  
  2324. Flags Affected: None
  2325.  
  2326. CPU mode: RM
  2327.  
  2328. +++++++++++++++++++++++
  2329. Physical Form:           NOT1 reg/mem8,CL
  2330. COP (Code of Operation)     : 0FH 16H  Postbyte
  2331.  
  2332. Physical Form:           NOT1 reg/mem8,imm8
  2333. COP (Code of Operation)     : 0FH 1EH  Postbyte imm8
  2334.  
  2335. Physical Form:           NOT1 reg/mem16,CL
  2336. COP (Code of Operation)     : 0FH 17H  Postbyte
  2337.  
  2338. Physical Form:           NOT1 reg/mem16,imm8
  2339. COP (Code of Operation)     : 0FH 1FH  Postbyte  imm8
  2340.  
  2341.  
  2342. Clocks:                 NOT1
  2343.          r/m8,CL    r/m8,i8        r/m16,CL   r/m16,i8
  2344. NEC V20:      4/18     5/19          4/18         5/19
  2345.  
  2346.  
  2347.  
  2348.  
  2349.  
  2350. --------------------------------------------------
  2351. OIO  -    Official Undefined Opcode
  2352.  
  2353. CPU:    Cyrix Cx6x86 (same code on AMD Am5k86)
  2354.  
  2355. Logical Form:    OIO
  2356. Description:
  2357.         Caused #UD exception
  2358.  
  2359. Flags Affected: No Flags Affected
  2360. CPU Mode : RM,PM,VM,VME,SMM
  2361.  
  2362. Exceptions :
  2363.     RM    PM    V86    VME    SMM
  2364.     #UD    #UD    #UD    #UD    #UD Undefined Instruction
  2365.     No more Exceptions
  2366.  
  2367. Note :
  2368.     This instruction caused #UD. AMD  guaranteed that in future AMD's
  2369.     CPUs this instruction will caused #UD. Of course all previous CPUs
  2370.     (186+) caused #UD on this opcode. This instruction used by software
  2371.     writers for testing #UD exception servise routine.
  2372.  
  2373.  
  2374.  
  2375. ++++++++++++++++++++++++++++++
  2376.  
  2377. Physical Form : UD
  2378.  
  2379. COP (Code of Operation) : 0Fh FFh
  2380.  
  2381. Clocks :    UD
  2382. 8088:    Not supported
  2383. NEC V20:    Not supported
  2384. 80186:    ~int
  2385. 80286:    ~int
  2386. 80386:    ~int
  2387. Cx486SLC:    ~int
  2388. i486:    ~int
  2389. Cx486DX:    ~int
  2390. Cx5x86:        ~int
  2391. Pentium:    ~int
  2392. Nx5x86:        ~int
  2393. Cx6x86:        ~int
  2394. Am5k86:        ~int
  2395. Pentium Pro:    ~int
  2396.  
  2397. ++++++++++++++++++++++++++++++
  2398. ----------O-PACKSSDW-------------------------------
  2399. OPCODE PACKSSDW      -  Pack with Signed Saturation dword to word
  2400.  
  2401. CPU:  all which supported IA MMX:
  2402.       Pentium (P55C only), Pentium (tm) Pro  (P6) future models
  2403. Type of Instruction: User
  2404.  
  2405. Instruction: PACKSSDW  dest,src
  2406. Description:
  2407.     dest[15..0]    <-    SaturateSignedDWordToSignedWord dest[31..0]
  2408.     dest[31..16]    <-    SaturateSignedDWordToSignedWord dest[63..32]
  2409.     dest[47..32]    <-    SaturateSignedDWordToSignedWord src[31..0]
  2410.     dest[63..46]    <-    SaturateSignedDWordToSignedWord src[63..32]
  2411.  
  2412.  
  2413. Note: This instruction packs and saturates signed data from src and dest to
  2414.       dest.
  2415.       If signed value of word larger or smaller that the range of signed byte
  2416.       value is saturated (in case of overflow to 7Fh, in underflow to 80h).
  2417.  
  2418. Flags Affected:     None
  2419.  
  2420. Exceptions:
  2421.  
  2422. RM    PM    VM    SMM    Description
  2423.     #GP(0)            If Illegal memory operand's EA in CS,DS,ES,FS,GS
  2424.     #SS(0)            If illegal memory operand's EA in SS
  2425.       #PF(fcode)        If page fault
  2426.     #AC    #AC        If unaligned memory reference then alignment
  2427.                 check enabled and in ring 3.
  2428. #UD    #UD    #UD    #UD    If CR0.EM = 1
  2429. #NM    #NM    #NM    #NM    If CR0.TS = 1
  2430. #MF    #MF    #MF    #MF    If pending FPU Exception
  2431.  
  2432. ++++++++++++++++++++++++++++++++++++++
  2433. COP & Times:
  2434.  
  2435. PACKSSDW mm,mm/m64    0FH 6BH PostByte
  2436.  
  2437.      P55C:    n/a
  2438. future P6:    n/a
  2439. ----------O-PACKSSWB-------------------------------
  2440. OPCODE PACKSSWB      -  Pack with Signed Saturation word to Byte
  2441.  
  2442. CPU:  all which supported IA MMX:
  2443.       Pentium (P55C only), Pentium (tm) Pro  (P6) future models
  2444. Type of Instruction: User
  2445.  
  2446. Instruction: PACKSSWB  dest,src
  2447. Description:
  2448.     dest[7..0]    <-    SaturateSignedWordToSignedByte dest[15..0]
  2449.     dest[15..8]    <-    SaturateSignedWordToSignedByte dest[31..16]
  2450.     dest[23..16]    <-    SaturateSignedWordToSignedByte dest[47..32]
  2451.     dest[31..24]    <-    SaturateSignedWordToSignedByte dest[63..48]
  2452.     dest[39..32]    <-    SaturateSignedWordToSignedByte src[15..0]
  2453.     dest[47..40]    <-    SaturateSignedWordToSignedByte src[31..16]
  2454.     dest[55..48]    <-    SaturateSignedWordToSignedByte src[47..32]
  2455.     dest[63..56]    <-    SaturateSignedWordToSignedByte src[63..48]
  2456.  
  2457.  
  2458. Note: This instruction packs and saturates signed data from src and dest to
  2459.       dest
  2460.  
  2461. Flags Affected:     None
  2462.  
  2463. Exceptions:
  2464.  
  2465. RM    PM    VM    SMM    Description
  2466.     #GP(0)            If Illegal memory operand's EA in CS,DS,ES,FS,GS
  2467.     #SS(0)            If illegal memory operand's EA in SS
  2468.       #PF(fcode)        If page fault
  2469.     #AC    #AC        If unaligned memory reference then alignment
  2470.                 check enabled and in ring 3.
  2471. #UD    #UD    #UD    #UD    If CR0.EM = 1
  2472. #NM    #NM    #NM    #NM    If CR0.TS = 1
  2473. #MF    #MF    #MF    #MF    If pending FPU Exception
  2474.  
  2475. ++++++++++++++++++++++++++++++++++++++
  2476. COP & Times:
  2477.  
  2478. PACKSSWB mm,mm/m64    0FH 63H PostByte
  2479.  
  2480.      P55C:    n/a
  2481. future P6:    n/a
  2482. ----------O-PACKUSWB-------------------------------
  2483. OPCODE PACKUSWB      -  Pack with Unsigned Saturation word to Byte
  2484.  
  2485. CPU:  all which supported IA MMX:
  2486.       Pentium (P55C only), Pentium (tm) Pro  (P6) future models
  2487. Type of Instruction: User
  2488.  
  2489. Instruction: PACKUSWB  dest,src
  2490. Description:
  2491.     dest[7..0]    <-    SaturateSignedWordToUnSignedByte dest[15..0]
  2492.     dest[15..8]    <-    SaturateSignedWordToUnSignedByte dest[31..16]
  2493.     dest[23..16]    <-    SaturateSignedWordToUnSignedByte dest[47..32]
  2494.     dest[31..24]    <-    SaturateSignedWordToUnSignedByte dest[63..48]
  2495.     dest[39..32]    <-    SaturateSignedWordToUnSignedByte src[15..0]
  2496.     dest[47..40]    <-    SaturateSignedWordToUnSignedByte src[31..16]
  2497.     dest[55..48]    <-    SaturateSignedWordToUnSignedByte src[47..32]
  2498.     dest[63..56]    <-    SaturateSignedWordToUnSignedByte src[63..48]
  2499.  
  2500.  
  2501. Note:  If signed value of word larger or smaller that the range of unsigned
  2502.        byte, value is saturated (if overflow to FFh, if underflow to 0h).
  2503.  
  2504. Flags Affected:     None
  2505.  
  2506. Exceptions:
  2507.  
  2508. RM    PM    VM    SMM    Description
  2509.     #GP(0)            If Illegal memory operand's EA in CS,DS,ES,FS,GS
  2510.     #SS(0)            If illegal memory operand's EA in SS
  2511.       #PF(fcode)        If page fault
  2512.     #AC    #AC        If unaligned memory reference then alignment
  2513.                 check enabled and in ring 3.
  2514. #UD    #UD    #UD    #UD    If CR0.EM = 1
  2515. #NM    #NM    #NM    #NM    If CR0.TS = 1
  2516. #MF    #MF    #MF    #MF    If pending FPU Exception
  2517.  
  2518. ++++++++++++++++++++++++++++++++++++++
  2519. COP & Times:
  2520.  
  2521. PACKUSWB mm,mm/m64    0FH 67H PostByte
  2522.  
  2523.      P55C:    n/a
  2524. future P6:    n/a
  2525. ----------O-PADDB----------------------------------
  2526. OPCODE PADDB    -  Packed Add Bytes
  2527.  
  2528. CPU:  all which supported IA MMX:
  2529.       Pentium (P55C only), Pentium (tm) Pro  (P6) future models
  2530. Type of Instruction: User
  2531.  
  2532. Instruction: PADDB  dest,src
  2533. Description:
  2534.     dest[7..0]    <-    dest[7..0]   + src[7..0]
  2535.     dest[15..8]    <-    dest[15..8]  + src[15..8]
  2536.     dest[23..16]    <-    dest[23..16] + src[23..16]
  2537.     dest[31..24]    <-    dest[31..24] + src[31..24]
  2538.     dest[39..32]    <-    dest[39..32] + src[39..32]
  2539.     dest[47..40]    <-    dest[47..40] + src[47..40]
  2540.     dest[55..48]    <-    dest[55..48] + src[55..48]
  2541.     dest[63..56]    <-    dest[63..56] + src[63..56]
  2542.  
  2543.  
  2544. Note:      This instruction adds the bytes of the source to the bytes of the
  2545.     destination and writes the results to the MMX register.
  2546.     When the result is too large to be represented in a packed byte
  2547.     (overflow), the result wraps around and the lower 8 bits are writen to
  2548.     the destination register.
  2549.  
  2550. Flags Affected:     None
  2551.  
  2552. Exceptions:
  2553.  
  2554. RM    PM    VM    SMM    Description
  2555.     #GP(0)            If Illegal memory operand's EA in CS,DS,ES,FS,GS
  2556.     #SS(0)            If illegal memory operand's EA in SS
  2557.       #PF(fcode)        If page fault
  2558.     #AC    #AC        If unaligned memory reference then alignment
  2559.                 check enabled and in ring 3.
  2560. #UD    #UD    #UD    #UD    If CR0.EM = 1
  2561. #NM    #NM    #NM    #NM    If CR0.TS = 1
  2562. #MF    #MF    #MF    #MF    If pending FPU Exception
  2563. #13        #13        If any part of the the operand lies outside of
  2564.                 the EA space from 0 to FFFFH
  2565. ++++++++++++++++++++++++++++++++++++++
  2566. COP & Times:
  2567.  
  2568. PADDB    mm,mm/m64    0FH FCH PostByte
  2569.  
  2570.      P55C:    n/a
  2571. future P6:    n/a
  2572. ----------O-PADDD----------------------------------
  2573. OPCODE PADDD    -  Packed Add Dwords
  2574.  
  2575. CPU:  all which supported IA MMX:
  2576.       Pentium (P55C only), Pentium (tm) Pro  (P6) future models
  2577. Type of Instruction: User
  2578.  
  2579. Instruction: PADDD  dest,src
  2580. Description:
  2581.     dest[31..0]    <-    dest[31..0]  + src[31..0]
  2582.     dest[63..32]    <-    dest[63..32] + src[63..32]
  2583.  
  2584.  
  2585. Note:      This instruction adds the dwords of the source to the dwords of the
  2586.     destination and writes the results to the MMX register.
  2587.     When the result is too large to be represented in a packed dword
  2588.     (overflow), the result wraps around and the lower 32 bits are writen to
  2589.     the destination register.
  2590.  
  2591. Flags Affected:     None
  2592.  
  2593. Exceptions:
  2594.  
  2595. RM    PM    VM    SMM    Description
  2596.     #GP(0)            If Illegal memory operand's EA in CS,DS,ES,FS,GS
  2597.     #SS(0)            If illegal memory operand's EA in SS
  2598.       #PF(fcode)        If page fault
  2599.     #AC    #AC        If unaligned memory reference then alignment
  2600.                 check enabled and in ring 3.
  2601. #UD    #UD    #UD    #UD    If CR0.EM = 1
  2602. #NM    #NM    #NM    #NM    If CR0.TS = 1
  2603. #MF    #MF    #MF    #MF    If pending FPU Exception
  2604. #13        #13        If any part of the the operand lies outside of
  2605.                 the EA space from 0 to FFFFH
  2606. ++++++++++++++++++++++++++++++++++++++
  2607. COP & Times:
  2608.  
  2609. PADDW    mm,mm/m64    0FH FEH PostByte
  2610.  
  2611.      P55C:    n/a
  2612. future P6:    n/a
  2613. ----------O-PADDSB---------------------------------
  2614. OPCODE PADDSB    -  Packed Add with Saturation Bytes
  2615.  
  2616. CPU:  all which supported IA MMX:
  2617.       Pentium (P55C only), Pentium (tm) Pro  (P6) future models
  2618. Type of Instruction: User
  2619.  
  2620. Instruction: PADDSB  dest,src
  2621. Description:
  2622.     dest[7..0]    <-    SaturateToSignedByte(dest[7..0]      + src[7..0])
  2623.     dest[15..8]    <-    SaturateToSignedByte(dest[15..8]  + src[15..8])
  2624.     dest[23..16]    <-    SaturateToSignedByte(dest[23..16] + src[23..16])
  2625.     dest[31..24]    <-    SaturateToSignedByte(dest[31..24] + src[31..24])
  2626.     dest[39..32]    <-    SaturateToSignedByte(dest[39..32] + src[39..32])
  2627.     dest[47..40]    <-    SaturateToSignedByte(dest[47..40] + src[47..40])
  2628.     dest[55..48]    <-    SaturateToSignedByte(dest[55..48] + src[55..48])
  2629.     dest[63..56]    <-    SaturateToSignedByte(dest[63..56] + src[63..56])
  2630.  
  2631.  
  2632. Note:      This instruction adds the signed bytes of the source to the bytes of
  2633.     the destination and writes the results to the MMX register.
  2634.       If the result is larger or smaller than the range of a signed byte,
  2635.     the value is saturated (in the case of a overflow - to 7FH, and in the
  2636.     case of an underflow - to 80H).
  2637.  
  2638. Flags Affected:     None
  2639.  
  2640. Exceptions:
  2641.  
  2642. RM    PM    VM    SMM    Description
  2643.     #GP(0)            If Illegal memory operand's EA in CS,DS,ES,FS,GS
  2644.     #SS(0)            If illegal memory operand's EA in SS
  2645.       #PF(fcode)        If page fault
  2646.     #AC    #AC        If unaligned memory reference then alignment
  2647.                 check enabled and in ring 3.
  2648. #UD    #UD    #UD    #UD    If CR0.EM = 1
  2649. #NM    #NM    #NM    #NM    If CR0.TS = 1
  2650. #MF    #MF    #MF    #MF    If pending FPU Exception
  2651. #13        #13        If any part of the the operand lies outside of
  2652.                 the EA space from 0 to FFFFH
  2653. ++++++++++++++++++++++++++++++++++++++
  2654. COP & Times:
  2655.  
  2656. PADDSB    mm,mm/m64    0FH ECH PostByte
  2657.  
  2658.      P55C:    n/a
  2659. future P6:    n/a
  2660. ----------O-PADDSW---------------------------------
  2661. OPCODE PADDSW    -  Packed Add with Saturation Words
  2662.  
  2663. CPU:  all which supported IA MMX:
  2664.       Pentium (P55C only), Pentium (tm) Pro  (P6) future models
  2665. Type of Instruction: User
  2666.  
  2667. Instruction: PADDSW  dest,src
  2668. Description:
  2669.     dest[15..0]    <-    SaturateToSignedWord(dest[15..0]  + src[15..0])
  2670.     dest[31..16]    <-    SaturateToSignedWord(dest[31..16] + src[31..16])
  2671.     dest[47..32]    <-    SaturateToSignedWord(dest[47..32] + src[47..32])
  2672.     dest[63..48]    <-    SaturateToSignedWord(dest[63..48] + src[63..48])
  2673.  
  2674.  
  2675. Note:      This instruction adds the signed words of the source to the words of
  2676.     the destination and writes the results to the MMX register.
  2677.       If the result is larger or smaller than the range of a signed word,
  2678.     the value is saturated (in the case of a overflow - to 7FFFH, and in
  2679.     the case of an underflow - to 8000H).
  2680.  
  2681. Flags Affected:     None
  2682.  
  2683. Exceptions:
  2684.  
  2685. RM    PM    VM    SMM    Description
  2686.     #GP(0)            If Illegal memory operand's EA in CS,DS,ES,FS,GS
  2687.     #SS(0)            If illegal memory operand's EA in SS
  2688.       #PF(fcode)        If page fault
  2689.     #AC    #AC        If unaligned memory reference then alignment
  2690.                 check enabled and in ring 3.
  2691. #UD    #UD    #UD    #UD    If CR0.EM = 1
  2692. #NM    #NM    #NM    #NM    If CR0.TS = 1
  2693. #MF    #MF    #MF    #MF    If pending FPU Exception
  2694. #13        #13        If any part of the the operand lies outside of
  2695.                 the EA space from 0 to FFFFH
  2696. ++++++++++++++++++++++++++++++++++++++
  2697. COP & Times:
  2698.  
  2699. PADDSW    mm,mm/m64    0FH EDH PostByte
  2700.  
  2701.      P55C:    n/a
  2702. future P6:    n/a
  2703. ----------O-PADDUSB--------------------------------
  2704. OPCODE PADDUSB -  Packed Add Unsigned with Saturation Bytes
  2705.  
  2706. CPU:  all which supported IA MMX:
  2707.       Pentium (P55C only), Pentium (tm) Pro  (P6) future models
  2708. Type of Instruction: User
  2709.  
  2710. Instruction: PADDUSB  dest,src
  2711. Description:
  2712.     dest[7..0]    <-   SaturateToUnsignedByte(dest[7..0]     + src[7..0])
  2713.     dest[15..8]    <-   SaturateToUnsignedByte(dest[15..8]     + src[15..8])
  2714.     dest[23..16]    <-   SaturateToUnsignedByte(dest[23..16] + src[23..16])
  2715.     dest[31..24]    <-   SaturateToUnsignedByte(dest[31..24] + src[31..24])
  2716.     dest[39..32]    <-   SaturateToUnsignedByte(dest[39..32] + src[39..32])
  2717.     dest[47..40]    <-   SaturateToUnsignedByte(dest[47..40] + src[47..40])
  2718.     dest[55..48]    <-   SaturateToUnsignedByte(dest[55..48] + src[55..48])
  2719.     dest[63..56]    <-   SaturateToUnsignedByte(dest[63..56] + src[63..56])
  2720.  
  2721.  
  2722. Note:      This instruction adds the unsigned bytes of the source to the
  2723.     unsigned bytes of the destination operand and writes the results to the
  2724.     MMX register.
  2725.       When the result is larger than the range of an unsigned byte
  2726.     (overflow), the value is saturated to FFH. When the result is smaller
  2727.     than the range of an unsigned byte (underflow), the value is saturated
  2728.     to 00H.
  2729.  
  2730. Flags Affected:     None
  2731.  
  2732. Exceptions:
  2733.  
  2734. RM    PM    VM    SMM    Description
  2735.     #GP(0)            If Illegal memory operand's EA in CS,DS,ES,FS,GS
  2736.     #SS(0)            If illegal memory operand's EA in SS
  2737.       #PF(fcode)        If page fault
  2738.     #AC    #AC        If unaligned memory reference then alignment
  2739.                 check enabled and in ring 3.
  2740. #UD    #UD    #UD    #UD    If CR0.EM = 1
  2741. #NM    #NM    #NM    #NM    If CR0.TS = 1
  2742. #MF    #MF    #MF    #MF    If pending FPU Exception
  2743. #13        #13        If any part of the the operand lies outside of
  2744.                 the EA space from 0 to FFFFH
  2745. ++++++++++++++++++++++++++++++++++++++
  2746. COP & Times:
  2747.  
  2748. PADDUSB mm,mm/m64    0FH DCH PostByte
  2749.  
  2750.      P55C:    n/a
  2751. future P6:    n/a
  2752. ----------O-PADDUSW--------------------------------
  2753. OPCODE PADDUSW -  Packed Add Unsigned with Saturation Words
  2754.  
  2755. CPU:  all which supported IA MMX:
  2756.       Pentium (P55C only), Pentium (tm) Pro  (P6) future models
  2757. Type of Instruction: User
  2758.  
  2759. Instruction: PADDUSW  dest,src
  2760. Description:
  2761.     dest[15..0]    <-   SaturateToUnsignedWord(dest[15..0]     + src[15..0])
  2762.     dest[31..16]    <-   SaturateToUnsignedWord(dest[31..16] + src[31..16])
  2763.     dest[47..32]    <-   SaturateToUnsignedWord(dest[47..32] + src[47..32])
  2764.     dest[63..48]    <-   SaturateToUnsignedWord(dest[63..48] + src[63..48])
  2765.  
  2766.  
  2767. Note:      This instruction adds the unsigned words of the source to the
  2768.     unsigned words of the destination operand and writes the results to the
  2769.     MMX register.
  2770.       When the result is larger than the range of an unsigned word
  2771.     (overflow), the value is saturated to FFFFH. When the result is smaller
  2772.     than the range of an unsigned byte (underflow), the value is saturated
  2773.     to 0000H.
  2774.  
  2775. Flags Affected:     None
  2776.  
  2777. Exceptions:
  2778.  
  2779. RM    PM    VM    SMM    Description
  2780.     #GP(0)            If Illegal memory operand's EA in CS,DS,ES,FS,GS
  2781.     #SS(0)            If illegal memory operand's EA in SS
  2782.       #PF(fcode)        If page fault
  2783.     #AC    #AC        If unaligned memory reference then alignment
  2784.                 check enabled and in ring 3.
  2785. #UD    #UD    #UD    #UD    If CR0.EM = 1
  2786. #NM    #NM    #NM    #NM    If CR0.TS = 1
  2787. #MF    #MF    #MF    #MF    If pending FPU Exception
  2788. #13        #13        If any part of the the operand lies outside of
  2789.                 the EA space from 0 to FFFFH
  2790. ++++++++++++++++++++++++++++++++++++++
  2791. COP & Times:
  2792.  
  2793. PADDUSW mm,mm/m64    0FH DDH PostByte
  2794.  
  2795.      P55C:    n/a
  2796. future P6:    n/a
  2797. ----------O-PADDW----------------------------------
  2798. OPCODE PADDW    -  Packed Add Words
  2799.  
  2800. CPU:  all which supported IA MMX:
  2801.       Pentium (P55C only), Pentium (tm) Pro  (P6) future models
  2802. Type of Instruction: User
  2803.  
  2804. Instruction: PADDW  dest,src
  2805. Description:
  2806.     dest[15..0]    <-    dest[15..0]  + src[15..0]
  2807.     dest[31..16]    <-    dest[31..16] + src[31..16]
  2808.     dest[47..32]    <-    dest[47..32] + src[47..32]
  2809.     dest[63..48]    <-    dest[63..48] + src[63..48]
  2810.  
  2811.  
  2812. Note:      This instruction adds the words of the source to the words of the
  2813.     destination and writes the results to the MMX register.
  2814.       When the result is too large to be represented in a packed word
  2815.     (overflow), the result wraps around and the lower 16 bits are writen to
  2816.     the destination register.
  2817.  
  2818. Flags Affected:     None
  2819.  
  2820. Exceptions:
  2821.  
  2822. RM    PM    VM    SMM    Description
  2823.     #GP(0)            If Illegal memory operand's EA in CS,DS,ES,FS,GS
  2824.     #SS(0)            If illegal memory operand's EA in SS
  2825.       #PF(fcode)        If page fault
  2826.     #AC    #AC        If unaligned memory reference then alignment
  2827.                 check enabled and in ring 3.
  2828. #UD    #UD    #UD    #UD    If CR0.EM = 1
  2829. #NM    #NM    #NM    #NM    If CR0.TS = 1
  2830. #MF    #MF    #MF    #MF    If pending FPU Exception
  2831. #13        #13        If any part of the the operand lies outside of
  2832.                 the EA space from 0 to FFFFH
  2833. ++++++++++++++++++++++++++++++++++++++
  2834. COP & Times:
  2835.  
  2836. PADDW    mm,mm/m64    0FH FDH PostByte
  2837.  
  2838.      P55C:    n/a
  2839. future P6:    n/a
  2840. ----------O-PAND-----------------------------------
  2841. OPCODE PAND    -  Bitwise Logical And
  2842.  
  2843. CPU:  all which supported IA MMX:
  2844.       Pentium (P55C only), Pentium (tm) Pro  (P6) future models
  2845. Type of Instruction: User
  2846.  
  2847. Instruction: PAND  dest,src
  2848. Description:
  2849.     dest    <-   dest AND src
  2850.  
  2851. Note:      AND 64 bits from MMXregister/memory to MMX register.
  2852.  
  2853. Flags Affected:     None
  2854.  
  2855. Exceptions:
  2856.  
  2857. RM    PM    VM    SMM    Description
  2858.     #GP(0)            If Illegal memory operand's EA in CS,DS,ES,FS,GS
  2859.     #SS(0)            If illegal memory operand's EA in SS
  2860.       #PF(fcode)        If page fault
  2861.     #AC    #AC        If unaligned memory reference then alignment
  2862.                 check enabled and in ring 3.
  2863. #UD    #UD    #UD    #UD    If CR0.EM = 1
  2864. #NM    #NM    #NM    #NM    If CR0.TS = 1
  2865. #MF    #MF    #MF    #MF    If pending FPU Exception
  2866. #13        #13        If any part of the the operand lies outside of
  2867.                 the EA space from 0 to FFFFH
  2868. ++++++++++++++++++++++++++++++++++++++
  2869. COP & Times:
  2870.  
  2871. PAND    mm,mm/m64    0FH DBH PostByte
  2872.  
  2873.      P55C:    n/a
  2874. future P6:    n/a
  2875. ----------O-PANDN----------------------------------
  2876. OPCODE PANDN    -  Bitwise Logical And Not
  2877.  
  2878. CPU:  all which supported IA MMX:
  2879.       Pentium (P55C only), Pentium (tm) Pro  (P6) future models
  2880. Type of Instruction: User
  2881.  
  2882. Instruction: PANDN  dest,src
  2883. Description:
  2884.     dest    <-   (NOT dest) AND src
  2885.  
  2886. Note:      Invert the 64 bits in MMX register, AND inverted MMX register with
  2887.     MMXregister/memory.
  2888.  
  2889. Flags Affected:     None
  2890.  
  2891. Exceptions:
  2892.  
  2893. RM    PM    VM    SMM    Description
  2894.     #GP(0)            If Illegal memory operand's EA in CS,DS,ES,FS,GS
  2895.     #SS(0)            If illegal memory operand's EA in SS
  2896.       #PF(fcode)        If page fault
  2897.     #AC    #AC        If unaligned memory reference then alignment
  2898.                 check enabled and in ring 3.
  2899. #UD    #UD    #UD    #UD    If CR0.EM = 1
  2900. #NM    #NM    #NM    #NM    If CR0.TS = 1
  2901. #MF    #MF    #MF    #MF    If pending FPU Exception
  2902. #13        #13        If any part of the the operand lies outside of
  2903.                 the EA space from 0 to FFFFH
  2904. ++++++++++++++++++++++++++++++++++++++
  2905. COP & Times:
  2906.  
  2907. PANDN    mm,mm/m64    0FH DFH PostByte
  2908.  
  2909.      P55C:    n/a
  2910. future P6:    n/a
  2911. ----------O-PCMPEQB--------------------------------
  2912. OPCODE PCMPEQB -  Packed Compare for Equal Bytes
  2913.  
  2914. CPU:  all which supported IA MMX:
  2915.       Pentium (P55C only), Pentium (tm) Pro  (P6) future models
  2916. Type of Instruction: User
  2917.  
  2918. Instruction: PCMPEQB  dest,src
  2919. Description:
  2920.     IF dest[7..0] = src[7..0]
  2921.         THEN
  2922.         dest[7..0] <- FFH
  2923.         ELSE
  2924.         dest[7..0] <- 00H
  2925.     IF dest[15..8] = src[15..8]
  2926.         THEN
  2927.         dest[15..8] <- FFH
  2928.         ELSE
  2929.         dest[15..8] <- 00H
  2930.     IF dest[23..16] = src[23..16]
  2931.         THEN
  2932.         dest[23..16] <- FFH
  2933.         ELSE
  2934.         dest[23..16] <- 00H
  2935.     IF dest[31..24] = src[31..24]
  2936.         THEN
  2937.         dest[31..24] <- FFH
  2938.         ELSE
  2939.         dest[31..24] <- 00H
  2940.     IF dest[39..32] = src[39..32]
  2941.         THEN
  2942.         dest[39..32] <- FFH
  2943.         ELSE
  2944.         dest[39..32] <- 00H
  2945.     IF dest[47..40] = src[47..40]
  2946.         THEN
  2947.         dest[47..40] <- FFH
  2948.         ELSE
  2949.         dest[47..40] <- 00H
  2950.     IF dest[55..48] = src[55..48]
  2951.         THEN
  2952.         dest[55..48] <- FFH
  2953.         ELSE
  2954.         dest[55..48] <- 00H
  2955.     IF dest[63..56] = src[63..56]
  2956.         THEN
  2957.         dest[63..56] <- FFH
  2958.         ELSE
  2959.         dest[63..56] <- 00H
  2960.  
  2961. Note:      Compare packed byte in MMXregister/memory with packed byte in MMX
  2962.     register for equality.
  2963.  
  2964. Flags Affected:     None
  2965.  
  2966. Exceptions:
  2967.  
  2968. RM    PM    VM    SMM    Description
  2969.     #GP(0)            If Illegal memory operand's EA in CS,DS,ES,FS,GS
  2970.     #SS(0)            If illegal memory operand's EA in SS
  2971.       #PF(fcode)        If page fault
  2972.     #AC    #AC        If unaligned memory reference then alignment
  2973.                 check enabled and in ring 3.
  2974. #UD    #UD    #UD    #UD    If CR0.EM = 1
  2975. #NM    #NM    #NM    #NM    If CR0.TS = 1
  2976. #MF    #MF    #MF    #MF    If pending FPU Exception
  2977. #13        #13        If any part of the the operand lies outside of
  2978.                 the EA space from 0 to FFFFH
  2979. ++++++++++++++++++++++++++++++++++++++
  2980. COP & Times:
  2981.  
  2982. PCMPEQB mm,mm/m64    0FH 74H PostByte
  2983.  
  2984.      P55C:    n/a
  2985. future P6:    n/a
  2986. ----------O-PCMPEQD--------------------------------
  2987. OPCODE PCMPEQD -  Packed Compare for Equal Dwords
  2988.  
  2989. CPU:  all which supported IA MMX:
  2990.       Pentium (P55C only), Pentium (tm) Pro  (P6) future models
  2991. Type of Instruction: User
  2992.  
  2993. Instruction: PCMPEQD dest,src
  2994. Description:
  2995.     IF dest[31..0] = src[31..0]
  2996.         THEN
  2997.         dest[31..0] <- FFFFFFFFH
  2998.         ELSE
  2999.         dest[31..0] <- 00000000H
  3000.     IF dest[63..32] = src[63..32]
  3001.         THEN
  3002.         dest[63..32] <- FFFFFFFFH
  3003.         ELSE
  3004.         dest[63..32] <- 00000000H
  3005.  
  3006. Note:      Compare packed dword in MMXregister/memory with packed dword in MMX
  3007.     register for equality.
  3008.  
  3009. Flags Affected:     None
  3010.  
  3011. Exceptions:
  3012.  
  3013. RM    PM    VM    SMM    Description
  3014.     #GP(0)            If Illegal memory operand's EA in CS,DS,ES,FS,GS
  3015.     #SS(0)            If illegal memory operand's EA in SS
  3016.       #PF(fcode)        If page fault
  3017.     #AC    #AC        If unaligned memory reference then alignment
  3018.                 check enabled and in ring 3.
  3019. #UD    #UD    #UD    #UD    If CR0.EM = 1
  3020. #NM    #NM    #NM    #NM    If CR0.TS = 1
  3021. #MF    #MF    #MF    #MF    If pending FPU Exception
  3022. #13        #13        If any part of the the operand lies outside of
  3023.                 the EA space from 0 to FFFFH
  3024. ++++++++++++++++++++++++++++++++++++++
  3025. COP & Times:
  3026.  
  3027. PCMPEQW mm,mm/m64    07H 76H PostByte
  3028.  
  3029.      P55C:    n/a
  3030. future P6:    n/a
  3031. ----------O-PCMPEQW--------------------------------
  3032. OPCODE PCMPEQW -  Packed Compare for Equal Words
  3033.  
  3034. CPU:  all which supported IA MMX:
  3035.       Pentium (P55C only), Pentium (tm) Pro  (P6) future models
  3036. Type of Instruction: User
  3037.  
  3038. Instruction: PCMPEQW dest,src
  3039. Description:
  3040.     IF dest[15..0] = src[15..0]
  3041.         THEN
  3042.         dest[15..0] <- FFFFH
  3043.         ELSE
  3044.         dest[15..0] <- 0000H
  3045.     IF dest[31..16] = src[31..16]
  3046.         THEN
  3047.         dest[31..16] <- FFFFH
  3048.         ELSE
  3049.         dest[31..16] <- 0000H
  3050.     IF dest[47..32] = src[47..32]
  3051.         THEN
  3052.         dest[47..32] <- FFFFH
  3053.         ELSE
  3054.         dest[47..32] <- 0000H
  3055.     IF dest[63..48] = src[63..48]
  3056.         THEN
  3057.         dest[63..48] <- FFFFH
  3058.         ELSE
  3059.         dest[63..48] <- 0000H
  3060.  
  3061. Note:      Compare packed word in MMXregister/memory with packed word in MMX
  3062.     register for equality.
  3063.  
  3064. Flags Affected:     None
  3065.  
  3066. Exceptions:
  3067.  
  3068. RM    PM    VM    SMM    Description
  3069.     #GP(0)            If Illegal memory operand's EA in CS,DS,ES,FS,GS
  3070.     #SS(0)            If illegal memory operand's EA in SS
  3071.       #PF(fcode)        If page fault
  3072.     #AC    #AC        If unaligned memory reference then alignment
  3073.                 check enabled and in ring 3.
  3074. #UD    #UD    #UD    #UD    If CR0.EM = 1
  3075. #NM    #NM    #NM    #NM    If CR0.TS = 1
  3076. #MF    #MF    #MF    #MF    If pending FPU Exception
  3077. #13        #13        If any part of the the operand lies outside of
  3078.                 the EA space from 0 to FFFFH
  3079. ++++++++++++++++++++++++++++++++++++++
  3080. COP & Times:
  3081.  
  3082. PCMPEQW mm,mm/m64    07H 75H PostByte
  3083.  
  3084.      P55C:    n/a
  3085. future P6:    n/a
  3086. ----------O-PCMPGTB--------------------------------
  3087. OPCODE PCMPGTB -  Packed Compare for Greater Than Bytes
  3088.  
  3089. CPU:  all which supported IA MMX:
  3090.       Pentium (P55C only), Pentium (tm) Pro  (P6) future models
  3091. Type of Instruction: User
  3092.  
  3093. Instruction: PCMPGTB  dest,src
  3094. Description:
  3095.     IF dest[7..0] > src[7..0]
  3096.         THEN
  3097.         dest[7..0] <- FFH
  3098.         ELSE
  3099.         dest[7..0] <- 00H
  3100.     IF dest[15..8] > src[15..8]
  3101.         THEN
  3102.         dest[15..8] <- FFH
  3103.         ELSE
  3104.         dest[15..8] <- 00H
  3105.     IF dest[23..16] > src[23..16]
  3106.         THEN
  3107.         dest[23..16] <- FFH
  3108.         ELSE
  3109.         dest[23..16] <- 00H
  3110.     IF dest[31..24] > src[31..24]
  3111.         THEN
  3112.         dest[31..24] <- FFH
  3113.         ELSE
  3114.         dest[31..24] <- 00H
  3115.     IF dest[39..32] > src[39..32]
  3116.         THEN
  3117.         dest[39..32] <- FFH
  3118.         ELSE
  3119.         dest[39..32] <- 00H
  3120.     IF dest[47..40] > src[47..40]
  3121.         THEN
  3122.         dest[47..40] <- FFH
  3123.         ELSE
  3124.         dest[47..40] <- 00H
  3125.     IF dest[55..48] > src[55..48]
  3126.         THEN
  3127.         dest[55..48] <- FFH
  3128.         ELSE
  3129.         dest[55..48] <- 00H
  3130.     IF dest[63..56] > src[63..56]
  3131.         THEN
  3132.         dest[63..56] <- FFH
  3133.         ELSE
  3134.         dest[63..56] <- 00H
  3135.  
  3136. Note:      Compare packed byte in MMX register with packed byte in MMXregister/
  3137.     /memory for greater value.
  3138.  
  3139. Flags Affected:     None
  3140.  
  3141. Exceptions:
  3142.  
  3143. RM    PM    VM    SMM    Description
  3144.     #GP(0)            If Illegal memory operand's EA in CS,DS,ES,FS,GS
  3145.     #SS(0)            If illegal memory operand's EA in SS
  3146.       #PF(fcode)        If page fault
  3147.     #AC    #AC        If unaligned memory reference then alignment
  3148.                 check enabled and in ring 3.
  3149. #UD    #UD    #UD    #UD    If CR0.EM = 1
  3150. #NM    #NM    #NM    #NM    If CR0.TS = 1
  3151. #MF    #MF    #MF    #MF    If pending FPU Exception
  3152. #13        #13        If any part of the the operand lies outside of
  3153.                 the EA space from 0 to FFFFH
  3154. ++++++++++++++++++++++++++++++++++++++
  3155. COP & Times:
  3156.  
  3157. PCMPGTB mm,mm/m64    0FH 64H PostByte
  3158.  
  3159.      P55C:    n/a
  3160. future P6:    n/a
  3161. ----------O-PCMPGTD--------------------------------
  3162. OPCODE PCMPGTD -  Packed Compare for Greater Than Dwords
  3163.  
  3164. CPU:  all which supported IA MMX:
  3165.       Pentium (P55C only), Pentium (tm) Pro  (P6) future models
  3166. Type of Instruction: User
  3167.  
  3168. Instruction: PCMPGTD dest,src
  3169. Description:
  3170.     IF dest[31..0] > src[31..0]
  3171.         THEN
  3172.         dest[31..0] <- FFFFFFFFH
  3173.         ELSE
  3174.         dest[31..0] <- 00000000H
  3175.     IF dest[63..32] > src[63..32]
  3176.         THEN
  3177.         dest[63..32] <- FFFFFFFFH
  3178.         ELSE
  3179.         dest[63..32] <- 00000000H
  3180.  
  3181. Note:      Compare packed dword in MMX register with packed dword in MMXregister/
  3182.     /memory for greater value.
  3183.  
  3184. Flags Affected:     None
  3185.  
  3186. Exceptions:
  3187.  
  3188. RM    PM    VM    SMM    Description
  3189.     #GP(0)            If Illegal memory operand's EA in CS,DS,ES,FS,GS
  3190.     #SS(0)            If illegal memory operand's EA in SS
  3191.       #PF(fcode)        If page fault
  3192.     #AC    #AC        If unaligned memory reference then alignment
  3193.                 check enabled and in ring 3.
  3194. #UD    #UD    #UD    #UD    If CR0.EM = 1
  3195. #NM    #NM    #NM    #NM    If CR0.TS = 1
  3196. #MF    #MF    #MF    #MF    If pending FPU Exception
  3197. #13        #13        If any part of the the operand lies outside of
  3198.                 the EA space from 0 to FFFFH
  3199. ++++++++++++++++++++++++++++++++++++++
  3200. COP & Times:
  3201.  
  3202. PCMPGTW mm,mm/m64    0FH 66H PostByte
  3203.  
  3204.      P55C:    n/a
  3205. future P6:    n/a
  3206. ----------O-PCMPGTW--------------------------------
  3207. OPCODE PCMPGTW -  Packed Compare for Greater Than Words
  3208.  
  3209. CPU:  all which supported IA MMX:
  3210.       Pentium (P55C only), Pentium (tm) Pro  (P6) future models
  3211. Type of Instruction: User
  3212.  
  3213. Instruction: PCMPGTW dest,src
  3214. Description:
  3215.     IF dest[15..0] > src[15..0]
  3216.         THEN
  3217.         dest[15..0] <- FFFFH
  3218.         ELSE
  3219.         dest[15..0] <- 0000H
  3220.     IF dest[31..16] > src[31..16]
  3221.         THEN
  3222.         dest[31..16] <- FFFFH
  3223.         ELSE
  3224.         dest[31..16] <- 0000H
  3225.     IF dest[47..32] > src[47..32]
  3226.         THEN
  3227.         dest[47..32] <- FFFFH
  3228.         ELSE
  3229.         dest[47..32] <- 0000H
  3230.     IF dest[63..48] > src[63..48]
  3231.         THEN
  3232.         dest[63..48] <- FFFFH
  3233.         ELSE
  3234.         dest[63..48] <- 0000H
  3235.  
  3236. Note:      Compare packed word in MMX register with packed word in MMXregister/
  3237.     memory for greater value.
  3238.  
  3239. Flags Affected:     None
  3240.  
  3241. Exceptions:
  3242.  
  3243. RM    PM    VM    SMM    Description
  3244.     #GP(0)            If Illegal memory operand's EA in CS,DS,ES,FS,GS
  3245.     #SS(0)            If illegal memory operand's EA in SS
  3246.       #PF(fcode)        If page fault
  3247.     #AC    #AC        If unaligned memory reference then alignment
  3248.                 check enabled and in ring 3.
  3249. #UD    #UD    #UD    #UD    If CR0.EM = 1
  3250. #NM    #NM    #NM    #NM    If CR0.TS = 1
  3251. #MF    #MF    #MF    #MF    If pending FPU Exception
  3252. #13        #13        If any part of the the operand lies outside of
  3253.                 the EA space from 0 to FFFFH
  3254. ++++++++++++++++++++++++++++++++++++++
  3255. COP & Times:
  3256.  
  3257. PCMPGTW mm,mm/m64    0FH 65H PostByte
  3258.  
  3259.      P55C:    n/a
  3260. future P6:    n/a
  3261. ----------O-PMADDWD--------------------------------
  3262. OPCODE PMADDWD -  Packed Multiply and Add Dwords
  3263.  
  3264. CPU:  all which supported IA MMX:
  3265.       Pentium (P55C only), Pentium (tm) Pro  (P6) future models
  3266. Type of Instruction: User
  3267.  
  3268. Instruction: PMADDWD  dest,src
  3269. Description:
  3270.     dest[31..0]  <- dest[15..0] * src[15..0] + dest[31..16] * src[31..16]
  3271.     dest[63..32] <- dest[47..32] * src[47..32] + dest[63..48] * src[63..48]
  3272.  
  3273. Note:      Multiply the packed word in MMX register by the packed word in
  3274.     MMXregister/memory. Add the 32-bit results pairwise and store in MMX
  3275.     register as dword.
  3276.       This instruction wraps around to 80000000H only when all four words
  3277.     of both the source and destination operands are 8000H.
  3278.  
  3279. Flags Affected:     None
  3280.  
  3281. Exceptions:
  3282.  
  3283. RM    PM    VM    SMM    Description
  3284.     #GP(0)            If Illegal memory operand's EA in CS,DS,ES,FS,GS
  3285.     #SS(0)            If illegal memory operand's EA in SS
  3286.       #PF(fcode)        If page fault
  3287.     #AC    #AC        If unaligned memory reference then alignment
  3288.                 check enabled and in ring 3.
  3289. #UD    #UD    #UD    #UD    If CR0.EM = 1
  3290. #NM    #NM    #NM    #NM    If CR0.TS = 1
  3291. #MF    #MF    #MF    #MF    If pending FPU Exception
  3292. #13        #13        If any part of the the operand lies outside of
  3293.                 the EA space from 0 to FFFFH
  3294. ++++++++++++++++++++++++++++++++++++++
  3295. COP & Times:
  3296.  
  3297. PMADDWD mm,mm/m64    0FH F5H PostByte
  3298.  
  3299.      P55C:    n/a
  3300. future P6:    n/a
  3301. ----------O-PMULHW---------------------------------
  3302. OPCODE PMULHW    -  Packed Multiply High by Words
  3303.  
  3304. CPU:  all which supported IA MMX:
  3305.       Pentium (P55C only), Pentium (tm) Pro  (P6) future models
  3306. Type of Instruction: User
  3307.  
  3308. Instruction: PMULHW  dest,src
  3309. Description:
  3310.     dest[15..0]  <- (dest[15..0] * src[15..0]) (31..16)
  3311.     dest[31..16] <- (dest[31..16] * src[31..16]) (31..16)
  3312.     dest[47..32]  <- (dest[47..32] * src[47..32]) (31..16)
  3313.     dest[63..48]  <- (dest[63..48] * src[63..48]) (31..16)
  3314.  
  3315. Note:      Multiply the signed packed word in MMX register with the signed
  3316.     packed word in MMXregister/memory, then store the high-order 16 bits of
  3317.     the results in MMX register.
  3318.  
  3319. Flags Affected:     None
  3320.  
  3321. Exceptions:
  3322.  
  3323. RM    PM    VM    SMM    Description
  3324.     #GP(0)            If Illegal memory operand's EA in CS,DS,ES,FS,GS
  3325.     #SS(0)            If illegal memory operand's EA in SS
  3326.       #PF(fcode)        If page fault
  3327.     #AC    #AC        If unaligned memory reference then alignment
  3328.                 check enabled and in ring 3.
  3329. #UD    #UD    #UD    #UD    If CR0.EM = 1
  3330. #NM    #NM    #NM    #NM    If CR0.TS = 1
  3331. #MF    #MF    #MF    #MF    If pending FPU Exception
  3332. #13        #13        If any part of the the operand lies outside of
  3333.                 the EA space from 0 to FFFFH
  3334. ++++++++++++++++++++++++++++++++++++++
  3335. COP & Times:
  3336.  
  3337. PMULHW    mm,mm/m64    0FH E5H PostByte
  3338.  
  3339.      P55C:    n/a
  3340. future P6:    n/a
  3341. ----------O-PMULLW---------------------------------
  3342. OPCODE PMULLW    -  Packed Multiply Low by Words
  3343.  
  3344. CPU:  all which supported IA MMX:
  3345.       Pentium (P55C only), Pentium (tm) Pro  (P6) future models
  3346. Type of Instruction: User
  3347.  
  3348. Instruction: PMULLW  dest,src
  3349. Description:
  3350.     dest[15..0]  <- (dest[15..0] * src[15..0]) (15..0)
  3351.     dest[31..16] <- (dest[31..16] * src[31..16]) (15..0)
  3352.     dest[47..32]  <- (dest[47..32] * src[47..32]) (15..0)
  3353.     dest[63..48]  <- (dest[63..48] * src[63..48]) (15..0)
  3354.  
  3355. Note:      Multiply the packed word in MMX register with the packed word in
  3356.     MMXregister/memory, then store the low-order 16 bits of the results in
  3357.     MMX register.
  3358.  
  3359. Flags Affected:     None
  3360.  
  3361. Exceptions:
  3362.  
  3363. RM    PM    VM    SMM    Description
  3364.     #GP(0)            If Illegal memory operand's EA in CS,DS,ES,FS,GS
  3365.     #SS(0)            If illegal memory operand's EA in SS
  3366.       #PF(fcode)        If page fault
  3367.     #AC    #AC        If unaligned memory reference then alignment
  3368.                 check enabled and in ring 3.
  3369. #UD    #UD    #UD    #UD    If CR0.EM = 1
  3370. #NM    #NM    #NM    #NM    If CR0.TS = 1
  3371. #MF    #MF    #MF    #MF    If pending FPU Exception
  3372. #13        #13        If any part of the the operand lies outside of
  3373.                 the EA space from 0 to FFFFH
  3374. ++++++++++++++++++++++++++++++++++++++
  3375. COP & Times:
  3376.  
  3377. PMULLW    mm,mm/m64    0FH D5H PostByte
  3378.  
  3379.      P55C:    n/a
  3380. future P6:    n/a
  3381. ----------O-POR------------------------------------
  3382. OPCODE POR    -  Bitwise Logical Or
  3383.  
  3384. CPU:  all which supported IA MMX:
  3385.       Pentium (P55C only), Pentium (tm) Pro  (P6) future models
  3386. Type of Instruction: User
  3387.  
  3388. Instruction: POR  dest,src
  3389. Description:
  3390.     dest    <-   dest OR src
  3391.  
  3392. Note:      OR 64 bits from MMXregister/memory with MMX register.
  3393.  
  3394. Flags Affected:     None
  3395.  
  3396. Exceptions:
  3397.  
  3398. RM    PM    VM    SMM    Description
  3399.     #GP(0)            If Illegal memory operand's EA in CS,DS,ES,FS,GS
  3400.     #SS(0)            If illegal memory operand's EA in SS
  3401.       #PF(fcode)        If page fault
  3402.     #AC    #AC        If unaligned memory reference then alignment
  3403.                 check enabled and in ring 3.
  3404. #UD    #UD    #UD    #UD    If CR0.EM = 1
  3405. #NM    #NM    #NM    #NM    If CR0.TS = 1
  3406. #MF    #MF    #MF    #MF    If pending FPU Exception
  3407. #13        #13        If any part of the the operand lies outside of
  3408.                 the EA space from 0 to FFFFH
  3409. ++++++++++++++++++++++++++++++++++++++
  3410. COP & Times:
  3411.  
  3412. POR    mm,mm/m64    0FH EBH PostByte
  3413.  
  3414.      P55C:    n/a
  3415. future P6:    n/a
  3416. ----------O-PSLLD----------------------------------
  3417. OPCODE PSLLD    -  Packed Shift Left Logical Dwords
  3418.  
  3419. CPU:  all which supported IA MMX:
  3420.       Pentium (P55C only), Pentium (tm) Pro  (P6) future models
  3421. Type of Instruction: User
  3422.  
  3423. Instruction: PSLLD  dest,src
  3424. Description:
  3425.     temp  <-  src
  3426.     dest[31..0]   <-  dest[31..0] << temp
  3427.     dest[63..32]  <-  dest[63..32] << temp
  3428.  
  3429. Note:      Shift dwords in MMX register left by Imm8 or amount specified in MMX
  3430.     register/memory, while shifting in zeros.
  3431.  
  3432. Flags Affected:     None
  3433.  
  3434. Exceptions:
  3435.  
  3436. RM    PM    VM    SMM    Description
  3437.     #GP(0)            If Illegal memory operand's EA in CS,DS,ES,FS,GS
  3438.     #SS(0)            If illegal memory operand's EA in SS
  3439.       #PF(fcode)        If page fault
  3440.     #AC    #AC        If unaligned memory reference then alignment
  3441.                 check enabled and in ring 3.
  3442. #UD    #UD    #UD    #UD    If CR0.EM = 1
  3443. #NM    #NM    #NM    #NM    If CR0.TS = 1
  3444. #MF    #MF    #MF    #MF    If pending FPU Exception
  3445. #13        #13        If any part of the the operand lies outside of
  3446.                 the EA space from 0 to FFFFH
  3447. ++++++++++++++++++++++++++++++++++++++
  3448. COP & Times:
  3449.  
  3450. PSLLD    mm,mm/m64    0FH F2H PostByte
  3451. PSLLD    mm,Imm8        0FH 72H/6 PostByte ImmData
  3452.  
  3453.      P55C:    n/a
  3454. future P6:    n/a
  3455. ----------O-PSLLQ----------------------------------
  3456. OPCODE PSLLQ    -  Packed Shift Left Logical Qwords
  3457.  
  3458. CPU:  all which supported IA MMX:
  3459.       Pentium (P55C only), Pentium (tm) Pro  (P6) future models
  3460. Type of Instruction: User
  3461.  
  3462. Instruction: PSLLQ  dest,src
  3463. Description:
  3464.     temp  <-  src
  3465.     dest  <-  dest << temp
  3466.  
  3467. Note:      Shift MMX register left by Imm8 or amount specified in MMXregister/
  3468.     /memory, while shifting in zeros.
  3469.  
  3470. Flags Affected:     None
  3471.  
  3472. Exceptions:
  3473.  
  3474. RM    PM    VM    SMM    Description
  3475.     #GP(0)            If Illegal memory operand's EA in CS,DS,ES,FS,GS
  3476.     #SS(0)            If illegal memory operand's EA in SS
  3477.       #PF(fcode)        If page fault
  3478.     #AC    #AC        If unaligned memory reference then alignment
  3479.                 check enabled and in ring 3.
  3480. #UD    #UD    #UD    #UD    If CR0.EM = 1
  3481. #NM    #NM    #NM    #NM    If CR0.TS = 1
  3482. #MF    #MF    #MF    #MF    If pending FPU Exception
  3483. #13        #13        If any part of the the operand lies outside of
  3484.                 the EA space from 0 to FFFFH
  3485. ++++++++++++++++++++++++++++++++++++++
  3486. COP & Times:
  3487.  
  3488. PSLLQ    mm,mm/m64    0FH F3H PostByte
  3489. PSLLQ    mm,Imm8        0FH 73H/6 PostByte ImmData
  3490.  
  3491.      P55C:    n/a
  3492. future P6:    n/a
  3493. ----------O-PSLLW----------------------------------
  3494. OPCODE PSLLW    -  Packed Shift Left Logical Words
  3495.  
  3496. CPU:  all which supported IA MMX:
  3497.       Pentium (P55C only), Pentium (tm) Pro  (P6) future models
  3498. Type of Instruction: User
  3499.  
  3500. Instruction: PSLLW  dest,src
  3501. Description:
  3502.     temp  <-  src
  3503.     dest[15..0]   <-  dest[15..0] << temp
  3504.     dest[31..16]  <-  dest[31..16] << temp
  3505.     dest[47..32]  <-  dest[47..32] << temp
  3506.     dest[63..48]  <-  dest[63..48] << temp
  3507.  
  3508. Note:      Shift words in MMX register left by Imm8 or amount specified in MMX
  3509.     register/memory, while shifting in zeros.
  3510.  
  3511. Flags Affected:     None
  3512.  
  3513. Exceptions:
  3514.  
  3515. RM    PM    VM    SMM    Description
  3516.     #GP(0)            If Illegal memory operand's EA in CS,DS,ES,FS,GS
  3517.     #SS(0)            If illegal memory operand's EA in SS
  3518.       #PF(fcode)        If page fault
  3519.     #AC    #AC        If unaligned memory reference then alignment
  3520.                 check enabled and in ring 3.
  3521. #UD    #UD    #UD    #UD    If CR0.EM = 1
  3522. #NM    #NM    #NM    #NM    If CR0.TS = 1
  3523. #MF    #MF    #MF    #MF    If pending FPU Exception
  3524. #13        #13        If any part of the the operand lies outside of
  3525.                 the EA space from 0 to FFFFH
  3526. ++++++++++++++++++++++++++++++++++++++
  3527. COP & Times:
  3528.  
  3529. PSLLW    mm,mm/m64    0FH F1H PostByte
  3530. PSLLW    mm,Imm8        0FH 71H/6 PostByte ImmData
  3531.  
  3532.      P55C:    n/a
  3533. future P6:    n/a
  3534. ----------O-PSRAD----------------------------------
  3535. OPCODE PSRAD    -  Packed Shift Right Arithmetic Dwords
  3536.  
  3537. CPU:  all which supported IA MMX:
  3538.       Pentium (P55C only), Pentium (tm) Pro  (P6) future models
  3539. Type of Instruction: User
  3540.  
  3541. Instruction: PSRAD  dest,src
  3542. Description:
  3543.     temp  <-  src
  3544.     dest[31..0]   <-  SignExtend(dest[31..0]) >> temp
  3545.     dest[63..32]  <-  SignExtend(dest[63..32]) >> temp
  3546.  
  3547. Note:      Shift dwords in MMX register right by Imm8 or amount specified in MMX
  3548.     register/memory, while shifting in sign bits.
  3549.  
  3550. Flags Affected:     None
  3551.  
  3552. Exceptions:
  3553.  
  3554. RM    PM    VM    SMM    Description
  3555.     #GP(0)            If Illegal memory operand's EA in CS,DS,ES,FS,GS
  3556.     #SS(0)            If illegal memory operand's EA in SS
  3557.       #PF(fcode)        If page fault
  3558.     #AC    #AC        If unaligned memory reference then alignment
  3559.                 check enabled and in ring 3.
  3560. #UD    #UD    #UD    #UD    If CR0.EM = 1
  3561. #NM    #NM    #NM    #NM    If CR0.TS = 1
  3562. #MF    #MF    #MF    #MF    If pending FPU Exception
  3563. #13        #13        If any part of the the operand lies outside of
  3564.                 the EA space from 0 to FFFFH
  3565. ++++++++++++++++++++++++++++++++++++++
  3566. COP & Times:
  3567.  
  3568. PSRAD    mm,mm/m64    0FH E2H PostByte
  3569. PSRAD    mm,Imm8        0FH 72H/4 PostByte ImmData
  3570.  
  3571.      P55C:    n/a
  3572. future P6:    n/a
  3573. ----------O-PSRAW----------------------------------
  3574. OPCODE PSRAW    -  Packed Shift Right Arithmetic Words
  3575.  
  3576. CPU:  all which supported IA MMX:
  3577.       Pentium (P55C only), Pentium (tm) Pro  (P6) future models
  3578. Type of Instruction: User
  3579.  
  3580. Instruction: PSRAW  dest,src
  3581. Description:
  3582.     temp  <-  src
  3583.     dest[15..0]   <-  SignExtend(dest[15..0]) >> temp
  3584.     dest[31..16]  <-  SignExtend(dest[31..16]) >> temp
  3585.     dest[47..32]  <-  SignExtend(dest[47..32]) >> temp
  3586.     dest[63..48]  <-  SignExtend(dest[63..48]) >> temp
  3587.  
  3588. Note:      Shift words in MMX register right by Imm8 or amount specified in MMX
  3589.     register/memory, while shifting in sign bits.
  3590.  
  3591. Flags Affected:     None
  3592.  
  3593. Exceptions:
  3594.  
  3595. RM    PM    VM    SMM    Description
  3596.     #GP(0)            If Illegal memory operand's EA in CS,DS,ES,FS,GS
  3597.     #SS(0)            If illegal memory operand's EA in SS
  3598.       #PF(fcode)        If page fault
  3599.     #AC    #AC        If unaligned memory reference then alignment
  3600.                 check enabled and in ring 3.
  3601. #UD    #UD    #UD    #UD    If CR0.EM = 1
  3602. #NM    #NM    #NM    #NM    If CR0.TS = 1
  3603. #MF    #MF    #MF    #MF    If pending FPU Exception
  3604. #13        #13        If any part of the the operand lies outside of
  3605.                 the EA space from 0 to FFFFH
  3606. ++++++++++++++++++++++++++++++++++++++
  3607. COP & Times:
  3608.  
  3609. PSRAW    mm,mm/m64    0FH E1H PostByte
  3610. PSRAW    mm,Imm8        0FH 71H/4 PostByte ImmData
  3611.  
  3612.      P55C:    n/a
  3613. future P6:    n/a
  3614. ----------O-PSRLD----------------------------------
  3615. OPCODE PSRLD    -  Packed Shift Right Logical Dwords
  3616.  
  3617. CPU:  all which supported IA MMX:
  3618.       Pentium (P55C only), Pentium (tm) Pro  (P6) future models
  3619. Type of Instruction: User
  3620.  
  3621. Instruction: PSRLD  dest,src
  3622. Description:
  3623.     temp  <-  src
  3624.     dest[31..0]   <-  dest[31..0] >> temp
  3625.     dest[63..32]  <-  dest[63..32] >> temp
  3626.  
  3627. Note:      Shift dwords in MMX register right by Imm8 or amount specified in MMX
  3628.     register/memory, while shifting in zeros.
  3629.  
  3630. Flags Affected:     None
  3631.  
  3632. Exceptions:
  3633.  
  3634. RM    PM    VM    SMM    Description
  3635.     #GP(0)            If Illegal memory operand's EA in CS,DS,ES,FS,GS
  3636.     #SS(0)            If illegal memory operand's EA in SS
  3637.       #PF(fcode)        If page fault
  3638.     #AC    #AC        If unaligned memory reference then alignment
  3639.                 check enabled and in ring 3.
  3640. #UD    #UD    #UD    #UD    If CR0.EM = 1
  3641. #NM    #NM    #NM    #NM    If CR0.TS = 1
  3642. #MF    #MF    #MF    #MF    If pending FPU Exception
  3643. #13        #13        If any part of the the operand lies outside of
  3644.                 the EA space from 0 to FFFFH
  3645. ++++++++++++++++++++++++++++++++++++++
  3646. COP & Times:
  3647.  
  3648. PSRLD    mm,mm/m64    0FH D2H PostByte
  3649. PSRLD    mm,Imm8        0FH 72H/2 PostByte ImmData
  3650.  
  3651.      P55C:    n/a
  3652. future P6:    n/a
  3653. ----------O-PSRLQ----------------------------------
  3654. OPCODE PSRLQ    -  Packed Shift Right Logical Qwords
  3655.  
  3656. CPU:  all which supported IA MMX:
  3657.       Pentium (P55C only), Pentium (tm) Pro  (P6) future models
  3658. Type of Instruction: User
  3659.  
  3660. Instruction: PSRLQ  dest,src
  3661. Description:
  3662.     temp  <-  src
  3663.     dest  <-  dest >> temp
  3664.  
  3665. Note:      Shift MMX register right by Imm8 or amount specified in MMXregister/
  3666.     /memory, while shifting in zeros.
  3667.  
  3668. Flags Affected:     None
  3669.  
  3670. Exceptions:
  3671.  
  3672. RM    PM    VM    SMM    Description
  3673.     #GP(0)            If Illegal memory operand's EA in CS,DS,ES,FS,GS
  3674.     #SS(0)            If illegal memory operand's EA in SS
  3675.       #PF(fcode)        If page fault
  3676.     #AC    #AC        If unaligned memory reference then alignment
  3677.                 check enabled and in ring 3.
  3678. #UD    #UD    #UD    #UD    If CR0.EM = 1
  3679. #NM    #NM    #NM    #NM    If CR0.TS = 1
  3680. #MF    #MF    #MF    #MF    If pending FPU Exception
  3681. #13        #13        If any part of the the operand lies outside of
  3682.                 the EA space from 0 to FFFFH
  3683. ++++++++++++++++++++++++++++++++++++++
  3684. COP & Times:
  3685.  
  3686. PSRLQ    mm,mm/m64    0FH D3H PostByte
  3687. PSRLQ    mm,Imm8        0FH 73H/2 PostByte ImmData
  3688.  
  3689.      P55C:    n/a
  3690. future P6:    n/a
  3691. ----------O-PSRLW----------------------------------
  3692. OPCODE PSRLW    -  Packed Shift Right Logical Words
  3693.  
  3694. CPU:  all which supported IA MMX:
  3695.       Pentium (P55C only), Pentium (tm) Pro  (P6) future models
  3696. Type of Instruction: User
  3697.  
  3698. Instruction: PSRLW  dest,src
  3699. Description:
  3700.     temp  <-  src
  3701.     dest[15..0]   <-  dest[15..0] >> temp
  3702.     dest[31..16]  <-  dest[31..16] >> temp
  3703.     dest[47..32]  <-  dest[47..32] >> temp
  3704.     dest[63..48]  <-  dest[63..48] >> temp
  3705.  
  3706. Note:      Shift words in MMX register right by Imm8 or amount specified in MMX
  3707.     register/memory, while shifting in zeros.
  3708.  
  3709. Flags Affected:     None
  3710.  
  3711. Exceptions:
  3712.  
  3713. RM    PM    VM    SMM    Description
  3714.     #GP(0)            If Illegal memory operand's EA in CS,DS,ES,FS,GS
  3715.     #SS(0)            If illegal memory operand's EA in SS
  3716.       #PF(fcode)        If page fault
  3717.     #AC    #AC        If unaligned memory reference then alignment
  3718.                 check enabled and in ring 3.
  3719. #UD    #UD    #UD    #UD    If CR0.EM = 1
  3720. #NM    #NM    #NM    #NM    If CR0.TS = 1
  3721. #MF    #MF    #MF    #MF    If pending FPU Exception
  3722. #13        #13        If any part of the the operand lies outside of
  3723.                 the EA space from 0 to FFFFH
  3724. ++++++++++++++++++++++++++++++++++++++
  3725. COP & Times:
  3726.  
  3727. PSRLW    mm,mm/m64    0FH D1H PostByte
  3728. PSRLW    mm,Imm8        0FH 71H/2 PostByte ImmData
  3729.  
  3730.      P55C:    n/a
  3731. future P6:    n/a
  3732. ----------O-PSUBB----------------------------------
  3733. OPCODE PSUBB    -  Packed Subtract Bytes
  3734.  
  3735. CPU:  all which supported IA MMX:
  3736.       Pentium (P55C only), Pentium (tm) Pro  (P6) future models
  3737. Type of Instruction: User
  3738.  
  3739. Instruction: PSUBB  dest,src
  3740. Description:
  3741.     dest[7..0]    <-    dest[7..0]   - src[7..0]
  3742.     dest[15..8]    <-    dest[15..8]  - src[15..8]
  3743.     dest[23..16]    <-    dest[23..16] - src[23..16]
  3744.     dest[31..24]    <-    dest[31..24] - src[31..24]
  3745.     dest[39..32]    <-    dest[39..32] - src[39..32]
  3746.     dest[47..40]    <-    dest[47..40] - src[47..40]
  3747.     dest[55..48]    <-    dest[55..48] - src[55..48]
  3748.     dest[63..56]    <-    dest[63..56] - src[63..56]
  3749.  
  3750.  
  3751. Note:      This instruction subtract packed byte in MMXregister/memory from
  3752.     packed byte in MMX register.
  3753.  
  3754. Flags Affected:     None
  3755.  
  3756. Exceptions:
  3757.  
  3758. RM    PM    VM    SMM    Description
  3759.     #GP(0)            If Illegal memory operand's EA in CS,DS,ES,FS,GS
  3760.     #SS(0)            If illegal memory operand's EA in SS
  3761.       #PF(fcode)        If page fault
  3762.     #AC    #AC        If unaligned memory reference then alignment
  3763.                 check enabled and in ring 3.
  3764. #UD    #UD    #UD    #UD    If CR0.EM = 1
  3765. #NM    #NM    #NM    #NM    If CR0.TS = 1
  3766. #MF    #MF    #MF    #MF    If pending FPU Exception
  3767. #13        #13        If any part of the the operand lies outside of
  3768.                 the EA space from 0 to FFFFH
  3769. ++++++++++++++++++++++++++++++++++++++
  3770. COP & Times:
  3771.  
  3772. PSUBB    mm,mm/m64    0FH F8H PostByte
  3773.  
  3774.      P55C:    n/a
  3775. future P6:    n/a
  3776. ----------O-PSUBD----------------------------------
  3777. OPCODE PSUBD    -  Packed Subtract Dwords
  3778.  
  3779. CPU:  all which supported IA MMX:
  3780.       Pentium (P55C only), Pentium (tm) Pro  (P6) future models
  3781. Type of Instruction: User
  3782.  
  3783. Instruction: PSUBD  dest,src
  3784. Description:
  3785.     dest[31..0]    <-    dest[31..0]  - src[31..0]
  3786.     dest[63..32]    <-    dest[63..48] - src[63..32]
  3787.  
  3788.  
  3789. Note:      This instruction subtract packed dword in MMXregister/memory from
  3790.     packed dword in MMX register.
  3791.  
  3792. Flags Affected:     None
  3793.  
  3794. Exceptions:
  3795.  
  3796. RM    PM    VM    SMM    Description
  3797.     #GP(0)            If Illegal memory operand's EA in CS,DS,ES,FS,GS
  3798.     #SS(0)            If illegal memory operand's EA in SS
  3799.       #PF(fcode)        If page fault
  3800.     #AC    #AC        If unaligned memory reference then alignment
  3801.                 check enabled and in ring 3.
  3802. #UD    #UD    #UD    #UD    If CR0.EM = 1
  3803. #NM    #NM    #NM    #NM    If CR0.TS = 1
  3804. #MF    #MF    #MF    #MF    If pending FPU Exception
  3805. #13        #13        If any part of the the operand lies outside of
  3806.                 the EA space from 0 to FFFFH
  3807. ++++++++++++++++++++++++++++++++++++++
  3808. COP & Times:
  3809.  
  3810. PSUBD    mm,mm/m64    0FH FAH PostByte
  3811.  
  3812.      P55C:    n/a
  3813. future P6:    n/a
  3814. ----------O-PSUBSB---------------------------------
  3815. OPCODE PSUBSB    -  Packed Subtract with Saturation Bytes
  3816.  
  3817. CPU:  all which supported IA MMX:
  3818.       Pentium (P55C only), Pentium (tm) Pro  (P6) future models
  3819. Type of Instruction: User
  3820.  
  3821. Instruction: PSUBSB  dest,src
  3822. Description:
  3823.     dest[7..0]    <-   SaturateToSignedByte(dest[7..0]   - src[7..0])
  3824.     dest[15..8]   <-   SaturateToSignedByte(dest[15..8]  - src[15..8])
  3825.     dest[23..16]  <-   SaturateToSignedByte(dest[23..16] - src[23..16])
  3826.     dest[31..24]  <-   SaturateToSignedByte(dest[31..24] - src[31..24])
  3827.     dest[39..32]  <-   SaturateToSignedByte(dest[39..32] - src[39..32])
  3828.     dest[47..40]  <-   SaturateToSignedByte(dest[47..40] - src[47..40])
  3829.     dest[55..48]  <-   SaturateToSignedByte(dest[55..48] - src[55..48])
  3830.     dest[63..56]  <-   SaturateToSignedByte(dest[63..56] - src[63..56])
  3831.  
  3832. Note:      This instruction subtract signed packed byte in MMXregister/memory
  3833.     from signed packed byte in MMX register and saturate.
  3834.       If the result is larger or smaller than the range of a signed byte,
  3835.     the value is saturated; in the case of an overflow - to 7FH, and the
  3836.     case of an underflow - to 80H
  3837.  
  3838. Flags Affected:     None
  3839.  
  3840. Exceptions:
  3841.  
  3842. RM    PM    VM    SMM    Description
  3843.     #GP(0)            If Illegal memory operand's EA in CS,DS,ES,FS,GS
  3844.     #SS(0)            If illegal memory operand's EA in SS
  3845.       #PF(fcode)        If page fault
  3846.     #AC    #AC        If unaligned memory reference then alignment
  3847.                 check enabled and in ring 3.
  3848. #UD    #UD    #UD    #UD    If CR0.EM = 1
  3849. #NM    #NM    #NM    #NM    If CR0.TS = 1
  3850. #MF    #MF    #MF    #MF    If pending FPU Exception
  3851. #13        #13        If any part of the the operand lies outside of
  3852.                 the EA space from 0 to FFFFH
  3853. ++++++++++++++++++++++++++++++++++++++
  3854. COP & Times:
  3855.  
  3856. PSUBSB    mm,mm/m64    0FH E8H PostByte
  3857.  
  3858.      P55C:    n/a
  3859. future P6:    n/a
  3860. ----------O-PSUBSW---------------------------------
  3861. OPCODE PSUBSW    -  Packed Subtract with Saturation Words
  3862.  
  3863. CPU:  all which supported IA MMX:
  3864.       Pentium (P55C only), Pentium (tm) Pro  (P6) future models
  3865. Type of Instruction: User
  3866.  
  3867. Instruction: PSUBSW  dest,src
  3868. Description:
  3869.     dest[15..0]   <-   SaturateToSignedWord(dest[15..0]  - src[15..0])
  3870.     dest[31..16]  <-   SaturateToSignedWord(dest[31..16] - src[31..16])
  3871.     dest[47..32]  <-   SaturateToSignedWord(dest[47..32] - src[47..32])
  3872.     dest[63..48]  <-   SaturateToSignedWord(dest[63..48] - src[63..48])
  3873.  
  3874. Note:      This instruction subtract signed packed word in MMXregister/memory
  3875.     from signed packed word in MMX register and saturate.
  3876.       If the result is larger or smaller than the range of a signed word,
  3877.     the value is saturated; in the case of an overflow - to 7FFFH, and the
  3878.     case of an underflow - to 8000H
  3879.  
  3880. Flags Affected:     None
  3881.  
  3882. Exceptions:
  3883.  
  3884. RM    PM    VM    SMM    Description
  3885.     #GP(0)            If Illegal memory operand's EA in CS,DS,ES,FS,GS
  3886.     #SS(0)            If illegal memory operand's EA in SS
  3887.       #PF(fcode)        If page fault
  3888.     #AC    #AC        If unaligned memory reference then alignment
  3889.                 check enabled and in ring 3.
  3890. #UD    #UD    #UD    #UD    If CR0.EM = 1
  3891. #NM    #NM    #NM    #NM    If CR0.TS = 1
  3892. #MF    #MF    #MF    #MF    If pending FPU Exception
  3893. #13        #13        If any part of the the operand lies outside of
  3894.                 the EA space from 0 to FFFFH
  3895. ++++++++++++++++++++++++++++++++++++++
  3896. COP & Times:
  3897.  
  3898. PSUBSW    mm,mm/m64    0FH E9H PostByte
  3899.  
  3900.      P55C:    n/a
  3901. future P6:    n/a
  3902. ----------O-PSUBUSB--------------------------------
  3903. OPCODE PSUBUSB -  Packed Subtract Unsigned with Saturation Bytes
  3904.  
  3905. CPU:  all which supported IA MMX:
  3906.       Pentium (P55C only), Pentium (tm) Pro  (P6) future models
  3907. Type of Instruction: User
  3908.  
  3909. Instruction: PSUBUSB  dest,src
  3910. Description:
  3911.     dest[7..0]    <-   SaturateToUnsignedByte(dest[7..0]   - src[7..0])
  3912.     dest[15..8]   <-   SaturateToUnsignedByte(dest[15..8]  - src[15..8])
  3913.     dest[23..16]  <-   SaturateToUnsignedByte(dest[23..16] - src[23..16])
  3914.     dest[31..24]  <-   SaturateToUnsignedByte(dest[31..24] - src[31..24])
  3915.     dest[39..32]  <-   SaturateToUnsignedByte(dest[39..32] - src[39..32])
  3916.     dest[47..40]  <-   SaturateToUnsignedByte(dest[47..40] - src[47..40])
  3917.     dest[55..48]  <-   SaturateToUnsignedByte(dest[55..48] - src[55..48])
  3918.     dest[63..56]  <-   SaturateToUnsignedByte(dest[63..56] - src[63..56])
  3919.  
  3920. Note:      This instruction subtract unsigned packed byte in MMXregister/memory
  3921.     from unsigned packed byte in MMX register and saturate.
  3922.       If the result element is less than zero (a negative value), it is
  3923.     saturated to 00H
  3924.  
  3925. Flags Affected:     None
  3926.  
  3927. Exceptions:
  3928.  
  3929. RM    PM    VM    SMM    Description
  3930.     #GP(0)            If Illegal memory operand's EA in CS,DS,ES,FS,GS
  3931.     #SS(0)            If illegal memory operand's EA in SS
  3932.       #PF(fcode)        If page fault
  3933.     #AC    #AC        If unaligned memory reference then alignment
  3934.                 check enabled and in ring 3.
  3935. #UD    #UD    #UD    #UD    If CR0.EM = 1
  3936. #NM    #NM    #NM    #NM    If CR0.TS = 1
  3937. #MF    #MF    #MF    #MF    If pending FPU Exception
  3938. #13        #13        If any part of the the operand lies outside of
  3939.                 the EA space from 0 to FFFFH
  3940. ++++++++++++++++++++++++++++++++++++++
  3941. COP & Times:
  3942.  
  3943. PSUBUSB mm,mm/m64    0FH D8H PostByte
  3944.  
  3945.      P55C:    n/a
  3946. future P6:    n/a
  3947. ----------O-PSUBUSW--------------------------------
  3948. OPCODE PSUBUSW -  Packed Subtract Unsigned with Saturation Bytes
  3949.  
  3950. CPU:  all which supported IA MMX:
  3951.       Pentium (P55C only), Pentium (tm) Pro  (P6) future models
  3952. Type of Instruction: User
  3953.  
  3954. Instruction: PSUBUSW  dest,src
  3955. Description:
  3956.     dest[15..0]   <-   SaturateToUnsignedWord(dest[15..0]  - src[15..0])
  3957.     dest[31..16]  <-   SaturateToUnsignedWord(dest[31..16] - src[31..16])
  3958.     dest[47..32]  <-   SaturateToUnsignedWord(dest[47..32] - src[47..32])
  3959.     dest[63..48]  <-   SaturateToUnsignedWord(dest[63..48] - src[63..48])
  3960.  
  3961. Note:      This instruction subtract unsigned packed word in MMXregister/memory
  3962.     from unsigned packed word in MMX register and saturate.
  3963.       If the result element is less than zero (a negative value), it is
  3964.     saturated to 0000H
  3965.  
  3966. Flags Affected:     None
  3967.  
  3968. Exceptions:
  3969.  
  3970. RM    PM    VM    SMM    Description
  3971.     #GP(0)            If Illegal memory operand's EA in CS,DS,ES,FS,GS
  3972.     #SS(0)            If illegal memory operand's EA in SS
  3973.       #PF(fcode)        If page fault
  3974.     #AC    #AC        If unaligned memory reference then alignment
  3975.                 check enabled and in ring 3.
  3976. #UD    #UD    #UD    #UD    If CR0.EM = 1
  3977. #NM    #NM    #NM    #NM    If CR0.TS = 1
  3978. #MF    #MF    #MF    #MF    If pending FPU Exception
  3979. #13        #13        If any part of the the operand lies outside of
  3980.                 the EA space from 0 to FFFFH
  3981. ++++++++++++++++++++++++++++++++++++++
  3982. COP & Times:
  3983.  
  3984. PSUBUSW mm,mm/m64    0FH D9H PostByte
  3985.  
  3986.      P55C:    n/a
  3987. future P6:    n/a
  3988. ----------O-PSUBW----------------------------------
  3989. OPCODE PSUBW    -  Packed Subtract Words
  3990.  
  3991. CPU:  all which supported IA MMX:
  3992.       Pentium (P55C only), Pentium (tm) Pro  (P6) future models
  3993. Type of Instruction: User
  3994.  
  3995. Instruction: PSUBW  dest,src
  3996. Description:
  3997.     dest[15..0]    <-    dest[15..0]  - src[15..0]
  3998.     dest[31..16]    <-    dest[31..16] - src[31..16]
  3999.     dest[47..32]    <-    dest[47..32] - src[47..32]
  4000.     dest[63..48]    <-    dest[63..48] - src[63..48]
  4001.  
  4002.  
  4003. Note:      This instruction subtract packed word in MMXregister/memory from
  4004.     packed word in MMX register.
  4005.  
  4006. Flags Affected:     None
  4007.  
  4008. Exceptions:
  4009.  
  4010. RM    PM    VM    SMM    Description
  4011.     #GP(0)            If Illegal memory operand's EA in CS,DS,ES,FS,GS
  4012.     #SS(0)            If illegal memory operand's EA in SS
  4013.       #PF(fcode)        If page fault
  4014.     #AC    #AC        If unaligned memory reference then alignment
  4015.                 check enabled and in ring 3.
  4016. #UD    #UD    #UD    #UD    If CR0.EM = 1
  4017. #NM    #NM    #NM    #NM    If CR0.TS = 1
  4018. #MF    #MF    #MF    #MF    If pending FPU Exception
  4019. #13        #13        If any part of the the operand lies outside of
  4020.                 the EA space from 0 to FFFFH
  4021. ++++++++++++++++++++++++++++++++++++++
  4022. COP & Times:
  4023.  
  4024. PSUBW    mm,mm/m64    0FH F9H PostByte
  4025.  
  4026.      P55C:    n/a
  4027. future P6:    n/a
  4028. ----------O-PUNPCKHBW------------------------------
  4029. OPCODE PUNPCKHBW    -  Unpack High Bytes to Words
  4030.  
  4031. CPU:  all which supported IA MMX:
  4032.       Pentium (P55C only), Pentium (tm) Pro  (P6) future models
  4033. Type of Instruction: User
  4034.  
  4035. Instruction: PUNPCKHBW    dest,src
  4036. Description:
  4037.     dest[63..56]   <-   src[63..56]
  4038.     dest[55..48]   <-   dest[63..56]
  4039.     dest[47..40]   <-   src[55..48]
  4040.     dest[39..32]   <-   dest[55..48]
  4041.     dest[31..24]   <-   src[47..40]
  4042.     dest[23..16]   <-   dest[47..40]
  4043.     dest[15..8]    <-   src[39..32]
  4044.     dest[7..0]     <-   dest[39..32]
  4045.  
  4046. Note:      This instruction unpack and interleave the high-order data elements
  4047.     of the destination and source operands into the destination operand.
  4048.     The low-order data elements are ignored.
  4049.       When unpacking from a memory operand, the full 64-bit operand is
  4050.     accessed from memory. The instruction uses only the high-order 32 bits.
  4051.       If the source operand is all zeros, the result is a zero extension of
  4052.     the high-order elements of the destination operand. When using
  4053.     PUNPCKHBW instruction the bytes are zero extended, or unpacked into
  4054.     unsigned words.
  4055.  
  4056. Flags Affected:     None
  4057.  
  4058. Exceptions:
  4059.  
  4060. RM    PM    VM    SMM    Description
  4061.     #GP(0)            If Illegal memory operand's EA in CS,DS,ES,FS,GS
  4062.     #SS(0)            If illegal memory operand's EA in SS
  4063.       #PF(fcode)        If page fault
  4064.     #AC    #AC        If unaligned memory reference then alignment
  4065.                 check enabled and in ring 3.
  4066. #UD    #UD    #UD    #UD    If CR0.EM = 1
  4067. #NM    #NM    #NM    #NM    If CR0.TS = 1
  4068. #MF    #MF    #MF    #MF    If pending FPU Exception
  4069. #13        #13        If any part of the the operand lies outside of
  4070.                 the EA space from 0 to FFFFH
  4071. ++++++++++++++++++++++++++++++++++++++
  4072. COP & Times:
  4073.  
  4074. PUNPCKHBW    mm,mm/m64    0FH 68H PostByte
  4075.  
  4076.      P55C:    n/a
  4077. future P6:    n/a
  4078. ----------O-PUNPCKHDQ------------------------------
  4079. OPCODE PUNPCKHDQ    -  Unpack High Dwords to Qwords
  4080.  
  4081. CPU:  all which supported IA MMX:
  4082.       Pentium (P55C only), Pentium (tm) Pro  (P6) future models
  4083. Type of Instruction: User
  4084.  
  4085. Instruction: PUNPCKHDQ    dest,src
  4086. Description:
  4087.     dest[63..32]   <-   src[63..32]
  4088.     dest[31..0]    <-   dest[63..32]
  4089.  
  4090. Note:      This instruction unpack and interleave the high-order data elements
  4091.     of the destination and source operands into the destination operand.
  4092.     The low-order data elements are ignored.
  4093.       When unpacking from a memory operand, the full 64-bit operand is
  4094.     accessed from memory. The instruction uses only the high-order 32 bits.
  4095.       If the source operand is all zeros, the result is a zero extension of
  4096.     the high-order elements of the destination operand.
  4097.  
  4098. Flags Affected:     None
  4099.  
  4100. Exceptions:
  4101.  
  4102. RM    PM    VM    SMM    Description
  4103.     #GP(0)            If Illegal memory operand's EA in CS,DS,ES,FS,GS
  4104.     #SS(0)            If illegal memory operand's EA in SS
  4105.       #PF(fcode)        If page fault
  4106.     #AC    #AC        If unaligned memory reference then alignment
  4107.                 check enabled and in ring 3.
  4108. #UD    #UD    #UD    #UD    If CR0.EM = 1
  4109. #NM    #NM    #NM    #NM    If CR0.TS = 1
  4110. #MF    #MF    #MF    #MF    If pending FPU Exception
  4111. #13        #13        If any part of the the operand lies outside of
  4112.                 the EA space from 0 to FFFFH
  4113. ++++++++++++++++++++++++++++++++++++++
  4114. COP & Times:
  4115.  
  4116. PUNPCKHDQ    mm,mm/m64    0FH 6AH PostByte
  4117.  
  4118.      P55C:    n/a
  4119. future P6:    n/a
  4120. ----------O-PUNPCKHWD------------------------------
  4121. OPCODE PUNPCKHWD    -  Unpack High Words to Dwords
  4122.  
  4123. CPU:  all which supported IA MMX:
  4124.       Pentium (P55C only), Pentium (tm) Pro  (P6) future models
  4125. Type of Instruction: User
  4126.  
  4127. Instruction: PUNPCKHWD    dest,src
  4128. Description:
  4129.     dest[63..56]   <-   src[63..48]
  4130.     dest[47..32]   <-   dest[63..48]
  4131.     dest[31..16]   <-   src[47..32]
  4132.     dest[15..0]    <-   dest[47..32]
  4133.  
  4134. Note:      This instruction unpack and interleave the high-order data elements
  4135.     of the destination and source operands into the destination operand.
  4136.     The low-order data elements are ignored.
  4137.       When unpacking from a memory operand, the full 64-bit operand is
  4138.     accessed from memory. The instruction uses only the high-order 32 bits.
  4139.       If the source operand is all zeros, the result is a zero extension of
  4140.     the high-order elements of the destination operand. When using
  4141.     PUNPCKHWD instruction the words are zero extended, or unpacked into
  4142.     unsigned doublewords.
  4143.  
  4144. Flags Affected:     None
  4145.  
  4146. Exceptions:
  4147.  
  4148. RM    PM    VM    SMM    Description
  4149.     #GP(0)            If Illegal memory operand's EA in CS,DS,ES,FS,GS
  4150.     #SS(0)            If illegal memory operand's EA in SS
  4151.       #PF(fcode)        If page fault
  4152.     #AC    #AC        If unaligned memory reference then alignment
  4153.                 check enabled and in ring 3.
  4154. #UD    #UD    #UD    #UD    If CR0.EM = 1
  4155. #NM    #NM    #NM    #NM    If CR0.TS = 1
  4156. #MF    #MF    #MF    #MF    If pending FPU Exception
  4157. #13        #13        If any part of the the operand lies outside of
  4158.                 the EA space from 0 to FFFFH
  4159. ++++++++++++++++++++++++++++++++++++++
  4160. COP & Times:
  4161.  
  4162. PUNPCKHWD    mm,mm/m64    0FH 69H PostByte
  4163.  
  4164.      P55C:    n/a
  4165. future P6:    n/a
  4166. ----------O-PUNPCKLBW------------------------------
  4167. OPCODE PUNPCKLBW    -  Unpack Low Bytes to Words
  4168.  
  4169. CPU:  all which supported IA MMX:
  4170.       Pentium (P55C only), Pentium (tm) Pro  (P6) future models
  4171. Type of Instruction: User
  4172.  
  4173. Instruction: PUNPCKLBW    dest,src
  4174. Description:
  4175.     dest[63..56]   <-   src[31..24]
  4176.     dest[55..48]   <-   dest[31..24]
  4177.     dest[47..40]   <-   src[23..16]
  4178.     dest[39..32]   <-   dest[23..16]
  4179.     dest[31..24]   <-   src[15..8]
  4180.     dest[23..16]   <-   dest[15..8]
  4181.     dest[15..8]    <-   src[7..0]
  4182.     dest[7..0]     <-   dest[7..0]
  4183.  
  4184. Note:      This instruction unpack and interleave the low-order data elements
  4185.     of the destination and source operands into the destination operand.
  4186.     The high-order data elements are ignored.
  4187.       When the source data comes from 64-bit registers, the upper 32 bits
  4188.     are ignored.
  4189.       When unpacking from a memory operand, only 32 bits are accessed. The
  4190.     instruction uses all 32 bits.
  4191.       If the source operand is all zeros, the result is a zero extension of
  4192.     the low-order elements of the destination operand. When using
  4193.     PUNPCKLBW instruction the bytes are zero extended, or unpacked into
  4194.     unsigned words.
  4195.  
  4196. Flags Affected:     None
  4197.  
  4198. Exceptions:
  4199.  
  4200. RM    PM    VM    SMM    Description
  4201.     #GP(0)            If Illegal memory operand's EA in CS,DS,ES,FS,GS
  4202.     #SS(0)            If illegal memory operand's EA in SS
  4203.       #PF(fcode)        If page fault
  4204.     #AC    #AC        If unaligned memory reference then alignment
  4205.                 check enabled and in ring 3.
  4206. #UD    #UD    #UD    #UD    If CR0.EM = 1
  4207. #NM    #NM    #NM    #NM    If CR0.TS = 1
  4208. #MF    #MF    #MF    #MF    If pending FPU Exception
  4209. #13        #13        If any part of the the operand lies outside of
  4210.                 the EA space from 0 to FFFFH
  4211. ++++++++++++++++++++++++++++++++++++++
  4212. COP & Times:
  4213.  
  4214. PUNPCKLBW    mm,mm/m32    0FH 60H PostByte
  4215.  
  4216.      P55C:    n/a
  4217. future P6:    n/a
  4218. ----------O-PUNPCKLDQ------------------------------
  4219. OPCODE PUNPCKLDQ    -  Unpack Low Dwords to Qwords
  4220.  
  4221. CPU:  all which supported IA MMX:
  4222.       Pentium (P55C only), Pentium (tm) Pro  (P6) future models
  4223. Type of Instruction: User
  4224.  
  4225. Instruction: PUNPCKLDQ    dest,src
  4226. Description:
  4227.     dest[63..32]   <-   src[31..0]
  4228.     dest[31..0]    <-   dest[31..0]
  4229.  
  4230. Note:      This instruction unpack and interleave the low-order data elements
  4231.     of the destination and source operands into the destination operand.
  4232.       When the source data comes from 64-bit registers, the upper 32 bits
  4233.     are ignored.
  4234.       When unpacking from a memory operand, only 32 bits are accessed. The
  4235.     instruction uses all 32 bits.
  4236.       If the source operand is all zeros, the result is a zero extension of
  4237.     the low-order elements of the destination operand.
  4238.  
  4239. Flags Affected:     None
  4240.  
  4241. Exceptions:
  4242.  
  4243. RM    PM    VM    SMM    Description
  4244.     #GP(0)            If Illegal memory operand's EA in CS,DS,ES,FS,GS
  4245.     #SS(0)            If illegal memory operand's EA in SS
  4246.       #PF(fcode)        If page fault
  4247.     #AC    #AC        If unaligned memory reference then alignment
  4248.                 check enabled and in ring 3.
  4249. #UD    #UD    #UD    #UD    If CR0.EM = 1
  4250. #NM    #NM    #NM    #NM    If CR0.TS = 1
  4251. #MF    #MF    #MF    #MF    If pending FPU Exception
  4252. #13        #13        If any part of the the operand lies outside of
  4253.                 the EA space from 0 to FFFFH
  4254. ++++++++++++++++++++++++++++++++++++++
  4255. COP & Times:
  4256.  
  4257. PUNPCKLDQ    mm,mm/m32    0FH 62H PostByte
  4258.  
  4259.      P55C:    n/a
  4260. future P6:    n/a
  4261. ----------O-PUNPCKLWD------------------------------
  4262. OPCODE PUNPCKLWD    -  Unpack Low Words to Dwords
  4263.  
  4264. CPU:  all which supported IA MMX:
  4265.       Pentium (P55C only), Pentium (tm) Pro  (P6) future models
  4266. Type of Instruction: User
  4267.  
  4268. Instruction: PUNPCKLWD    dest,src
  4269. Description:
  4270.     dest[63..48]   <-   src[31..16]
  4271.     dest[47..32]   <-   dest[31..16]
  4272.     dest[31..16]   <-   src[15..0]
  4273.     dest[15..0]    <-   dest[15..0]
  4274.  
  4275. Note:      This instruction unpack and interleave the low-order data elements
  4276.     of the destination and source operands into the destination operand.
  4277.       When the source data comes from 64-bit registers, the upper 32 bits
  4278.     are ignored.
  4279.       When unpacking from a memory operand, only 32 bits are accessed. The
  4280.     instruction uses all 32 bits.
  4281.       If the source operand is all zeros, the result is a zero extension of
  4282.     the low-order elements of the destination operand. When using
  4283.     PUNPCKLWD instruction the words are zero extended, or unpacked into
  4284.     unsigned doublewords.
  4285.  
  4286. Flags Affected:     None
  4287.  
  4288. Exceptions:
  4289.  
  4290. RM    PM    VM    SMM    Description
  4291.     #GP(0)            If Illegal memory operand's EA in CS,DS,ES,FS,GS
  4292.     #SS(0)            If illegal memory operand's EA in SS
  4293.       #PF(fcode)        If page fault
  4294.     #AC    #AC        If unaligned memory reference then alignment
  4295.                 check enabled and in ring 3.
  4296. #UD    #UD    #UD    #UD    If CR0.EM = 1
  4297. #NM    #NM    #NM    #NM    If CR0.TS = 1
  4298. #MF    #MF    #MF    #MF    If pending FPU Exception
  4299. #13        #13        If any part of the the operand lies outside of
  4300.                 the EA space from 0 to FFFFH
  4301. ++++++++++++++++++++++++++++++++++++++
  4302. COP & Times:
  4303.  
  4304. PUNPCKLWD    mm,mm/m32    0FH 61H PostByte
  4305.  
  4306.      P55C:    n/a
  4307. future P6:    n/a
  4308. ----------O-PXOR-----------------------------------
  4309. OPCODE PXOR    -  Bitwise Logical Exclusive OR
  4310.  
  4311. CPU:  all which supported IA MMX:
  4312.       Pentium (P55C only), Pentium (tm) Pro  (P6) future models
  4313. Type of Instruction: User
  4314.  
  4315. Instruction: PXOR  dest,src
  4316. Description:
  4317.     dest    <-   dest XOR src
  4318.  
  4319. Note:      XOR 64 bits from MMXregister/memory to MMX register.
  4320.  
  4321. Flags Affected:     None
  4322.  
  4323. Exceptions:
  4324.  
  4325. RM    PM    VM    SMM    Description
  4326.     #GP(0)            If Illegal memory operand's EA in CS,DS,ES,FS,GS
  4327.     #SS(0)            If illegal memory operand's EA in SS
  4328.       #PF(fcode)        If page fault
  4329.     #AC    #AC        If unaligned memory reference then alignment
  4330.                 check enabled and in ring 3.
  4331. #UD    #UD    #UD    #UD    If CR0.EM = 1
  4332. #NM    #NM    #NM    #NM    If CR0.TS = 1
  4333. #MF    #MF    #MF    #MF    If pending FPU Exception
  4334. #13        #13        If any part of the the operand lies outside of
  4335.                 the EA space from 0 to FFFFH
  4336. ++++++++++++++++++++++++++++++++++++++
  4337. COP & Times:
  4338.  
  4339. PXOR    mm,mm/m64    0FH EFH PostByte
  4340.  
  4341.      P55C:    n/a
  4342. future P6:    n/a
  4343. ----------O-RDMSR----------------------------------
  4344. OPCODE RDMSR  - Read From Model Specified Register
  4345.  
  4346.  
  4347. CPU:  Pentium (tm), IBM 386SLC,486SLC,486SLC2
  4348. Type of Instruction: System
  4349.  
  4350. Instruction: RDMSR
  4351. Description:
  4352.     IF (ECX is valid number of MSR) and (CPL=0)  THEN
  4353.           {
  4354.           EDX:EAX <- MSR [ECX];
  4355.           }
  4356.         ELSE
  4357.           {
  4358.           General Protection Fault  INT 0DH (0)
  4359.           }
  4360.     END
  4361.  
  4362.  
  4363. Valid number Of MSR is:
  4364.     Pentium:  0-2,4-0Eh,10h-13h
  4365.     IBM 486SLC2:  1000H-1002H
  4366.     IBM 386SLC:      1000H-1001H
  4367.     IBM 486SLC:      1000H-1001H
  4368.  
  4369. Flags Affected: None
  4370. CPU mode: RM,PM0,SMM
  4371.  
  4372. Physical Form:         RDMSR
  4373. COP (Code of Operation): 0FH 32H
  4374. Clocks:         Pentium   : 20-24
  4375.  
  4376. Note: The MSR # 3,0fh and >13h are reserved on Pentium.
  4377.       Do not execute RDMSR/WRMSR with this values.
  4378.  
  4379.       Register    Description
  4380.  
  4381.       MSR 0  is Machine check Exception Address register (Read only)
  4382.         (Pentium,Am5k86,Pentium Pro)
  4383.         bits    Description
  4384.         63..32    Reserved
  4385.         31..0    Machine Check Phisical Address
  4386.  
  4387.       MSR 1  is Machine Check Type register (Read Only)
  4388.         (Pentium,Am5k86,Pentium Pro)
  4389.         bits    Description
  4390.         63..5    Reserved
  4391.         5    FERI   (Fun Error Indicator)
  4392.             (Pentium OverDrive Only)
  4393.             initialazed after RESET as 0. If temperature
  4394.             of CHIP > ~75'C then set this bit to 1 and this
  4395.             bit still will 1 before Next RESET.
  4396.             This bit used FANMONIT.EXE utility shipped with
  4397.             PODP5V.
  4398.         4    LOCK
  4399.             =1 if bus cycle called Machine Check was Locked
  4400.             =0 if --//-- not locked (normal)
  4401.         3    M/IO# \
  4402.         2    D/C#     State of output pins in bus cycle called
  4403.         1    W/R#  /     Machine check
  4404.         0    CHK  (Check)
  4405.             =1 after last read MSR 1 was Machine Check
  4406.             Note: This bit Clearing on reading
  4407.  
  4408.         Note: Pentium OverDrive difference
  4409.         5    FERI   (Fun Error Indicator)
  4410.             initialazed after RESET as 0. If temperature
  4411.             of CHIP > ~75'C then set this bit to 1 and this
  4412.             bit still will 1 before Next RESET.
  4413.             This bit used FANMONIT.EXE utility shipped with
  4414.             PODP5V.
  4415.  
  4416.  
  4417.       MSR 2h  is Test Register 1  (Read/Write)
  4418.         (Pentium)
  4419.         Parity Reversal Register (PRR)
  4420.         bits    Description
  4421.         63..14    Reserved  (should be zero)
  4422.         13    MC   (Microcode Parity Error)
  4423.         12    DTD  (data TLB data error)
  4424.         11    DTT  (data TLB tag error)
  4425.         10    DD   (data cache data)
  4426.         9    DT   (data cache tag)
  4427.         8    ITD  (instruction TLB data error)
  4428.         7    ITT  (instruction TLB tag error)
  4429.         6    ID3  (data cache odd bits (255, ..., 129) error)
  4430.         5    ID2  (data cache even bits (254,..., 128) error)
  4431.         4    ID1  (data cache odd bits (127, ..., 1) error)
  4432.         3    ID0  (data cache even bits (126, ..., 0) error)
  4433.         2    IT   (instruction cache TAG)
  4434.         1    NS   (No shutdown)
  4435.                  If = 0 On parity errors set PRR.PES, assert IERR#
  4436.                  and shutdown.
  4437.                  If =1 On parity error set PRR.PES and assert
  4438.                  IERR#
  4439.         0    PES  (Parity Error Summary)
  4440.                  If =1 Parity Error
  4441.                  If =0 Never Parity error
  4442.  
  4443.         Note: bits 13..2, if bit=1 it means that error joined with
  4444.               this bit present.
  4445.  
  4446.       MSR 3h  is  Reserved  (Do not Accessed it)
  4447.  
  4448.  
  4449.       MSR 4h  is Test Register 2 (TR 2) (Read/Write)
  4450.         (Pentium)
  4451.         (Instruction Cache End bits TR)
  4452.         bits    Description
  4453.         63..4    Reserved  (should be zero)
  4454.         3..0    End Bits
  4455.         Note: each bit of End bit correspond to one byte of
  4456.               instruction in TR3 during code testability access.
  4457.               I.c. line size = 32 bytes, 8 accesses are needed for
  4458.               read/write the end bits of cache line.
  4459.               Each of this bits indicated an instruction boundarues
  4460.               If given byte is last byte of instruction then bit
  4461.               joined with this byte =1.
  4462.               Then new line writting into cache all ends bits =1,
  4463.               when line decoding setting bits to 0, except last byte
  4464.               of instruction.
  4465.  
  4466.  
  4467.       MSR 5h  is Test Register 3 (TR 3) (Read/Write)
  4468.         (Pentium)
  4469.         (Cache test Data)
  4470.         bits    Description
  4471.         63..32    Reserved  (should be zero)
  4472.         31..0    Data Reading/Writing from/to {code/data} cache
  4473.  
  4474.       MSR 6h  is Test Register 4 (TR 4) (Read/Write)
  4475.         (Pentium)
  4476.         (Cache Test Tag)
  4477.         bits    Description
  4478.         63..32    Reserved  (should be zero)
  4479.         31..8    Cache Tag [35:12]
  4480.         7..3    Reserved  (should be zero)
  4481.         2    LRU (Last Resently Used)
  4482.             Contain way joined with readed/writed cache line
  4483.         1..0    VALID
  4484.             Contain Valid Status Information
  4485.             [Code Cache (TR5.CD=0)]:
  4486.             VALID[1] VALID[0]   Description
  4487.               x       0       Code cache line is invalid
  4488.               x       1       Code cache line is valid
  4489.             [Data Cache (TR5.CD=1)]:
  4490.             VALID[1] VALID[0]   Description
  4491.               0       0       Data cache line is invalid
  4492.               0       1       Data cache line is shared
  4493.               1       0       Data cache line is exclusive
  4494.               1       1       Data cache line is modified
  4495.  
  4496.       MSR 7h  is Test Register 5 (TR 5) (Read/Write)
  4497.         (Pentium)
  4498.         (Cache Test Control)
  4499.         bits    Description
  4500.         63..15    Reserved  (should be zero)
  4501.         14    WB (Write-back)
  4502.             If = 0    Write-throught
  4503.             If = 1    Write-back
  4504.             see also TR5.CNTRL
  4505.         13    CD (Code/Data)
  4506.             Select Code/Data cache for test operation
  4507.             If = 0 Code cache select
  4508.             If = 1 Data cache select
  4509.         12    ENTRY
  4510.             Specify cache Way
  4511.         11..5    SET
  4512.             Cache Set Number (for Write/then read)
  4513.         4..2    BUFFER SELECT
  4514.             Select one of 8 (4byte) part of cache line
  4515.         1..0    CNTRL (Control)
  4516.             CNTRL[1] CNTRL[0] Description
  4517.               0       0      Normal Operation Mode
  4518.               0       1      Testability Write
  4519.               1       0      Testability Read
  4520.               1       1      Flush
  4521.             Note: Flush actions depends on TR7.WB:
  4522.             TR7.CD    TR7.WB    Description
  4523.               0       x      Invalidate code cache line
  4524.               1       0      Invalidate data cache line, no WB,
  4525.                       if modified
  4526.               1       1      Invalidate data cache line, WB,
  4527.                       if modified
  4528.  
  4529.       MSR 8h  is Test Register 6 (TR 6) (Read/Write)
  4530.         (Pentium)
  4531.         (TLB Command Test Register)
  4532.         bits    Description
  4533.         63..32    Reserved  (should be zero)
  4534.         31..12    LINEAR ADDRESS
  4535.         11    V (Valid)
  4536.             If = 1 valid TLB entry
  4537.             If = 0 invalid TLB entry
  4538.         10    D (Dirty)
  4539.             If = 1 page was write-accessed
  4540.             If = 0 page never was write-accessed
  4541.         9    U (User Mode)
  4542.             If = 0 page may accessed at PL=0,1,2,3
  4543.             If = 1 PL=0 access allowed
  4544.         8    W (Writable)
  4545.             If = 0    Read only page
  4546.             If = 1    Read/Write page
  4547.         7..3    Reserved (should be zero)
  4548.         2    PS (Page Size)
  4549.             If = 0 4KB page
  4550.             If = 1 4MB page
  4551.         1    CD (Code/Data TLB)
  4552.             If = 0 Code TLB
  4553.             If = 1 Data TLB
  4554.         0    OP (Operation)
  4555.             If = 0 TLB Write
  4556.             If = 1 TLB Read
  4557.  
  4558.       MSR 9h  is Test Register 7 (TR 7) (Read/Write)
  4559.         (Pentium)
  4560.         (TLB Test Physical Address)
  4561.         bits    Description
  4562.         63..32    Reserved  (should be zero)
  4563.         31..12    PHYSICAL ADDRESS
  4564.         11    PCD   (Page Cache Disable)
  4565.         10    PWT   (Page Write-Throught)
  4566.         9..7    LRU   (TLB LRU)
  4567.         6..5    Reserved (should be zero)
  4568.         4    H  (Hit Indicator)
  4569.             If we want write into TLB, set this bit to 1.
  4570.             If read, then if linear address found in TLB
  4571.             this bit set to 1, otherwize to 0.
  4572.         3..2    ENTRY
  4573.             One of 4 TLB ways where to write, or where found
  4574.             linear address if read.
  4575.         1..0    Reserved (should be zero)
  4576.  
  4577.       MSR Ah  is  Reserved (Do not Accessed it)
  4578.  
  4579.  
  4580.       MSR Bh  is Test Register 9 (TR 9) (Read/Write)
  4581.         (Pentium)
  4582.         (BTB Test Tag Register)
  4583.         bits    Description
  4584.         63..32    Reserved  (should be zero)
  4585.         31..8    TAG ADDRESS
  4586.         7..2    Reserved  (should be zero)
  4587.         1..0    HISTORY
  4588.             History is state of current branch
  4589.  
  4590.  
  4591.       MSR Ch  is Test Register 10 (TR 10) (Read/Write)
  4592.         (Pentium)
  4593.         (BTB Test Target Register)
  4594.         bits    Description
  4595.         63..32    Reserved  (should be zero)
  4596.         31..0    TARGET ADDRESS
  4597.  
  4598.  
  4599.       MSR Dh  is Test Register 11 (TR 11) (Read/Write)
  4600.         (Pentium)
  4601.         bits    Description
  4602.         63..12    Reserved  (should be zero)
  4603.         11..8    BTB SET
  4604.             Select one of 64 set to access
  4605.         7..4    Reserved  (should be zero)
  4606.         3..2    ENTRY
  4607.             select BTB way
  4608.         1..0    CNTL
  4609.             Command to Test BTB
  4610.             CNTL[1]     CNTL[0]  Description
  4611.               0       0     Normal Operating Mode
  4612.               0       1     Testability Write
  4613.               1       0     Testability Read
  4614.               1       1     Flush
  4615.  
  4616.  
  4617.       MSR Eh  is Test Register 12 (TR 12) (Read/Write)
  4618.         (Pentium)
  4619.         (New Feature Control)
  4620.         bits    Description
  4621.         63..3    Reserved  (should be zero)
  4622.         3    CI (Cache Inhibit)
  4623.             if =0 chip operated normally
  4624.                =1 then all cache line fill are inhibited,
  4625.                   and bus cycles due to cache misses are
  4626.                   run as single-transfer cycles
  4627.         2    SE (Single-Pipe Execution)
  4628.             If =0 instruction executed in U and V pipes.
  4629.                =1 instruction executed only in U pipe
  4630.         1    TR (Tracing Control)
  4631.             After reset clear to zero.
  4632.             This bit enable/disable special branch trace
  4633.             message cycle which generating when BTB hit.
  4634.             =0 disable
  4635.             =1 enable
  4636.         0    NBP  (No Branch prediction)
  4637.             If = 1 Disable Allocated entryes in BTB
  4638.             If = 0 Enable
  4639.  
  4640.       MSR Fh is Reserved (Not use it)
  4641.  
  4642.  
  4643.  
  4644. Global Note:
  4645.     Unfortuantly, More Information about MSR Features is Intel Secret.
  4646.     If You want get more Info, request Your Local Intel Office.
  4647.     Document you need named:
  4648.     Supplement to the Pentium(tm) Processor User's Manual.
  4649.  
  4650.  
  4651.       MSR 10h is Time Stamp Counter  (TSC) (Read/Write)
  4652.         (Pentium,Am5k86,Pentium Pro)
  4653.         Time Stamp Counter (as all other MSRs) is clearing to 0 when
  4654.         RESET pin shutdown and unchanged when INIT pin shutdown.
  4655.         TSC is incremented every CPU core clock cycle.
  4656.  
  4657.       MSR 11h is Control/Event Select Register (CESR) (Read/Write)
  4658.         (Pentium)
  4659.         Init value after reset = 00000000000000000h
  4660.         bits    Description
  4661.         63..26    Reserved
  4662.         25    PC1  (Pin Control, counter #1)
  4663.             If =0 counter # 1 has incremented
  4664.             If =1 counter # 1 has overflowed
  4665.         24..22    CC1  (Counter #1 Control)
  4666.             CC[2] CC[1] CC[0]  Description
  4667.               0    0     0       Counting nothing
  4668.               0    0     1       Counting events while in PL=0,1,2
  4669.               0    1     0       Counting events while in PL =3
  4670.               0    1     1       Counting events in any PL
  4671.               1    0     0       Counting nothing
  4672.               1    0     1       Counting clocks (like TSC) in PL=0..2
  4673.               1    1     0       Counting clocks in PL=3
  4674.               1    1     1       Counting clocks at any PL
  4675.         21..16    ES1  (Event Select, counter # 1)
  4676.             (see below)
  4677.         15..10     Reserved
  4678.         9    PC0 (see PC1 for description)
  4679.         8..6    CC0 (see CC1 for description
  4680.         5..0    ES0 (Event select, counter # 0)
  4681.             Event Type for ES
  4682.             Value    Event Type
  4683.             00h    Data Read
  4684.             01h    Data Write
  4685.             02h    Data TLB miss
  4686.             03h    Data Read Miss
  4687.             04h    Data Write miss
  4688.             05h    Write hit to Modified or Exclusive Cacheline
  4689.             06h    Data cache lines written back
  4690.             07h    Data cache snoops
  4691.             08h    Data cache snoops hit
  4692.             09h    Memory access in both pipes
  4693.             0Ah    Data bank access conflict
  4694.             0Bh    Misaligned data memory references
  4695.             0Ch    Code read
  4696.             0Dh    Code TLB miss
  4697.             0Eh    Code cache miss
  4698.             0Fh    Any segment register load
  4699.             10h    Segment descriptor cache accessed
  4700.             11h    Segment descriptor cache hit
  4701.             12h    Branches
  4702.             13h    BTB hit
  4703.             14h    Taken branch or BTB hit
  4704.             15h    Pipeline flushes
  4705.             16h    Instructions executed
  4706.             17h    Instruction executed in V pipes
  4707.             18h    Bus utilization
  4708.             19h    Pipeline stalled by write backups
  4709.             1Ah    Pipeline stalled by data memory read
  4710.             1Bh    Pipeline stalled by write to M or E line
  4711.             1Ch    Locked bus cycle
  4712.             1Dh    I/O cycle
  4713.             1Eh    Noncachable memory references
  4714.             1Fh    Pipeline stalled by AGI
  4715.             20h-21h Reserved
  4716.             22h    FP operations
  4717.             23h    Breakpoint 0 match
  4718.             24h    Breakpoint 1 match
  4719.             25h    Breakpoint 2 match
  4720.             26h    Breakpoint 3 match
  4721.             27h    Hardware interrupt
  4722.             28h    Data read or data write
  4723.             29h    Data read/write miss
  4724.             2Ah-3Fh Reserved
  4725.  
  4726.  
  4727.       MSR 12h is Counter #0 (Read/Write)
  4728.         (Pentium)
  4729.         bits    Description
  4730.         63..40    Reserved
  4731.         39..0    Current counter value
  4732.  
  4733.       MSR 13h is Counter #1 (Read/Write)
  4734.         (Pentium)
  4735.         bits    Description
  4736.         63..40    Reserved
  4737.         39..0    Current counter value
  4738.  
  4739.  
  4740.       MSR 1Bh is APIC Base
  4741.         (Pentium Pro)
  4742.         bits    Description
  4743.         8    BSP (Boot Strap Processor Indicator Bit)
  4744.         11    APIC (APIC Global Enable Bit - permanent till reset
  4745.             Enabled = 1, Disabled = 0.
  4746.  
  4747.       MSR 2Ah  is EBL_CR_POWERON
  4748.         (Pentium Pro)
  4749.         bits    Description
  4750.         0    Data Bus error code policy
  4751.             1 = ECC
  4752.             0 = Parity
  4753.         1    Data Error Checking Enable
  4754.             0 = Disabled
  4755.             1 = Enabled
  4756.         2    Response Error Checking Enable
  4757.             1 = Disabled
  4758.             0 = Enabled
  4759.         3    AERR# Drive Enable
  4760.             1 = Disabled
  4761.             0 = Enabled
  4762.         4    BEER# Enable for Initiator bus requests
  4763.             1 = Disable
  4764.             0 = Enabled
  4765.         6    BEER# Enable for initiator internal errors
  4766.             1 = Disabled
  4767.             0 = Enable
  4768.         7    BINIT# Driver Enable
  4769.             1 = Disabled
  4770.             0 = Enabled
  4771.         8    Output Tri-state enabled    R
  4772.         9    Execute BIST            R
  4773.         10    AEER# Observation enable    R
  4774.         12    BINIT# Observation enable    R
  4775.         13    IN Order Queue Depth        R
  4776.         14    1M Power on Reset Vector    R
  4777.         15    FRC Mode Enabled        R
  4778.         17:16    APIC Cluster ID            R
  4779.         21..20    Symmetric Arbitration ID    R
  4780.         24..22    Clock Frequency Ratio        R
  4781.         26    Low Power Enable        R
  4782.  
  4783.       MSR 79h  is BIOS_UPDT_TRIG    (BIOS Update Trigger register)
  4784.         (Pentium Pro)
  4785.  
  4786.       MSR 82h  is Array Access Register (AAR)
  4787.         (Am5k86)
  4788.         63..32    Array pointer:
  4789.             31..8  Pointer within array
  4790.             7..0   Array will be accessed
  4791.                 Array     Description
  4792.                 E0h     Data cache: data
  4793.                 E1h     Data cache: Linear Tag
  4794.                 E4h     Code cache: Instruction
  4795.                 E5h    Code Cache: Linear Tag
  4796.                 E6h     Code Cache: Valid Bits
  4797.                 E7h     Code cache: Branch-prediction bits
  4798.                 E8h     4K TLB: Page
  4799.                 E9h     4K TLB: Linear Tag
  4800.                 EAh     4M TLB: Page
  4801.                 EBh     4M TLB: Linear Tag
  4802.                 ECh     Data cache: Physical tag
  4803.                 EDh     Code cache: Physical Tag
  4804.         31..0    Array Data
  4805.             If array = E0h    (Data cache: data)
  4806.                 31..0     Data
  4807.             If array = E1h    (Data cache: Linear Tag)
  4808.                 31..26    Reserved (0s)
  4809.                 25    Dirty Bit
  4810.                 24    User/Supervisor
  4811.                 23    R/W
  4812.                 22    0
  4813.                 21    Linear Valid bit
  4814.                 20..0    Tag
  4815.             If array = E4h    (Code cache: Instruction)
  4816.                 31..26    Reserved (0s)
  4817.                 25    Pfix1: Start bit
  4818.                 24    Pfix1: End bit
  4819.                 23    Pfix1: Opcode bit
  4820.                 22..21    Pfix1: Map (ROPs/MROM)
  4821.                 20..13    Byte1
  4822.                 12    Pfix0: Start bit
  4823.                 11    Pfix0: End bit
  4824.                 10    Pfix0: Opcode bit
  4825.                 9..8    Pfix0: Map (ROPs/MROM)
  4826.                 7..0    Byte0
  4827.             If array = E5h    (Code Cache: Linear Tag)
  4828.                 31..20    Reserved(0s)
  4829.                 19..0    linear address 31..12
  4830.             If array = E6h    (Code Cache: Valid Bits)
  4831.                 31..18    Reserved (0s)
  4832.                 17    Linear Tag Valid bit
  4833.                 16    User/Supervisor
  4834.                 15..0    Byte-Valid bits
  4835.             If array = E7h    (Code cache: Branch-prediction bits)
  4836.                 31..19    Reserved (0s)
  4837.                 18    Predicted taken
  4838.                 17..14    Byte offset within block of last byte
  4839.                     of predicted branch instruction
  4840.                 13..12    Column of predicted target
  4841.                 11..4    Index of Predicted Target
  4842.                 3..0    Target Byte
  4843.             If array = E8h    (4K TLB: Page)
  4844.                 31..22    Reserved (0s)
  4845.                 21    PCD bit
  4846.                 20    PWT bit
  4847.                 19..0    Page frame address
  4848.             If array = E9h    (4K TLB: Linear Tag)
  4849.                 31..20    Reserved (0s)
  4850.                 19    Global Valid Bit
  4851.                 18    Dirty
  4852.                 17    U/S
  4853.                 16    R/W
  4854.                 15    Valid
  4855.                 14..0    Tag (virtual address 31..17)
  4856.             If array = EAh    (4M TLB: Page)
  4857.                 31..12    Reserved (0s)
  4858.                 11    PCD bit
  4859.                 10    PWT bit
  4860.                 9..0    Page frame Address
  4861.             If array = EBh    (4M TLB: Linear Tag)
  4862.                 31..15    reserved (0s)
  4863.                 14    Global Valid Bit
  4864.                 13    Dirty Bit
  4865.                 12    U/S
  4866.                 11    R/W
  4867.                 10    Valid bit
  4868.                 9..0    Tag
  4869.             If array = ECh    (Data cache: Physical tag)
  4870.                 31..23    Reserved (0s)
  4871.                 22..21    MESI status
  4872.                     00 = invalid
  4873.                     01 = shared
  4874.                     10 = modified
  4875.                     11 = exclusive
  4876.                 20..0    Tag (Physical Address 31..11)
  4877.             If array = EDh    (Code cache: Physical Tag)
  4878.                 31..21 Reserved(0s)
  4879.                 20    Valid Bit
  4880.                 19..0    Tag (Physical Address 31..12)
  4881.         Note:
  4882.              READ DATA:
  4883.             mov ecx,82h
  4884.             mov    edx,Array Pointer
  4885.             rdmsr
  4886.             ; in EAX - 32bit data
  4887.              WRITE DATA:
  4888.             mov ecx,82h
  4889.             mov    edx,Array Pointer
  4890.             mov    eax,data
  4891.             wrmsr
  4892.  
  4893.       MSR 83h  is Hardware Configuration register (HWCR)
  4894.         (Am5k86)
  4895.         bits    Description
  4896.         63..8    Reserved
  4897.         7    DDC (Disable Data Cache)
  4898.         6    DIC (Disable Instruction Cache)
  4899.         5    DBP (Disable Branch Prediction)
  4900.         4    Reserved
  4901.         3..1    Debug Control
  4902.             000 Off
  4903.             001 Enable branch trace
  4904.             100 Enable Probe mode on debug trap
  4905.         0    DSPC (Disable Stopping Processor Clock)
  4906.  
  4907.       MSR 8Bh  is BIOS_SIGN    (BIOS Update Signature Register)
  4908.         (Pentium Pro)
  4909.  
  4910.       MSR C1h  is PERFCTR0    (Perfomance Counter # 0)
  4911.         (Pentium Pro)
  4912.  
  4913.       MSR C2h  is PERFCTR1    (Perfomance Counter # 1)
  4914.         (Pentium Pro)
  4915.  
  4916.       MSR FEh  is MTRRcap
  4917.         (Pentium Pro)
  4918.  
  4919.       MSR 179h    is MCG_CAP
  4920.         (Pentium Pro)
  4921.  
  4922.       MSR 17Ah    is MCG_STATUS
  4923.         (Pentium Pro)
  4924.  
  4925.       MSR 17Bh    is MCG_CTL
  4926.         (Pentium Pro)
  4927.  
  4928.       MSR 186h    is EVNTSEL0    (Event Select # 0)
  4929.         (Pentium Pro)
  4930.  
  4931.       MSR 187h    is EVNTSEL1    (Event Select # 1)
  4932.         (Pentium Pro)
  4933.  
  4934.       MSR 1D9h    is DEBUGCTLMSR (Debbuging Control MSR)
  4935.         0    Enable/Disable Last Branch Record
  4936.         1    Branch Trap Flag
  4937.         5..2    Perfomance Monitoring/Break Point Pins
  4938.         (Pentium Pro)
  4939.         6    Enable/Disable Execution Trace Messages
  4940.         15..14    Enable/Disable Execution Trace Messages
  4941.  
  4942.       MSR 1DBh is LASTBRANCHFROMIP (Last Branch From IP)
  4943.       MSR 1DCh is LASTBRANCHTOIP   (Last Branch To   IP)
  4944.       MSR 1DDh is LASTINTFROMIP       (Last INT    From IP)
  4945.       MSR 1DEh is LASTINTTOIP       (Last INT    To   IP)
  4946.  
  4947.       MSR 1E0h is ROB_CR_BKUPTMPDR6
  4948.         2    Fast String Enable Bit
  4949.             If Enable REP MOVS move 64bit on 1 clk.
  4950.  
  4951.  
  4952. Note: Pentium Pro contains also MSRs 200h..20Fh,400h..413h,
  4953.       250h,258h,259h,268h..26Fh,2FFh.
  4954.  
  4955.  
  4956.  
  4957. Note: Updating of this section in progress now.
  4958.       So full info will be in next version.
  4959.  
  4960.  
  4961. Here ended Pentium MSRs and Starting IBM MSRs.
  4962.  
  4963.       MSR 1000H is Processor Operation Register (IBM only)
  4964.         (486SLC/486SLC2/386SLC)
  4965.         bits    Description
  4966.         63..19    Reserved
  4967.         18    LWPLA (Low Power PLA) (reserved on IBM 386SLC)
  4968.         17    BUSRD (Bus Read)      (reserved on IBM 386SLC)
  4969.         16    CPGE  (Cache Parity Generate Error)
  4970.             (reserved on IBM 386SLC)
  4971.         15    ECNPX (Enable cachebility of NPX operands)
  4972.         14    EPWIA (Enable PWI ADS)
  4973.         13    ELPWH (Enable Low Power Halt Mode)
  4974.         12    XTOUT (Extend Out Instruction)
  4975.         11    CRLD  (Cache reload bit)
  4976.         10    EIKEN (Enable internal KEN#)
  4977.         9    DSCL  (Disable cache Lock Mode)
  4978.         8    Reserved
  4979.         7    CE     (Cache enable)
  4980.         6    EDBS   (Enable DBCS)
  4981.         5    EPWI   (Enable Power Interrupt)
  4982.         4    EFSP   (Enable Flush Snooping)
  4983.         3    ENSP   (Enable Snoop Input)
  4984.         2    A20M   (Address line 20 Mask)
  4985.         1    CPCE   (Cache Parity Checking Enable)
  4986.         0    CPE    (Cache Parity Error)
  4987.  
  4988.       MSR 1001H is Cache Region Control Register  (IBM only)
  4989.         ( IBM 386SLC/486SLC/486SLC2)
  4990.         bits    description
  4991.         63..40    Reserved
  4992.         39..32    Cache Memory Limit (CMLR)
  4993.         31..16    1st MB Read Only (LMROR)
  4994.         15..0    1st MB Cachable (LMCR)
  4995.  
  4996.       MSR 1002H is processor operation register (IBM only)
  4997.         (IBM 486SLC2 only)
  4998.         bits    description
  4999.         63..30    Reserved
  5000.         29    EEDFS (Enable External Dynamic Frequency Shift)
  5001.         28    DFSRY (Dynamic Frequency Shift Ready)
  5002.         27    DFSMD (Dynamic Frequency Shift Mode)
  5003.         26..24    CLKMD (Clock Mode)
  5004.             =000    x2
  5005.             =011    x1
  5006.         23..0    Reserved
  5007.  
  5008.  
  5009. Note: IBM MSRs documented in "486SLC2 (tm) Microprocessor Data Sheet"
  5010. (IBM Corp. 1993,Order number: VT05452)
  5011. ----------O-RDPMC----------------------------------
  5012. OPCODE RDPMC  - Read Perfomance Monitoring Counters
  5013.  
  5014.  
  5015. CPU:  Pentium (tm) Pro    (P6)
  5016. Type of Instruction: User
  5017.  
  5018. Instruction: RDPMC
  5019. Description:
  5020.     IF ((CPL<>0) AND (CR4.PCE==0))
  5021.     THEN { INT D (0) ; GENERAL PROTECTION FAULT }
  5022.     ELSE { EDX:EAX <- PERFOMANCE_MONITORING_REGISTER[ECX] }
  5023.     Note: Valid ECX values is 0,1.
  5024.           Invalid ECX values call INT D(0)
  5025.  
  5026.  
  5027. Note:  CR4.PSE = bit 8 of CR4
  5028.  
  5029. Note: Perfomance Monitoring Registers (PMR) are aliases to some Perfomance
  5030.       Monitoring MSRs:
  5031.  
  5032.       MSR 12h is Counter #0 (Read/Write) (Perfomance Monitoring Counter # 0)
  5033.         bits    Description
  5034.         63..40    Reserved
  5035.         39..0    Current counter value
  5036.  
  5037.       MSR 13h is Counter #1 (Read/Write) (Perfomance Monitoring Counter # 1)
  5038.         bits    Description
  5039.         63..40    Reserved
  5040.         39..0    Current counter value
  5041.  
  5042.  
  5043. ++++++++++++++++++++++++++++++++++++++
  5044. COP & Times:
  5045.  
  5046.    RDPMC    0FH 33H
  5047.     P6:     n/a
  5048. ----------O-RDTSC----------------------------------
  5049. OPCODE RDTSC  - Read From Time Stamp Counter
  5050.  
  5051.  
  5052. CPU:  Pentium (tm), Pentium Pro, AMD Am5k86
  5053. Type of Instruction: System/User
  5054.  
  5055. Instruction: RDTSC
  5056. Description:
  5057.     IF (CR4.TSD=0) or ((CR4.TSD=1) and (CPL=0))  THEN
  5058.           {
  5059.           EDX:EAX <- TSC;
  5060.           }
  5061.         ELSE
  5062.           {
  5063.           General Protection Fault  INT 0DH (0)
  5064.           }
  5065.     END
  5066.  
  5067.  
  5068.  
  5069. Note: TSC is one of MSR and after global hardware reset (not SRESET , but
  5070. RESET ) it clear to 0000000000000000H.
  5071.       TSC is MSR index 10h. TSC may set using WRMSR instruction.
  5072.       TSC incremented every CPU core clock cycle.
  5073.  
  5074. Flags Affected: None
  5075. CPU mode: RM,PM0,SMM
  5076.       ; PM,VM if enable
  5077.  
  5078. Physical Form:         RDTSC
  5079. COP (Code of Operation): 0FH 31H
  5080. Clocks:         Pentium   : n/a [20-24]
  5081. ----------O-REPC-----------------------------------
  5082. OPCODE REPC  - Repeat While Carry Flag
  5083.  
  5084.  
  5085. CPU:  NEC/Sony all V-series
  5086. Type of Instruction: Prefix
  5087.  
  5088. Instruction: REPC
  5089. Description:
  5090.     DO
  5091.          CX=CX-1;
  5092.          SERVICE_PENDING_INTERRUPT;
  5093.          STRING_INSTRUCTION;
  5094.        LOOPWHILE ((CX<>0) AND (CF==1));
  5095.  
  5096. Flags Affected: None
  5097. CPU mode: RM 8086
  5098.  
  5099. Physical Form:         REPC
  5100. COP (Code of Operation): 65H
  5101. Clocks:          NEC V20  : 2
  5102.           NEC V30  : 2
  5103. ----------O-REPNC----------------------------------
  5104. OPCODE REPNC  - Repeat While Not Carry Flag
  5105.  
  5106.  
  5107.  
  5108. CPU:  NEC/Sony all V-series
  5109. Type of Instruction: Prefix
  5110.  
  5111. Instruction: REPNC
  5112. Description:
  5113.     DO
  5114.          CX=CX-1;
  5115.          SERVICE_PENDING_INTERRUPT;
  5116.          STRING_INSTRUCTION;
  5117.        LOOPWHILE ((CX<>0) AND (CF<>1));
  5118.  
  5119. Flags Affected: None
  5120. CPU mode: RM 8086
  5121.  
  5122. Physical Form:         REPNC
  5123. COP (Code of Operation): 64H
  5124. Clocks:          NEC V20  : 2
  5125.           NEC V30  : 2
  5126. ----------O-RES3-----------------------------------
  5127. OPCODE RES3  - Restore All  CPU Registers
  5128.  
  5129.  
  5130. CPU:  AMD Am386SXLV, Am386DXLV
  5131.  
  5132. Type of Instruction: System Operation
  5133.             (Work only then CPL=0)
  5134.  
  5135. Instruction: RES3
  5136. Description:
  5137.           Load All Registers (Include Shadow Registers) from Table
  5138.           Which Begin on  place pointed ES:EDI
  5139.  
  5140. Note:
  5141.           This instruction is AMD analog Intel's LOADALL instruction
  5142.           but it's more i.c. return from SMM used this instruction.
  5143.  
  5144.           Then in SMM table is in SMRAM, then non SMM then table is
  5145.           in main memory.
  5146.  
  5147. Format of RES3 Table:
  5148.     (Table )
  5149.            Offset  Len  Description
  5150.         0H    4    CR0
  5151.         4H    4    EFLAGS
  5152.         8H    4    EIP
  5153.         CH    4    EDI
  5154.         10H    4    ESI
  5155.         14H    4    EBP
  5156.         18H    4    ESP
  5157.         1CH    4    EBX
  5158.         20H    4    EDX
  5159.         24H    4    ESX
  5160.         28H    4    EAX
  5161.         2CH    4    DR6
  5162.         30H    4    DR7
  5163.         34H    4    TR     (16 bit, zero filled up)
  5164.         38H    4    LDT  ---------
  5165.         3CH    4    GS   ---------
  5166.         40H    4    FS   ---------
  5167.         44H    4    DS   ---------
  5168.         48H    4    SS   ---------
  5169.         4CH    4    CS   ---------
  5170.         50H    4    ES   ---------
  5171.         54H    4    TSS.attrib
  5172.         58H    4    TSS.base
  5173.         5CH    4    TSS.limit
  5174.         60H    4    Reserved
  5175.         64H    4    IDT.base
  5176.         68H    4    IDT.limit
  5177.         6CH    4    REP OUTS overrun flag
  5178.         70H    4    GDT.base
  5179.         74H    4    GDT.limit
  5180.         78H    4    LDT.attrib
  5181.         7CH    4    LDT.base
  5182.         80H    4    LDT.limit
  5183.         84H    4    GS.attrib
  5184.         88H    4    GS.base
  5185.         8CH    4    GS.limit
  5186.         90H    4    FS.attrib
  5187.         94H    4    FS.base
  5188.         98H    4    FS.limit
  5189.         9CH    4    DS.attrib
  5190.         A0H    4    DS.base
  5191.         A4H    4    DS.limit
  5192.         A8H    4    SS.attrib
  5193.         ACH    4    SS.base
  5194.         B0H    4    SS.limit
  5195.         B4H    4    CS.attrib
  5196.         B8H    4    CS.base
  5197.         BCH    4    CS.limit
  5198.         C0H    4    ES.attrib
  5199.         C4H    4    ES.base
  5200.         C8H    4    ES.limit
  5201.                 Unknown Unusable area
  5202.         100H    4    Temporary register
  5203.         104H    4    -------------
  5204.         108H    4    -------------
  5205.         10CH    4    -------------
  5206.         110H    4    -------------
  5207.         114H    4    -------------
  5208.         118H    4    -------------
  5209.         11CH    4    -------------
  5210.         120H    4    -------------
  5211.         124H    4    Last EIP (Last instruction EIP for Restart)
  5212.  
  5213. Format    of Attrib field:
  5214.  
  5215.            Byte    Description
  5216.            0    0s
  5217.            1    AR (Access Right) byte in the Descriptor format
  5218.             Note:
  5219.                P bit is a valid bit
  5220.                if valid bit=0 then Shadow Register is invalid and
  5221.                   INT 0DH - General Protection Fault call
  5222.                DPL of SS,CS det. CPL
  5223.            2-3    0s
  5224.  
  5225. Flags Affected: All (FLAGS Register Reload)
  5226. CPU mode: RM,PM0,SMM
  5227.  
  5228. Physical Form:         RES3
  5229. COP (Code of Operation): 0FH 07H  Note: Code is same with Intel's LOADALL
  5230. Clocks:       Am386SXLV   : 366
  5231.        Am386DXLV   : 291
  5232. ----------O-RES4-----------------------------------
  5233. OPCODE RES4  - Restore All  CPU Registers
  5234.  
  5235.  
  5236. CPU:  AMD Am486SXLV, Am486DXLV
  5237.  
  5238. Type of Instruction: System Operation
  5239.             (Work only then CPL=0)
  5240.  
  5241. Instruction: RES3
  5242. Description:
  5243.           Load All Registers (Include Shadow Registers) from Table
  5244.           Which Begin on  place pointed ES:EDI
  5245.  
  5246. Note:
  5247.           This instruction is AMD analog Intel's LOADALL instruction
  5248.           but it's more i.c. return from SMM used this instruction.
  5249.  
  5250.           Then in SMM table is in SMRAM, then non SMM then table is
  5251.           in main memory.
  5252.  
  5253. Format of RES3 Table:
  5254.     (Table )
  5255.            Offset  Len  Description
  5256.         0H    4    CR0
  5257.         4H    4    EFLAGS
  5258.         8H    4    EIP
  5259.         CH    4    EDI
  5260.         10H    4    ESI
  5261.         14H    4    EBP
  5262.         18H    4    ESP
  5263.         1CH    4    EBX
  5264.         20H    4    EDX
  5265.         24H    4    ESX
  5266.         28H    4    EAX
  5267.         2CH    4    DR6
  5268.         30H    4    DR7
  5269.         34H    4    TR     (16 bit, zero filled up)
  5270.         38H    4    LDT  ---------
  5271.         3CH    4    GS   ---------
  5272.         40H    4    FS   ---------
  5273.         44H    4    DS   ---------
  5274.         48H    4    SS   ---------
  5275.         4CH    4    CS   ---------
  5276.         50H    4    ES   ---------
  5277.         54H    4    TSS.attrib
  5278.         58H    4    TSS.base
  5279.         5CH    4    TSS.limit
  5280.         60H    4    Reserved
  5281.         64H    4    IDT.base
  5282.         68H    4    IDT.limit
  5283.         6CH    4    REP OUTS overrun flag
  5284.         70H    4    GDT.base
  5285.         74H    4    GDT.limit
  5286.         78H    4    LDT.attrib
  5287.         7CH    4    LDT.base
  5288.         80H    4    LDT.limit
  5289.         84H    4    GS.attrib
  5290.         88H    4    GS.base
  5291.         8CH    4    GS.limit
  5292.         90H    4    FS.attrib
  5293.         94H    4    FS.base
  5294.         98H    4    FS.limit
  5295.         9CH    4    DS.attrib
  5296.         A0H    4    DS.base
  5297.         A4H    4    DS.limit
  5298.         A8H    4    SS.attrib
  5299.         ACH    4    SS.base
  5300.         B0H    4    SS.limit
  5301.         B4H    4    CS.attrib
  5302.         B8H    4    CS.base
  5303.         BCH    4    CS.limit
  5304.         C0H    4    ES.attrib
  5305.         C4H    4    ES.base
  5306.         C8H    4    ES.limit
  5307.                 Unknown Unusable area
  5308.         100H    4    Temporary register
  5309.         104H    4    -------------
  5310.         108H    4    -------------
  5311.         10CH    4    -------------
  5312.         110H    4    -------------
  5313.         114H    4    -------------
  5314.         118H    4    -------------
  5315.         11CH    4    -------------
  5316.         120H    4    -------------
  5317.         124H    4    Last EIP (Last instruction EIP for Restart)
  5318.         128H    4    PEIP - Previous SRAM space instruction pointer
  5319.         12EH    36    Unused
  5320.         150H    22    Floating Pointer Internal Registers (Am486DXLV)
  5321.  
  5322.  
  5323. Format    of Attrib field:
  5324.  
  5325.            Byte    Description
  5326.            0    0s
  5327.            1    AR (Access Right) byte in the Descriptor format
  5328.             Note:
  5329.                P bit is a valid bit
  5330.                if valid bit=0 then Shadow Register is invalid and
  5331.                   INT 0DH - General Protection Fault call
  5332.                DPL of SS,CS det. CPL
  5333.            2-3    0s
  5334.  
  5335. Flags Affected: All (FLAGS Register Reload)
  5336. CPU mode: RM,PM0,SMM
  5337.  
  5338. Physical Form:         RES4
  5339. COP (Code of Operation): 0FH 07H  Note: Code is same with Intel's LOADALL
  5340. Clocks:       Am486SXLV   : N/A
  5341. ----------O-RETRBI---------------------------------
  5342. OPCODE RETRBI      -  Return from Register Bank Context
  5343.          Switch  Interrupt.
  5344.  
  5345. CPU:  NEC V25,V35,V25 Plus,V35 Plus,V25 Software Guard
  5346. Type of Instruction: System
  5347.  
  5348. Instruction:  RETRBI
  5349.  
  5350. Description:
  5351.     PC  <- Save PC;
  5352.     PSW <- Save PSW;
  5353.  
  5354.  
  5355.  
  5356. Flags Affected:     All
  5357. CPU mode: RM
  5358.  
  5359. +++++++++++++++++++++++
  5360. Physical Form:    RETRBI
  5361. COP (Code of Operation)     : 0Fh 91h
  5362.  
  5363. Clocks:     12
  5364. ----------O-RETXA----------------------------------
  5365. OPCODE RETXA    -  Return from    Expansion Address
  5366.  
  5367. CPU:  NEC V33/V53 only
  5368. Type of Instruction: System
  5369.  
  5370. Instruction:  RETXA int_vector
  5371.  
  5372. Description:
  5373.          [sp-1,sp-2] <- PSW        ; PSW EQU FLAGS
  5374.          [sp-3,sp-4] <- PS        ; PS  EQU CS
  5375.          [sp-5,sp-6] <- PC        ; PC  EQU IP
  5376.          SP     <-  SP -6
  5377.          IE     <-  0
  5378.          BRK <-  0
  5379.          MD     <-  0
  5380.          PC     <- [int_vector*4 +0,+1]
  5381.          PS     <- [int_vector*4 +2,+3]
  5382.          Disable EA mode.
  5383.  
  5384. Flags Affected:     None
  5385. CPU mode: RM
  5386.  
  5387. +++++++++++++++++++++++
  5388. Physical Form:    RETXA  imm8
  5389. COP (Code of Operation)     : 0Fh F0h imm8
  5390.  
  5391. Clocks:     12
  5392. ----------O-ROL4-----------------------------------
  5393. OPCODE ROL4  -     Rotate     left  4 bits
  5394.  
  5395.  
  5396. CPU: NEC/Sony all  V-series
  5397. Type of Instruction: User
  5398.  
  5399. Instruction:  ROL4  dest
  5400.  
  5401. Description:
  5402.         AL            dest
  5403.  
  5404. bits        7     4 3    0     7    4 3   0
  5405.         -------------     -------------
  5406.         |      |  o    <--------|    <-|-o  |<--\
  5407.         ---------|----     -------------     |
  5408.              |                 |
  5409.              \---------------------------/
  5410.  
  5411.  
  5412. Note:    This instruction Rotates (4bits) left out of dest through low 4bits
  5413.     of AL
  5414.  
  5415. Flags Affected: None
  5416. CPU mode: RM
  5417.  
  5418. +++++++++++++++++++++++
  5419. Physical Form         : ROL4     reg/mem8
  5420. COP (Code of Operation)     : 0FH 28H  PostByte
  5421.  
  5422. Clocks:        ROL4 reg/mem8
  5423. NEC V20:        25/28
  5424. ----------O-ROR4-----------------------------------
  5425. OPCODE ROR4  -     Rotate     right    4 bits
  5426.  
  5427.  
  5428. CPU: NEC/Sony  all V-series
  5429. Type of Instruction: User
  5430.  
  5431. Instruction:  ROL4  dest
  5432.  
  5433. Description:
  5434.         AL            dest
  5435.  
  5436. bits        7     4 3    0     7    4 3   0
  5437.         -------------     -------------
  5438.         |      |   o--|------>|    o-|-> o-|--\
  5439.         ---------^----     -------------     |
  5440.              |                 |
  5441.              \---------------------------/
  5442.  
  5443.  
  5444. Note:    This instruction Rotates (4bits) right out of dest through low 4bits
  5445.     of AL
  5446.  
  5447. Flags Affected: None
  5448. CPU mode: RM
  5449.  
  5450. +++++++++++++++++++++++
  5451. Physical Form         : ROR4     reg/mem8
  5452. COP (Code of Operation)     : 0FH 2AH  PostByte
  5453.  
  5454. Clocks:        ROR4 reg/mem8
  5455. NEC V20:        29/33
  5456. ----------O-RSDC-----------------------------------
  5457. OPCODE RSDC  - Restore Register and Descriptor
  5458.  
  5459.  
  5460. CPU:  Cyrix Cx486S/S2/D/D2/DX/DX2/DX4
  5461.       IBM   BL486DX/DX2
  5462.       TI    486SLC/DLC/e
  5463.       TI    486SXL/SXL2/SXLC
  5464.       TI    Potomac
  5465. Type of Instruction: System
  5466.  
  5467. Instruction:  RSDC sreg,sorc
  5468.  
  5469. Description:
  5470.     sreg [selector,shadow_descriptor] <- sorc
  5471.  
  5472.     ; sorc is register and descriptor structure (see below)
  5473.  
  5474.     ; Note: This instruction load segment register
  5475.     ;    include shadow descriptor
  5476.  
  5477.  
  5478. Format or Register and Descriptor Structure:
  5479.     +00    Limit (15-0)
  5480.     +02    Base  (15-0)
  5481.     +04    Base  (23-16)
  5482.     +05    AR byte
  5483.     +06    AR2/Limit (19-16)
  5484.     +07    Base  (31-24)
  5485.     +08    Selector
  5486.     Length of structure is 10h
  5487.  
  5488.  
  5489. Flags Affected: None
  5490. CPU mode: (1) and (2) and (3) and [(4A) or (4B)]
  5491.  
  5492.  
  5493.        1) CPL=0
  5494.        2) CCR1.bit1=1  ; SMI enable
  5495.        3) SMAR size > 0
  5496.        4A) in SMM
  5497.        4B) CCR1.bit2=1 ; SMAC is on
  5498.  
  5499.  
  5500.  
  5501. ++++++++++++++++
  5502.  
  5503. Physical Form: RSDC sgeg,mem80
  5504. COP (Code of Operation)     : 0FH 79H  [mm sreg3 mmm]
  5505. Clocks    IBM BL486DX: 10
  5506.     TI  486SXL : 14
  5507.  
  5508. Note: sreg3 is: 000 ES
  5509.         001 CS
  5510.         010 SS
  5511.         011 DS
  5512.         100 FS
  5513.         101 GS
  5514. ----------O-RSLDT----------------------------------
  5515. OPCODE RSLDT  - Restore LDTR and Descriptor
  5516.  
  5517.  
  5518. CPU:  Cyrix Cx486S/S2/D/D2/DX/DX2/DX4
  5519.       IBM   BL486DX/DX2
  5520.       TI    486SLC/DLC/e
  5521.       TI    486SXL/SXL2/SXLC
  5522.       TI    Potomac
  5523. Type of Instruction: System
  5524.  
  5525. Instruction:  RSLDT sorc
  5526.  
  5527. Description:
  5528.     LDTR [selector,shadow_descriptor] <- sorc
  5529.  
  5530.     ; sorc is register and descriptor structure (see below)
  5531.  
  5532.  
  5533.  
  5534. Format or Register and Descriptor Structure:
  5535.     +00    Limit (15-0)    (Table )
  5536.     +02    Base  (15-0)
  5537.     +04    Base  (23-16)
  5538.     +05    AR byte
  5539.     +06    AR2/Limit (19-16)
  5540.     +07    Base  (31-24)
  5541.     +08    Selector
  5542.     Length of structure is 10h
  5543.  
  5544.  
  5545. Flags Affected: None
  5546. CPU mode: (1) and (2) and (3) and [(4A) or (4B)]
  5547.  
  5548.  
  5549.        1) CPL=0
  5550.        2) CCR1.bit1=1  ; SMI enable
  5551.        3) SMAR size > 0
  5552.        4A) in SMM
  5553.        4B) CCR1.bit2=1 ; SMAC is on
  5554.  
  5555.  
  5556.  
  5557. ++++++++++++++++
  5558.  
  5559. Physical Form: RSLDT  mem80
  5560. COP (Code of Operation)     : 0FH 7BH  [mm 000 mmm]
  5561. Clocks    IBM BL486DX: 10
  5562.     TI  486SXL : 14
  5563. ----------O-RSM------------------------------------
  5564. OPCODE RSM  - Resume from System Managment Mode
  5565.  
  5566.  
  5567. CPU:  I486 SL Enhanced+,i486SL,i386CX,i386EX
  5568. Type of Instruction: System
  5569.  
  5570. Instruction: RSM
  5571. Description:
  5572.        Restore execution state from SMRAM and
  5573.        return to previous CPU mode
  5574.  
  5575. CPU mode: SMM only
  5576.      ( INT 6 - Undefined Opcode in all other mode )
  5577.  
  5578. Flags Affected: All
  5579.  
  5580. Note: CPU state restored from dump created entrance to SMM.
  5581.       The CPU leave SMM and return to previous mode.
  5582.       If CPU detect any invalid state it enters shutdown.
  5583.       This invalid states is:
  5584.        * The value stored in State Dump Base field is not 32K aligned
  5585.      address
  5586.        * Any Reserved bit of CR4 is set to 1 (Pentium only)
  5587.        * Any  illegal Combination of CR0:
  5588.        ** (PG=1 and PE=0)
  5589.        ** (NW=1 and CD=0)
  5590.  
  5591.  
  5592. Format of Execution State in SMRAM:
  5593.     Offset    Register
  5594.     7FFCh    CR0
  5595.     7FF8h    CR3
  5596.     7FF4h    EFLAGS
  5597.     7FF0h    EIP
  5598.     7FECh    EDI
  5599.     7FE8h    ESI
  5600.     7FE4h    EBP
  5601.     7FE0h    ESP
  5602.     7FDCh    EBX
  5603.     7FD8h    EDX
  5604.     7FD4h    ECX
  5605.     7FD0h    EAX
  5606.     7FCCh    DR7
  5607.     7FC4h    TR, upper 2 bytes reserved
  5608.     7FC0h    LDTR, upper 2 bytes reserved
  5609.     7FBCh    GS, upper 2 bytes reserved
  5610.     7FB8h    FS, upper 2 bytes reserved
  5611.     7FB4h    DS, upper 2 bytes reserved
  5612.     7FB0h    SS, upper 2 bytes reserved
  5613.     7FACh    CS, upper 2 bytes reserved
  5614.     7FA8h    ES, upper 2 bytes reserved
  5615.     7F98h    Reserved
  5616.     7F94h    IDT base  (4 bytes)
  5617.     7F8Ch    Reserved
  5618.     7F88h    GDT base  (4 bytes)
  5619.     7F04h    Reserved
  5620.     7F02h    Auto HALT Restart Slot (2 bytes)
  5621.         Bits 15..2 are reserved
  5622.         Bit 1  Bit 0    Description
  5623.         0    0    Resume to next instruction in interrupted
  5624.                 program
  5625.         0    1    Unpredictable
  5626.         1    0    Return to next instruction after HALT
  5627.         1    1    Return to HALT state
  5628.     7F00h    I/O Restart Slot (2 bytes)
  5629.         When RSM execution if I/O restart slot = 0FFh then
  5630.         EIP modified to instruction immediate preceding the
  5631.         SMI# request i.e. CPU automatically reexecute I/O
  5632.         instruction which be trapped by SMI.
  5633.     7EFCh    SMM Revision Identificator (4 bytes)
  5634.         Bits    Description
  5635.         31..18    Reserved
  5636.         17    If=1 Processor support SMBASE relocation
  5637.             else not support
  5638.         16    If =1 Processor support I/O Instruction Restart
  5639.         15..0    SMM Revision Identificator
  5640.             P5,486s = 0000h
  5641.             P54C when I/O Restarts enable = 0002h
  5642.     7EF8h    SMBASE Slot (4 bytes)
  5643.         SMBASE is 32KB aligned 32bit dword which contained a base
  5644.         address for SMRAM.
  5645.         Default value is 30000h
  5646.         Starting Address for for jump in SMM is:
  5647.           SMBASE+8000h
  5648.         Starting address for State Save area is
  5649.           SMBASE+[8000h+7FFFh]
  5650.     7E00h    Reserved
  5651.  
  5652.  
  5653. Note: In fields marked Reserved saved and restores next registers:
  5654.       CR1,CR2,CR3, hidden descriptors for CS,DS,ES,FS,SS,GS.
  5655.       Never saved registers: DR5-DR0,TR7-TR3,all FPU registers.
  5656.       More Information Not available Yet.
  5657.  
  5658.  
  5659. Physical Form:          RSM
  5660. COP (Code of Operation)      : 0FH AAH
  5661. Clocks:      i386CX      : 338
  5662.     i486 SL Enhanced  : ???
  5663.      IntelDX4      : 452        ; SMBASE relocation
  5664.               : 456        ; AutoHALT restart
  5665.               : 465        ; I/O Trap restart
  5666.          Pentium  : 83
  5667. ----------O-RSM------------------------------------
  5668. OPCODE RSM  - Resume from SMM
  5669.  
  5670.  
  5671. CPU:  Cyrix Cx486S/S2/D/D2/DX/DX2/DX4
  5672.       IBM   BL486DX/DX2
  5673.       TI    486SLC/DLC/e
  5674.       TI    486SXL/SXL2/SXLC
  5675.       TI    Potomac
  5676. Type of Instruction: System
  5677.  
  5678. Instruction:  RSM
  5679.  
  5680. Description:
  5681.     RESTORE CPU STATE FROM SMM HEADER AT THE TOP OF
  5682.     SMM SPACE (defined by SMAR register);
  5683.     EXIT SMM;
  5684.  
  5685. Format of SMM Header:
  5686.     Offset    Length    Description    (Table )
  5687.     -00h    -    Nothing (Top of SMM space) (Not accessable)
  5688.     -04h    32    DR7
  5689.     -08h    32    EFLAGS
  5690.     -0Ch    32    CR0
  5691.     -10h    32    Current EIP
  5692.     -14h    32    Next instruction EIP
  5693.     -16h    16    Reserved
  5694.     -18h    16    CS selector
  5695.     -1Ch    32    CS descriptor(63-32)
  5696.     -20h    32    CS descriptor(31-0)
  5697.     -24h    32    SMM Flags
  5698.             [ ALL BITS are Not available in Cx486S/S2/D/D2]
  5699.             Bit   Description
  5700.             1    I (IN/INSx/OUT/OUTx Indicator)
  5701.                  If =0 current instruction performed
  5702.                    I/O read
  5703.                 =1 I/O write
  5704.             2    P (REP INSx/OUTx Prefix)
  5705.                  If =1 current instruction has REP pfix.
  5706.                 =0 not has REP pfix
  5707.             3    S (Software SMI)
  5708.                  If =1 current SMM is result of execution
  5709.                    SMINT instruction
  5710.                 =0 current SMM is result of hardware SMI
  5711.             Note: TI 486SXL/SXL2 support only bits 1,2.
  5712.     -26h    16    I/O Write Data size
  5713.             [ Not available in Cx486S/S2/D/D2]
  5714.             [ Not available in TI486SXL/SXL2]
  5715.             [ Not available in TI486SLC/DLC/e]
  5716.             1h = byte
  5717.             3h = word
  5718.             fh = dword
  5719.     -28h    16    I/O Write Address
  5720.             [ Not avaliable in Cx486S/S2/D/D2]
  5721.             [ Not available in TI486SXL/SXL2]
  5722.             [ Not available in TI486SLC/DLC/e]
  5723.     -2Ch    32    I/O Write Data
  5724.             [ Not avaliable in Cx486S/S2/D/D2]
  5725.             [ Not available in TI486SXL/SXL2]
  5726.             [ Not available in TI486SLC/DLC/e]
  5727.     -30h    32    ESI or EDI
  5728.             This field saved value of source/destination
  5729.             for restart INSx/OUTSx instruction
  5730.             [ Not avaliable in Cx486S/S2/D/D2]
  5731.  
  5732.  
  5733. Flags Affected: All
  5734. CPU mode: SMM
  5735.  
  5736. ++++++++++++++++
  5737.  
  5738. Physical Form: RSM
  5739. COP (Code of Operation)     : 0FH AAH
  5740. Clocks    IBM BL486DX: 76
  5741.     TI  486SXL : 58
  5742. ----------O-RSTS-----------------------------------
  5743. OPCODE RSTS  - Restore TR and Descriptor
  5744.  
  5745.  
  5746. CPU:  Cyrix Cx486S/S2/D/D2/DX/DX2/DX4
  5747.       TI    486SLC/DLC/e
  5748.       TI    486SXL/SXL2/SXLC
  5749.       IBM   BL486DX/DX2
  5750. Type of Instruction: System
  5751.  
  5752. Instruction:  RSTS sorc
  5753.  
  5754. Description:
  5755.     TR [selector,shadow_descriptor] <- sorc
  5756.  
  5757.     ; sorc is register and descriptor structure (see below)
  5758.  
  5759.  
  5760.  
  5761. Format or Register and Descriptor Structure:
  5762.     +00    Limit (15-0)    (Table )
  5763.     +02    Base  (15-0)
  5764.     +04    Base  (23-16)
  5765.     +05    AR byte
  5766.     +06    AR2/Limit (19-16)
  5767.     +07    Base  (31-24)
  5768.     +08    Selector
  5769.     Length of structure is 10h
  5770.  
  5771.  
  5772. Flags Affected: None
  5773. CPU mode: (1) and (2) and (3) and [(4A) or (4B)]
  5774.  
  5775.  
  5776.        1) CPL=0
  5777.        2) CCR1.bit1=1  ; SMI enable
  5778.        3) SMAR size > 0
  5779.        4A) in SMM
  5780.        4B) CCR1.bit2=1 ; SMAC is on
  5781.  
  5782.  
  5783.  
  5784. ++++++++++++++++
  5785.  
  5786. Physical Form: RSTS  mem80
  5787. COP (Code of Operation)     : 0FH 7DH  [mm 000 mmm]
  5788. Clocks    IBM BL486DX: 10
  5789.     TI  486SXL : 14
  5790. ----------O-SET1-----------------------------------
  5791. OPCODE SET1  -     Set a Specified Bit
  5792.  
  5793.  
  5794. CPU: NEC/Sony V-series
  5795. Type of Instruction: User
  5796.  
  5797. Instruction:  SET1 dest,bitnumb
  5798.  
  5799. Description:
  5800.         BIT  bitnumb OF dest <- 1;
  5801.  
  5802.  
  5803. Flags Affected: None
  5804.  
  5805. CPU mode: RM
  5806.  
  5807. +++++++++++++++++++++++
  5808. Physical Form:           SET1 reg/mem8,CL
  5809. COP (Code of Operation)     : 0FH 14H  Postbyte
  5810.  
  5811. Physical Form:           SET1 reg/mem8,imm8
  5812. COP (Code of Operation)     : 0FH 1CH  Postbyte imm8
  5813.  
  5814. Physical Form:           SET1 reg/mem16,CL
  5815. COP (Code of Operation)     : 0FH 15H  Postbyte
  5816.  
  5817. Physical Form:           SET1 reg/mem16,imm8
  5818. COP (Code of Operation)     : 0FH 1DH  Postbyte  imm8
  5819.  
  5820.  
  5821. Clocks:                 SET1
  5822.          r/m8,CL    r/m8,i8        r/m16,CL   r/m16,i8
  5823. NEC V20:      4/13     5/14          4/13          5/14
  5824. ----------O-SETALC---------------------------------
  5825. OPCODE SETALC    - Set AL to Carry Flag
  5826.  
  5827.  
  5828. CPU:  Intel 8086 and all its clones and upward
  5829.     compatibility chips.
  5830. Type of Instruction: User
  5831.  
  5832. Instruction: SETALC
  5833. Description:
  5834.     IF (CF=0) THEN AL:=0 ELSE AL:=FFH;
  5835.  
  5836. Flags Affected: None
  5837. CPU mode: RM,PM,VM,SMM
  5838.  
  5839. Physical Form:         SETALC
  5840. COP (Code of Operation): D6H
  5841. Clocks:          80286    : n/a   [3]
  5842.           80386    : n/a   [3]
  5843.          Cx486SLC  : n/a   [2]
  5844.           i486     : n/a   [3]
  5845.           Pentium  : n/a   [3]
  5846. Note: n/a is Time that Intel etc not say.
  5847.       [3] is real time it executed.
  5848. ----------O-SMI------------------------------------
  5849. OPCODE SMI  - System Managment Interrupt
  5850.  
  5851. CPU:  AMD Am386SXLV,Am386DXLV
  5852.       AMD 486s
  5853. Type of Instruction: System
  5854.  
  5855. Instruction: SMI
  5856. Description:
  5857.     IF (SMIE=1) THEN
  5858.            {
  5859.            SAVE STATUS OF EXECUTION TO SMRAM;
  5860.            ENTER SMM;
  5861.            SMMS <- 1;
  5862.            }
  5863.        ELSE
  5864.           {
  5865.           INT 1;
  5866.           }
  5867.        END
  5868.  
  5869. Notes: SMIE is <Soft SMI Enable> (DR7.bit12)
  5870.            =1 Enable soft SMI
  5871.            =0 Disable soft SMI
  5872.        SMMS is <SMM status bit>     (DR6.bit12)
  5873.            =1 SMM was entered
  5874.            =0 SMM status cleared
  5875.  
  5876. Flags Affected: None
  5877. CPU mode: RM?,PM0
  5878.  
  5879. Physical Form:         SMI
  5880. COP (Code of Operation): F1H
  5881. Clocks:         Am386SXLV : 357
  5882.          Am386DXLV : 325
  5883.          Am486xxxx : Don't know, do you?
  5884. ----------O-SMINT----------------------------------
  5885. OPCODE SMINT - Software SMM Interrupt
  5886.  
  5887.  
  5888. CPU:  Cyrix Cx486DX/DX2/DX4
  5889.       IBM   BL486DX/DX2
  5890. Note: Never in Cx486S/S2/D/D2
  5891.       Never in any TI's chips.
  5892. Type of Instruction: System
  5893.  
  5894. Instruction:  SMINT
  5895.  
  5896. Description:
  5897.     SAVE CPU STATE TO SMM HEADER AT THE TOP OF
  5898.     SMM SPACE (defined by SMAR register);
  5899.     ENTER SMM MODE;
  5900.  
  5901.  
  5902. Format of SMM Header: Refer to Cyrix/IBM SMI Instruction
  5903.  
  5904. Flags Affected: None
  5905. CPU mode: CPL=0, CCR1.bit1=1, SMAR size >= 30h.
  5906.  
  5907.  
  5908. ++++++++++++++++
  5909.  
  5910. Physical Form: SMINT
  5911. COP (Code of Operation)     : 0FH 7EH
  5912. Clocks    IBM BL486DX: 24
  5913. ----------O-STOP-----------------------------------
  5914. OPCODE STOP    -  Stop CPU
  5915.  
  5916. CPU:  NEC V25,V35,V25 Plus,V35 Plus,V25 Software Guard
  5917. Type of Instruction: System
  5918.  
  5919. Instruction:  STOP
  5920.  
  5921. Description:
  5922.         PowerDown instruction, Stop Oscillator,
  5923.         Halt CPU.
  5924.  
  5925. Flags Affected:     None
  5926. CPU mode: RM
  5927.  
  5928. +++++++++++++++++++++++
  5929. Physical Form:    STOP
  5930. COP (Code of Operation)     : 0Fh BEh
  5931.  
  5932. Clocks:     N/A
  5933. ----------O-SUB4S----------------------------------
  5934. OPCODE SUB4S  -     Subtraction of packed BCD strings
  5935.  
  5936.  
  5937. CPU: NEC/Sony all V-series
  5938. Type of Instruction: User
  5939.  
  5940. Instruction:  SUB4S
  5941.  
  5942. Description:
  5943.       BCD STRING (ADDRESS=ES:DI,LENGTH=CL) <-
  5944.       BCD STRING (ADDRESS=DS:SI,LENGTH=CL) -
  5945.       BCD STRING (ADDRESS=ES:DI,LENGTH=CL);
  5946.  
  5947.       Length of BCD string in CL;
  5948.  
  5949. Note:    si,di,cl and other registers not changed
  5950.  
  5951. Flags Affected: OF,CF,ZF
  5952.     ;;  ZF set if result is zero.
  5953.     ;;  CF,OF set as result of operation with most
  5954.     ;;  signification BCDs.
  5955. CPU mode: RM
  5956.  
  5957. +++++++++++++++++++++++
  5958. Physical Form: SUB4S
  5959. COP (Code of Operation)     : 0FH 22H
  5960.  
  5961. Clocks:        SUB4S
  5962. NEC V20:    ~7+19*CL
  5963. ----------O-SVDC-----------------------------------
  5964. OPCODE SVDC  - Save Register and Descriptor
  5965.  
  5966.  
  5967. CPU:  Cyrix Cx486S/S2/D/D2/DX/DX2/DX4
  5968.       IBM   BL486DX/DX2
  5969.       TI    486SLC/DLC/e
  5970.       TI    486SXL/SXL2/SXLC
  5971.       TI    Potomac
  5972. Type of Instruction: System
  5973.  
  5974. Instruction:  SVDC dest,sreg
  5975.  
  5976. Description:
  5977.     dest <- sreg [selector,shadow_descriptor]
  5978.  
  5979.     ; dest is register and descriptor structure (see below)
  5980.  
  5981.  
  5982.  
  5983. Format or Register and Descriptor Structure:
  5984.     +00    Limit (15-0)    (Table )
  5985.     +02    Base  (15-0)
  5986.     +04    Base  (23-16)
  5987.     +05    AR byte
  5988.     +06    AR2/Limit (19-16)
  5989.     +07    Base  (31-24)
  5990.     +08    Selector
  5991.     Length of structure is 10h
  5992.  
  5993.  
  5994. Flags Affected: None
  5995. CPU mode: (1) and (2) and (3) and [(4A) or (4B)]
  5996.  
  5997.  
  5998.        1) CPL=0
  5999.        2) CCR1.bit1=1  ; SMI enable
  6000.        3) SMAR size > 0
  6001.        4A) in SMM
  6002.        4B) CCR1.bit2=1 ; SMAC is on
  6003.  
  6004.  
  6005.  
  6006. ++++++++++++++++
  6007.  
  6008. Physical Form: SVDC mem80,sreg
  6009. COP (Code of Operation)     : 0FH 78H  [mm sreg3 mmm]
  6010. Clocks    IBM BL486DX: 18
  6011.     TI  486SXL : 22
  6012.  
  6013. Note: sreg3 is: 000 ES
  6014.         001 CS
  6015.         010 SS
  6016.         011 DS
  6017.         100 FS
  6018.         101 GS
  6019. ----------O-SVLDT----------------------------------
  6020. OPCODE SVLDT  - Save LDTR and Descriptor
  6021.  
  6022.  
  6023. CPU:  Cyrix Cx486S/S2/D/D2/DX/DX2/DX4
  6024.       IBM   BL486DX/DX2
  6025.       TI    486SLC/DLC/e
  6026.       TI    486SXL/SXL2/SXLC
  6027.       TI    Potomac
  6028. Type of Instruction: System
  6029.  
  6030. Instruction:  SVLDT dest
  6031.  
  6032. Description:
  6033.     dest <- LDTR [selector,shadow_descriptor]
  6034.  
  6035.     ; dest is register and descriptor structure (see below)
  6036.  
  6037.  
  6038.  
  6039. Format or Register and Descriptor Structure:
  6040.     +00    Limit (15-0)    (Table )
  6041.     +02    Base  (15-0)
  6042.     +04    Base  (23-16)
  6043.     +05    AR byte
  6044.     +06    AR2/Limit (19-16)
  6045.     +07    Base  (31-24)
  6046.     +08    Selector
  6047.     Length of structure is 10h
  6048.  
  6049.  
  6050. Flags Affected: None
  6051. CPU mode: (1) and (2) and (3) and [(4A) or (4B)]
  6052.  
  6053.  
  6054.        1) CPL=0
  6055.        2) CCR1.bit1=1  ; SMI enable
  6056.        3) SMAR size > 0
  6057.        4A) in SMM
  6058.        4B) CCR1.bit2=1 ; SMAC is on
  6059.  
  6060.  
  6061.  
  6062. ++++++++++++++++
  6063.  
  6064. Physical Form: SVLDT mem80
  6065. COP (Code of Operation)     : 0FH 7AH  [mm 000 mmm]
  6066. Clocks    IBM BL486DX: 18
  6067.     TI  486SXL : 22
  6068. ----------O-SVTS-----------------------------------
  6069. OPCODE SVTS  - Save TR and Descriptor
  6070.  
  6071.  
  6072. CPU:  Cyrix Cx486S/S2/D/D2/DX/DX2/DX4
  6073.       IBM   BL486DX/DX2
  6074.       TI    486SLC/DLC/e
  6075.       TI    486SXL/SXL2/SXLC
  6076.       TI    Potomac
  6077. Type of Instruction: System
  6078.  
  6079. Instruction:  SVTS dest
  6080.  
  6081. Description:
  6082.     dest <- TR [selector,shadow_descriptor]
  6083.  
  6084.     ; dest is register and descriptor structure (see below)
  6085.  
  6086.  
  6087.  
  6088. Format or Register and Descriptor Structure:
  6089.     +00    Limit (15-0)    (Table )
  6090.     +02    Base  (15-0)
  6091.     +04    Base  (23-16)
  6092.     +05    AR byte
  6093.     +06    AR2/Limit (19-16)
  6094.     +07    Base  (31-24)
  6095.     +08    Selector
  6096.     Length of structure is 10h
  6097.  
  6098.  
  6099. Flags Affected: None
  6100. CPU mode: (1) and (2) and (3) and [(4A) or (4B)]
  6101.  
  6102.  
  6103.        1) CPL=0
  6104.        2) CCR1.bit1=1  ; SMI enable
  6105.        3) SMAR size > 0
  6106.        4A) in SMM
  6107.        4B) CCR1.bit2=1 ; SMAC is on
  6108.  
  6109.  
  6110.  
  6111. ++++++++++++++++
  6112.  
  6113. Physical Form: SVTS mem80
  6114. COP (Code of Operation)     : 0FH 7CH  [mm 000 mmm]
  6115. Clocks    IBM BL486DX: 18
  6116.     TI  486SXL : 22
  6117. ----------O-TEST1----------------------------------
  6118. OPCODE TEST1  -     Test a Specified bit
  6119.  
  6120.  
  6121. CPU: NEC/Sony all V-series
  6122. Type of Instruction: User
  6123.  
  6124. Instruction:  NOT1 dest,bitnumb
  6125.  
  6126. Description:
  6127.         IF dest IS  8BIT THEN  bitn <- bitnumb AND 7;
  6128.         IF dest IS 16BIT THEN  bitn <- bitnumb AND Fh;
  6129.  
  6130.         IF (BIT bitn OF dest) = 0 THEN
  6131.             {
  6132.             ZF <- 1;
  6133.             }
  6134.         ELSE    {
  6135.             ZF <- 0;
  6136.             }
  6137.         ENDIF
  6138.  
  6139. Flags Affected: ZF
  6140.  
  6141. CPU mode: RM
  6142.  
  6143. +++++++++++++++++++++++
  6144. Physical Form:           TEST1 reg/mem8,CL
  6145. COP (Code of Operation)     : 0FH 10H  Postbyte
  6146.  
  6147. Physical Form:           TEST1 reg/mem8,imm8
  6148. COP (Code of Operation)     : 0FH 18H  Postbyte imm8
  6149.  
  6150. Physical Form:           TEST1 reg/mem16,CL
  6151. COP (Code of Operation)     : 0FH 11H  Postbyte
  6152.  
  6153. Physical Form:           TEST1 reg/mem16,imm8
  6154. COP (Code of Operation)     : 0FH 19H  Postbyte  imm8
  6155.  
  6156.  
  6157. Clocks:                 TEST1
  6158.          r/m8,CL    r/m8,i8        r/m16,CL   r/m16,i8
  6159. NEC V20:      3/12     4/13         3/12        4/13
  6160. ----------O-TSKSW----------------------------------
  6161. OPCODE TSKSW  -      Task Switch
  6162.  
  6163. CPU:  NEC V25,V35,V25 Plus,V35 Plus,V25 Software Guard
  6164. Type of Instruction: System
  6165.  
  6166. Instruction:  TSKSW   reg16
  6167.  
  6168. Description:  Perform a High-Speed task switch to the register bank indicated
  6169.           by lower 3 bits of reg16. The PC and PSW are saved in the old
  6170.           banks. PC and PSW save Registers and the new PC and PSW values
  6171.           are retrived from the new register bank's save area.
  6172.  
  6173. Note:         See BRKCS instruction for more Info about banks.
  6174.  
  6175.  
  6176. Flags Affected:     All
  6177. CPU mode: RM
  6178.  
  6179. +++++++++++++++++++++++
  6180. Physical Form:    TSCSW reg16
  6181. COP (Code of Operation)     : 0Fh 94h <1111 1RRR>
  6182.  
  6183. Clocks:     11
  6184.  
  6185.  
  6186.  
  6187.  
  6188.  
  6189. --------------------------------------------------
  6190. UD  -  Undefined Instruction
  6191.  
  6192. CPU:    AMD Am5k86 (SSA/5, K5)
  6193.  
  6194. Logical Form:    UD
  6195. Description:
  6196.         Caused #UD exception
  6197.  
  6198. Flags Affected: No Flags Affected
  6199. CPU Mode : RM,PM,VM,VME,SMM
  6200.  
  6201. Exceptions :
  6202.     RM    PM    V86    VME    SMM
  6203.     #UD    #UD    #UD    #UD    #UD Undefined Instruction
  6204.     No more Exceptions
  6205.  
  6206. Note :
  6207.     This instruction caused #UD. AMD  guaranteed that in future AMD's
  6208.     CPUs this instruction will caused #UD. Of course all previous CPUs
  6209.     (186+) caused #UD on this opcode. This instruction used by software
  6210.     writers for testing #UD exception servise routine.
  6211.  
  6212.  
  6213.  
  6214. ++++++++++++++++++++++++++++++
  6215.  
  6216. Physical Form : UD
  6217.  
  6218. COP (Code of Operation) : 0Fh FFh
  6219.  
  6220. Clocks :    UD
  6221. 8088:    Not supported
  6222. NEC V20:    Not supported
  6223. 80186:    ~int
  6224. 80286:    ~int
  6225. 80386:    ~int
  6226. Cx486SLC:    ~int
  6227. i486:    ~int
  6228. Cx486DX:    ~int
  6229. Cx5x86:        ~int
  6230. Pentium:    ~int
  6231. Nx5x86:        ~int
  6232. Cx6x86:        ~int
  6233. Am5k86:        ~int
  6234. Pentium Pro:    ~int
  6235.  
  6236. ++++++++++++++++++++++++++++++
  6237.  
  6238.  
  6239.  
  6240. --------------------------------------------------
  6241. UD2  -    Undefined Instruction
  6242.  
  6243. CPU:    Pentium Pro+ and all other
  6244.  
  6245. Logical Form:    UD2
  6246. Description:
  6247.         Caused #UD exception
  6248.  
  6249. Flags Affected: No Flags Affected
  6250. CPU Mode : RM,PM,VM,VME,SMM
  6251.  
  6252. Exceptions :
  6253.     RM    PM    V86    VME    SMM
  6254.     #UD    #UD    #UD    #UD    #UD Undefined Instruction
  6255.     No more Exceptions
  6256.  
  6257. Note :
  6258.     This instruction caused #UD. Intel guaranteed that in future Intel's
  6259.     CPUs this instruction will caused #UD. Of course all previous CPUs
  6260.     (186+) caused #UD on this opcode. This instruction used by software
  6261.     writers for testing #UD exception servise routine.
  6262.  
  6263.  
  6264.  
  6265. ++++++++++++++++++++++++++++++
  6266.  
  6267. Physical Form : UD2
  6268.  
  6269. COP (Code of Operation) : 0Fh 0Bh
  6270.  
  6271. Clocks :    UD2
  6272. 8088:    Not supported
  6273. NEC V20:    Not supported
  6274. 80186:    ~int
  6275. 80286:    ~int
  6276. 80386:    ~int
  6277. Cx486SLC:    ~int
  6278. i486:    ~int
  6279. Cx486DX:    ~int
  6280. Cx5x86:        ~int
  6281. Pentium:    ~int
  6282. Nx5x86:        ~int
  6283. Cx6x86:        ~int
  6284. Am5k86:        ~int
  6285. Pentium Pro:    ~int
  6286.  
  6287. ++++++++++++++++++++++++++++++
  6288. ----------O-UMOV-----------------------------------
  6289. OPCODE UMOV  - Mov Data to Main (User) Memory
  6290.  
  6291.  
  6292. CPU:  AMD Am386SXLV,Am386DXLV
  6293.       AMD 486s
  6294.       IBM 486SLC2
  6295. Type of Instruction: Special System
  6296.  
  6297. Instruction: UMOV dest,sorc
  6298.  
  6299. Description:
  6300.       dest <- sorc;
  6301.  
  6302. Note!!!!!: But all memory operands placed in Main memory only !
  6303.       ( i.e. not in SMRAM then in SMM )
  6304.  
  6305. WARNING: UMC's CPUs hang on execution this instruction !!!!!!
  6306.      check that CPU is none UMC's before
  6307.  
  6308. Note:     On Cyrix's CPUs UMOV opcodes do nothing. This way used to
  6309.      determination of Cyrix Microprocessors.
  6310.  
  6311. Note:     Pentium P54C never support this instruction
  6312.  
  6313. Flags Affected:     None
  6314. CPU mode: RM?,PM?,VM?,SMM
  6315.  
  6316. +++++++++++++++++++++++
  6317. Physical Form:           UMOV     r/m8,r8
  6318. COP (Code of Operation)     : 0FH 10H Postbyte
  6319.  
  6320. Clocks:
  6321.       Am386SXLV or AM386DXLV:  2/2
  6322.       IBM 486SLC2        :  4
  6323. +++++++++++++++++++++
  6324. Physical Form:           UMOV     r/m16,r16
  6325.                UMOV     r/m32,r32
  6326. COP (Code of Operation)     : 0FH 11H Postbyte
  6327.  
  6328. Clocks:
  6329.       Am386SXLV or AM386DXLV:  2/2
  6330.       IBM 486SLC2        :  4
  6331. +++++++++++++++++++++++
  6332. Physical Form:           UMOV     r8,r/m8
  6333. COP (Code of Operation)     : 0FH 12H Postbyte
  6334.  
  6335. Clocks:
  6336.       Am386SXLV or AM386DXLV:  2/4
  6337.       IBM 486SLC2        :  4
  6338. +++++++++++++++++++++
  6339. Physical Form:           UMOV     r16,r/m16
  6340.                UMOV     r32,r/m32
  6341. COP (Code of Operation)     : 0FH 13H Postbyte
  6342.  
  6343. Clocks:
  6344.       Am386SXLV or AM386DXLV:  2/4
  6345.       IBM 486SLC2        :  4
  6346. ----------O-WBINVD---------------------------------
  6347. OPCODE WBINVD    - Write Back and Invalidate Cache
  6348.  
  6349.  
  6350. CPU:  I486 +
  6351. Type of Instruction: System
  6352.  
  6353. Instruction: WBINVD
  6354. Description:
  6355.          IF (internal cache is WB and in WB mode) THEN
  6356.               {
  6357.               Write Back Internal Cache;
  6358.               }
  6359.          Flush internal cache;
  6360.          Signal external cache to Write Back;
  6361.          Signal external cache to Flush;
  6362.  
  6363.  
  6364. Notes: This instruction not work in Real Mode and  in
  6365. Protected mode work only in ring 0 ;
  6366.  
  6367. Flags Affected: None
  6368. CPU mode: PM0,SMM
  6369.  
  6370. Physical Form:         INVD
  6371. COP (Code of Operation): 0FH 09H
  6372. Clocks: Cyrix Cx486SLC : 4
  6373.           i486     : 5
  6374.           Pentium  : 2000+
  6375. ----------O-WRMSR----------------------------------
  6376. OPCODE WRMSR  - Write to From Model Specified Register
  6377.  
  6378. CPU:  Pentium (tm), IBM 486SLC2
  6379. Type of Instruction: System
  6380.  
  6381. Instruction: WRMSR
  6382. Description:
  6383.     IF (ECX is valid number of MSR) and (CPL=0)  THEN
  6384.           {
  6385.           MSR [ECX] <- EDX:EAX;
  6386.           }
  6387.         ELSE
  6388.           {
  6389.           General Protection Fault  INT 0DH (0)
  6390.           }
  6391.     END
  6392.  
  6393.  
  6394. Flags Affected: None
  6395.  
  6396. Note: Refer to RDMSR for more Info.
  6397. CPU mode: RM,PM0,SMM
  6398.  
  6399. Physical Form:         WRMSR
  6400. COP (Code of Operation): 0FH 30H
  6401. Clocks:         Pentium   : 30-45
  6402. ----------O-XADD-----------------------------------
  6403. OPCODE XADD  - Exchange and addition
  6404.  
  6405.  
  6406. CPU:  i486+
  6407. Type of Instruction: User
  6408.  
  6409. Instruction: XADD dest,sorc
  6410.  
  6411. Description:
  6412.       Temporary <- dest;
  6413.       dest        <- dest + sorc;
  6414.       sorc        <- Temporary;
  6415.  
  6416. Flags Affected:     ZF,OF,SF,AF,PF,CF ( like ADD instruction ) ( see description)
  6417. CPU mode: RM,PM,VM,SMM
  6418.  
  6419. +++++++++++++++++++++++
  6420. Physical Form:           XADD     r/m8,r8
  6421. COP (Code of Operation)     : 0FH C0H Postbyte
  6422.  
  6423. Clocks:
  6424.        Intel i486     :  3/4
  6425.      Cyrix Cx486SLC     :  3/6
  6426.      Pentium (tm)     :  3/4
  6427.  
  6428. Penalty if cache miss     :
  6429.       Intel i486     : 6/2    ; Unlocked/Locked
  6430.      Cyrix Cx486SLC     : 0    ; N/A
  6431. +++++++++++++++++++++
  6432. Physical Form:           XADD     r/m16,r16
  6433.                XADD     r/m32,r32
  6434. COP (Code of Operation)     : 0FH C1H Postbyte
  6435.  
  6436. Clocks:
  6437.        Intel i486     :  3/4
  6438.      Cyrix Cx486SLC     :  3/6
  6439.      Pentium (tm)     :  3/4
  6440.  
  6441. Penalty if cache miss     :
  6442.       Intel i486     : 6/2    ; Unlocked/Locked
  6443.      Cyrix Cx486SLC     : 1    ; N/A
  6444. ----------O-XBTS-----------------------------------
  6445. OPCODE XBTS    -  Extract  Bits String
  6446.  
  6447.  
  6448. CPU:  80386 step A0-B0 only
  6449. Type of Instruction: User
  6450.  
  6451. Instruction:  XBTS dest,base,bitoffset,len
  6452.  
  6453. Description:
  6454.          Write bit string length <len> bits from bitfield, defined by
  6455.         <base> and bitsoffset <bitoffset> from this base to start of
  6456.         the field to read. String read from this start field bit to
  6457.         higher memory addresses or register bits.
  6458.         And after it string placed to <dest> operand, lowest bit of
  6459.         register or memory to bit 0 of <dest>.
  6460.  
  6461. Note:         Use SHLD/SHRD instructions for extract bits strings.
  6462.          On 80386 steps B1+ this opcode generation INT 6,
  6463.          and on some of 486 other instruction replace this
  6464.          instruction opcode.
  6465.  
  6466. Flags Affected: None
  6467. CPU mode: RM,PM,VM
  6468.  
  6469. +++++++++++++++++++++++
  6470. Physical Form:      XBTS    r16,r/m16,AX,CL
  6471.           XBTS    r32,r/m32,EAX,CL
  6472. COP (Code of Operation)     : 0FH A6H Postbyte
  6473.  
  6474. Clocks:        XBTS
  6475. 80386:        6/13
  6476.  
  6477.  
  6478.  
  6479.  
  6480. -----------------------------------------------------
  6481. APPENDIX    A0
  6482. Cyrix Cx486SLC/DLC configuration Registers
  6483.  
  6484. for Cx486DLC:
  6485. Register    Full Register Name        Index    size(bits)
  6486. CCR0    Configuration Control Register #0    C0H    8
  6487. CCR1    Configuration Control Register #1    C1H    8
  6488. NCR1    Non-cacheble Region #0            C4H-C6H 24
  6489. NCR2    Non-cachable Region #1            C7H-C9H 24
  6490. NCR3    Non-cacheble Region #2            CAH-CCH 24
  6491. NCR4    Non-cacheble Region #4            CDH-CFH 24
  6492.  
  6493. for Cx486SLC:
  6494. Register    Full Register Name        Index    size(bits)
  6495. CCR0    Configuration Control Register #0    C0H    8
  6496. CCR1    Configuration Control Register #1    C1H    8
  6497. NCR1    Non-cacheble Region #0            C5H-C6H 16
  6498. NCR2    Non-cachable Region #1            C8H-C9H 16
  6499. NCR3    Non-cacheble Region #2            CBH-CCH 16
  6500. NCR4    Non-cacheble Region #4            CEH-CFH 16
  6501.  
  6502.  
  6503. For access to this register You need to do:
  6504.  
  6505. A) write INDEX_OF_REGISTER to I/O port #22H
  6506. B) wait 5-6 clocks
  6507. D) read/write DATA from/to register via I/O port #23
  6508.  
  6509. Note: If Index of register not in range C0H..CFH then Cyrix CPU
  6510.       generated external bus cycle. If You try to read I/O port
  6511.       #22H CPU will generated external bus cycle too. Then index
  6512.       is out of range all operations with port #23H will generate
  6513.       external bus cycle.
  6514.  
  6515. State After Reset:
  6516.     CCR0    00H
  6517.     CCR1    xxxx xxx0B
  6518.     NCR1    000Fh
  6519.     NCR2    0
  6520.     NCR3    0
  6521.     NCR4    0
  6522.  
  6523. format of registers:
  6524.  
  6525. CCR0:
  6526. Bit    Name    Description
  6527. 7    SUSPEND
  6528.     If =1 then enable SUSP# and SUSPA# pins, which used for
  6529.     put CPU in PowerSave mode.
  6530.     If =0 disable
  6531.  
  6532. 6    CO    (Cache Organisation)
  6533.     If =0 2ways set associative
  6534.     If =1 Dirrect Mapped
  6535.  
  6536. 5    BARB
  6537.     If =1 then enable flushing internal cache when begining
  6538.     HOLD state.
  6539.     IF =0 disable.
  6540.  
  6541. 4    FLUSH
  6542.     If =1 enable input pin FLUSH#
  6543.     if =0 disable
  6544.  
  6545. 3    KEN
  6546.     If =1 enable input pin KEN#
  6547.     if =0 disable
  6548.  
  6549. 2    A20M
  6550.     If =1 enable input pin A20M#
  6551.     if =0 disable
  6552.  
  6553. 1    NC1
  6554.     If=1 then 640KB-1MB area never caching
  6555.     If=0 caching (but see NCRi)
  6556.  
  6557. 0    NC0
  6558.     If=1 then first 64K of each 1MB bounds not caching,
  6559.     when in Real or Virtual8086 mode
  6560.     If =0 caching
  6561.  
  6562.  
  6563. CCR1:
  6564. Bit    Name    Description
  6565. 7-1    Reserved
  6566. 0    RPL
  6567.     If =1 then enable RPLSET,RPLVAL# pins
  6568.     If =0 this pins are disable and float.
  6569.  
  6570. NCRi:
  6571. Byte    Bits    Description
  6572. 0    7-0    Address bits A31-A24 of non-cacheble region  start
  6573.         (Reserved for Cx486SLC)
  6574. 1    7-0    Address bits A23-A16 of non-cachable region start
  6575. 2    7-4    Address bits A15-A12 of non-cacheble region start
  6576. 2    3-0    Size of non-cacheble block:
  6577.         0000  Disable NCRi
  6578.         0001  4K
  6579.         0010  8K
  6580.         0011  16K
  6581.         0100  32K
  6582.         0101  64K
  6583.         0110  128K
  6584.         0111  256K
  6585.         1000  512K
  6586.         1001  1M
  6587.         1010  2M
  6588.         1011  4M
  6589.         1100  8M
  6590.         1101  16M
  6591.         1110  32M
  6592.         1111  4G
  6593.  
  6594. NCRi bytes:
  6595.  
  6596.  
  6597.     Byte
  6598. NCRi    0    1    2
  6599. NCR1    C4H    C5H    C6H
  6600. NCR2    C7H    C8H    C9H
  6601. NCR3    CAH    CBH    CCH
  6602. NCR4    CDH    CDH    CEH
  6603. ---------------------------------------------------
  6604. APPENDIX    A1
  6605. Cyrix Cx486S/S2/D/D2/DX/DX2/DX4
  6606. IBM   BL486DX/DX2
  6607. configuration Registers
  6608.  
  6609. Register    Full Register Name        Index    size(bits)
  6610. CCR1    Configuration Control Register #1    C1H    8
  6611. CCR2    Configuration Control Register #2    C2H    8
  6612. CCR3    Configuration Control Register #3    C3H    8
  6613. SMAR    SMM Address Region            CDH-CFH 24
  6614. DIR0    Device Identification register #0    FEH    8
  6615. DIR1    Device Identification register #1    FFH    8
  6616.  
  6617.  
  6618. For access to this register You need to do:
  6619.  
  6620. A) write INDEX_OF_REGISTER to I/O port #22H
  6621. B) wait 5-6 clocks
  6622. D) read/write DATA from/to register via I/O port #23
  6623.  
  6624. Note: If Index of register not in range C0H..CFH,FEH,FFH then Cyrix
  6625.       CPU generated external bus cycle. If You try to read I/O port
  6626.       #22H CPU will generated external bus cycle too. Then index
  6627.       is out of range all operations with port #23H will generate
  6628.       external bus cycle.
  6629.  
  6630. State After Reset:
  6631.     CCR1    00H
  6632.     CCR2    00H
  6633.     CCR3    00H
  6634.     SMAR    0
  6635.     DIR0    see DIR0 description
  6636.     DIR1    see DIR1 description
  6637.  
  6638.  
  6639. format of registers:
  6640.  
  6641. CCR1:
  6642. Bit    Name    Description
  6643. 7..5        Reserved
  6644.  
  6645. 4    NO_LOCK (Negate LOCK#)
  6646. 3    MMAC    (Main Memory Access)
  6647.         If =1 then all data access which occur within SMI
  6648.         routine (when SMAC=1) accessing main memory instead
  6649.         SMM space
  6650.         =0 No affects on access
  6651. 2    SMAC    (System Managment Memory Access)
  6652.         If =1 Any access within SMM memory space issued with SMAADS#
  6653.         output active, SMI# ignored
  6654.         =0 No affects on access
  6655. 1    SMI    (Enable SMM pins)
  6656.         If =1 then enable SMI# i/o pin and SMADS# output pin
  6657.         =0 Float it
  6658. 0    RPL    (Enable RPL pins)
  6659.         If=1 then enable output pins RPLSET(1-0) and RPLVAL#
  6660.         =0 Float it
  6661.  
  6662.  
  6663.  
  6664. CCR2:
  6665. Bit    Name    Description
  6666. 7    SUSP    (Enable Suspend pins)
  6667.         If =1 SUSP# input and SUSPA# output pins enabled
  6668.         =0 Float
  6669. 6    BWRT    (Enable Burst Write Cycle)
  6670.         If =1 enable use of 16byte burst WB cycle
  6671.         =0 disable
  6672. 5    BARB    (Enable cache coherency on Bus Arbitration)
  6673.         If =1 enable write back of all dirty cache data when
  6674.         HOLD is requered and prior to asserting HLDA.
  6675.         =0 isable
  6676. 4    WT1    (Write-Through Region 1)
  6677.         If =1 Forces all writes to the 640KB-1MB region that
  6678.         hit in cache issued on the external bus
  6679. 3    HALT    (Suspend on HALT)
  6680.         If =1 CPU enters suspend mode following execution
  6681.         HLT instruction.
  6682. 2    LOCK_NW (Lock NW bit)
  6683.         If =1 Prohibits changing the state of NW bit in CR0
  6684. 1    WBAK    (Enable WB Cache Interface pins)
  6685.         If =1 then enable INVAL,WM_RST and HITM# pins
  6686.         =0 float it
  6687. 0        Reserved
  6688.  
  6689.  
  6690. CCR3:
  6691. Note: Cyrix Cx486S/D never have CCR3 register.
  6692. Bit    Name    Description
  6693. 7..2        Reserved
  6694. 1    NMIEN    (NMI Enable)
  6695.         If =1 then NMI enable during SMM
  6696.         If =0 NMI don't recognizing during SMM
  6697. 0      SMI_LOCK (SMM Register Lock)
  6698.         If =1 the following SMM control bits can not
  6699.         be modified:
  6700.              CCR1: bits 1,2,3
  6701.              CCR3: bit 1
  6702.         But this bit may be changed in SMM.
  6703.         This bit (SMI_LOCK) clearing RESET only.
  6704.  
  6705.  
  6706. SMAR:
  6707. (Index CDh)
  6708. Bit    Description
  6709. 7..0    A31..A24 bits of starting adress of SMM region
  6710. (Index CEh)
  6711. Bit    Description
  6712. 7..0    A23..A16 bits of starting adress of SMM region
  6713. (Index CFh)
  6714. Bit    Description
  6715. 7..4    A15..A12 bits of starting adress of SMM region
  6716. 3..0    Size of SMM region:
  6717.     0000    SMM region disabled
  6718.     0001    4K
  6719.     0010    8K
  6720.     0011    16K
  6721.     0100    32K
  6722.     0101    64K
  6723.     0110    128K
  6724.     0111    256K
  6725.     1000    512K
  6726.     1001    1M
  6727.     1010    2M
  6728.     1011    4M
  6729.     1100    8M
  6730.     1101    16M
  6731.     1110    32M
  6732.     1111    4K
  6733.  
  6734.  
  6735. DIR0:
  6736. Note: Cyrix Cx486S/D never have DIR0 register.
  6737. Bit    Description
  6738. 7..0    (Device Identification)
  6739.     for Cx486SLC/e          = 00h
  6740.     for Cx486DLC          = 01h
  6741.     for Cx486SLC2          = 02h
  6742.     for Cx486DLC2          = 03h
  6743.     for Cx486SRx          = 04h
  6744.     for Cx486DRx          = 05h
  6745.     for Cx486SRx2          = 06h
  6746.     for Cx486DRx2          = 07h
  6747.     for Cx486SRu          = 08h  ??
  6748.     for Cx486DRu          = 09h  ??
  6749.     for Cx486SRu2          = 0Ah  ??
  6750.     for Cx486DRu2          = 0Bh  ??
  6751.     for Cx486S (B step)   = 10h
  6752.     for Cx486S2          = 11h
  6753.     for Cx486S/e          = 12h
  6754.     for Cx486S2/e          = 13h
  6755.     for Cx486DX/BL486DX   = 1Ah
  6756.     for Cx486DX2/BL486DX2 = 1Bh
  6757.     for ST486DX2          = 1Bh
  6758.     for TI486DX2          = 1Bh
  6759.     for Cx486DX4          = 1Fh
  6760.     for Cx5x86   (M1sc)   = 2Dh
  6761.     for Cyrix M1          = 30h
  6762.     for TI486DX4          = 81h
  6763.     for Cyrix OverDrive   = FDh
  6764.     for TI Potomac's      = FFh  ;; None connections
  6765. !! See Appendix A3 for More Information
  6766.  
  6767. Important Note: The original Cx486SLC never have DIRi registers.
  6768.  
  6769. DIR1:
  6770. Note: Cyrix Cx486S/D never have DIR1 register.
  6771. Bit    Name    Description
  6772. 7..4    SID    Stepping Identificator
  6773. 3..0    RID    Revision Identification
  6774. !! See Appendix A3 for more information
  6775.  
  6776. CPU        DIR0    DIR1    NOTE
  6777. Cx486DX-40    1Ah    05h
  6778. Cx486DX-50    1Ah    05h
  6779. Cx486DX2-50    1Bh    08h
  6780. Cx486DX2-50    1Bh    08h    Marked 001 on pin side of chip
  6781. ST486DX2-66    1Bh    0Bh
  6782. ST486DX2-66    1Bh    0Bh
  6783.  
  6784. Cx486DX2-v80    1Bh    31h    3 VOLT
  6785. Cx486DX4-v100    1Fh    36h    3 VOLT
  6786. Cx5x86-100    2Dh    13h    3 VOLT
  6787.  
  6788. TI486DX2-66,80    1Bh    32h    stepping eA0
  6789. TI486DX2-66,80    1Bh    B2h    stepping eB0
  6790. TI486DX4-100    81h    91h
  6791.  
  6792.  
  6793. -----------------------------------------------------
  6794. APPENDIX    A2
  6795. TI486SXLC/SXL  configuration Registers
  6796.  
  6797. for TI486SXL
  6798. --------------
  6799. Register    Full Register Name        Index    size(bits)
  6800. CCR0    Configuration Control Register #0    C0H    8
  6801. CCR1    Configuration Control Register #1    C1H    8
  6802. ARR1    Address Region #1            C4H-C6H 24
  6803. ARR2    Address Region #2            C7H-C9H 24
  6804. ARR3    Address Region #3            CAH-CCH 24
  6805. ARR4    Address Region #4            CDH-CFH 24
  6806.  
  6807. for TI486SXLC
  6808. --------------
  6809. Register    Full Register Name        Index    size(bits)
  6810. CCR0    Configuration Control Register #0    C0H    8
  6811. CCR1    Configuration Control Register #1    C1H    8
  6812. ARR1    Address Region #1            C5H-C6H 16
  6813. ARR2    Address Region #2            C8H-C9H 16
  6814. ARR3    Address Region #3            CBH-CCH 16
  6815. ARR4    Address Region #4            CEH-CFH 16
  6816.  
  6817.  
  6818. For access to this register You need to do:
  6819.  
  6820. A) write INDEX_OF_REGISTER to I/O port #22H
  6821. B) wait 5-6 clocks
  6822. D) read/write DATA from/to register via I/O port #23
  6823.  
  6824. Note: If Index of register not in range C0H..CFH then Cyrix CPU
  6825.       generated external bus cycle. If You try to read I/O port
  6826.       #22H CPU will generated external bus cycle too. Then index
  6827.       is out of range all operations with port #23H will generate
  6828.       external bus cycle.
  6829.  
  6830. State After Reset:
  6831.     CCR0    00H
  6832.     CCR1    xxxx xxx0B
  6833.     ARR1    000Fh        ; 4Gbyte Non-Caching Region
  6834.     ARR2    0
  6835.     ARR3    0
  6836.     ARR4    0
  6837.  
  6838. format of registers:
  6839.  
  6840. CCR0:
  6841. Bit    Name    Description
  6842. 7    SUS
  6843.     If =1 then enable SUSP# and SUSPA# pins, which used for
  6844.     put CPU in PowerSave mode.
  6845.     If =0 disable
  6846.  
  6847. 6    CKD (Clock Double)
  6848.     If =0 Disable Clock-double mode
  6849.     If =1 Enable Clock-Double mode
  6850.  
  6851. 5    BARB
  6852.     If =1 then enable flushing internal cache when begining
  6853.     HOLD state.
  6854.     IF =0 disable.
  6855.  
  6856. 4    FLUSH
  6857.     If =1 enable input pin FLUSH#
  6858.     if =0 disable
  6859.  
  6860. 3    KEN
  6861.     If =1 enable input pin KEN#
  6862.     if =0 disable
  6863.  
  6864. 2    A20M
  6865.     If =1 enable input pin A20M#
  6866.     if =0 disable
  6867.  
  6868. 1    NC1
  6869.     If=1 then 640KB-1MB area never caching
  6870.     If=0 caching (but see NCRi)
  6871.  
  6872. 0    NC0
  6873.     If=1 then first 64K of each 1MB bounds not caching,
  6874.     when in Real or Virtual8086 mode
  6875.     If =0 caching
  6876.  
  6877.  
  6878. CCR1:
  6879. Bit    Name    Description
  6880. 7    SM4
  6881.     Access Region 4 Control
  6882.     If=1 then Region 4 is non-cachable SMM Memory Space
  6883.     If=0 Region 4 is non-cachable. SMI# input ignored.
  6884.  
  6885. 6    WP3
  6886.     Access Region 3 Control
  6887.     If=1 then Region 3 is write-protected and cachable
  6888.     If=0 Region 3 is non-cachable.
  6889.  
  6890. 5    WP2
  6891.     Access Region 2 Control
  6892.     If=1 then Region 2 is write-protected and cachable
  6893.     If=0 Region 2 is non-cachable.
  6894.  
  6895. 4    WP1
  6896.     Access Region 1 Control
  6897.     If=1 then Region 1 is write-protected and cachable
  6898.     If=0 Region 1 is non-cachable.
  6899.  
  6900. 3    NMAC
  6901.     Main Memory Access
  6902.     If=1 All data accesses which occur within SMI service routine
  6903.     (or then SMAC=1) will access main memory instead of SMM Memory space
  6904.     If=0 No changes in access
  6905.  
  6906. 2    SMAC
  6907.     System Managment memory access
  6908.     If=1 Any access to addresses within SMM memory space cause external bus
  6909.     cycles to be issued with SMADS# output active. SMI# input is ignored.
  6910.  
  6911. 1    SMI
  6912.     Enable SMM Pins
  6913.     If=1 SMI# input/output pin and SMADS# output pin are enabled
  6914.     If=0 Disabled
  6915.  
  6916. 0    Reserved
  6917.  
  6918.  
  6919.  
  6920.  
  6921. ARRi:
  6922. Byte    Bits    Description
  6923. 0    7-0    Address bits A31-A24 of non-cacheble region  start
  6924.         (Reserved for TI486SXLC)
  6925. 1    7-0    Address bits A23-A16 of non-cachable region start
  6926. 2    7-4    Address bits A15-A12 of non-cacheble region start
  6927. 2    3-0    Size of non-cacheble block:
  6928.         0000  Disable NCRi
  6929.         0001  4K
  6930.         0010  8K
  6931.         0011  16K
  6932.         0100  32K
  6933.         0101  64K
  6934.         0110  128K
  6935.         0111  256K
  6936.         1000  512K
  6937.         1001  1M
  6938.         1010  2M
  6939.         1011  4M
  6940.         1100  8M
  6941.         1101  16M
  6942.         1110  32M
  6943.         1111  4G
  6944.  
  6945. ARRi bytes:
  6946.  
  6947.  
  6948.     Byte
  6949. ARRi    0    1    2
  6950. ARR1    C4H    C5H    C6H
  6951. ARR2    C7H    C8H    C9H
  6952. ARR3    CAH    CBH    CCH
  6953. ARR4    CDH    CDH    CEH
  6954. ---------------------------------------------------
  6955. APPENDIX    A3
  6956. Texas Instruments  TI486DX2,TI486DX4
  6957. configuration Registers
  6958.  
  6959. Register    Full Register Name        Index    size(bits)
  6960. CCR1    Configuration Control Register #1    C1H    8
  6961. CCR2    Configuration Control Register #2    C2H    8
  6962. CCR3    Configuration Control Register #3    C3H    8
  6963. SMAR    SMM Address Region            CDH-CFH 24
  6964. DIR0    Device Identification register #0    FEH    8
  6965. DIR1    Device Identification register #1    FFH    8
  6966.  
  6967.  
  6968. For access to this register You need to do:
  6969.  
  6970. A) write INDEX_OF_REGISTER to I/O port #22H
  6971. B) wait 5-6 clocks
  6972. D) read/write DATA from/to register via I/O port #23
  6973.  
  6974. Note: If Index of register not in range C0H..CFH,FEH,FFH then Cyrix
  6975.       CPU generated external bus cycle. If You try to read I/O port
  6976.       #22H CPU will generated external bus cycle too. Then index
  6977.       is out of range all operations with port #23H will generate
  6978.       external bus cycle.
  6979.  
  6980. State After Reset:
  6981.     CCR1    00H
  6982.     CCR2    00H
  6983.     CCR3    00H
  6984.     SMAR    0
  6985.     DIR0    see DIR0 description
  6986.     DIR1    see DIR1 description
  6987.  
  6988.  
  6989. format of registers:
  6990.  
  6991. CCR1:
  6992. Bit    Name    Description
  6993. 7..5        Reserved
  6994.  
  6995. 4    NO_LOCK (Negate LOCK#)
  6996.         If =0  Usuall scheme
  6997.         If =1  previously noncachable locked cycles will be
  6998.         executed as unlocked, result is higher perfomanse.
  6999. 3    MMAC    (Main Memory Access)
  7000.         If =1 then all data access which occur within SMI
  7001.         routine (when SMAC=1) accessing main memory instead
  7002.         SMM space
  7003.         =0 No affects on access
  7004. 2    SMAC    (System Managment Memory Access)
  7005.         If =1 Any access within SMM memory space issued with SMAADS#
  7006.         output active, SMI# ignored
  7007.         =0 No affects on access
  7008. 1    SMI    (Enable SMM pins)
  7009.         If =1 then enable SMI# i/o pin and SMADS# output pin
  7010.         =0 Float it
  7011. 0    RPL    (Enable RPL pins)
  7012.         If=1 then enable output pins RPLSET(1-0) and RPLVAL#
  7013.         =0 Float it
  7014.  
  7015.  
  7016.  
  7017. CCR2:
  7018. Bit    Name    Description
  7019. 7    SUSP    (Enable Suspend pins)
  7020.         If =1 SUSP# input and SUSPA# output pins enabled
  7021.         =0 Float
  7022. 6    BWRT    (Enable Burst Write Cycle)
  7023.         If =1 enable use of 16byte burst WB cycle
  7024.         =0 disable
  7025. 5    BARB    (Enable cache coherency on Bus Arbitration)
  7026.         If =1 enable write back of all dirty cache data when
  7027.         HOLD is requered and prior to asserting HLDA.
  7028.         =0 isable
  7029. 4    WT1    (Write-Through Region 1)
  7030.         If =1 Forces all writes to the 640KB-1MB region that
  7031.         hit in cache issued on the external bus
  7032. 3    HALT    (Suspend on HALT)
  7033.         If =1 CPU enters suspend mode following execution
  7034.         HLT instruction.
  7035. 2    LOCK_NW (Lock NW bit)
  7036.         If =1 Prohibits changing the state of NW bit in CR0
  7037. 1    WBAK    (Enable WB Cache Interface pins)
  7038.         If =1 then enable INVAL,WM_RST and HITM# pins
  7039.         =0 float it
  7040. 0        Reserved
  7041.  
  7042.  
  7043. CCR3:
  7044. Note: Cyrix Cx486S/D never have CCR3 register.
  7045. Bit    Name    Description
  7046. 7..4        Reserved
  7047. 3    SM_MODE (SMM Mode Select)
  7048.         If =0 then Normal SMM mode (Cyrix style)
  7049.         If =1 then SL-compatible mode
  7050.             (but SMI_LOCK MUST BE 0)
  7051.         Note: For more info refer to
  7052.            "TI486DX2 Microprocessor SM Mode Programming Guide"
  7053.            // Texas Instruments 1995 (literature number SRZU019)
  7054. 2        Reserved
  7055. 1    NMIEN    (NMI Enable)
  7056.         If =1 then NMI enable during SMM
  7057.         If =0 NMI don't recognizing during SMM
  7058. 0      SMI_LOCK (SMM Register Lock)
  7059.         If =1 the following SMM control bits can not
  7060.         be modified:
  7061.              CCR1: bits 1,2,3
  7062.              CCR3: bit 1
  7063.              Any SMAR bits
  7064.         But this bit may be changed in SMM.
  7065.         This bit (SMI_LOCK) clearing RESET only.
  7066.  
  7067.  
  7068. SMAR:
  7069. (Index CDh)
  7070. Bit    Description
  7071. 7..0    A31..A24 bits of starting adress of SMM region
  7072. (Index CEh)
  7073. Bit    Description
  7074. 7..0    A23..A16 bits of starting adress of SMM region
  7075. (Index CFh)
  7076. Bit    Description
  7077. 7..4    A15..A12 bits of starting adress of SMM region
  7078. 3..0    Size of SMM region:
  7079.     0000    SMM region disabled
  7080.     0001    4K
  7081.     0010    8K
  7082.     0011    16K
  7083.     0100    32K
  7084.     0101    64K
  7085.     0110    128K
  7086.     0111    256K
  7087.     1000    512K
  7088.     1001    1M
  7089.     1010    2M
  7090.     1011    4M
  7091.     1100    8M
  7092.     1101    16M
  7093.     1110    32M
  7094.     1111    4K
  7095.  
  7096.  
  7097. DIR0:
  7098. Bit    Description
  7099. 7..0    (Device Identification)
  7100.     for TI486DX2  =     1Bh  (compare with Cyrix's DIR0)
  7101.     for TI486DX4  =     81h
  7102.  
  7103.  
  7104. DIR1:
  7105. Bit    Name    Description
  7106. 7    MID    Manafacturer ID
  7107.         0 = Cyrix
  7108.         1 = Texas Instruments  (support starting TI486DX2 eB0 steping)
  7109. 6..4    SID    Stepping Identificator
  7110. 3..0    RID    Revision Identification
  7111.  
  7112. ----------------------------------------------
  7113. APPENDIX    A4
  7114. Cyrix Cx5x86, IBM 5x86
  7115. configuration Registers
  7116.                                    for access
  7117. Register    Full Register Name        Index    size(bits) MAPEN(3..0)
  7118. PCR0    Perfomance Control register        20h    8        1
  7119. CCR1    Configuration Control Register #1    C1H    8        x
  7120. CCR2    Configuration Control Register #2    C2H    8        x
  7121. CCR3    Configuration Control Register #3    C3H    8        x
  7122. CCR4    Configuration Control Register #4    E8h    8        1
  7123. SMAR    SMM Address Region            CDH-CFH 24        x
  7124. PMR    Power Managment register        F0h    8        1
  7125. DIR0    Device Identification register #0    FEH    8        x
  7126. DIR1    Device Identification register #1    FFH    8        x
  7127.  
  7128.  
  7129. For access to this register You need to do:
  7130.  
  7131. A) write INDEX_OF_REGISTER to I/O port #22H
  7132. B) wait 5-6 clocks
  7133. D) read/write DATA from/to register via I/O port #23
  7134.  
  7135. Note: If Index of register not in range C0H..CFH,FEH,FFH then Cyrix
  7136.       CPU generated external bus cycle. If You try to read I/O port
  7137.       #22H CPU will generated external bus cycle too. Then index
  7138.       is out of range all operations with port #23H will generate
  7139.       external bus cycle.
  7140.  
  7141. State After Reset:
  7142.     CCR1    00H
  7143.     CCR2    00H
  7144.     CCR3    00H
  7145.     SMAR    0
  7146.     DIR0    see DIR0 description
  7147.     DIR1    see DIR1 description
  7148.  
  7149.  
  7150. format of registers:
  7151.  
  7152. PCR0:
  7153. Bit    Name    Description
  7154. 7    LSSER    If set, all memory reads/writes will occur in execution order
  7155. 6..3        Reserved
  7156. 2    LOOP_EN If set, enables faster support for loops.
  7157. 1    BTB_EN    If set, enables the Branch Target Buffer for branch prediction
  7158. 0    RSTK_EN If se, enables call return stack
  7159.  
  7160.  
  7161.  
  7162. CCR1:
  7163. Bit    Name    Description
  7164. 7..4        Reserved
  7165. 3    MMAC    (Main Memory Access)
  7166.         If =1 then all data access which occur within SMI
  7167.         routine (when SMAC=1) accessing main memory instead
  7168.         SMM space
  7169.         =0 No affects on access
  7170. 2    SMAC    (System Managment Memory Access)
  7171.         If =1 Any access within SMM memory space issued with SMAADS#
  7172.         output active, SMI# ignored
  7173.         =0 No affects on access
  7174. 1    SMI    (Enable SMM pins)
  7175.         If =1 then enable SMI# i/o pin and SMADS# output pin
  7176.         =0 Float it
  7177. 0        Reserved
  7178.  
  7179.  
  7180.  
  7181. CCR2:
  7182. Bit    Name    Description
  7183. 7    SUSP    (Enable Suspend pins)
  7184.         If =1 SUSP# input and SUSPA# output pins enabled
  7185.         =0 Float
  7186. 6    BWRT    (Enable Burst Write Cycle)
  7187.         If =1 enable use of 16byte burst WB cycle
  7188.         =0 disable
  7189. 5        Reserved
  7190. 4    WT1    (Write-Through Region 1)
  7191.         If =1 Forces all writes to the 640KB-1MB region that
  7192.         hit in cache issued on the external bus
  7193. 3    HALT    (Suspend on HALT)
  7194.         If =1 CPU enters suspend mode following execution
  7195.         HLT instruction.
  7196. 2    LOCK_NW (Lock NW bit)
  7197.         If =1 Prohibits changing the state of NW bit in CR0
  7198. 1    WBAK    (Enable WB Cache Interface pins)
  7199.         If =1 then enable INVAL,WM_RST and HITM# pins
  7200.         =0 float it
  7201. 0        Reserved
  7202.  
  7203.  
  7204. CCR3:
  7205. Bit    Name    Description
  7206. 7..4    MAPEN(3-0) (Register Mapping Enable)
  7207.         If set to 0001b all register accessible,
  7208.         else 0000h then accessed only (C0j-CFh,FEh,FFh)
  7209. 3    SMM_MODE
  7210.         If =1, then CPU hardware interface pins are redefined to
  7211.         function like SMM hardware interface on SL Enhanced Intel's CPUs
  7212. 2    LINBRST
  7213.         If =1, CPU will use linear address sequence when performing
  7214.         burst cycle, If =0 CPU will used 1+4 address sequence.
  7215. 1    NMIEN    (NMI Enable)
  7216.         If =1 then NMI enable during SMM
  7217.         If =0 NMI don't recognizing during SMM
  7218. 0      SMI_LOCK (SMM Register Lock)
  7219.         If =1 the following SMM control bits can not
  7220.         be modified:
  7221.              CCR1: bits 1,2,3
  7222.              CCR3: bit 1
  7223.         But this bit may be changed in SMM.
  7224.         This bit (SMI_LOCK) clearing RESET only.
  7225.  
  7226.  
  7227. SMAR:
  7228. (Index CDh)
  7229. Bit    Description
  7230. 7..0    A31..A24 bits of starting adress of SMM region
  7231. (Index CEh)
  7232. Bit    Description
  7233. 7..0    A23..A16 bits of starting adress of SMM region
  7234. (Index CFh)
  7235. Bit    Description
  7236. 7..4    A15..A12 bits of starting adress of SMM region
  7237. 3..0    Size of SMM region:
  7238.     0000    SMM region disabled
  7239.     0001    4K
  7240.     0010    8K
  7241.     0011    16K
  7242.     0100    32K
  7243.     0101    64K
  7244.     0110    128K
  7245.     0111    256K
  7246.     1000    512K
  7247.     1001    1M
  7248.     1010    2M
  7249.     1011    4M
  7250.     1100    8M
  7251.     1101    16M
  7252.     1110    32M
  7253.     1111    4K
  7254.  
  7255.  
  7256. CCR4:
  7257. Bit    Name    Description
  7258. 7    CPUIDEN (Enable CPUID instruction)
  7259.         If =1 bit 21 of EFLAGS (ID) may changed, and CPUID instruction
  7260.         enabled,
  7261.         else bit 21 of EFLAGS =0 forever and CPUID caused INT 6 -
  7262.         Invalid Opcode
  7263. 6        Reserved
  7264. 5    FP_FAST
  7265.         If =1, FPU execution reporting enabled
  7266. 4    DTE
  7267.         If =1, Directory Table Entry cache is enabled
  7268. 3    MEM_BYP
  7269.         If =1, Enabled memory read bypassing
  7270. 2..0    IORT[2..0]
  7271.         Specify minimum number of bus clocks between two I/O
  7272.         accesses (I/O recovery time)
  7273.         000    -    No Delay
  7274.         001    -    2 clk
  7275.         010    -    4 clk
  7276.         011    -    8 clk
  7277.         100    -    16 clk
  7278.         101    -    32 clk    (Default Value)
  7279.         110    -    64 clk
  7280.         111    -    128 clk
  7281.  
  7282.  
  7283. PMR:
  7284. Bit    Name    Description
  7285. 7..3        Reserved
  7286. 2..0    CLK[2..0]
  7287.         Select Bus/Core Operation Frequency
  7288.         CLK2  CLK1 CLK0      Core/Bus
  7289.          1     x    x        1/2
  7290.          0     0    0        1/1
  7291.          0     0    1        2/1
  7292.          0     1    0        3/1
  7293.          0     1    1        reserved
  7294.  
  7295.  
  7296. DIR0:
  7297. Bit    Description
  7298. 7..0    (Device Identification)
  7299.     Value        Description    Core/Bus clk
  7300.     29h or 2Bh    Cx/IBM/ST 5x86    2/1
  7301.     2Dh or 2Fh    Cx/IBM/ST 5x86    3/1
  7302.  
  7303. DIR1:
  7304. Bit    Name    Description
  7305. 7..4    SID    Stepping Identificator
  7306. 3..0    RID    Revision Identification
  7307.  
  7308.  
  7309. Note:    5x86 Cyrix/IBM/ST
  7310.     Stepping    Revision
  7311.        0          0    EDX after reset = [15:8]=DIR1, [7:0]=DIR0
  7312.        0          1    EDX after reset = [15:8]=DIR1, [7:0]=DIR0
  7313.        0          2    EDX after reset = [15:8]=04h   [7:0]=90h
  7314. ---------------------------------------------------
  7315. APPENDIX    A5
  7316. Cyrix Cx6x86 (M1), IBM 6x86
  7317. configuration Registers
  7318.                                    for access
  7319. Register    Full Register Name        Index    size(bits) MAPEN(3..0)
  7320. CCR0    Configuration Control Register #0    C0H    8        x
  7321. CCR1    Configuration Control Register #1    C1H    8        x
  7322. CCR2    Configuration Control Register #2    C2H    8        x
  7323. CCR3    Configuration Control Register #3    C3H    8        x
  7324. ARR0    Address Region Register #0        C4H-C6H 24        x
  7325. ARR1    Address Region Register #1        C7H-C9H 24        x
  7326. ARR2    Address Region Register #2        CAH-CCH 24        x
  7327. ARR3    Address Region Register #3        CDH-CFH 24        x
  7328. ARR4    Address Region Register #4        D0H-D2H 24        1
  7329. ARR5    Address Region Register #5        D3H-D5H 24        1
  7330. ARR6    Address Region Register #6        D6H-D8H 24        1
  7331. ARR7    Address Region Register #7        D9H-DBH 24        1
  7332. RCR0    Region Configuration Register #0    DCh    8        1
  7333. RCR1    Region Configuration Register #0    DDh    8        1
  7334. RCR2    Region Configuration Register #0    DEh    8        1
  7335. RCR3    Region Configuration Register #0    DFh    8        1
  7336. RCR4    Region Configuration Register #0    E0h    8        1
  7337. RCR5    Region Configuration Register #0    E1h    8        1
  7338. RCR6    Region Configuration Register #0    E2h    8        1
  7339. RCR7    Region Configuration Register #0    E3h    8        1
  7340. CCR4    Configuration Control Register #4    E8h    8        1
  7341. CCR5    Configuration Control Register #5    E9h    8        1
  7342. DIR0    Device Identification register #0    FEH    8        x
  7343. DIR1    Device Identification register #1    FFH    8        x
  7344.  
  7345.  
  7346. For access to this register You need to do:
  7347.  
  7348. A) write INDEX_OF_REGISTER to I/O port #22H
  7349. B) wait 5-6 clocks
  7350. D) read/write DATA from/to register via I/O port #23
  7351.  
  7352. Note: If Index of register not in range C0H..CFH,FEH,FFH then Cyrix
  7353.       CPU generated external bus cycle. If You try to read I/O port
  7354.       #22H CPU will generated external bus cycle too. Then index
  7355.       is out of range all operations with port #23H will generate
  7356.       external bus cycle.
  7357.  
  7358. State After Reset:
  7359.     CCR1    00H
  7360.     CCR2    00H
  7361.     CCR3    00H
  7362.     SMAR    0
  7363.     DIR0    see DIR0 description
  7364.     DIR1    see DIR1 description
  7365.  
  7366.  
  7367. format of registers:
  7368.  
  7369. CCR0:
  7370. Bit    Name    Description
  7371. 7..2        Reserved
  7372. 1    NC1    (Non-cachable 1MB)
  7373.         If =1 then area 640KM-1MB is non-cachable.
  7374.  
  7375.  
  7376.  
  7377. CCR1:
  7378. Bit    Name    Description
  7379. 7    SM3    (System Managment Address Region 3)
  7380.         If =1 then ARR3 used as SMM address space region
  7381. 6..5        Reserved
  7382. 4    NO_LOCK (No Lock Cycles)
  7383.         If =1 all bus cycles are issued with LOCK# pin negated, except
  7384.         page tables access and INTA cycles.
  7385. 3        Reserved
  7386. 2    SMAC    (System Managment Memory Access)
  7387.         If =1 Any access within SMM memory space issued with SMAADS#
  7388.         output active, SMI# ignored
  7389.         =0 No affects on access
  7390. 1    SMI    (Enable SMM pins)
  7391.         If =1 then enable SMI# i/o pin and SMADS# output pin
  7392.         =0 Float it
  7393. 0        Reserved
  7394.  
  7395.  
  7396.  
  7397. CCR2:
  7398. Bit    Name    Description
  7399. 7    SUSP    (Enable Suspend pins)
  7400.         If =1 SUSP# input and SUSPA# output pins enabled
  7401.         =0 Float
  7402. 6..5        Reserved
  7403. 4    WPR1    (Write-Protected Region 1)
  7404.         If =1 then any cachable accesses in the 640KB-1MB region
  7405.         are Write-Protected
  7406. 3    HALT    (Suspend on HALT)
  7407.         If =1 CPU enters suspend mode following execution
  7408.         HLT instruction.
  7409. 2    LOCK_NW (Lock NW bit)
  7410.         If =1 Prohibits changing the state of NW bit in CR0
  7411. 1..0        Reserved
  7412.  
  7413.  
  7414. CCR3:
  7415. Bit    Name    Description
  7416. 7..4    MAPEN(3-0) (Register Mapping Enable)
  7417.         If set to 0001b all register accessible,
  7418.         else 0000h then accessed only (C0h-CFh,FEh,FFh)
  7419. 3        Reserved
  7420. 2    LINBRST
  7421.         If =1, CPU will use linear address sequence when performing
  7422.         burst cycle, If =0 CPU will used 1+4 address sequence.
  7423. 1    NMIEN    (NMI Enable)
  7424.         If =1 then NMI enable during SMM
  7425.         If =0 NMI don't recognizing during SMM
  7426. 0      SMI_LOCK (SMM Register Lock)
  7427.         If =1 the following SMM control bits can not
  7428.         be modified:
  7429.              CCR1: bits 1,2,3
  7430.              CCR3: bit 1
  7431.              ARR3: Starting address and Block size
  7432.         But this bit may be changed in SMM.
  7433.         This bit (SMI_LOCK) clearing RESET only.
  7434.  
  7435.  
  7436. ARRi:
  7437.     -- Starting Address --- Region
  7438. ARR #    A31-A24 A23-A16 A15-A12 Block Size
  7439.      7..0     7..0      7..4     3..0        (Bits)
  7440. ARR0      C4h      C5h       C6h      C6h        (Index)
  7441. ARR1      C7h      C8h       C9h      C9h
  7442. ARR2      CAh      CBh       CCh      CCh
  7443. ARR3      CDh      CEh       CFh      CFh
  7444. ARR4      D0h      D1h       D2h      D2h
  7445. ARR5      D3h      D4h       D5h      D5h
  7446. ARR6      D6h      D7h       D8h      D8h
  7447. ARR7      D9h      DAh       DBh      DBh
  7448.     (ARRi^)
  7449.     (index)
  7450.  
  7451. (Index    ARRi+0)
  7452. Bit    Description
  7453. 7..0    A31..A24 bits of starting adress of region #i
  7454. (Index    ARRi+1)
  7455. Bit    Description
  7456. 7..0    A23..A16 bits of starting adress of region #i
  7457. (Index ARRi+2)
  7458. Bit    Description
  7459. 7..4    A15..A12 bits of starting adress of region #i
  7460. 3..0    Size of     region #i :
  7461.     Value    ARR0-ARR6    ARR7
  7462.     0000    **** region disabled ****
  7463.     0001    4K        256K
  7464.     0010    8K        512K
  7465.     0011    16K        1M
  7466.     0100    32K        2M
  7467.     0101    64K        4M
  7468.     0110    128K        8M
  7469.     0111    256K        16M
  7470.     1000    512K        32M
  7471.     1001    1M        64M
  7472.     1010    2M        128M
  7473.     1011    4M        256M
  7474.     1100    8M        512M
  7475.     1101    16M        1G
  7476.     1110    32M        2G
  7477.     1111    4K        4G
  7478.  
  7479.  
  7480. RCRi:
  7481. Bit    Name    ARR#    Description
  7482. 7..6        any    Reserved
  7483. 5    NBL    any    If =1 LBA# pin is negated for corresponding region
  7484. 4    WT    any    If =1 Write-Throught caching is enable for region
  7485. 3    WG    any    If =1 Write Gathering enabled for region
  7486. 2    WL    any    If =1 Weak Locking enable for region
  7487. 1    WWO    any    If =1 weak write ordering enable for region
  7488. 0    RCD    0..6    If =1 address region is non-cachable
  7489. 0    RCE    7    If=1 region is cachable and implies thet address space
  7490.             outside of region is non-cachable.
  7491.  
  7492.  
  7493.  
  7494. CCR4:
  7495. Bit    Name    Description
  7496. 7    CPUIDEN (Enable CPUID instruction)
  7497.         If =1 bit 21 of EFLAGS (ID) may changed, and CPUID instruction
  7498.         enabled,
  7499.         else bit 21 of EFLAGS =0 forever and CPUID caused INT 6 -
  7500.         Invalid Opcode
  7501. 6..5        Reserved
  7502. 4    DTE
  7503.         If =1, Directory Table Entry cache is enabled
  7504. 3        Reserved
  7505. 2..0    IORT[2..0]
  7506.         Specify minimum number of bus clocks between two I/O
  7507.         accesses (I/O recovery time)
  7508.         000    -    No Delay
  7509.         001    -    2 clk
  7510.         010    -    4 clk
  7511.         011    -    8 clk
  7512.         100    -    16 clk
  7513.         101    -    32 clk    (Default Value)
  7514.         110    -    64 clk
  7515.         111    -    128 clk
  7516.  
  7517.  
  7518. CCR5:
  7519. Bit    Name    Description
  7520. 7..6        Reserved
  7521. 5    ARREN    (Address region registers Enable)
  7522.         If =1 then Enable all ARRs,
  7523.         If =0 all ARRs disable, but if SM3=1 then ARR3 enable.
  7524. 4    LBR1
  7525.         If =1 LBA# pin asserted for all accesses to the 640KB-1MB
  7526.         region
  7527. 3..1        Reserved
  7528. 0    WT_ALLOC
  7529.         If =1 new cache lines allocated for both read misses and
  7530.         write misses, else only on read misses.
  7531.  
  7532.  
  7533.  
  7534.  
  7535. DIR0:
  7536. Bit    Description
  7537. 7..0    (Device Identification)
  7538.     Value        Description    Core/Bus clk
  7539.     30h or 32h    6x86 (M1)    1/1
  7540.     31h or 33h    6x86 (M1)    2/1
  7541.     35h or 37h    6x86 (M1)    4/1
  7542.     34h or 36h    6x86 (M1)    3/1
  7543.  
  7544. DIR1:
  7545. Bit    Name    Description
  7546. 7..4    SID    Stepping Identificator
  7547. 3..0    RID    Revision Identification
  7548.  
  7549. ----------------------------------------------
  7550. APPENDIX    B
  7551. Codes which returned after Reset in EDX
  7552.  
  7553.                   DH     DL
  7554. Type of CPU   Steppin       Model ID   Revision
  7555.  
  7556. i386DX        A         (00h)    ???
  7557.         B0-B10          03h    03h
  7558.         D0            05h
  7559.         D1-D2            08h
  7560.         E0,F0            08h
  7561.  
  7562. Am386DX/DXL    A          03h    05h
  7563.         B            08h
  7564.  
  7565. i386SX        A0          23h    04h
  7566.         B            05h
  7567.         C,D,E            08h
  7568.  
  7569. Am386SX/SXL    A1          23h    05h
  7570.         B            08h
  7571.  
  7572. Intel386CXSA    A          23h    09h
  7573.  
  7574. Intel386CXSB    A          23h    09h
  7575.  
  7576. i386EX        A          23h    09h
  7577.  
  7578. Intel386SXSA    ?          23h    09h
  7579.  
  7580. i376        A0          33h    05h
  7581.         B            08h
  7582.  
  7583.  
  7584.  
  7585. i386SL        A0-A3          43h    0xh (05H)
  7586.         B0-B1            1xh
  7587.  
  7588. RapidCAD (tm)    A          03h    40h
  7589.         B            41h
  7590.  
  7591. IBM 386SLC    A          A3h    xxh
  7592.  
  7593. Cx486SLC    A          04h    10h
  7594.  
  7595. TI486SLC/DLC/e    A          04h    10h
  7596.         B            11h
  7597.  
  7598. TI486SXL/SXLC    A          04h    10h
  7599.         B            11h
  7600.  
  7601. i486DX        A0/A1          04h    00h
  7602.         B2-B6            01h
  7603.         C0            02h
  7604.         C1            03h
  7605.         D0            04h
  7606.         cA2,cA3            10h
  7607.         cB0,cB1            11h
  7608.         cC0            13h
  7609.         aA0,aA1            14h    ; SL Enhanced
  7610.         aB0            15h    ; SL Enhanced
  7611.  
  7612. Am486DX        any          04h    12h
  7613.  
  7614. UMC U5SD    any          04h    1xh
  7615.  
  7616. i486SX        A0          04h    20h
  7617.         B0            22h
  7618.         ??            23h    ; SL Enhanced 1994 ???
  7619.         gAx            24h
  7620.         cA0            27h
  7621.         cB0            28h
  7622.         aA0,aA1            2Ah    ; SL Enhanced
  7623.         aB0,aC0            2Bh    ; SL Enhanced
  7624.  
  7625. i487SX        A0          04h    20h
  7626.         B0            21h
  7627.  
  7628. UMC U5S        any          04h    23h
  7629.  
  7630. UMC U5SX 486-A    any          04h    23h
  7631.  
  7632. UMC U5SD    any          04h    23h
  7633.  
  7634. Cx5x86        0,rev 1-      04h    29h    ; core/bus clk=2/1  +clones
  7635. Cx5x86        0,rev 1-      04h    2Bh    ; core/bus clk=2/1  +clones
  7636. Cx5x86        0,rev 1-      04h    2Dh    ; core/bus clk=3/1  +clones
  7637. Cx5x86        0,rev 1-      04h    2Fh    ; core/bus clk=3/1  +clones
  7638.  
  7639.  
  7640. i486DX2 &    A0-A2          04h    32h
  7641. OverDrive (tm)    B1            33h
  7642.         aA0,aA1            34h    ; SL Enhanced
  7643.         aB0,aC0            35h    ; SL Enhanced
  7644.  
  7645. Am486DX2    any          04h    32h    ; Include 80MHz
  7646.  
  7647. Am486DXL2    any          04h    32h
  7648.  
  7649. Am486DX4    any          04h    32h    ; Non Ehnanced
  7650.         any          04h    84h    ; Enhanced in WT mode
  7651.                   04h    94h    ; Enhanced in WB mode
  7652.  
  7653. UMC U486DX2    any          04h    3xh
  7654.  
  7655. UMC U486SX2    any          04h    5xh
  7656.  
  7657. i486SL        A          04h    40h
  7658.         ??            41h
  7659.  
  7660. i486SX2        aC0          04h    5Bh    ; SL Enhanced
  7661.  
  7662. IntelSX2 (tm)    A          04h    5xh
  7663. OverDrive (tm)
  7664.  
  7665. WB Enh IntelDX2 A          04h    70h    ; in WB mode
  7666. (P24D)                    36h    ; in WT mode
  7667.  
  7668. IBM BL486DX2    A          04h    80h   ; PRELIMINARY
  7669.  
  7670. IntelDX4 (tm)    A          04h    80h
  7671.  
  7672. TI  TI486DX2    any          04h    80h
  7673.  
  7674. TI  TI486DX4    any          04h    81h
  7675.  
  7676. IntelDX4 (tm)    A          14h    80h   ; DX4ODPR     (5V IntelDX4)
  7677. OverDrive (tm)
  7678.  
  7679. Cx5x86        0,rev 2+      04h    90h
  7680.  
  7681. Write-Back Enh. A          04h    83h   ; WT Mode
  7682. IntelDX4 (tm)                90h   ; WB mode
  7683.  
  7684. AMD Am5x86    A          04h    84h   ; x3, WT mode
  7685.                     94h   ; x3, WB mode
  7686.                     E4h   ; x4, WT mode
  7687.                     F4h   ; x4, WB mode
  7688.  
  7689. IBM  486SLC    A          A4h    0xh
  7690.  
  7691. IBM  486SLC2    Ax          A4h    1xh
  7692.         Bx            2xh
  7693.         ??            3xh
  7694.  
  7695. IBM  486BLX3    A          84h    xxh
  7696.  
  7697. Cyrix M5    all          00h    05h
  7698. (Cx486S/D)
  7699.  
  7700. Cyrix M6    all          00h    06h
  7701. (Cx486DX)
  7702.  
  7703. Cyrix M7    all          00h    07h
  7704. (Cx486DX2)
  7705.  
  7706. Cyrix M8    all          00h    08h
  7707. (Cx486DX4)
  7708.  
  7709. Am5k86 (SSA/5)    all          05h    0xh
  7710.         A          05h    00h
  7711.         B            01h
  7712.  
  7713. Am5k86 (K5)    all          05h    1xh
  7714.  
  7715. Am6k86 (K6)    all          05h    6xh
  7716.  
  7717. Pentium (P5)    Ax          05h    0xh
  7718.         B1          05h    13h    ; Have FPU bug!
  7719.         C1          05h    15h    ; Have FPU bug!
  7720.         D1          05h    17h    ; Never have FPU bug!!
  7721.  
  7722. Pentium (P54LM) Ax          05h    25h    ; 2.9V for Notebooks.
  7723.  
  7724. Pentium (P54C)    B1          05h    21h    ; Have FPU bug!
  7725.         B3          05h    22h    ; Have FPU bug!
  7726.         B5          05h    24h    ; Have FPU bug!
  7727.         C1          05h    25h    ; No   FPU bug!!
  7728.         C2            25h
  7729.         mA1            25h
  7730.         E0            26h    ; 75,90,100,120
  7731.         cB1            2Bh    ; 120,133 MHz
  7732.         mcB1            2Bh
  7733.         cC0            2Ch    ;  133,150,166,200
  7734.         mcC0            2Ch    ;
  7735.         mA4            70h    ;  VRT
  7736. #PHG
  7737.         cC0            2Ch    ; 150,166 MHz
  7738.         E0            26h    ; 75,90,100 MHz
  7739.         mA4            70h    ; 75,90,100 MHz VRT
  7740.         mcC0            2Ch    ; 120,133 MHz
  7741. #end
  7742.  
  7743.  
  7744. Pentium (P54CQS) C2          05h    25h
  7745.  
  7746. Pentium Overdrive B1          15h    31h    ; PODP5V63, PODP5V83
  7747. (Vcc=5V)(P24T)      B2          15h    31h    ; Socket 3,6
  7748.           C0          15h    32h
  7749.  
  7750. Pentium OverDrive tA0          05h    1Ah    ; PODP5V120, PODP5V133
  7751. (P5T)                        ; Socket 4
  7752.  
  7753.  
  7754. Pentium OverDrive
  7755. (P54T)          aC0          05h    2Ch    ; PODP3V125, PODP3V150
  7756.                         ; PODP3V166
  7757.                         ; Socket 5,7
  7758. #end
  7759.  
  7760. Cx6x86                  05h    30h    ; core/bus = 1/1
  7761.                   05h    32h    ; core/bus = 1/1
  7762.                   05h    31h    ; core/bus = 2/1
  7763.                   05h    33h    ; core/bus = 2/1
  7764.                   05h    34h    ; core/bus = 3/1
  7765.                   05h    36h    ; core/bus = 3/1
  7766.                   05h    35h    ; core/bus = 4/1
  7767.                   05h    37h    ; core/bus = 4/1
  7768.  
  7769.  
  7770. ;Pentium Overdrive          15h    2xh
  7771. ;(Vcc=3.3V) (P24CT)
  7772.  
  7773.  
  7774. Pentium OverDrive (P54T)      15h    4xh
  7775.  
  7776.  
  7777. #PHG
  7778. Pentium (P55C)         A1          05h    41h
  7779.              A2          05h    42h
  7780.              A3          05h    44h
  7781. #end
  7782.  
  7783. Intel Pentium OverDrive          25h    2xh
  7784. (P54M)
  7785.  
  7786. Pentium     Pro (P6)   ?          06h    0xh ; Engineering Sample 133MHz 0.6mkm
  7787.                   06h    11h ; Engineering Sample 150MHz
  7788.             B0          06h    11h ;    133,150 MHz
  7789.             C0          06h    12h ;    150 MHz
  7790.             sA0          06h    16h ;    166,180,200 MHz
  7791. #PHG
  7792.             sA1          06h    17h ;    166,180,200 MHz
  7793. #end
  7794.  
  7795. OverDrive for Socket 8    (P6T) 16h    3xh ;
  7796.  
  7797. Note: For detection Cyrix's chips refer to APPENDIX A1.
  7798.  
  7799. --------------------------------------------
  7800. APPENDIX C0
  7801. iCOMP index for Intel's Microprocessors
  7802.  
  7803.  
  7804. i386SX-20        32
  7805. i386SX-25        39
  7806. i386SL-25        41
  7807. i386DX-25        49
  7808. i386DX-33        68
  7809. i486SX-20        78
  7810. i486SX-25        100  ; Base model for test iCOMP=100 by define
  7811. i486DX-25        122
  7812. i486SX-33        136
  7813. i486DX-33        166
  7814. i486DX2-20/40        166
  7815. IntelSX2-25/50        180
  7816. i486DX2-25/50        231
  7817. i486DX-50        249
  7818. IntelDX4-20/60        258
  7819. i486DX2-33/66        297
  7820. Pentium OverDrive-20/50 314  ; P24T
  7821. IntelDX4-25/75        319  ; P24C
  7822. IntelDX4-33/100        435  ; P24C
  7823. Pentium OverDrive-25/63 443  ; P24T
  7824. Pentium-(510\60)    510  ; P5
  7825. Pentium-(567\66)    567  ; P5
  7826. Pentium OverDrive-33/83 581  ; P24T
  7827. Pentium-(610\75)    610  ; P54C,P54LM
  7828. Pentium-(735\90)    735  ; P54C,P54LM
  7829. Pentium-(815\100)    815  ; P54C
  7830. Pentium-(1000\120)    1000 ; P54CSQ
  7831. Pentium-(133)        1110 ; P54CSQ
  7832.  
  7833.  
  7834. iCOMP index 2.0 for Intel Microprocessors
  7835.  
  7836. Pentium-75        67
  7837. Pentium-90        81
  7838. Pentium-100        90
  7839. Pentium-120        100    ; Base Model iCOMP 2.0 = 100
  7840. Pentium-133        111
  7841. Pentium-150        114
  7842. Pentium-166        127
  7843. Pentium-200        142
  7844. Pentium Pro-150        168
  7845. Pentium Pro-180        197
  7846. Pentium Pro-200        220
  7847.  
  7848. ----------------------------------------------
  7849. APPENDIX C1
  7850. Cyrix Microprocessors Relative Perfomance
  7851.  
  7852. Cyrix Inc. Used for declaration of perfomance of
  7853. theys microprocessors tests based on PC Bench 8.0
  7854. and normalization.
  7855.  
  7856. CPU        Perfomance Scores
  7857. Cx486SLC-25    36
  7858. Cx486SLC-33    39
  7859. Cx486SLC2-50    40
  7860. Cx486DLC-33    69
  7861. Cx486DLC-40    83
  7862. Cx486DX-33    100    ; <--- Base Point
  7863. Cx486DX-40    118
  7864. Cx486DX2-50    139
  7865. Cx486DX-50    148
  7866. Cx486DX2-66    179
  7867. Cx486DX2-V80    209
  7868.  
  7869. ------------------------------------------------
  7870. APPENDIX D0
  7871. Pentium P54C+ Build-in APIC
  7872. (Advanced programmable Interrupt Controller)
  7873.  
  7874.  
  7875. Base Address of Build-in APIC in memory location
  7876. is 0FEE00000H.
  7877.  
  7878. Map of APIC REgisters:
  7879.  
  7880. Offset (hex)    Description            Read/Write state
  7881. 0        Reserved
  7882. 10        Reserved
  7883. 20        Local APIC ID            R/W
  7884. 30        Local APIC Version        R
  7885. 40-70        Reserved
  7886. 80        Task Priority Register        R/W
  7887. 90        Arbitration Priority Register    R
  7888. A0        Processor Priority Register    R
  7889. B0        EOI Register            W
  7890. C0        Remote read            R
  7891. D0        Logical Destination        R/W
  7892. E0        Destination Format Register    0..27  R
  7893.                         28..31 R/W
  7894. F0        Spurious Interrupt Vector Reg.    0..3   R
  7895.                         4..9   R/W
  7896. 100-170        ISR  0-255            R
  7897. 180-1F0        TMR  0-255            R
  7898. 200-270        IRR  0-255            R
  7899. 280        Error Status Register        R
  7900. 290-2F0        Reserved
  7901. 300        Interrupt Command Reg. (0-31)    R/W
  7902. 310        Interrupt Command Reg. (32-63)    R/W
  7903. 320        Local Vector Table (Timer)    R/W
  7904. 330-340        Reserved
  7905. 350        Local Vector Table (LINT0)    R/W
  7906. 360        Local Vector Table (LINT1)    R/W
  7907. 370        Local Vector Table (ERROR)    R/W
  7908. 380        Initial Count Reg. for Timer    R/W
  7909. 390        Current Count of Timer        R
  7910. 3A0-3D0        Reserved
  7911. 3E0        Timer Divide Configuration Reg. R/W
  7912. 3F0        Reserved
  7913.  
  7914.  
  7915. Note: Pentium-120MHz (Step C2)    Never have APIC
  7916. ---------------------------------------------------
  7917. APPENDIX D1   INTEL 386/486SL REGISTERS
  7918.  
  7919. Note: Intel Chipset for SL microprocessors (i386SL,i486SL) contain
  7920.       self CPU and 82360SL chip.
  7921.  
  7922.  
  7923. [i386SL]
  7924. Note: address of register in Normal I/O space
  7925.  
  7926. Name of Register    Address        Default Value    Where placed    Size
  7927. CPUPWRMODE        22h        0        CPU        16
  7928. CFGSTAT            23h        0        82360SL        8
  7929. CFGINDEX        24h        0        82360SL        16
  7930. CFGDATA            25h        xxh        82360SL        16
  7931. EMSCNTLREG        28h        0        CPU        8
  7932. EMSINDEXREG        2Ah        0        CPU        16
  7933. EMSDPREG        2Ch        xxh        CPU        16
  7934. PORT92            92h        0        CPU        8
  7935. PORT102               102h        0        CPU        8
  7936. FAIL SAFE NMI CTRL     461h        0        CPU        8
  7937. The followed ports visible only when they enabled,
  7938. Any writes to this ports caused the action it named.
  7939. FAST CPU RESET           EFh        N/A        82360SL        8
  7940. FAST A20 GATE           EEh        N/A        82360SL        8
  7941. SLOW CPU           F4h        N/A        CPU        8
  7942. FAST CPU           F5h        N/A        CPU        8
  7943. SFS DISABLE           F9h        N/A        CPU        8
  7944. SFS ENABLE           FBh        N/A        CPU        8
  7945.  
  7946.  
  7947. Format of CPUPWRMODE register (i386SL):
  7948. Bits    Name    Description
  7949. 15    DT    If Unlock Status {  // See bit 0 of this register
  7950.             if bit=0 then access to 82360SL
  7951.             if bit=1 then access to CPUPWRMODE register
  7952.                 }
  7953.         If Lock Staus    {   // i.e.SB=1
  7954.             (De-Turbo Select Bit) Selected clock speed
  7955.             If bit=0 then EFI/2
  7956.             If bit=1 then EFI/4
  7957.                 }
  7958. 14    0    Reserved
  7959. 13..11    IMCPC    (Idle MCP Clock)
  7960.         13.12.11    Description
  7961.         000    EFI
  7962.         001    EFI/2
  7963.         010    EFI/4
  7964.         011    EFI/8
  7965.         100    EFI/16
  7966.         101    Reserved
  7967.         110    Reserved
  7968.         111    Stop Clock
  7969. 10,9    SLC    (Slow CPU clock)
  7970.         10.9    Description
  7971.         00    EFI
  7972.         01    EFI/2
  7973.         10    EFI/4
  7974.         11    EFI?8
  7975. 8    CPUCNFG
  7976.         If =1 CPU Lock. (Write Protect to CPUPMODE register)
  7977. 7    FD    (Flash Disk Enable)
  7978.         If bit=1 then phisical addresses D0000H - DFFFFh
  7979.         automatically never caching.
  7980. 6    0    Reserved
  7981. 5,4    FCC    (Fast CPU clock)
  7982.         5.4    Description
  7983.         00    EFI
  7984.         01    EFI/2
  7985.         10    EFI/4
  7986.         11    EFI/8
  7987. 3,2    US    (Unit Select)
  7988.         Select Unit of 82360SL which will be accessable through 23h-25h
  7989.         I/O Ports
  7990.         3.2    Description
  7991.         00    On-Board Memory Controller
  7992.         01    Cache Unit
  7993.         10    Internal Bus Unit
  7994.         11    External Bus Unit
  7995. 1    UE    (Unit Enable)
  7996.         If =1 Enable to Access Units
  7997.         else enable to access System bus.
  7998. 0    SB    (Status Bit)
  7999.         If =0 Enable access to CPUPWRMODE register
  8000.         If =1 Disable
  8001.  
  8002.  
  8003.  
  8004. Format of EMSCNTLREG:
  8005. Bits    Description    (Table )
  8006. 7    (Global Enable)
  8007.     If =1 EMS enable
  8008. 6    Valid bit
  8009. 5    EMSDP Status Bit (Read Only)
  8010. 4..2    Reserved
  8011. 1..0    Active EMS Set (0-3)
  8012.  
  8013.  
  8014. Format of EMSINDEXREG:
  8015. Bits    Description
  8016. 15..10    Reserved
  8017. 9..8    EMS set (0-3)
  8018. 7..6    Reserved
  8019. 5..0    EMS Page Register Index (0-64)
  8020.  
  8021. Format of EMSDPREG:
  8022. Bits    Description    (Table )
  8023. 15    This EMS Page Enable (i.e. page indexed by EMSINDEXREG)
  8024. 14    EMS Valid bit
  8025. 13..11    reserved
  8026. 10..0    Address lines A24..A14 for page selected by EMSINDEXREG
  8027.  
  8028. Important Note:
  8029. i386SL have SIGNATURE register have index 30Eh in On-Board Memory Controller
  8030. Configuration Space. This Register contain  Stepping Info of i386SL.
  8031. Stepping    Signature Register    DX register after reset
  8032. A0        4300h            4310h
  8033. A1        4300h            4310h
  8034. A2        4301h            4310h
  8035. A3        4302h            4310h
  8036. B0        4310h            4311h
  8037. B1        4311h            4311h
  8038.  
  8039.  
  8040.  
  8041. [i486SL]
  8042. Note: address of register in Normal I/O space
  8043.  
  8044. Name of Register    Address        Default Value    Where placed    Size
  8045. CPUPWRMODE        22h        100H        CPU        16
  8046. CFGSTAT            23h        0        82360SL        8
  8047. CFGINDEX        24h        0        82360SL        16
  8048. CFGDATA            25h        xxh        82360SL        16
  8049. PORT92            92h        0        CPU        8
  8050. PORT102               102h        0        CPU        8
  8051. FAIL SAFE NMI CTRL     461h        0        CPU        8
  8052. The followed ports visible only when they enabled
  8053. FAST CPU RESET           EFh        N/A        82360SL        8
  8054. FAST A20 GATE           EEh        N/A        82360SL        8
  8055. SLOW CPU           F4h        N/A        CPU        8
  8056. FAST CPU           F5h        N/A        CPU        8
  8057. SFS DISABLE           F9h        N/A        CPU        8
  8058. SFS ENABLE           FBh        N/A        CPU        8
  8059.  
  8060.  
  8061.  
  8062. Format of CPUPWRMODE register (i486SL):
  8063. Bits    Name    Description    (Table )
  8064. 15    DT    If Unlock Status {  // See bit 0 of this register
  8065.             if bit=0 then access to 82360SL
  8066.             if bit=1 then access to CPUPWRMODE register
  8067.                 }
  8068.         If Lock Staus    {   // i.e.SB=1
  8069.             (De-Turbo Select Bit) Selected clock speed
  8070.             If bit=0 then EFI/2
  8071.             If bit=1 then EFI/4
  8072.                 }
  8073. 14..13    0    Reserved
  8074. 12    FPUERROR
  8075.         This bit controlled access to I/O port 0F0h,
  8076.         if =0 then access to internal F0h port,
  8077.         If =1 then access ISA bus.
  8078. 11..9    0    Reserved
  8079. 8    CPUCNFG
  8080.         If =1 CPU Lock. (Write Protect to CPUPMODE register)
  8081. 7    0    RESERVED
  8082. 6,5    FCC    (Fast CPU clock)
  8083.         5.4    Description
  8084.         00    CPUCLK=definition=EFI/2
  8085.         01    CPUCLK/2
  8086.         10    CPUCLK/4
  8087.         11    CPUCLK/8
  8088. 4    0    Reserved
  8089. 3,2    US    (Unit Select)
  8090.         Select Unit of 82360SL which will be accessable through 23h-25h
  8091.         I/O Ports
  8092.         3.2    Description
  8093.         00    On-Board Memory Controller
  8094.         01    Reserved
  8095.         10    Internal Bus Unit
  8096.         11    External Bus Unit
  8097. 1    UE    (Unit Enable)
  8098.         If =1 Enable to Access Units
  8099.         else enable to access System bus.
  8100. 0    SB    (Status Bit)
  8101.         If =0 Enable access to CPUPWRMODE register
  8102.         If =1 Disable
  8103.  
  8104.  
  8105.  
  8106. Important Note:
  8107. i486SL have SIGNATURE register have index 70Ah in On-Board Memory Controller
  8108. Configuration Space. This Register contain  Stepping Info of i486SL.
  8109. Format Of this register provided below:
  8110. Bits    Description
  8111. 15..12    Member of Family (4h - SL)
  8112. 11..8    Family    (4h - 486 family)
  8113. 7..0    Revision Name (Not Same as in DX after reset)
  8114.  
  8115. ---------------------------------------------
  8116. APPENDIX E
  8117. Pentium (tm) Processor Pairing Instruction
  8118.  
  8119. Pentium (tm) is superscalar microprocessor
  8120. i.e. it may execute >1 instruction per CLK
  8121. cycle. It may execute maximum 2 instruction
  8122. per cycle.It have two integer pipes to execute
  8123. instruction. This pipes not same, and some
  8124. instruction may pairing (i.e. execute together)
  8125. (only if not link with this 2 instruction)
  8126. only in U pipe, some other only in V pipe, other
  8127. in any pipe,other absolutely not pairing and they
  8128. executed on U pipe only.
  8129.  
  8130. ------ Integer Part
  8131.  
  8132. Note:
  8133.     PU - is pairable if issued to U pipe
  8134.     PV - is pairable if issued to V pipe
  8135.     UV - pairable in either pipe
  8136.  
  8137.  
  8138.  
  8139. ADC    Reg,Reg        PU
  8140.     Reg,Mem        PU
  8141.     Reg,Imm        PU
  8142.     Mem,Reg        PU
  8143.     Mem,Imm        PU
  8144. ADD    Reg,Reg        UV
  8145.     Reg,Mem        UV
  8146.     Reg,Imm        UV
  8147.     Mem,Reg        UV
  8148.     Mem,Imm        UV
  8149. AND    Reg,Reg        UV
  8150.     Reg,Mem        UV
  8151.     Reg,Imm        UV
  8152.     Mem,Reg        UV
  8153.     Mem,Imm        UV
  8154. CALL    direct        PV
  8155. CMP    Reg,Reg        UV
  8156.     Reg,Mem        UV
  8157.     Reg,Imm        UV
  8158.     Mem,Reg        UV
  8159.     Mem,Imm        UV
  8160. DEC    Reg        UV
  8161.     Mem        UV
  8162. INC    Reg        UV
  8163.     Mem        UV
  8164. Jcc    any        PV
  8165. JMP    Short        PV
  8166.     Direct        PV
  8167. LEA    Reg,Mem        UV
  8168. MOV    Reg,Reg/Mem/Imm UV
  8169.     Mem,Reg        UV
  8170. NOP            UV
  8171. OR    Reg,Reg        UV
  8172.     Reg,Mem        UV
  8173.     Reg,Imm        UV
  8174.     Mem,Reg        UV
  8175.     Mem,Imm        UV
  8176. POP    Reg        UV
  8177. PUSH    Reg        UV
  8178.     Imm        UV
  8179. Rotates/Shifts:
  8180.     Reg,1        PU
  8181.     Mem,1        PU
  8182.     Reg,Imm        PU
  8183.     Mem,Imm        PU
  8184. SUB    Reg,Reg        UV
  8185.     Reg,Mem        UV
  8186.     Reg,Imm        UV
  8187.     Mem,Reg        UV
  8188.     Mem,Imm        UV
  8189. TEST    Reg,Reg        UV
  8190.     Mem,Reg        UV
  8191.     Acc,Imm        UV
  8192. XOR    Reg,Reg        UV
  8193.     Reg,Mem        UV
  8194.     Reg,Imm        UV
  8195.     Mem,Reg        UV
  8196.     Mem,Imm        UV
  8197.  
  8198.  
  8199.  _____    Floating Part
  8200.  
  8201. Note:    FX  -  Pairing with FXCH
  8202.     (All other never pairing)
  8203.  
  8204. FABS            FX
  8205. FADD            FX
  8206. FADDP            FX
  8207. FCHS            FX
  8208. FCOM            FX
  8209. FCOMP            FX
  8210. FDIV/R/P/RP        FX
  8211. FLD   m32,m64,ST(i)    FX    Note: FLD m80 not pairing
  8212. FMUL/P            FX
  8213. FSUB/P/R/RP        FX
  8214. FTST            FX
  8215. FUCOM/P/PP        FX
  8216.  
  8217.  
  8218.  
  8219. For more information refer to:
  8220. 1) Optimization for Intel's 32-Bit Processors
  8221.   (Application Note AP-500)
  8222.   Gary CArleton)
  8223.   // Intel Corp. 1993
  8224.   // Order Number 241799
  8225. 2) Supplement to the Pentium (tm) Processor User's
  8226.    Manual
  8227.   // Intel Corp. 1993.
  8228.  
  8229.  
  8230. ------------------------------------------------------------
  8231. APPENDIX  F0    NON FP OPCODES
  8232.  
  8233.  
  8234. Base Format of opcodes:
  8235. <Basecode> <Postbyte> <offset> <immediate_operands>
  8236.  
  8237.  
  8238. Format of Postbyte:
  8239.  
  8240.   MM RRR MMM
  8241.  
  8242. MM  - Memory addresing mode
  8243. RRR - Register operand address
  8244. MMM - Memory operand address
  8245.  
  8246.  
  8247. RRR    Register Names
  8248. Fields    8bit    16bit    32bit
  8249. 000    AL    AX    EAX
  8250. 001    CL    CX    ECX
  8251. 010    DL    DX    EDX
  8252. 011    BL    BX    EBX
  8253. 100    AH    SP    ESP
  8254. 101    CH    BP    EBP
  8255. 110    DH    SI    ESI
  8256. 111    BH    DI    EDI
  8257.  
  8258.  
  8259. 16bit memory (No 32 bit memory address prefix):
  8260. MMM    Default MM  Field
  8261. Field    Sreg    00        01        10        11=MMM is reg
  8262. 000    DS    [BX+SI]        [BX+SI+O8]    [BX+SI+O16]
  8263. 001    DS    [BX+DI]        [BX+DI+O8]    [BX+SI+O16]
  8264. 010    SS    [BP+SI]        [BP+SI+O8]    [BP+SI+O16]
  8265. 011    SS    [BP+DI]        [BP+DI+O8]    [BP+DI+O16]
  8266. 100    DS    [SI]        [SI+O8]        [SI+O16]
  8267. 101    DS    [DI]        [DI+O8]        [DI+O16]
  8268. 110    SS    [O16]        [BP+O8]        [BP+O16]
  8269. 111    DS    [BX]        [BX+O8]        [BX+O16]
  8270. Note: MMM=110,MM=00 Default Sreg is DS !!!!
  8271.  
  8272. 32bit memory (Has 67h 32 bit memory address prefix):
  8273. MMM    Default MM  Field
  8274. Field    Sreg    00        01        10        11=MMM is reg
  8275. 000    DS    [EAX]        [EAX+O8]    [EAX+O32]
  8276. 001    DS    [ECX]        [ECX+O8]    [ECX+O32]
  8277. 010    DS    [EDX]        [EDX+O8]    [EDX+O32]
  8278. 011    DS    [EBX]        [EBX+O8]    [EBX+O32]
  8279. 100 see SIB    [SIB]        [SIB+O8]    [SIB+O32]
  8280. 101    SS    [O32]        [EBP+O8]    [EBP+O32]
  8281. 110    DS    [ESI]        [ESI+O8]    [ESI+O32]
  8282. 111    DS    [EDI]        [EDI+O8]    [EDI+O32]
  8283. Note: MMM=110,MM=00 Default Sreg is DS !!!!
  8284.  
  8285.  
  8286. SIB is (Scale/Base/Index):
  8287.   SS  BBB  III
  8288. Note: SIB address calculated as :
  8289.     <SIB address>=<Base>+<Index>*(2^(Scale))
  8290.  
  8291. Field    Default Base
  8292. BBB    Sreg    Register    Note
  8293. 000    DS    EAX
  8294. 001    DS    ECX
  8295. 010    DS    EDX
  8296. 011    DS    EBX
  8297. 100    SS    ESP
  8298. 101    DS    O32        If MM=00   (Postbyte)
  8299.     SS    EBP        If MM<>00  (Postbyte)
  8300. 110    DS    ESI
  8301. 111    DS    EDI
  8302.  
  8303. Field    Index
  8304. III    register    Note
  8305. 000    EAX
  8306. 001    ECX
  8307. 010    EDX
  8308. 011    EBX
  8309. 100            Never Index SS can be 00
  8310. 101    EBP
  8311. 110    ESI
  8312. 111    EDI
  8313.  
  8314. Field    Scale coefficient
  8315. SS    =2^(SS)
  8316. 00    1
  8317. 01    2
  8318. 10    4
  8319. 11    8
  8320.  
  8321.  
  8322. Note:
  8323.       <No comments> this code are for 8086 and all other processors
  8324.       NECs  : for NEC/Sony V20/V30/V40/V50 and all clones and upgrades
  8325.       186+  : for 186/188 and higher
  8326.       286+  : for 80286 and higher
  8327.       386+  : for 80386 and higher
  8328.       486+  : for i486 and higher
  8329.       Pentium : for Pentiym
  8330.       <specified> : specified
  8331.  
  8332.  
  8333.  
  8334.  
  8335. Main Table [TABLE00]:
  8336.  
  8337. 00    ADD    mem8,reg8
  8338. 01    ADD    mem,reg
  8339. 02    ADD    reg8,mem8
  8340. 03    ADD    reg,mem
  8341. 04    ADD    AL,imm8
  8342. 05    ADD    AX,imm
  8343. 06    PUSH    ES
  8344. 07    POP    ES
  8345. 08    OR    mem8,reg8
  8346. 09    OR    mem,reg
  8347. 0A    OR    reg8,mem8
  8348. 0B    OR    reg,mem
  8349. 0C    OR    AL,imm8
  8350. 0D    OR    AX,imm
  8351. 0E    PUSH    CS
  8352. 0F    POP    CS    ; 8088 non CMOS versions
  8353.     >>>  TABLE 01    ; NECs & 286+
  8354.     Invalid Opcode    ; 186/188
  8355.  
  8356. 10    ADC    mem8,reg8
  8357. 11    ADC    mem,reg
  8358. 12    ADC    reg8,mem8
  8359. 13    ADC    reg,mem
  8360. 14    ADC    AL,imm8
  8361. 15    ADC    AX,imm
  8362. 16    PUSH    SS
  8363. 17    POP    SS
  8364. 18    SBB    mem8,reg8
  8365. 19    SBB    mem,reg
  8366. 1A    SBB    reg8,mem8
  8367. 1B    SBB    reg,mem
  8368. 1C    SBB    AL,imm8
  8369. 1D    SBB    AX,imm
  8370. 1E    PUSH    DS
  8371. 1F    POP    DS
  8372.  
  8373.  
  8374. 20    AND    mem8,reg8
  8375. 21    AND    mem,reg
  8376. 22    AND    reg8,mem8
  8377. 23    AND    reg,mem
  8378. 24    AND    AL,imm8
  8379. 25    AND    AX,imm
  8380. 26    ES:    segment prefix
  8381. 27    DAA
  8382. 28    SUB    mem8,reg8
  8383. 29    SUB    mem,reg
  8384. 2A    SUB    reg8,mem8
  8385. 2B    SUB    reg,mem
  8386. 2C    SUB    AL,imm8
  8387. 2D    SUB    AX,imm
  8388. 2E    CS:    segment prefix
  8389. 2F    DAS
  8390.  
  8391. 30    XOR    mem8,reg8
  8392. 31    XOR    mem,reg
  8393. 32    XOR    reg8,mem8
  8394. 33    XOR    reg,mem
  8395. 34    XOR    AL,imm8
  8396. 35    XOR    AX,imm
  8397. 36    SS:    segment prefix
  8398. 37    AAA
  8399. 38    CMP    mem8,reg8
  8400. 39    CMP    mem,reg
  8401. 3A    CMP    reg8,mem8
  8402. 3B    CMP    reg,mem
  8403. 3C    CMP    AL,imm8
  8404. 3D    CMP    AX,imm
  8405. 3E    DS:    segment prefix
  8406. 3F    AAS
  8407.  
  8408. 40    INC    AX
  8409. 41    INC    CX
  8410. 42    INC    DX
  8411. 43    INC    BX
  8412. 44    INC    SP
  8413. 45    INC    BP
  8414. 46    INC    SI
  8415. 47    INC    DI
  8416. 48    DEC    AX
  8417. 49    DEC    CX
  8418. 4A    DEC    DX
  8419. 4B    DEC    BX
  8420. 4C    DEC    SP
  8421. 4D    DEC    BP
  8422. 4E    DEC    SI
  8423. 4F    DEC    DI
  8424.  
  8425.  
  8426. 50    PUSH    AX
  8427. 51    PUSH    CX
  8428. 52    PUSH    DX
  8429. 53    PUSH    BX
  8430. 54    PUSH    SP
  8431. 55    PUSH    BP
  8432. 56    PUSH    SI
  8433. 57    PUSH    DI
  8434. 58    POP    AX
  8435. 59    POP    CX
  8436. 5A    POP    DX
  8437. 5B    POP    BX
  8438. 5C    POP    SP
  8439. 5D    POP    BP
  8440. 5E    POP    SI
  8441. 5F    POP    DI
  8442.  
  8443. 60    PUSHA            ;NECs & 186+
  8444. 61    POPA            ;NECs & 186+
  8445. 62    BOUND    reg,mem        ;NECs & 186+
  8446. 63    ARPL    reg,mem        ;286+ PM
  8447. 64    FS:    segment prefix    ;386+
  8448. 65    GS:    segment prefix    ;386+
  8449. 66    Memory access size prefix    ;386+
  8450. 67    Operands size prefix        ;386+
  8451. 68    PUSH    imm        ;NECs & 186+
  8452. 69    IMUL    reg,imm,mem    ;NECs & 186+
  8453. 6A    PUSH    imm8        ;NECs & 186+
  8454. 6B    IMUL    reg,imm8,mem    ;NECs & 186+
  8455. 6C    INSB            ;186+
  8456. 6D    INS            ;186+
  8457. 6E    OUTSB            ;186+
  8458. 6F    OUTS            ;186+
  8459.  
  8460. 70    JO    rel8
  8461. 71    JNO    rel8
  8462. 72    JC    rel8
  8463. 73    JNC    rel8
  8464. 74    JZ    rel8
  8465. 75    JNZ    rel8
  8466. 76    JNA    rel8
  8467. 77    JA    rel8
  8468. 78    JS    rel8
  8469. 79    JNS    rel8
  8470. 7A    JP    rel8
  8471. 7B    JNP    rel8
  8472. 7C    JL    rel8
  8473. 7D    JNL    rel8
  8474. 7E    JNG    rel8
  8475. 7F    JG    rel8
  8476.  
  8477.  
  8478. 80    code extention [1]
  8479. 81    code extention [2]
  8480. 82    code extention [3]
  8481. 83    code extention [4]
  8482. 84    TEST    mem8,reg8
  8483. 85    TEST    mem,reg
  8484. 86    XCHG    mem8,reg8
  8485. 87    XCHG    mem,reg
  8486. 88    MOV    mem8,reg8
  8487. 89    MOV    mem,reg
  8488. 8A    MOV    reg8,mem8
  8489. 8B    MOV    reg,mem
  8490. 8C    code extention [5]
  8491. 8D    LEA    reg,mem
  8492. 8E    code extention [6]
  8493. 8F    code extention [7]
  8494.  
  8495. 90    NOP
  8496. 91    XCHG    AX,CX
  8497. 92    XCHG    AX,DX
  8498. 93    XCHG    AX,BX
  8499. 94    XCHG    AX,SP
  8500. 95    XCHG    AX,BP
  8501. 96    XCHG    AX,SI
  8502. 97    XCHG    AX,DI
  8503. 98    CBW
  8504. 66 98    CWDE        ;386+
  8505. 99    CWD
  8506. 66 99    CDQ        ;386+
  8507. 9A    CALL    FAR    seg:offs
  8508. 9B    WAIT
  8509. 9C    PUSHF
  8510. 66 9C    PUSHFD        ; 386+
  8511. 9D    POPF
  8512. 66 9D    POPFD        ; 386+
  8513. 9E    SAHF
  8514. 9F    LAHF
  8515.  
  8516. A0    MOV    AL,[imm]
  8517. A1    MOV    AX,[imm]
  8518. A2    MOV    [imm],AL
  8519. A3    MOV    [imm],ax
  8520. A4    MOVSB
  8521. A5    MOVS
  8522. A6    CMPSB
  8523. A7    CMPS
  8524. A8    TEST    AL,imm8
  8525. A9    TEST    AX,imm
  8526. AA    STOSB
  8527. AB    STOS
  8528. AC    LODSB
  8529. AD    LODS
  8530. AE    SCASB
  8531. AF    SCAS
  8532.  
  8533.  
  8534. B0    MOV    AL,imm8
  8535. B1    MOV    CL,imm8
  8536. B2    MOV    DL,imm8
  8537. B3    MOV    BL,imm8
  8538. B4    MOV    AH,imm8
  8539. B5    MOV    CH,imm8
  8540. B6    MOV    DH,imm8
  8541. B7    MOV    BH,imm8
  8542. B8    MOV    AX,imm
  8543. B9    MOV    CX,imm
  8544. BA    MOV    DX,imm
  8545. BB    MOV    BX,imm
  8546. BC    MOV    SP,imm
  8547. BD    MOV    BP,imm
  8548. BE    MOV    SI,imm
  8549. BF    MOV    DI,imm
  8550.  
  8551. C0    code extention [8]
  8552. C1    code extention [9]
  8553. C2    RET    NEAR    imm
  8554. C3    RET    NEAR
  8555. C4    LES    reg,mem
  8556. C5    LDS    reg,mem
  8557. C6    code extention [10]
  8558. C7    code extention [11]
  8559. C8    ENTER    imm,imm8    ;NECs & 186+
  8560. C9    LEAVE            ;NECs & 186+
  8561. CA    RET    FAR    imm
  8562. CB    RET    FAR
  8563. CC    INT    3
  8564. CD    INT    imm8
  8565. CE    INTO
  8566. CF    IRET
  8567.  
  8568. D0    code extention    [12]
  8569. D1    code extention    [13]
  8570. D2    code extention    [14]
  8571. D3    code extention    [15]
  8572. D4    AAM    imm8         ; Note: NECs w/o imm8 but D4 0A only
  8573. D5    AAD    imm8         ; Note: NECs w/o imm8 but D4 0A only
  8574. D6    SETALC             ;286+
  8575. D7    XLAT
  8576. D8-DF    ESC    imm6,mem     ; Note: Refer to future part
  8577.                  ; Cooprocessor commands.
  8578.  
  8579. E0    LOOPNZ    rel8
  8580. E1    LOOPZ    rel8
  8581. E2    LOOP    rel8
  8582. E3    JCXZ    rel8
  8583. 66 E3    JECXZ    rel8         ; 386+
  8584. E4    IN    AL,imm8
  8585. E5    IN    AX,imm8
  8586. E6    OUT    imm8,AL
  8587. E7    OUT    imm8,AX
  8588. E8    CALL    NEAR    rel16
  8589. E9    JMP    NEAR    rel16
  8590. EA    JMP    FAR    seg:offs
  8591. EB    JMP    SHORT    rel8
  8592. EC    IN    AL,DX
  8593. ED    IN    AX,DX
  8594. EE    OUT    DX,AL
  8595. EF    OUT    DX,AX
  8596.  
  8597. F0    LOCK    prefix
  8598. F1    SMI             ; AMD Am386/486DXLV
  8599. F2    REPNZ
  8600. F3    REP/REPZ
  8601. F4    HLT
  8602. F5    CMC
  8603. F6    code extention [16]
  8604. F7    code extention [17]
  8605. F8    CLC
  8606. F9    STC
  8607. FA    CLI
  8608. FB    STI
  8609. FC    CLD
  8610. FD    STD
  8611. FE    code extention [18]
  8612. FF    code extention [19]
  8613.  
  8614.  
  8615.  
  8616.  
  8617.  
  8618.  
  8619.  
  8620. [TABLE 01]:
  8621. Note: First Byte of Operation is 0Fh
  8622.  
  8623. 00    Extended Opcode 20                ; 286+
  8624. 01    Extended Opcode 21                ; 286+
  8625. 02    LAR    reg,mem                    ; 286+
  8626. 03    LSL    reg,mem                    ; 286+
  8627. 04    LOADALL         ; Alternative 286        ; 286 only
  8628. 05    LOADALL         ; 286                ; 286 only
  8629. 06    CLTS                        ; 286+
  8630. 07    LOADALL         ; i386,486            ; 386-486, Never Pentium
  8631.     RES3         ; AMD Am386zXLV
  8632.     RES4         ; AMD Am486DXLV
  8633.     ICERET         ; IBM 386SLC,486SLC,486SLC2
  8634. 08    INVD                        ; 486+
  8635. 09    WBINVD                        ; 486+
  8636. 0A    Reserved, INT 6
  8637. 0B    UD2        ; all, but documented on Pentium Pro only
  8638. 0C-0F    Reserved, INT 6
  8639. 10    UMOV    mem8,reg8 ; Really different op. space    ; 386-486,Never Pentium
  8640.               ; on AMD Amz86zXLV, never P6, Cx5x86+
  8641.     TEST1    mem8,CL      ; NEC V20+
  8642. 11    UMOV    mem,reg      ; see 0Fh,10h
  8643.     TEST1    mem,CL      ; NEC V20+
  8644. 12    UMOV    reg8,mem8 ; see 0Fh,10h
  8645.     CLEAR1    mem8,CL      ; NEC V20+
  8646. 13    UMOV    reg,mem      ; see 0Fh,10h
  8647.     CLEAR1    mem,CL      ; NEC V20+
  8648. 14    SET1    mem8,CL      ; NEC V20+
  8649. 15    SET1    mem,CL      ; NEC V20+
  8650. 16    NOT1    mem8,CL      ; NEC V20+
  8651. 17    NOT1    mem,CL      ; NEC V20+
  8652. 18    TEST1    mem8,imm8 ; NEC V20+
  8653. 19    TEST1    mem,imm8  ; NEC V20+
  8654. 1A    CLEAR1    mem8,imm8 ; NEC V20+
  8655. 1B    CLEAR1    mem,imm8  ; NEC V20+
  8656. 1C    SET1    mem8,imm8 ; NEC V20+
  8657. 1D    SET1    mem,imm8  ; NEC V20+
  8658. 1E    NOT1    mem8,imm8 ; NEC V20+
  8659. 1F    NOT1    mem,imm8  ; NEC V20+
  8660.  
  8661.  
  8662. 20    MOV    reg32,CRn ; 386+
  8663.     ADD4S          ; NEC V20+
  8664. 21    MOV    reg32,DRn ; 386+
  8665. 22    MOV    CRn,reg32 ; 386+
  8666.     SUB4S          ; NEC V20+
  8667. 23    MOV    DRn,reg32 ; 386+
  8668. 24    MOV    reg32,TRn ; 386-486 only (Pentium never have TRs)
  8669. 25
  8670. 26    MOV    TRn,reg32 ; 386-486 only
  8671.     CMPS4S          ; NEC V20+
  8672. 27    reserved opcode
  8673. 28    ROL4    mem8      ; NEC V20+
  8674. 29    reserved opcode
  8675. 2A    ROL4    mem8      ; NEC V20+
  8676. 2B-2F    reserved opcodes
  8677.  
  8678. 30    WRMSR          ; Pentium, IBM 386SLC,486SLC/SLC2
  8679. 31    RDTSC          ; Pentium
  8680.     INS    reg8,reg8 ; NEC V20+   ; Note: NECINS
  8681. 32    RDMSR          ; Pentium, IBM 386SLC,486SLC/SLC2
  8682. 33    EXT    reg8,reg8 ; NEC V20+
  8683.     RDMPC          ; P6
  8684.  
  8685. 40    CMOVO    reg,mem      ; P6
  8686. 41    CMOVNO    reg,mem      ; P6
  8687. 42    CMOVC    reg,mem      ; P6
  8688. 43    CMOVNC    reg,mem      ; P6
  8689. 44    CMOVZ    reg,mem      ; P6
  8690. 45    CMOVNZ    reg,mem      ; P6
  8691. 46    CMOVA    reg,mem      ; P6
  8692. 47    CMOVNA    reg,mem      ; P6
  8693. 48    CMOVS    reg,mem      ; P6
  8694. 49    CMOVNS    reg,mem      ; P6
  8695. 4A    CMOVP    reg,mem      ; P6
  8696. 4B    CMOVNP    reg,mem      ; P6
  8697. 4C    CMOVL    reg,mem      ; P6
  8698. 4D    CMOVNL    reg,mem      ; P6
  8699. 4E    CMOVNG    reg,mem      ; P6
  8700. 4F    CMOVG    reg,mem      ; P6
  8701.  
  8702.  
  8703. 60    PUNPCKLBW    mm,mm/m64    ; MMX
  8704. 61    PUNPCKLWD    mm,mm/m64    ; MMX
  8705. 62    PUNPCKLDQ    mm,mm/m64    ; MMX
  8706. 63    PACKSSWB    mm,mm/m64    ; MMX
  8707. 64    PCMPGTB        mm,mm/m64    ; MMX
  8708. 65    PCMPGTW        mm,mm/m64    ; MMX
  8709. 66    PCMPGTD        mm,mm/m64    ; MMX
  8710. 67    PACKUSWB    mm,mm/m64    ; MMX
  8711. 68    PUNPCKHBW    mm,mm/m64    ; MMX
  8712. 69    PUNPCKHWD    mm,mm/m64    ; MMX
  8713. 6A    PUNPCKHDQ    mm,mm/m64    ; MMX
  8714. 6B    PACKSSDW    mm,mm/m64    ; MMX
  8715. 6C
  8716. 6D
  8717. 6E    MOVD        mm,r/m32    ; MMX
  8718. 6F    MOVD        mm,mm/m64    ; MMX
  8719.  
  8720. 70
  8721. 71    code extention [24]        ; MMX
  8722. 72    code extention [25]        ; MMX
  8723. 73    code extention [26]        ; MMX
  8724. 74    PCMPEQB        mm,mm/m64    ; MMX
  8725. 75    PCMPEQW        mm,mm/m64    ; MMX
  8726. 76    PCMPEQD        mm,mm/m64    ; MMX
  8727. 77    EMMS                ; MMX
  8728. 78    SVDC    mem,sreg  ; Cyrix M5+
  8729. 79    RSDC    sreg,mem  ; Cyrix M5+
  8730. 7A    SVLDT    mem      ; Cyrix M5+
  8731. 7B    RSLDT    mem      ; Cyrix M5+
  8732. 7C    SVTS    mem      ; Cyrix M5+
  8733. 7D    RSTS    mem      ; Cyrix M5+
  8734. 7E    SMINT          ; Cyrix M6+
  8735. 7E    MOVD    r/m32,mm        ; MMX
  8736. 7F    MOVD    mm/m64,mm        ; MMX
  8737.  
  8738.  
  8739. 80    JO    rel16    ; 386+
  8740. 81    JNO    rel16    ; 386+
  8741. 82    JC    rel16    ; 386+
  8742. 83    JNC    rel16    ; 386+
  8743. 84    JZ    rel16    ; 386+
  8744. 85    JNZ    rel16    ; 386+
  8745. 86    JNA    rel16    ; 386+
  8746. 87    JA    rel16    ; 386+
  8747. 88    JS    rel16    ; 386+
  8748. 89    JNS    rel16    ; 386+
  8749. 8A    JP    rel16    ; 386+
  8750. 8B    JNP    rel16    ; 386+
  8751. 8C    JL    rel16    ; 386+
  8752. 8D    JNL    rel16    ; 386+
  8753. 8E    JNG    rel16    ; 386+
  8754. 8F    JG    rel16    ; 386+
  8755.  
  8756. 90    SETO    mem8    ; 386+
  8757. 91    SETNO    mem8    ; 386+
  8758. 92    SETC    mem8    ; 386+
  8759. 93    SETNC    mem8    ; 386+
  8760. 94    SETZ    mem8    ; 386+
  8761. 95    SETNZ    mem8    ; 386+
  8762. 96    SETNA    mem8    ; 386+
  8763. 97    SETA    mem8    ; 386+
  8764. 98    SETS    mem8    ; 386+
  8765. 99    SETNS    mem8    ; 386+
  8766. 9A    SETP    mem8    ; 386+
  8767. 9B    SETNP    mem8    ; 386+
  8768. 9C    SETL    mem8    ; 386+
  8769. 9D    SETNL    mem8    ; 386+
  8770. 9E    SETNG    mem8    ; 386+
  8771. 9F    SETG    mem8    ; 386+
  8772.  
  8773. A0    PUSH    FS    ; 386+
  8774. A1    POP    FS    ; 386+
  8775. A2    CPUID        ; 486 SL enhanced,Pentium,UMC,i386CX,P6,M1,K5
  8776. A3    BT    mem,reg ; 386+
  8777. A4    SHLD    mem,reg,imm    ;386+
  8778. A5    SHLD    mem,reg,CL    ;386+
  8779. A6    XBTS    reg,mem,AX,CL    ; Intel (!!!) 80386 steps A0-B0
  8780.     CMPXCHG mem8,reg8    ; Intel (!!!) 80486 steps A0-B0
  8781. A7    IBTS    mem,AX,CL,reg    ; Intel (!!!) 80386 steps A0-B0
  8782.     CMPXCHG mem,reg        ; Intel (!!!) 80486 steps A0-B0
  8783. A8    PUSH    GS    ; 386+
  8784. A9    POP    GS    ; 386+
  8785. AA    RSM        ; i486 SL Enhanced, i386CX, Pentium etc
  8786. AB    BTS    mem,reg ; 386+
  8787. AC    SHRD    mem,reg,imm    ;386+
  8788. AD    SHRD    mem,reg,CL    ;386+
  8789. AE
  8790. AF    IMUL    reg,mem ; 386+
  8791.  
  8792. B0    CMPXCHG mem8,reg8    ; 486+ (Intel B1+ step only)
  8793. B0    CMPXCHG mem,reg        ; 486+ (Intel B1+ step only)
  8794. B2    LSS    reg,mem        ; 386+
  8795. B3    BTR    mem,reg        ; 386+
  8796. B4    LFS    reg,mem        ; 386+
  8797. B5    LGS    reg,mem        ; 386+
  8798. B6    MOVZX    reg,mem8    ; 386+
  8799. B7    MOVZX    reg32,mem    ; 386+
  8800. B8
  8801. B9
  8802. BA    code extention [22]
  8803. BB    BTC    mem,reg        ; 386+
  8804. BC    BSF    reg,mem        ; 386+
  8805. BD    BSR    reg,mem        ; 386+
  8806. BE    MOVSX    reg,mem8    ; 386+
  8807. BF    MOVSX    reg32,mem    ; 386+
  8808.  
  8809. C0    XADD    mem8,reg8    ; 486+
  8810. C1    XADD    mem,reg        ; 486+
  8811. C2-C6    reserved opcodes
  8812. C7    code extention [23]
  8813. C8    BSWAP    EAX        ; 486+
  8814. C9    BSWAP    ECX        ; 486+
  8815. CA    BSWAP    EDX        ; 486+
  8816. CB    BSWAP    EBX        ; 486+
  8817. CC    BSWAP    ESP        ; 486+
  8818. CD    BSWAP    EBP        ; 486+
  8819. CE    BSWAP    ESI        ; 486+
  8820. CF    BSWAP    EDI        ; 486+
  8821.  
  8822. D1    PSRLW    mm,mm/m64    ; MMX
  8823. D2    PSRLD    mm,mm/m64    ; MMX
  8824. D3    PSRLQ    mm,mm/m64    ; MMX
  8825. D4
  8826. D5    PMULLW    mm,mm/m64    ; MMX
  8827.  
  8828. ......
  8829. E1    PSRAW    mm,mm/m64    ; MMX
  8830. E2    PSRAD    mm,mm/m64    ; MMX
  8831. E5    PMULHW    mm,mm/m64    ; MMX
  8832. .....
  8833.  
  8834.  
  8835. F1    PSLLW      mm,mm/m64    ; MMX
  8836. F2    PSLLD      mm,mm/m64    ; MMX
  8837. F3    PSLLQ      mm,mm/m64    ; MMX
  8838. F5    PMULADDWD mm,mm/m64    ; MMX
  8839. .....
  8840.  
  8841. D0-FE    reserved opcodes
  8842. FF    UD            ; AMD Am5k86+  and all other CPUs
  8843. FF    OIO            ; Cyrix Cx6x86+ and all other CPUs
  8844. FF    BRKEM    imm8        ; NEC V20+
  8845.  
  8846.  
  8847. **************************************************
  8848. CODE EXTENTIONS:
  8849.  
  8850. First byte(s) look at TABLES#00,01
  8851. Next byte have format
  8852.      MMOOOMMM  :  MM is memory mode (see postbyte)
  8853.           OOO select operation in this extention code field
  8854.           MMM is memory field (see Postbyte)
  8855.  
  8856.  
  8857.  
  8858. Code Extention # 1
  8859. (First byte(s) = 80h)
  8860. Field
  8861. OOO    Operation
  8862. 000    ADD    mem8,imm8
  8863. 001    OR    mem8,imm8
  8864. 010    ADC    mem8,imm8
  8865. 011    SBB    mem8,imm8
  8866. 100    AND    mem8,imm8
  8867. 101    SUB    mem8,imm8
  8868. 110    XOR    mem8,imm8
  8869. 111    CMP    mem8,imm8
  8870.  
  8871.  
  8872.  
  8873. Code Extention # 2
  8874. (First byte(s) = 81h)
  8875. Field
  8876. OOO    Operation
  8877. 000    ADD    mem,imm
  8878. 001    OR    mem,imm
  8879. 010    ADC    mem,imm
  8880. 011    SBB    mem,imm
  8881. 100    AND    mem,imm
  8882. 101    SUB    mem,imm
  8883. 110    XOR    mem,imm
  8884. 111    CMP    mem,imm
  8885.  
  8886. Code Extention # 3
  8887. (First byte(s) = 82h)
  8888. Note: i486 Reserved opcode, Never INT6 but do nothing
  8889. Field
  8890. OOO    Operation
  8891. 000    ADD    mem8,simm8
  8892. 001
  8893. 010    ADC    mem8,simm8
  8894. 011    SBB    mem8,simm8
  8895. 100
  8896. 101    SUB    mem8,simm8
  8897. 110
  8898. 111    CMP    mem8,simm8
  8899.  
  8900.  
  8901. Code Extention # 4
  8902. (First byte(s) = 83h)
  8903. Field
  8904. OOO    Operation
  8905. 000    ADD    mem,simm8
  8906. 001    OR    mem,simm8    ; 386+
  8907. 010    ADC    mem,simm8
  8908. 011    SBB    mem,simm8
  8909. 100    AND    mem,simm8    ; 386+
  8910. 101    SUB    mem,simm8
  8911. 110    XOR    mem,simm8    ; 388+
  8912. 111    CMP    mem,simm8
  8913.  
  8914.  
  8915. Code Extention # 5
  8916. (First byte(s) = 8Ch)
  8917. Field
  8918. OOO    Operation
  8919. 000    MOV    mem,ES
  8920. 001    MOV    mem,CS
  8921. 010    MOV    mem,SS
  8922. 011    MOV    mem,DS
  8923. 100    MOV    mem,FS    ; 386+
  8924. 101    MOV    mem,GS    ; 386+
  8925. 110
  8926. 111
  8927.  
  8928.  
  8929. Code Extention # 6
  8930. (First byte(s) = 8Eh)
  8931. Field
  8932. OOO    Operation
  8933. 000    MOV    ES,mem
  8934. 001    MOV    CS,mem    ; Non CMOS version of 8086/8088 only
  8935. 010    MOV    SS,mem
  8936. 011    MOV    DS,mem
  8937. 100    MOV    FS,mem    ; 386+
  8938. 101    MOV    GS,mem    ; 386+
  8939. 110
  8940. 111
  8941.  
  8942. Code Extention # 7
  8943. (First byte(s) = 8Fh)
  8944. Note: i486 can eat any OOO.
  8945. Field
  8946. OOO    Operation
  8947. 000    POP    mem
  8948. 001
  8949. 010
  8950. 011
  8951. 100
  8952. 101
  8953. 110
  8954. 111
  8955.  
  8956. Code Extention # 8
  8957. (First byte(s) = C0h)
  8958. Field
  8959. OOO    Operation
  8960. 000    ROL    mem8,imm8 ; 186+
  8961. 001    ROR    mem8,imm8 ; 186+
  8962. 010    RCL    mem8,imm8 ; 186+
  8963. 011    RCR    mem8,imm8 ; 186+
  8964. 100    SHL    mem8,imm8 ; 186+
  8965. 101    SHR    mem8,imm8 ; 186+
  8966. 110    SAL    mem8,imm8 ; 186+
  8967. 111    SAR    mem8,imm8 ; 186+
  8968.  
  8969. Code Extention # 9
  8970. (First byte(s) = C1h)
  8971. Field
  8972. OOO    Operation
  8973. 000    ROL    mem,imm8 ; 186+
  8974. 001    ROR    mem,imm8 ; 186+
  8975. 010    RCL    mem,imm8 ; 186+
  8976. 011    RCR    mem,imm8 ; 186+
  8977. 100    SHL    mem,imm8 ; 186+
  8978. 101    SHR    mem,imm8 ; 186+
  8979. 110    SAL    mem,imm8 ; 186+
  8980. 111    SAR    mem,imm8 ; 186+
  8981.  
  8982. Code Extention # 10
  8983. (First byte(s) = C6h)
  8984. Note: i486 can eat any OOO field.
  8985. Field
  8986. OOO    Operation
  8987. 000    MOV    mem8,imm8
  8988. 001
  8989. 010
  8990. 011
  8991. 100
  8992. 101
  8993. 110
  8994. 111
  8995.  
  8996. Code Extention # 11
  8997. (First byte(s) = C7h)
  8998. Note: i486 can eat any OOO field
  8999. Field
  9000. OOO    Operation
  9001. 000    MOV    mem,imm16
  9002. 001
  9003. 010
  9004. 011
  9005. 100
  9006. 101
  9007. 110
  9008. 111
  9009.  
  9010.  
  9011.  
  9012. Code Extention # 12
  9013. (First byte(s) = D0h)
  9014. Field
  9015. OOO    Operation
  9016. 000    ROL    mem8,1
  9017. 001    ROR    mem8,1
  9018. 010    RCL    mem8,1
  9019. 011    RCR    mem8,1
  9020. 100    SHL    mem8,1
  9021. 101    SHR    mem8,1
  9022. 110    SAL    mem8,1
  9023. 111    SAR    mem8,1
  9024.  
  9025.  
  9026. Code Extention # 13
  9027. (First byte(s) = D1h)
  9028. Field
  9029. OOO    Operation
  9030. 000    ROL    mem,1
  9031. 001    ROR    mem,1
  9032. 010    RCL    mem,1
  9033. 011    RCR    mem,1
  9034. 100    SHL    mem,1
  9035. 101    SHR    mem,1
  9036. 110    SAL    mem,1
  9037. 111    SAR    mem,1
  9038.  
  9039.  
  9040. Code Extention # 14
  9041. (First byte(s) = D2h)
  9042. Field
  9043. OOO    Operation
  9044. 000    ROL    mem8,CL
  9045. 001    ROR    mem8,CL
  9046. 010    RCL    mem8,CL
  9047. 011    RCR    mem8,CL
  9048. 100    SHL    mem8,CL
  9049. 101    SHR    mem8,CL
  9050. 110    SAL    mem8,CL
  9051. 111    SAR    mem8,CL
  9052.  
  9053.  
  9054.  
  9055. Code Extention # 15
  9056. (First byte(s) = D3h)
  9057. Field
  9058. OOO    Operation
  9059. 000    ROL    mem,CL
  9060. 001    ROR    mem,CL
  9061. 010    RCL    mem,CL
  9062. 011    RCR    mem,CL
  9063. 100    SHL    mem,CL
  9064. 101    SHR    mem,CL
  9065. 110    SAL    mem,CL
  9066. 111    SAR    mem,CL
  9067.  
  9068. Code Extention # 16
  9069. (First byte(s) = F6h)
  9070. Field
  9071. OOO    Operation
  9072. 000    TEST    mem8,imm8
  9073. 001
  9074. 010    NOT    mem8
  9075. 011    NEG    mem8
  9076. 100    MUL    mem8
  9077. 101    IMUL    mem8
  9078. 110    DIV    mem8
  9079. 111    IDIV    mem8
  9080.  
  9081. Code Extention # 17
  9082. (First byte(s) = F7h)
  9083. Field
  9084. OOO    Operation
  9085. 000    TEST    mem,imm16
  9086. 001
  9087. 010    NOT    mem
  9088. 011    NEG    mem
  9089. 100    MUL    mem
  9090. 101    IMUL    mem
  9091. 110    DIV    mem
  9092. 111    IDIV    mem
  9093.  
  9094.  
  9095. Code Extention # 18
  9096. (First byte(s) = FEh)
  9097. Field
  9098. OOO    Operation
  9099. 000    INC    mem8
  9100. 001    DEC    mem8
  9101. 010
  9102. 011
  9103. 100
  9104. 101
  9105. 110
  9106. 111
  9107.  
  9108. Code Extention # 19
  9109. (First byte(s) = FFh)
  9110. Field
  9111. OOO    Operation
  9112. 000    INC    mem
  9113. 001    DEC    mem
  9114. 010    CALL    NEAR    mem
  9115. 011    CALL    FAR    mem
  9116. 100    JMP    NEAR    mem
  9117. 101    JMP    FAR    mem
  9118. 110    PUSH    mem
  9119. 111
  9120.  
  9121. Code Extention # 20
  9122. (First byte(s) = 0FH,00H)
  9123. Field
  9124. OOO    Operation
  9125. 000    SLDT    mem    ; 286+
  9126. 001    STR    mem    ; 286+
  9127. 010    LLDT    mem    ; 286+
  9128. 011    LTR    mem    ; 286+
  9129. 100    VERR    mem    ; 286+
  9130. 101    VERW    mem    ; 286+
  9131. 110
  9132. 111
  9133.  
  9134. Code Extention # 21
  9135. (First byte(s) = 0Fh,01h)
  9136. Field
  9137. OOO    Operation
  9138. 000    SGDT    mem    ; 286+
  9139. 001    SIDT    mem    ; 286+
  9140. 010    LGDT    mem    ; 286+
  9141. 011    LIDT    mem    ; 286+
  9142. 100    SMSW    mem    ; 286+
  9143. 101
  9144. 110    LMSW    mem    ; 286+
  9145. 111    INVLPG    mem    ; 486+
  9146.  
  9147.  
  9148. Code Extention # 22
  9149. (First byte(s) = 0Fh,BAh)
  9150. Field
  9151. OOO    Operation
  9152. 000
  9153. 001
  9154. 010
  9155. 011
  9156. 100    BT    mem,imm8 ; 386+
  9157. 101    BTS    mem,imm8 ; 386+
  9158. 110    BTR    mem,imm8 ; 386+
  9159. 111    BTC    mem,imm8 ; 386+
  9160.  
  9161. Code Extention # 23
  9162. (First byte(s) = 0Fh,C7h)
  9163. Field
  9164. OOO    Operation
  9165. 000
  9166. 001    CMPXCHG8B  mem    ; Pentium
  9167. 010
  9168. 011
  9169. 100
  9170. 101
  9171. 110
  9172. 111
  9173.  
  9174. ------------------------------------------------
  9175. APPENDIX  F1  FLOATING POINT OPCODES
  9176.  
  9177.  
  9178.  
  9179. ESC 0  (First byte = D8h)
  9180.     ==========================
  9181.     ESCAPE 000    MMRRRMMM
  9182.     ==========================
  9183.         Operation
  9184. RRR    If MM<>11    If MM=11
  9185. 000    FADD  mem32r    FADD    ST,ST(i)
  9186. 001    FMUL  mem32r    FMUL    ST,ST(i)
  9187. 010    FCOM  mem32r    FCOM    ST(i)
  9188. 011    FCOMP mem32r    FCOMP    ST(i)
  9189. 100    FSUB  mem32r    FSUB    ST,ST(i)
  9190. 101    FSUBR mem32r    FSUBR    ST,ST(i)
  9191. 110    FDIV  mem32r    FDIV    ST,ST(i)
  9192. 111    FDIVR mem32r    FDIVR    ST,ST(i)
  9193.  
  9194.  
  9195.  
  9196.  
  9197. ESC 1  (First byte = D9h)
  9198.     ==========================
  9199.     ESCAPE 001    MMRRRMMM
  9200.     ==========================
  9201.         Operation
  9202. RRR    If MM<>11    If MM=11
  9203. 000    FLD    mem32r    FLD    ST(i)
  9204. 001    empty        FXCH    ST(i)
  9205. 010    FST    mem32r    See Table marked ESC1-Extended codes
  9206. 011    FSTP   mem32r    FSTP    ST(i)
  9207. 100    FLDENV mem    See Table marked ESC1-Extended codes
  9208. 101    FLDCW  mem    See Table marked ESC1-Extended codes
  9209. 110    FSTENV mem    See Table marked ESC1-Extended codes
  9210. 111    FSTCW  mem    See Table marked ESC1-Extended codes
  9211.  
  9212.  
  9213. ESC1-Extended codes:
  9214.    \ RRR
  9215. MMM \    010    100    101    110    111
  9216. 000    FNOP    FCHS    FLD1    F2XM1    FPREM
  9217. 001        FABS    FLDL2T    FYL2X    FYL2XP1
  9218. 010            FLDL2E    FPTAN    FSQRT
  9219. 011            FLDPI    FPATAN    FSINCOS'
  9220. 100        FTST    FLDLG2    FXTRACT FRNDINT
  9221. 101        FXAM    FLDLN2    FPREM1    FSCALE
  9222. 110            FLDZ    FDECSTP FSIN'
  9223. 111                FINCSTP FCOS'
  9224.  
  9225.  
  9226. ' means 387+  (include 287XL/XLT, 187!!!)
  9227.  
  9228.  
  9229.  
  9230. ESC 2  (First byte = DAh)
  9231.     ==========================
  9232.     ESCAPE 010    MMRRRMMM
  9233.     ==========================
  9234.         Operation
  9235. RRR    If MM<>11
  9236. 000    FIADD  mem32i
  9237. 001    FIMUL  mem32i
  9238. 010    FICOM  mem32i
  9239. 011    FICOMP mem32i
  9240. 100    FISUB  mem32i
  9241. 101    FISUBR mem32i
  9242. 110    FIDIV  mem32i
  9243. 111    FIDIVR mem32i
  9244.  
  9245. Note: P6
  9246. DA C0+i     FCMOVB     ST0,STi
  9247. DA C8+i     FCMOVE     ST0,STi
  9248. DA D0+i     FCMOVBE ST0,STi
  9249. DA D8+i     FCMOVU     ST0,STi
  9250.  
  9251.  
  9252. ESC 3  (First byte = DBh)
  9253.     ==========================
  9254.     ESCAPE 011    MMRRRMMM
  9255.     ==========================
  9256.         Operation
  9257. RRR    If MM<>11
  9258. 000    FILD   mem32i
  9259. 001
  9260. 010    FIST   mem32i
  9261. 011    FISTP  mem32i
  9262. 100
  9263. 101    FLD    mem80r
  9264. 110
  9265. 111    FSTP   mem80r
  9266.  
  9267. So,If MM=11 we have next command (first byte = DBh)
  9268. Mnemonic    Second byte of code
  9269. FNENI        E0H    (8087 only, others do nothing)
  9270. FNDISI        E1H    (8087 only, others do nothing)
  9271. FNCLEX        E2H
  9272. FNINIT        E3H
  9273. FSETPM        E4H    (287s only)
  9274. FRSTPM        E5H    (287XL/XLT only)
  9275. FSTB0        E8H    (IIT)
  9276. FSTB2        EAH    (IIT)
  9277. FSTB1        EBH    (IIT)
  9278. F4X4        F1H    (IIT)
  9279. FRINT2        FCH    (Cyrix)
  9280. FUCOMI     ST0,STi E8H+i     (P6)
  9281. FCMOVNB     ST0,STi C0H+i     (P6)
  9282. FCMOVNE     ST0,STi C8H+i     (P6)
  9283. FCMOVNBE ST0,STi D0H+i     (P6)
  9284. FCMOVNU     ST0,STi D8H+i     (P6)
  9285. FCOMPI     ST0,STi F0H+i     (P6)
  9286.  
  9287. ESC 4  (First byte = DCh)
  9288.     ==========================
  9289.     ESCAPE 100    MMRRRMMM
  9290.     ==========================
  9291.         Operation
  9292. RRR    If MM<>11    If MM=11
  9293. 000    FADD  mem64r    FADD    ST,ST(i)
  9294. 001    FMUL  mem64r    FMUL    ST,ST(i)
  9295. 010    FCOM  mem64r    FCOM    ST(i)
  9296. 011    FCOMP mem64r    FCOMP    ST(i)
  9297. 100    FSUB  mem64r    FSUB    ST,ST(i)
  9298. 101    FSUBR mem64r    FSUBR    ST,ST(i)
  9299. 110    FDIV  mem64r    FDIV    ST,ST(i)
  9300. 111    FDIVR mem64r    FDIVR    ST,ST(i)
  9301.  
  9302.  
  9303.  
  9304.  
  9305.  
  9306. ESC 5  (First byte = DDh)
  9307.     ==========================
  9308.     ESCAPE 101    MMRRRMMM
  9309.     ==========================
  9310.         Operation
  9311. RRR    If MM<>11    If MM=11
  9312. 000    FLD    mem64r    FFREE  ST(i)
  9313. 001            FXCH   ST(i)
  9314. 010    FST    mem64r    FST    ST(i)
  9315. 011    FSTP   mem64r    FSTP   ST(i)
  9316. 100    FNRSTOR mem
  9317. 101
  9318. 110    FNSAVE    mem    FUCOM  ST(i)
  9319. 111    FSTSW    mem    FUCOMP ST(i)
  9320.  
  9321.  
  9322. Note: FRICHOP have opcode (DDh FCh) (Cyrix)
  9323.  
  9324.  
  9325.  
  9326.  
  9327.  
  9328. ESC 6  (First byte = DEh)
  9329.     ==========================
  9330.     ESCAPE 110    MMRRRMMM
  9331.     ==========================
  9332.         Operation
  9333. RRR    If MM<>11    If MM=11
  9334. 000    FIADD  mem16i    FADDP    ST(i),ST
  9335. 001    FIMUL  mem16i    FMULP    ST(i),ST
  9336. 010    FICOM  mem16i    FCOMP    ST(i),ST
  9337. 011    FICOMP mem16i
  9338. 100    FISUB  mem16i    FSUBP    ST(i),ST
  9339. 101    FISUBR mem16i    FSUBRP    ST(i),ST
  9340. 110    FIDIV  mem16i    FDIVP    ST(i),ST
  9341. 111    FIDIVR mem16i    FDIVRP    ST(i),ST
  9342.  
  9343.  
  9344. Note: FCOMPP have opcode (DEh D9h) (Intel and all)
  9345.  
  9346.  
  9347. ESC 7  (First byte = DFh)
  9348.     ==========================
  9349.     ESCAPE 111    MMRRRMMM
  9350.     ==========================
  9351.         Operation
  9352. RRR    If MM<>11    If MM=11
  9353. 000    FILD   mem16i    FFREE  ST(i)
  9354. 001            FXCH   ST(i)
  9355. 010    FIST   mem16i    FST    ST(i)
  9356. 011    FISTP  mem16i    FSTP   ST(i)
  9357. 100    FBLD   mem80b
  9358. 101    FILD   mem64i
  9359. 110    FBSTP  mem80b
  9360. 111    FISTP  mem64i
  9361.  
  9362. Note: Next Instruction have opcodes:
  9363. Mnemonic    Opcode
  9364. FNSTSW    AX    DFh E0h      (287+)
  9365. FNSTDW    AX    DFh E1h      (387SL Mobile)
  9366. FSTSG    AX    DFh E2h      (387SL Mobile)
  9367. FRINEAR        DFh FCh      (Cyrix)
  9368. FUCOMIP ST0,STi DFH E8H+i (P6)
  9369. FCOMIP    ST0,STi DFH F0H+i (P6)
  9370.  
  9371.  
  9372.  
  9373.  
  9374. ------------------------------------------
  9375. APPENDIX G
  9376.  
  9377. BUGS & CPU IDENTIFICATION INFO
  9378.  
  9379. 1) How to separate i386SX and i386DX
  9380.    (Cx486SLC and Cx486DLC)
  9381.    Note:  With 386DX type CPU possible to used
  9382.       287 class NPX, and bit 4 in CR0
  9383.       ET - Extention Type on DX we may to
  9384.       clear to 0, but for SX and REAL 486
  9385.       this bit always 1.
  9386.    Routine:
  9387.     mov    eax,cr0
  9388.     push    eax
  9389.     and    al,0efh
  9390.     mov    cr0,eax
  9391.     mov    eax,cr0
  9392.     test    al,10h
  9393.     pop    eax
  9394.     mov    cr0,eax
  9395.     jne    SX/SLC
  9396.     jmp    DX/DLC
  9397.  
  9398.  
  9399.  
  9400. 2) How to separate i486SX and i487SX/i486DX/DX2 etc
  9401.     Routine:
  9402. memory_location DW    ?
  9403.     mov    memory_location,0
  9404.     fninit
  9405.     fstcw    memory_location
  9406.     cmp    memory_location,037Fh
  9407.     jz    i486SX
  9408.     jmp    i486DX/DX2etc/i487SX
  9409.  
  9410.  
  9411. 3) How to separate Cyrix's CPUs and other
  9412.        Be sure that Your CPU no Pentium before
  9413.        UMOV executed on Intel and other in
  9414.        Non SM modes as MOV.
  9415.        But Cyrix executed this instruction as
  9416.        Double NOP, and never generate INT 6.
  9417.        So.
  9418. Mem_Loc DW  1
  9419.     xor    ax,ax
  9420.     umov    ax,Mem_Loc
  9421.     or    ax,ax
  9422.     jz    Cyrix
  9423.     jmp    No_Cyrix
  9424.  
  9425.  
  9426. 4) Standart Way: Part 1
  9427.    (Intel recomended this way)
  9428.  
  9429.     pushf
  9430.     pop    ax
  9431.     and    ax,0fffh    ; Clear bits 15..12
  9432.     push    ax
  9433.     popf
  9434.     and    ax,0f000h    ; Is bits 15..12=0 ?
  9435.     jz    286_CPU
  9436.     and    ax,8000h    ; Is bit 15=0
  9437.     jz    386_and_Higher
  9438.     jmp    86_88and186_186etc
  9439.  
  9440.  
  9441. 5) How separate 86/88, 186/188 and NECs
  9442.  
  9443.     mov    ax,1
  9444.     mov    cl,33
  9445.     shl    ax,cl
  9446.     jnz    186_188
  9447.     pusha        ; Executed on 8086/8088 as JMP $+2
  9448.     stc
  9449.     jc    NECs
  9450.     jmp    86_88
  9451.  
  9452.  
  9453. 6) Non CMOS 8086/88 execute command MOV CS,xxxx (Opcode 8Eh ...)
  9454.    CMOS 80C86/88 ignore it.
  9455.  
  9456. 7) Then Invalid Opcode NEC/Sony V40/V50 do INT 6
  9457.                NEC/Sony V20/V30 don't.
  9458.  
  9459. 8) Remember POP CS on 8086/8088.
  9460.  
  9461. 9) PUSH SP
  9462.    286 placed in stack new value of SP
  9463.    86/88 old.
  9464.  
  9465. 10) Best way to Reset 286+ in Real Mode:
  9466.     xor      sp,sp
  9467.     push  smth
  9468.  
  9469. 11) Maximal Length of Instructian
  9470.     86: N/R
  9471.     286:  10 byte
  9472.     386+: 15 byte
  9473.  
  9474. ------------------------------------------------
  9475. APPENDIX H
  9476. Internal Names Of Processors
  9477.  
  9478. (Intel)
  9479. P9    i386SX
  9480. P4    i486DX
  9481. P4S    i486SX
  9482. P23S    i487SX
  9483. P23T    OverDrive for PGA(169)
  9484. P4T    OverDrive for PGA(168)
  9485. P24S    i486DX2
  9486. P24T    Pentium OverDrive for  i486DX2 socket 3 (Vcc=5V,core=3V).
  9487. P24CT    Pentium OverDrive for Socket 3 (Vcc=3V)
  9488. P5    Pentium-60,66
  9489. P5T    Overdrive for P5 socket (120/133 MHz).
  9490. P54C    Pentium-90,100,75 x1.5 usually with APIC and Multiprocessing features
  9491. P54CS    Pentium-120,133      x2   with reduced APIC and multipr. features
  9492. P55C    Bugfix P54C with IA MMX + optimized core
  9493. P54LM    Pentium P54C with 2.9V (for Notebooks)
  9494. P24C    IntelDX4
  9495. P24D    i486DX2 with WB cache (IntelDX2 (tm) WriteBack Enhanced)
  9496. P54M    Overdrive ( include to P54C but P54C work too)
  9497. P6    Pentium Pro  (no comments)
  9498. P6T    Pentium Pro OverDrive (for extended Pentium Sockets)
  9499. P7    "Merced"
  9500. P54CSQ    3xCLK Pentiums P120 etc.
  9501. P54CSLM P54CS with Low Power.
  9502. P6L    "Klamath" (w/o L2 build-in cache, with IA MMX)
  9503. ???    "Deschutes"  300MHz P6
  9504.  
  9505. (Cyrix)
  9506. M5    Cx486S/S2
  9507. M6    Cx486D/D2
  9508. C6    Cx487D
  9509. M7    Cx486DX/Cx486DX2
  9510. M8    Cx486DX4
  9511. M1    Cx6x86
  9512. M1SC    Cx5x86
  9513. M1R    Future M1 with reduced due size.
  9514. M2    IA MMX compatible, (Pentium Socket???)
  9515. M3
  9516.  
  9517.  
  9518. (AMD)
  9519. SSA/5    Am5k86 early series (K5 with big due size and with reduced some
  9520.     features, 'cos don't work).
  9521. K5    AM5k86
  9522. K6    NexGen Nx6x86 with P55C bus interface and IA MMX support
  9523.  
  9524.  
  9525. -------------------------------------------------
  9526. APPENDIX  I       FORMAT  OF DR6  REGISTER
  9527.  
  9528.     [Am386xx/i386xx/i486xx/Am486xx]
  9529.     3322222222221111 1 1 1 111
  9530.     1098765432109876 5 4 3 210987654 3 2 1 0
  9531.     ----------------------------------------
  9532.     0000000000000000 B B B 000000000 B B B B
  9533.              T S D         3 2 1 0
  9534.     ----------------------------------------
  9535.  
  9536.  
  9537.     [Intel Pentium]
  9538.     3322222222221111 1 1 1 111
  9539.     1098765432109876 5 4 3 210987654 3 2 1 0
  9540.     ----------------------------------------
  9541.     1111111111111111 B B B 111111111 B B B B
  9542.              T S D         3 2 1 0
  9543.     ----------------------------------------
  9544.  
  9545.  
  9546.  
  9547.     [Cyrix Cx486DX,TI 486SXLC, TI 486SLC/e]
  9548.     3322222222221111 1 1 1 111
  9549.     1098765432109876 5 4 3 210987654 3 2 1 0
  9550.     ----------------------------------------
  9551.     1111111111111111 B B 0 011111111 B B B B
  9552.              T S         3 2 1 0
  9553.     ----------------------------------------
  9554.  
  9555.  
  9556.     [TI 486SXL/Cx486SLC]
  9557.     3322222222221111 1 1 1 111
  9558.     1098765432109876 5 4 3 210987654 3 2 1 0
  9559.     ----------------------------------------
  9560.     1111111111111111 B B 1 011111111 B B B B
  9561.              T S         3 2 1 0
  9562.     ----------------------------------------
  9563.  
  9564.  
  9565.  
  9566.     [IBM 486SLC2]
  9567.     3322222222221111 1 1 1 1 11
  9568.     1098765432109876 5 4 3 2 10987654 3 2 1 0
  9569.     -----------------------------------------
  9570.     0000000000000000 B B B B 00000000 B B B B
  9571.              T S D K      3 2 1 0
  9572.     ----------------------------------------
  9573.  
  9574.  
  9575.  
  9576.     [AMD Am486SXLV/Am386DXLV/Am386SXLV]
  9577.     3322222222221111 1 1 1 1 11
  9578.     1098765432109876 5 4 3 2 10987654 3 2 1 0
  9579.     -----------------------------------------
  9580.     0000000000000000 B B B S 00000000 B B B B
  9581.              T S D M      3 2 1 0
  9582.                    M
  9583.                    S
  9584.     ----------------------------------------
  9585.  
  9586.  
  9587.  
  9588.     [Cyrix Cx6x86]
  9589.     3322222222221111 1 1 1 1 11
  9590.     1098765432109876 5 4 3 2 10987654 3 2 1 0
  9591.     -----------------------------------------
  9592.     0000000000000000 B B 0 0 11111111 B B B B
  9593.              T S          3 2 1 0
  9594.     ----------------------------------------
  9595.  
  9596.  
  9597.  BT  -
  9598.  BS  -
  9599.  BD  -
  9600.  BK  -
  9601. SMMS -
  9602.  Bi  -
  9603.  
  9604.  
  9605. -------------------------------------------------
  9606. APPENDIX  J        FORMAT  OF DR7  REGISTER
  9607.  
  9608.     Am386xx                Am486SXLV
  9609. CPU i386xx       TI486SXL        Am386DXLV  TI486SLC/e
  9610.     i486xx  P5    M7 Cx486SLC IBM486SLC2    Am386SXLV  TI486SXLC  Am486XX Cx6x86
  9611. Bits
  9612. 0    L0        L0    L0   L0        L0    L0        L0        L0    L0
  9613. 1    G0        G0    G0   G0        G0    G0        G0        G0    G0
  9614. 2    L1        L1    L1   L1        L1    L1        L1        L1    L1
  9615. 3    G1        G1    G1   G1        G1    G1        G1        G1    G1
  9616. 4    L2        L2    L2   L2        L2    L2        L2        L2    L2
  9617. 5    G2        G2    G2   G2        G2    G2        G2        G2    G2
  9618. 6    L3        L3    L3   L3        L3    L3        L3        L3    L3
  9619. 7    G3        G3    G3   G3        G3    G3        G3        G3    G3
  9620. 8    LE        LE    LE   LE        LE    LE        LE        LE    LE
  9621. 9    GE        GE    GE   GE        GE    GE        GE        GE    GE
  9622. 10   0        1    1    0        0    0        1        0    1
  9623. 11   0        0    0    0        GM    0        0        0    0
  9624. 12   0        0    0    0        TP    SMIE        0        0    0
  9625. 13   GD        GD    GD   GD        GD    0        GD        0    GD
  9626. 14   0        0    0    0        TB    0        0        0    0
  9627. 15   0        0    0    0        TT    0        0        0    0
  9628. 16   R/W0   ----------------------------------------------------------->
  9629. 17   R/W0   ----------------------------------------------------------->
  9630. 18   LEN0
  9631. 19   LEN0        same as column 1
  9632. 20   R/W1
  9633. 21   R/W1
  9634. 22   LEN1
  9635. 23   LEN1
  9636. 24   R/W2
  9637. 25   R/W2         .....
  9638. 26   LEN2
  9639. 27   LEN2
  9640. 28   R/W3
  9641. 29   R/W3
  9642. 30   LEN3   ------------------------------------------------------------>
  9643. 31   LEN3   ------------------------------------------------------------>
  9644.  
  9645.  
  9646. -------------------------------------------------
  9647. APPENDIX  K         FORMAT  OF TR4  REGISTER
  9648.  
  9649.                 WB-Enh.         WB-Enh.        AMD Enhanced
  9650.                 IntelDX2   IntelDX4     IntelDX4        CPU when    Cyrix
  9651. CPU i486xx  M7    TI486SXC/e  (WB mode)  (WT mode) (WB mode) TI486SXL EXT=0  EXT=1 CX6x86
  9652. Bits
  9653. 0   ---       ---       0          VL    ---      VL        0          --   --     MRU
  9654. 1   ---       ---       0          VH    ---      VH        0          --   --     MRU
  9655. 2   ---       ---       0          ---    ---      ---       VALID_BLK  --   --     MRU
  9656. 3  VALID VALID     VALID          ---    VALID      ---       VALID    VALID VALID     MRU
  9657. 4  VALID VALID     VALID          ---    VALID      ---       VALID    VALID VALID     MESIL
  9658. 5  VALID VALID     VALID          ---    VALID      ---       VALID    VALID VALID     MESIL
  9659. 6  VALID VALID     VALID          ---    VALID      ---       VALID    VALID VALID     MESIU
  9660. 7   LRU      LRU      LRU          LRU    LRU      LRU       LRU         LRU   LRU     MESIU
  9661. 8   LRU      LRU      ---          LRU    LRU      LRU       ---         LRU   LRU     ---
  9662. 9   LRU      LRU      TAG          LRU    LRU      LRU       ---         LRU   LRU     ---
  9663. 10   V       V      TAG          ---     V      ---       ---          V       V     ---
  9664. 11  TAG      TAG      TAG          TAG    ---      ---       ---          0       --     ---
  9665. 12  TAG      TAG      TAG          TAG    TAG      TAG       ---         TAG   --     TAG
  9666. 13  TAG      TAG      TAG          TAG    TAG      TAG       TAG         TAG   --     TAG
  9667. 14  TAG      TAG      TAG          TAG    TAG      TAG       TAG         TAG   --     TAG
  9668. 15  TAG      TAG      TAG          TAG    TAG      TAG       TAG         TAG   --     TAG
  9669. 16  TAG      TAG      TAG          TAG    TAG      TAG       TAG         TAG   --     TAG
  9670. 17  TAG      TAG      TAG          TAG    TAG      TAG       TAG         TAG   --     TAG
  9671. 18  TAG      TAG      TAG          TAG    TAG      TAG       TAG         TAG   --     TAG
  9672. 19  TAG      TAG      TAG          TAG    TAG      TAG       TAG         TAG   --     TAG
  9673. 20  TAG      TAG      TAG          TAG    TAG      TAG       TAG         TAG   ST0     TAG
  9674. 21  TAG      TAG      TAG          TAG    TAG      TAG       TAG         TAG   ST0     TAG
  9675. 22  TAG      TAG      TAG          TAG    TAG      TAG       TAG         TAG   ST1     TAG
  9676. 23  TAG      TAG      TAG          TAG    TAG      TAG       TAG         TAG   ST1     TAG
  9677. 24  TAG      TAG      TAG          TAG    TAG      TAG       TAG         TAG   ST2     TAG
  9678. 25  TAG      TAG      TAG          TAG    TAG      TAG       TAG         TAG   ST2     TAG
  9679. 26  TAG      TAG      TAG          TAG    TAG      TAG       TAG         TAG   ST3     TAG
  9680. 27  TAG      TAG      TAG          TAG    TAG      TAG       TAG         TAG   ST3     TAG
  9681. 28  TAG      TAG      TAG          TAG    TAG      TAG       TAG         TAG   --     TAG
  9682. 29  TAG      TAG      TAG          TAG    TAG      TAG       TAG         TAG   STn     TAG
  9683. 30  TAG      TAG      TAG          TAG    TAG      TAG       TAG         TAG   STn     TAG
  9684. 31  TAG      TAG      TAG          TAG    TAG      TAG       TAG         TAG   --     TAG
  9685.  
  9686. -------------------------------------------------
  9687. APPENDIX  L        FORMAT  OF TR5  REGISTER
  9688.  
  9689.                 WB-Enh.         WB-Enh.        AMD Enhanced
  9690.     Am486xx            IntelDX2   IntelDX4     IntelDX4        CPU when
  9691. CPU i486xx  M7    TI486SXC/e  (WB mode)  (WT mode) (WB mode) TI486SXL  WT      WB Cx6x86
  9692. Bits
  9693. 0   CTL       CTL      CTL         CTL    CTL        CTL         CTL    CTL     CTL  CTL
  9694. 1   CTL       CTL      CTL         CTL    CTL        CTL         CTL    CTL     CTL  CTL
  9695. 2   ENT       ENT      ENT         ENT    ENT        ENT         ENT    ENT     ENT  ENT
  9696. 3   ENT       ENT      ---         ENT    ENT        ENT         ENT    ENT     ENT  ENT
  9697. 4   SET       SET      SET         SET    SET        SET         SET    SET     SET  ENT
  9698. 5   SET       SET      SET         SET    SET        SET         SET    SET     SET  SET
  9699. 6   SET       SET      SET         SET    SET        SET         SET    SET     SET  SET
  9700. 7   SET       SET      SET         SET    SET        SET         SET    SET     SET  SET
  9701. 8   SET       SET      SET         SET    SET        SET         SET    SET     SET  SET
  9702. 9   SET       SET      SET         SET    SET        SET         SET    SET     SET  SET
  9703. 10  SET       SET      SET         SET    SET        SET         SET    SET     SET  SET
  9704. 11  ---       ---      SET         ---    SET        SET         SET    SET     SET  SET
  9705. 12  ---       ---      ---         ---    ---        ---         WAY   (SET)(SET) WAY
  9706. 13  ---       ---      ---         SLF    ---        SLF         ---    ---     ---  WAY
  9707. 14  ---       ---      ---         ---    ---        ---         ---    ---     ---  ---
  9708. 15  ---       ---      ---         ---    ---        ---         ---    ---     ---  ---
  9709. 16  ---       ---      ---         ---    ---        ---         ---    ---     ---  ---
  9710. 17  ---       ---      ---         ---    ---        ---         ---    ---     ST   ---
  9711. 18  ---       ---      ---         ---    ---        ---         ---    ---     ST   ---
  9712. 19  ---       ---      ---         ---    ---        ---         ---    ---     EXT  ---
  9713. 20  ---       ---      ---         ---    ---        ---         ---    ---     ---  ---
  9714. 21  ---       ---      ---         ---    ---        ---         ---    ---     ---  ---
  9715. 22  ---       ---      ---         ---    ---        ---         ---    ---     ---  ---
  9716. 23  ---       ---      ---         ---    ---        ---         ---    ---     ---  ---
  9717. 24  ---       ---      ---         ---    ---        ---         ---    ---     ---  ---
  9718. 25  ---       ---      ---         ---    ---        ---         ---    ---     ---  ---
  9719. 26  ---       ---      ---         ---    ---        ---         ---    ---     ---  ---
  9720. 27  ---       ---      ---         ---    ---        ---         ---    ---     ---  ---
  9721. 28  ---       ---      ---         ---    ---        ---         ---    ---     ---  ---
  9722. 29  ---       ---      ---         ---    ---        ---         ---    ---     ---  ---
  9723. 30  ---       ---      ---         ---    ---        ---         ---    ---     ---  ---
  9724. 31  ---       ---      ---         ---    ---        ---         ---    ---     ---  ---
  9725.  
  9726.  
  9727. -----------------------------------------
  9728. APPENDIX M    VME  -  Virtual Mode Extention
  9729.  
  9730. Support by: Intel SL Enhanced 486 CPUs, Pentium.
  9731. Address Generation: like in VM.
  9732. Differences with VM:
  9733. 1) CLI/STI never interrupt to PM, but change status
  9734. of VIF, if enable.
  9735. 2) INT xxh instruction, which mark in virtual interrupt table,
  9736. which contained in TSS as virtual, never change CPU to PM,
  9737. but processing in VM like INTs in RM.
  9738.  
  9739. Note: See also EFLAG and CR4 registers format.
  9740. Note: Check CPUID for support VME.
  9741.  
  9742. More Info:
  9743. More Info about it is Intel Secret.
  9744. Contact Your Local Intel Office.
  9745.  
  9746. Refer to http://www.amd.com
  9747.      AMD 5k86 Processor Software Development Guide pp.12-24
  9748.      for VME description
  9749.  
  9750.  
  9751. ----------------------------------------------------
  9752. APPENDIX   N  EFLAGS register format
  9753.  
  9754.     [Pentium P5] [Pentium P54C] [IntelDX4] [Am5k86]
  9755.     3322222222 2 2 1 1 1 1 1 1 11 1 1
  9756.     1098765432 1 0 9 8 7 6 5 4 32 1 0 9 8 7 6 5 4 3 2 1 0
  9757.     -----------------------------------------------------
  9758.            I V V A V R     N IO O D I T S Z   A    P   C
  9759.     0000000000 D I I C M F 0 T PL F F F F F F 0 F 0 F 1 F
  9760.              P F
  9761.     -----------------------------------------------------
  9762.  
  9763.  
  9764.  
  9765.  
  9766.     [i486 SL Enhanced SX,DX,DX2] [IntelSX2] [Cx5x86]
  9767.     [UMC] [Cx6x86]
  9768.     3322222222 2 2 1 1 1 1 1 1 11 1 1
  9769.     1098765432 1 0 9 8 7 6 5 4 32 1 0 9 8 7 6 5 4 3 2 1 0
  9770.     -----------------------------------------------------
  9771.            I     A V R     N IO O D I T S Z   A    P   C
  9772.     0000000000 D 0 0 C M F 0 T PL F F F F F F 0 F 0 F 1 F
  9773.     -----------------------------------------------------
  9774.  
  9775.  
  9776.  
  9777.  
  9778.     [i486 SX,DX,DX2] [OverDrive] [M5,M6,M7] [AMD Am486DX/DXL/DX2/DXL2 ] etc
  9779.     [IBM BL486DX/DX2] [Cx486SLC/DLC/SLC2/DLC2]
  9780.     3322222222 2 2 1 1 1 1 1 1 11 1 1
  9781.     1098765432 1 0 9 8 7 6 5 4 32 1 0 9 8 7 6 5 4 3 2 1 0
  9782.     -----------------------------------------------------
  9783.              A V R     N IO O D I T S Z   A    P   C
  9784.     0000000000 0 0 0 C M F 0 T PL F F F F F F 0 F 0 F 1 F
  9785.     -----------------------------------------------------
  9786.  
  9787.  
  9788.  
  9789.     [i386 SX,DX,CX,EX]  [AMD Am386 ] [C&T 38600 ] etc
  9790.     [IBM 486SLC2]
  9791.     3322222222 2 2 1 1 1 1 1 1 11 1 1
  9792.     1098765432 1 0 9 8 7 6 5 4 32 1 0 9 8 7 6 5 4 3 2 1 0
  9793.     -----------------------------------------------------
  9794.                V R     N IO O D I T S Z   A    P   C
  9795.     0000000000 0 0 0 0 M F 0 T PL F F F F F F 0 F 0 F 1 F
  9796.     -----------------------------------------------------
  9797.  
  9798.  
  9799.  
  9800.  
  9801.     [i376]
  9802.     3322222222 2 2 1 1 1 1 1 1 11 1 1
  9803.     1098765432 1 0 9 8 7 6 5 4 32 1 0 9 8 7 6 5 4 3 2 1 0
  9804.     -----------------------------------------------------
  9805.                  R     N IO O D I T S Z   A    P   C
  9806.     0000000000 0 0 0 0 0 F 0 T PL F F F F F F 0 F 0 F 1 F
  9807.     -----------------------------------------------------
  9808.  
  9809.  
  9810.  
  9811.  
  9812.     [i286 and all clones]
  9813.     1 1 11 1 1
  9814.     5 4 32 1 0 9 8 7 6 5 4 3 2 1 0
  9815.     ------------------------------
  9816.       N IO O D I T S Z   A     P   C
  9817.     0 T PL F F F F F F 0 F 0 F 1 F
  9818.     ------------------------------
  9819.  
  9820.  
  9821.  
  9822.     [NEC/Sony V20/V30]
  9823.     1 1 1 1 1 1
  9824.     5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  9825.     -------------------------------
  9826.     M    O D I T S Z   A      P   C
  9827.     D 1 1 1 F F F F F F 0 F 0 F 1 F
  9828.     -------------------------------
  9829.  
  9830.  
  9831.  
  9832.     [80x186 ,EA,EB,EC,XL]  [8086/88 and all clones]
  9833.     1 1 1 1 1 1
  9834.     5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  9835.     -------------------------------
  9836.         O D I T S Z   A      P   C
  9837.     1 1 1 1 F F F F F F 0 F 0 F 1 F
  9838.     -------------------------------
  9839.  
  9840.  
  9841. Flags Summary:
  9842. ID   - Identification Flag
  9843. VIP  - Virtual Interrupt Pending
  9844. VIF  - Virtual Interrupt Flag
  9845. AC   - Align Check
  9846. VM   - Virtual 8086 Mode
  9847. RF   - Resume Flag
  9848. MD   - Mode Flag
  9849. NT   - Nested Task flag
  9850. IOPL - Input/Output Privelege Level
  9851. OF   - Overflow Flag
  9852. DF   - Direction Flag
  9853. IF   - Interrupt Flag
  9854. TF   - Trap Flag
  9855. SF   - Sign Flag
  9856. ZF   - Zero Flag
  9857. AF   - Auxiliary Carry Flag
  9858. PF   - Parity Flag
  9859. CF   - Carry Flag
  9860. ---------------------------------------------------
  9861. APPENDIX  O    CR0 register format
  9862.  
  9863.  
  9864.     [Pentium P5] [Pentium P54C] [Pentium Pro]
  9865.     3 3 2 2222222221 1 1 1 111111
  9866.     1 0 9 8765432109 8 7 6 5432109876 5 4 3 2 1 0
  9867.     ---------------------------------------------
  9868.     P C N         A   W          N   T E M P
  9869.     G D W 0000000000 M 0 P 0000000000 E 1 S M P E
  9870.     ---------------------------------------------
  9871.  
  9872.  
  9873.  
  9874.     [IntelDX4] [486DX/DX2, IntelDX4 ]
  9875.     3 3 2 2222222221 1 1 1 111111
  9876.     1 0 9 8765432109 8 7 6 5432109876 5 4 3 2 1 0
  9877.     ---------------------------------------------
  9878.     P C N         A   W              T      M P
  9879.     G D W 0000000000 M 0 P 0000000000 * 1 S 1 P E
  9880.     ---------------------------------------------
  9881.  
  9882.  
  9883.  
  9884.     [Cx486SLC]
  9885.     3 3 2 2222222221 1 1 1 111111
  9886.     1 0 9 8765432109 8 7 6 5432109876 5 4 3 2 1 0
  9887.     ---------------------------------------------
  9888.     P C         A   W              T E M P
  9889.     G D 0 0000000000 M 0 P 0000000000 0 1 S M P E
  9890.     ---------------------------------------------
  9891.  
  9892.  
  9893.     [Cx486DLC]
  9894.     3 3 2 2222222221 1 1 1 111111
  9895.     1 0 9 8765432109 8 7 6 5432109876 5 4 3 2 1 0
  9896.     ---------------------------------------------
  9897.     P C N         A   W            E T E M P
  9898.     G D W 0000000000 M 0 P 0000000000 0 T S M P E
  9899.     ---------------------------------------------
  9900.  
  9901.  
  9902.     [Intel i486SX,SX2]
  9903.     3 3 2 2222222221 1 1 1 111111
  9904.     1 0 9 8765432109 8 7 6 5432109876 5 4 3 2 1 0
  9905.     ---------------------------------------------
  9906.     P C N         A   W              T E M P
  9907.     G D W 0000000000 M 0 P 0000000000 * 1 S M P E
  9908.     ---------------------------------------------
  9909.  
  9910.  
  9911.     [IBM 486SLC2]
  9912.     3 32222222222111 1 111111
  9913.     1 09876543210987 6 54321098765 4 3 2 1 0
  9914.     ---------------------------------------------
  9915.     P         W         T E M P
  9916.     G 00000000000000 P 0000000000  1 S M P E
  9917.     ---------------------------------------------
  9918.  
  9919.  
  9920.     [Intel i386SX]
  9921.     3 322222222221111111111
  9922.     1 09876543210987654321098765 4 3 2 1 0
  9923.     ---------------------------------------------
  9924.     P                   T E M P
  9925.     G 0000000000000000000000000  1 S M P E
  9926.     ---------------------------------------------
  9927.  
  9928.  
  9929.  
  9930.     [Intel i386DX]
  9931.     3 322222222221111111111
  9932.     1 09876543210987654321098765 4 3 2 1 0
  9933.     ---------------------------------------------
  9934.     P                 E T E M P
  9935.     G 0000000000000000000000000  T S M P E
  9936.     ---------------------------------------------
  9937.  
  9938.  
  9939.     [80286]
  9940.     Note: None CR0, but MSW
  9941.     111111
  9942.     543210987654 3 2 1 0
  9943.     ---------------------
  9944.              T E M P
  9945.     000000000000 S M P E
  9946.     ---------------------
  9947.  
  9948.  
  9949.  
  9950. PE - Protection Enable
  9951. MP - Monitor Processor
  9952. EM - Emulation
  9953. TS - Task Switch
  9954. ET - Extention Type
  9955. NE - Numeric Exception
  9956. WP - Write protect
  9957. AM - Align Mode
  9958. NW - No Write
  9959. CD - Cache Disable
  9960. PG - Paging
  9961. ---------------------------------------------------
  9962. APPENDIX  P   CR4 register format
  9963.  
  9964.     [Pentium Pro]
  9965.     3322222222221111111111
  9966.     10987654321098765432109 8 7 6 5 4 3 2 1 0
  9967.     -----------------------------------------
  9968.                 P P M P P D T P V
  9969.     00000000000000000000000 C G C A S E S V M
  9970.                 E E E E E   D I E
  9971.     ----------------------------------------
  9972.  
  9973.  
  9974.  
  9975.     [AMD Am5k86]
  9976.     3322222222221111111111
  9977.     109876543210987654321098 7 6 5 4 3 2 1 0
  9978.     ----------------------------------------
  9979.                  P M   P D T P V
  9980.     000000000000000000000000 G C 0 S E S V M
  9981.                  E E   E   D I E
  9982.     ----------------------------------------
  9983.  
  9984.  
  9985.     [Pentium P5] [Pentium P54C]
  9986.     3322222222221111111111
  9987.     1098765432109876543210987 6 5 4 3 2 1 0
  9988.     ---------------------------------------
  9989.                   M   P D T P V
  9990.     0000000000000000000000000 C 0 S E S V M
  9991.                   E   E      D I E
  9992.     ----------------------------------------
  9993.  
  9994.  
  9995.  
  9996.     [IntelDX4] [486s SL Enhanced]
  9997.     3322222222221111111111
  9998.     109876543210987654321098765432 1 0
  9999.     ----------------------------------
  10000.                        P V
  10001.     000000000000000000000000000000 V M
  10002.                        I E
  10003.     ----------------------------------
  10004.  
  10005. PCE - Perfomance Monitoring Counters Enabled
  10006. PGE - Page Global Extension
  10007. MCE - Machine Check Enable
  10008. PAE - Physical Address Extention
  10009. PSE - Page Size Extention
  10010. DE  - Debbuging Expection
  10011. TSD - Time Stamp Disable
  10012. PVI - Protected mode Virtual Interrupt
  10013. VME - Virtual Mode Exception
  10014.  
  10015.  
  10016.  
  10017. ------------------------------------------------------
  10018. APPENDIX Q     TYPE OF INTEL'S SOCKETS
  10019.  
  10020. Socket #  Pins    Vcc    CPU        OverDrive
  10021.  
  10022. 1      169    5V    i486SX        IntelSX2 ODP
  10023.             i486DX        IntelDX2 ODP
  10024.  
  10025. 2      238    5V    i486SX        IntelSX2 ODP
  10026.             i486DX        IntelDX2 ODP
  10027.             i486DX2        IntelDX4 ODP
  10028.                     Pentium     ODP (P24T)
  10029.  
  10030. 3      237    3/5V    i486SX        IntelSX2 ODP
  10031.             i486DX        IntelDX2 ODP
  10032.             i486DX2        IntelDX4 ODP
  10033.             i486SX2        Pentium     ODP (P24T)
  10034.             IntelDX4
  10035.  
  10036. 4      273    5V    Pentium (P5)    Pentium ODP (P5T)
  10037.  
  10038. 5      320    3V    Pentium (P54C)    Pentium ODP (P54T)
  10039.  
  10040. 6      235    3V    IntelDX4    Pentium ODP (P24T)
  10041.  
  10042. 7      321    3V    Pentium (P54C)    Pentium ODP (P54T)
  10043.             Pentium (P55C)
  10044.  
  10045. 8      387    12,5,3    Pentium Pro(P6) Pentium Pro ODP (P6T)
  10046.  
  10047.  
  10048. ------------------------------------------------------
  10049. APPENDIX R    UNDEFINED FLAGS
  10050.  
  10051.  
  10052. Hey, Guys!  Do You really think about set of 80x86 CPU cores and
  10053. "That's mean UNDEFINED FLAGS?".
  10054.  
  10055.    ---         Where black Wizardry trying to hide?    ----
  10056.  
  10057. So, we look some deeper and again comes to 2nd principle of Thaumaturgy:
  10058. "Once Together, Always Together".
  10059.  
  10060. 1) Do You Ask Yourself: "How many 80x86 base cores are?"
  10061.    Let's discuss about definitions:
  10062.      What's mean "base core"?
  10063.      "Base core" mean: same core clock for instructions, same undefined
  10064.      features e.t.c., and was produced many CPUs this type.
  10065.      (so, i486DX2 and i486DX have same core),
  10066.      (but i486DX2 and IntelDX4 have differ (cos MUL time +etc.).
  10067.      (i486SX integer core is look like i486DX core without NPX and all things
  10068.       joined with it).
  10069.  
  10070.     So we have next list of Main Base Cores:
  10071.     8086/8088        (186s skipped)
  10072.     286
  10073.     386            (have some differents on vendors)
  10074.     Cx486SLC/Cx486DX    (and all clones like TI486SXL)
  10075.     i486
  10076.     UMC U5S
  10077.     Cyrix Cx5x86 (M1sc)
  10078.     Pentium
  10079.     NexGen Nx5x86
  10080.     Cyrix Cx6x86 (M1)
  10081.     AMD Am5k86
  10082.     Pentium Pro
  10083.  
  10084.     Of course  one Main Base Core have many CPUs which have differents between
  10085.     self, for example: TI486SXL have Cx486DLC Base Core.
  10086.  
  10087.     This Base Cores is relative, of course.
  10088.     (We may discuss Where to push C&T 38600DX etc., but it doesn't matter)
  10089.  
  10090. 2) How many situation with Undefined Flags exists?
  10091.  
  10092.     Not too many, as You think:
  10093.         MUL
  10094.         DIV
  10095.         IMUL
  10096.         IDIV
  10097.         NEG    (ZF)
  10098.         AND/OR/XOR/etc (AF)
  10099.         Shift/Rotates (OF)
  10100.     and  some more.
  10101.  
  10102. 3) What's To Do?
  10103.  
  10104. Let's make next experiment:
  10105.  
  10106.     AH = 0
  10107.     AH -> FLG
  10108.     PERFORM TEST SEQUENCE
  10109.     FLG -> AH
  10110.     GET RESULT # 1
  10111.     AH = FF
  10112.     AH -> FLG
  10113.     PERFORM TEST SEQUENCE
  10114.     FLG -> AH
  10115.     GET RESULT # 2
  10116.     ANALYSING RESULTS. (WHICH BIT PASSED, WHICH DRIVEN BY INSTRUCTION
  10117.  
  10118. Main Test Sequences are:
  10119.  
  10120. MUL:    mov    ax,0000h
  10121.     mov    bx,1234h
  10122.     mul    bx
  10123.  
  10124. DIV:    mov    ax,1234h
  10125.     mov    bl,22h
  10126.     div    bl
  10127.  
  10128. IMUL:    mov    ax,0092h
  10129.     mov    bl,22h
  10130.     imul    bl
  10131.  
  10132. IDIV:    mov    ax,0ffeeh
  10133.     mov    bl,22h
  10134.     idiv    bl
  10135.  
  10136. LOG:    mov    ax,0ff00h
  10137.     mov    bx,0f0fh
  10138.     and    ax,bx
  10139.  
  10140.  
  10141. 4) Result:
  10142.  
  10143. Here placed summary of Undefined flag analysis on CPUs.
  10144.  
  10145. CPU        ------------- Sequence -------------
  10146. CORE        MUL    DIV    IMUL    IDIV    LOG        Note
  10147.  
  10148. 286         ALL     ALL     ALL     ALL     ALL        as 386,i486
  10149.         DRIVEN    DRIVEN    DRIVEN    DRIVEN    DRIVEN
  10150.  
  10151. 386         ALL     ALL     ALL     ALL     ALL        as 286,i486
  10152.         DRIVEN    DRIVEN    DRIVEN    DRIVEN    DRIVEN
  10153.  
  10154. i486         ALL     ALL     ALL     ALL     ALL        as 286,386
  10155.         DRIVEN    DRIVEN    DRIVEN    DRIVEN    DRIVEN
  10156.  
  10157. Cx486SLC    Z,S,P,A     ALL    Z,S,P,A     ALL     AF
  10158.         PASSED    PASSED    PASSED    PASSSED PASSED
  10159.  
  10160. UMC U5S        Z,S,P,A     ALL    Z,S,P,A     ALL     ALL
  10161.         PASSED    PASSED    PASSED    PASSED    DRIVEN
  10162.  
  10163. Cx5x86         P,A    C,O,P,A     P,A    C,O,P,A     ALL
  10164.         PASSED    PASSED    PASSED    PASSED    DRIVEN
  10165.  
  10166. Pentium        Z,S,P,A     ALL    Z,S,P,A     ALL     ALL        as Pentium Pro
  10167.         PASSED    DRIVEN    PASSED    DRIVEN    DRIVEN
  10168.  
  10169. Nx5x86        ????    ????    ????    ????    ????    Somebody who have
  10170.         ????    ????    ????    ????    ????   NexGen please contact Me.
  10171.  
  10172. Cx6x86         ALL     C,O     ALL     C,O     ALL
  10173.         DRIVEN    PASSED    DRIVEN    PASSED    DRIVEN
  10174.  
  10175. Am5k86        Z,S,P,A     C,O    Z,S,P,A     C,O     ALL
  10176.         PASSED    PASSED    PASSED    PASSED    DRIVEN
  10177.  
  10178. Pentium Pro    Z,S,P,A     ALL    Z,S,P,A     ALL     ALL        as Pentium
  10179.         PASSED    DRIVEN    PASSED    DRIVEN    DRIVEN
  10180.  
  10181.  
  10182. Really Interesting Story?
  10183. It' just an simple Episode of CPU Life.
  10184.  
  10185.  
  10186. Copyright (C) Potemkin's Hackers Group 1996.
  10187. Absolutely No Warranty On Chips beheiveour.
  10188. ---------------------------------------------------------
  10189. [Credits]:
  10190. 1) THANX specially for/to Martin Malik and RealSoft.
  10191.    (malik@elf.stuba.sk)
  10192.    Cyrix's CPUs type data.
  10193.    Some Vendors strings for CPUID.
  10194.    P54M ID code
  10195.    Part of This Kind of Info (C) RealSoft.
  10196. 2) THANX to all people from Intel, AMD, TI, Cyrix, UMC,
  10197.    who helped with information and CPU samples.
  10198. 3) ABSOLUTELY NO THANX for all, who hide information and
  10199.    CPU samplers.
  10200. ----------------------------------------------------------
  10201. [2 person]:
  10202. -> Craig Hart and Australian Hackers. Did You found IAL yet?
  10203. -> Raul Mate Galan (Spain): What's about cachemeter?
  10204. -> Martin Malik: What's they implemented in next CPUID EAX ?!!?
  10205.          (with AMD).!!!
  10206. -> Spock (South America), Live Long and Prosper!
  10207. -----------------------------------------------------------
  10208. Q&A:
  10209.  
  10210. Q. - How to find latest version of OPCODE.LST ?
  10211. A. - You may find it within  Ralf's INTERxx.ZIP.
  10212.  
  10213. Q. - Did PHG have WWW page, where placed OPCODE.LST ?
  10214. A. - Unfortunetly, No.
  10215. -----------------------------------------------------------
  10216. [2 All]
  10217. If You found some errors or incorrections in this text
  10218. please    send info 'bout it.
  10219. -----------------------------------------------------------
  10220. [Internal]
  10221. Thanx for  Urri, Stas, Afo, Kernel.3
  10222.        and all other numbers of
  10223.        Potemkin's Hackers Group.
  10224.        - - - - - - - - - - - - - -
  10225. Special Thanks for  AX (MISA).
  10226. ------------------------------------------------------------
  10227. Sorry, But EOF
  10228.