Assembly Language Help (alang.hlp) (Table of Contents; Topic list)
Important Notice
The pages on this site contain documentation for very old MS-DOS software, purely for historical purposes. If you're looking for up-to-date documentation, particularly for programming, you should not rely on the information found here, as it will be woefully out of date.
IMUL Instruction
 ◄Summary► ◄Key► ◄Example►                    ◄Up► ◄Contents► ◄Index► ◄Back►
────────────────────────────────────────────────────────────────────────────
 
 1111011w     mod,101,r/m      disp (0, 1, or 2)
──────────────────────────┬────────────────┬────────────────────────────────
 IMUL  reg                │imul  dx        │ 88/86 b=80-98,w=128-154
                          │                │   286 b=13,w=21
                          │                │   386 b=9-14,w=9-22,d=9-38*
                          │                │   486 b=13-18,w=13-26,d=13-42
──────────────────────────┼────────────────┼────────────────────────────────
 IMUL  mem                │imul  factor    │ 88/86 (b=86-104,w=134-160)+EA
                          │                │   286 b=16,w=24
                          │                │   386 b=12-17,w=12-25,d=12-41*
                          │                │   486 b=13-18,w=13-26,d=13-42
──────────────────────────┴────────────────┴────────────────────────────────
  * The 80386/486 has an early-out multiplication algorithm. Therefore,
    multiplying an 8-bit or 16-bit value in EAX takes the same time as
    multiplying the value in AL or AX.
 
    Word memory operands on the 8088 take (138-164)+EA clocks.
 
 011010s1     mod,reg,r/m      disp (0, 1, or 2)     data (1 or 2)
──────────────────────────┬────────────────┬────────────────────────────────
 IMUL  reg16,immed        │imul  cx,25     │ 88/86 ──
 IMUL  reg32,immed*       │                │   286 21
                          │                │   386 b=9-14,w=9-22,d=9-38
                          │                │   486 b=13-18,w=13-26,d=13-42
──────────────────────────┼────────────────┼────────────────────────────────
 IMUL  reg16,reg16,immed  │imul  dx,ax,18  │ 88/86 ──
 IMUL  reg32,reg32,immed* │                │   286 21
                          │                │   386 b=9-14,w=9-22,d=9-38
                          │                │   486 b=13-18,w=13-26,d=13-42
──────────────────────────┼────────────────┼────────────────────────────────
 IMUL  reg16,mem16,immed  │imul  bx,[si],60│ 88/86 ──
 IMUL  reg32,mem32,immed* │                │   286 24
                          │                │   386 b=12-17,w=12-25,d=12-41
                          │                │   486 b=13-18,w=13-26,d=13-42
──────────────────────────┴────────────────┴────────────────────────────────
  * 80386/486 only.
 
    The variations depend on the source constant size; destination
    size is not a factor.
 
 00001111     10101111         mod,reg,r/m       disp (0, 1, or 2)
──────────────────────────┬────────────────┬────────────────────────────────
 IMUL  reg16,reg16        │imul  cx,ax     │ 88/86 ──
 IMUL  reg32,reg32*       │                │   286 ──
                          │                │   386 w=9-22,d=9-38
                          │                │   486 b=13-18,w=13-26,d=13-42
──────────────────────────┼────────────────┼────────────────────────────────
 IMUL  reg16,mem16        │imul  dx,[si]   │ 88/86 ──
 IMUL  reg32,mem32*       │                │   286 ──
                          │                │   386 w=12-25,d=12-41
                          │                │   486 b=13-18,w=13-26,d=13-42
──────────────────────────┴────────────────┴────────────────────────────────
  * 80386/486 only.
 
    The variations depend on the source constant size; destination
    size is not a factor.
                                    -♦-