rdx:rax = rax * source edx:eax = eax * source dx:ax = ax * source al = al = rax * source
The imul 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.
imul r9 ; multiply rax by r9 imul dword 10 ; multiply eax by 10 imul dword [x] ; multiply eax by 32 bit variable x shl rax, 4 ; shift left 4 (quick multiply by 16)
OF and CF are set to 0 if the upper half of the product is 0 and 1 otherwise.