Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A, Instruction Set Reference, A-M
3-448 Vol. 2
INSTRUCTION SET REFERENCE, A-M
IDIV—Signed Divide
Description
Divides the (signed) value in the AX, DX:AX, or EDX:EAX (dividend) by the source
operand (divisor) and stores the result in the AX (AH:AL), DX:AX, or EDX:EAX regis-
ters. The source operand can be a general-purpose register or a memory location.
The action of this instruction depends on the operand size (dividend/divisor).
Non-integral results are truncated (chopped) towards 0. The remainder is always less
than the divisor in magnitude. Overflow is indicated with the #DE (divide error)
exception rather than with the CF flag.
In 64-bit mode, the instruction’s default operation size is 32 bits. Use of the REX.R
prefix permits access to additional registers (R8-R15). Use of the REX.W prefix
promotes operation to 64 bits. In 64-bit mode when REX.W is applied, the instruction
divides the signed value in RDX:RAX by the source operand. RAX contains a 64-bit
quotient; RDX contains a 64-bit remainder.
See the summary chart at the beginning of this section for encoding data and limits.
See Table 3-55.
Opcode Instruction
64-Bit
Mode
Compat/
Leg Mode Description
F6 /7 IDIV r/m8 Valid Valid Signed divide AX by r/m8, with result
stored in: AL ← Quotient, AH ←
Remainder.
REX + F6 /7 IDIV r/m8* Valid N.E. Signed divide AX by r/m8, with result
stored in AL ← Quotient, AH ←
Remainder.
F7 /7 IDIV r/m16 Valid Valid Signed divide DX:AX by r/m16, with
result stored in AX ← Quotient, DX
← Remainder.
F7 /7 IDIV r/m32 Valid Valid Signed divide EDX:EAX by r/m32,
with result stored in EAX ←
Quotient, EDX ← Remainder.
REX.W + F7 /7 IDIV r/m64 Valid N.E. Signed divide RDX:RAX by r/m64,
with result stored in RAX ←
Quotient, RDX ← Remainder.
NOTES:
* In 64-bit mode, r/m8 can not be encoded to access the following byte registers if a REX prefix
is used: AH, BH, CH, DH.