    Intel and compatable CPU's Programming Information Intel SSE MMX2 KNI documentation

AMD 64 Bit & Opteron resource on this site

Intel Itanium 64 Bit processor

CPU Heat Dissipation Table

Intel 80386 Reference Programmer's Manual

Our Partners: up: Chapter 17 -- 80386 Instruction Set
prev: MOVZX Move with Zero-Extend
next: NEG Two's Complement Negation

# MUL -- Unsigned Multiplication of AL or AX

```Opcode  Instruction     Clocks       Description

F6  /4  MUL AL,r/m8     9-14/12-17   Unsigned multiply (AX := AL * r/m byte)
F7  /4  MUL AX,r/m16    9-22/12-25   Unsigned multiply (DX:AX := AX * r/m
word)
F7  /4  MUL EAX,r/m32   9-38/12-41   Unsigned multiply (EDX:EAX := EAX * r/m
dword)
```

### Notes

The 80386 uses an early-out multiply algorithm. The actual number of clocks depends on the position of the most significant bit in the optimizing multiplier, shown underlined above. The optimization occurs for positive and negative multiplier values. Because of the early-out algorithm, clock counts given are minimum to maximum. To calculate the actual clocks, use the following formula:
```    Actual clock = if  <> 0 then max(ceiling(log{2}(m)), 3) + 6 clocks;

Actual clock = if  = 0 then 9 clocks
```
where m is the multiplier.

## Operation

```IF byte-size operation
THEN AX := AL * r/m8
ELSE (* word or doubleword operation *)
IF OperandSize = 16
THEN DX:AX := AX * r/m16
ELSE (* OperandSize = 32 *)
EDX:EAX := EAX * r/m32
FI;
FI;
```

## Description

MUL performs unsigned multiplication. Its actions depend on the size of its operand, as follows:
• A byte operand is multiplied by AL; the result is left in AX. The carry and overflow flags are set to 0 if AH is 0; otherwise, they are set to 1.
• A word operand is multiplied by AX; the result is left in DX:AX. DX contains the high-order 16 bits of the product. The carry and overflow flags are set to 0 if DX is 0; otherwise, they are set to 1.
• A doubleword operand is multiplied by EAX and the result is left in EDX:EAX. EDX contains the high-order 32 bits of the product. The carry and overflow flags are set to 0 if EDX is 0; otherwise, they are set to 1.

## Flags Affected

OF and CF as described above; SF, ZF, AF, PF, and CF are undefined

## Protected Mode Exceptions

#GP(0) for an illegal memory operand effective address in the CS, DS, ES, FS, or GS segments; #SS(0) for an illegal address in the SS segment; #PF(fault-code) for a page fault