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