home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / pc / INTER53D.ZIP / OPCODES.LST < prev    next >
Encoding:
File List  |  1997-01-12  |  252.6 KB  |  10,740 lines

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