3-295
INSTRUCTION SET REFERENCE
IMULSigned Multiply
Description
This instruction performs a signed multiplication of two operands. This instruction has three
forms, depending on the number of operands.
One-operand form. This form is identical to that used by the MUL instruction. Here, the
source operand (in a general-purpose register or memory location) is multiplied by the
value in the AL, AX, or EAX register (depending on the operand size) and the product is
stored in the AX, DX:AX, or EDX:EAX registers, respectively.
Two-operand form. With this form the destination operand (the first operand) is
multiplied by the source operand (second operand). The destination operand is a general-
purpose register and the source operand is an immediate value, a general-purpose register,
or a memory location. The product is then stored in the destination operand location.
Three-operand form. This form requires a destination operand (the first operand) and two
source operands (the second and the third operands). Here, the first source operand (which
can be a general-purpose register or a memory location) is multiplied by the second source
operand (an immediate value). The product is then stored in the destination operand (a
general-purpose register).
When an immediate value is used as an operand, it is sign-extended to the length of the destina-
tion operand format.
OpcodeInstruction
Description
F6 /5IMUL r/m8
AX
<
AL
?
r/m byte
F7 /5IMUL r/m16
DX:AX
<
AX
?
r/m word
F7 /5IMUL r/m32
EDX:EAX
<
EAX
?
r/m doubleword
0F AF /rIMUL r16,r/m16
word register
<
word register
?
r/m word
0F AF /rIMUL r32,r/m32
doubleword register
<
doubleword register
?
r/m
doubleword
6B /r ibIMUL r16,r/m16,imm8word register
<
r/m16
?
sign-extended immediate byte
6B /r ibIMUL r32,r/m32,imm8doubleword register
<
r/m32
?
sign-extended immediate
byte
6B /r ibIMUL r16,imm8
word register
<
word register
?
sign-extended immediate
byte
6B /r ibIMUL r32,imm8
doubleword register
<
doubleword register
?
sign-
extended immediate byte
69 /r iwIMUL r16,r/
m16,imm16
word register
<
r/m16
?
immediate word
69 /r idIMUL r32,r/
m32,imm32
doubleword register
<
r/m32
?
immediate doubleword
69 /r iwIMUL r16,imm16
word register
<
r/m16
?
immediate word
69 /r idIMUL r32,imm32
doubleword register
<
r/m32
?
immediate doubleword