3-216
INSTRUCTION SET REFERENCE
FMUL/FMULP/FIMULMultiply
Description
These instructions multiply the destination and source operands and stores the product in the
destination location. The destination operand is always an FPU data register; the source operand
can be an FPU data register or a memory location. Source operands in memory can be in single-
real, double-real, word-integer, or short-integer formats.
The no-operand version of the instruction multiplies the contents of the ST(1) register by the
contents of the ST(0) register and stores the product in the ST(1) register. The one-operand
version multiplies the contents of the ST(0) register by the contents of a memory location (either
a real or an integer value) and stores the product in the ST(0) register. The two-operand version,
multiplies the contents of the ST(0) register by the contents of the ST(i) register, or vice versa,
with the result being stored in the register specified with the first operand (the destination
operand).
The FMULP instructions perform the additional operation of popping the FPU register stack
after storing the product. To pop the register stack, the processor marks the ST(0) register as
empty and increments the stack pointer (TOP) by 1. The no-operand version of the floating-
point multiply instructions always results in the register stack being popped. In some assem-
blers, the mnemonic for this instruction is FMUL rather than FMULP.
The FIMUL instructions convert an integer source operand to extended-real format before
performing the multiplication.
The sign of the result is always the exclusive-OR of the source signs, even if one or more of the
values being multiplied is 0 or
?
. When the source operand is an integer 0, it is treated as a +0.
The following table shows the results obtained when multiplying various classes of numbers,
assuming that neither overflow nor underflow occurs.
Opcode
Instruction
Description
D8 /1
FMUL m32real
Multiply ST(0) by m32real and store result in ST(0)
DC /1
FMUL m64real
Multiply ST(0) by m64real and store result in ST(0)
D8 C8+i
FMUL ST(0), ST(i)Multiply ST(0) by ST(i) and store result in ST(0)
DC C8+i
FMUL ST(i), ST(0)Multiply ST(i) by ST(0) and store result in ST(i)
DE C8+i
FMULP ST(i), ST(0)Multiply ST(i) by ST(0), store result in ST(i), and pop the
register stack
DE C9
FMULP
Multiply ST(1) by ST(0), store result in ST(1), and pop the
register stack
DA /1
FIMUL m32int
Multiply ST(0) by m32int and store result in ST(0)
DE /1
FIMUL m16int
Multiply ST(0) by m16int and store result in ST(0)