Opcode      Instruction            Clocks      Description
F6  /5      IMUL r/m8              9-14/12-17  AX= AL * r/m byte
F7  /5      IMUL r/m16             9-22/12-25  DX:AX := AX * r/m word
F7  /5      IMUL r/m32             9-38/12-41  EDX:EAX := EAX * r/m dword
0F  AF /r   IMUL r16,r/m16         9-22/12-25  word register := word
                                               register * r/m word
0F  AF /r   IMUL r32,r/m32         9-38/12-41  dword register := dword
                                               register * r/m dword
6B  /r ib   IMUL r16,r/m16,imm8    9-14/12-17  word register := r/m16 *
                                               sign-extended immediate byte
6B  /r ib   IMUL r32,r/m32,imm8    9-14/12-17  dword register := r/m32 *
                                               sign-extended immediate byte
6B  /r ib   IMUL r16,imm8          9-14/12-17  word register := word
                                               register * sign-extended
                                               immediate byte
6B  /r ib   IMUL r32,imm8          9-14/12-17  dword register := dword
                                               register * sign-extended
                                               immediate byte
69  /r iw   IMUL r16,r/m16,imm16   9-22/12-25  word register := r/m16 *
                                               immediate word
69  /r id   IMUL r32,r/m32,imm32   9-38/12-41  dword register := r/m32 *
                                               immediate dword
69  /r iw   IMUL r16,imm16         9-22/12-25  word register := r/m16 *
                                               immediate word
69  /r id   IMUL r32,imm32         9-38/12-41  dword register := r/m32 *
                                               immediate dword
  
  Actual clock = if m <> 0 then max(ceiling(log{2}(m)), 3) + 6 clocks  
  Actual clock = if m = 0 then 9 clocks   
  (where m is the multiplier)
Add three clocks if the multiplier is a memory operand.
result := multiplicand * multiplier;
IMUL clears the overflow and carry flags under the following conditions:
Instruction Form Condition for Clearing CF and OF r/m8 AL := sign-extend of AL to 16 bits r/m16 AX := sign-extend of AX to 32 bits r/m32 EDX:EAX := sign-extend of EAX to 32 bits r16,r/m16 Result exactly fits within r16 r/32,r/m32 Result exactly fits within r32 r16,r/m16,imm16 Result exactly fits within r16 r32,r/m32,imm32 Result exactly fits within r32
up: 
Chapter 17 -- 80386 Instruction Set
prev: IDIV Signed Divide
next: IN Input from Port