zsmith.co

Mobile

Open source

Documentation

Contact:
1 at zsmith dot co


This HTML version of the file intel.doc from the PC Game Programmer's guide was produced by , veritasNOSPAM@comcast.net. Fancy HTML modifications are copyright © 2005 by , all rights reserved. This information is provided in the hope that it will be useful, but without any warranty; it is provided AS-IS, without even the implied warranty of fitness for a particular purpose.

M Instructions

MOV - Move Byte or Word
 
    Usage:  MOV     dest,src
    Modifies flags: None

    Copies byte or word from the source operand to the destination
    operand.  If the destination is SS interrupts are disabled except
    on early buggy 808x CPUs.  Some CPUs disable interrupts if the
    destination is any of the segment registers

                             Clocks                 Size
    Operands         808x  286   386   486          Bytes

    reg,reg           2     2     2     1             2
    mem,reg          9+EA   3     2     1            2-4  (W88=13+EA)
    reg,mem          8+EA   5     4     1            2-4  (W88=12+EA)
    mem,immed       10+EA   3     2     1            3-6  (W88=14+EA)
    reg,immed         4     2     2     1            2-3
    mem,accum         10    3     2     1             3   (W88=14)
    accum,mem         10    5     4     1             3   (W88=14)
    segreg,reg16      2     2     2     3             2
    segreg,mem16     8+EA   5     5     9            2-4  (W88=12+EA)
    reg16,segreg      2     2     2     3             2
    mem16,segreg     9+EA   3     2     3            2-4  (W88=13+EA)
    reg32,CR0/CR2/CR3 -     -     6     4
    CR0,reg32         -     -     10    16
    CR2,reg32         -     -     4     4             3
    CR3,reg32         -     -     5     4             3
    reg32,DR0/DR1/DR2/DR3   -     22   10             3
    reg32,DR6/DR7     -     -     22   10             3
    DR0/DR1/DR2/DR3,reg32   -     22   11             3
    DR6/DR7,reg32     -     -     16   11             3
    reg32,TR6/TR7     -     -     12    4             3
    TR6/TR7,reg32     -     -     12    4             3
    reg32,TR3                           3
    TR3,reg32                           6

    - when the 386 special registers are used all operands are 32 bits

MOVS - Move String (Byte or Word)
 
    Usage:  MOVS    dest,src
            MOVSB
            MOVSW
            MOVSD  (386+)
    Modifies flags: None

    Copies data from addressed by DS:SI (even if operands are given) to
    the location ES:DI destination and updates SI and DI based on the
    size of the operand or instruction used.  SI and DI are incremented
    when the Direction Flag is cleared and decremented when the Direction
    Flag is Set.  Use with REP prefixes.

                             Clocks                 Size
    Operands         808x  286   386   486          Bytes

    dest,src          18    5     7     7             1   (W88=26)

MOVSX - Move with Sign Extend (386+)
 
    Usage:  MOVSX   dest,src
    Modifies flags: None

    Copies the value of the source operand to the destination register
    with the sign extended.

                             Clocks                 Size
    Operands         808x  286   386   486          Bytes

    reg,reg           -     -     3     3             3
    reg,mem           -     -     6     3            3-7

MOVZX - Move with Zero Extend (386+)
 
    Usage:  MOVZX   dest,src
    Modifies flags: None

    Copies the value of the source operand to the destination register
    with the zeroes extended.

                             Clocks                 Size
    Operands         808x  286   386   486          Bytes

    reg,reg           -     -     3     3             3
    reg,mem           -     -     6     3            3-7

MUL - Unsigned Multiply
 
    Usage:  MUL     src
    Modifies flags: CF OF (AF,PF,SF,ZF undefined)

    Unsigned multiply of the accumulator by the source.  If "src" is
    a byte value, then AL is used as the other multiplicand and the
    result is placed in AX.  If "src" is a word value, then AX is
    multiplied by "src" and DX:AX receives the result.  If "src" is
    a double word value, then EAX is multiplied by "src" and EDX:EAX
    receives the result.  The 386+ uses an early out algorithm which
    makes multiplying any size value in EAX as fast as in the 8 or 16
    bit registers.

                             Clocks                 Size
    Operands         808x  286   386   486          Bytes

    reg8            70-77   13   9-14  13-18          2
    reg16          118-113  21   9-22  13-26          2
    reg32             -     -    9-38  13-42         2-4
    mem8        (76-83)+EA  16  12-17  13-18         2-4
    mem16     (124-139)+EA  24  12-25  13-26         2-4
    mem32             -     -   12-21  13-42         2-4