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