mul - unsigned multiply

rdx:rax = rax * source
edx:eax = eax * source
dx:ax = ax * source
al = al = rax * source

The mul instruction for 64, 32 and 16 bit source operand sizes uses a pair of registers for the product. For 8 bit operands the product is stored in ax. For 64, 32 and 16 bit the single operand is one multiplier and the other is rdx, eax or ax. For 8 bit operands the second multiplier is al and the product is stored in ax. The single operand is one multiplier and can be either a register or a memory address.

        mul     r9              ; multiply rax by r9
        mul     dword 10        ; multiply eax by 10
        mul     dword [x]       ; multiply eax by 32 bit variable x
        shl     rax, 4          ; shift right 4 (quick multiply by 16)

flags: OF CF

OF and CF are set to 0 if the upper half of the product is 0 and 1 otherwise.