## imul - 3 operand signed multiply

    dest = source1 * source2

The 3 operand imul instruction has a destination register as its first operand which will receive the product of the 2 source operands. The first source operand can be a register or a memory location and the second operand is required to be an immediate value. The product may be truncated.

            imul    r10, r12, 13    ; multiply r12 by 13 and store in r10
            imul    r8d, r10d, 12   ; multiply r10d by 12 and store in r8d
                                    ; top half of r8 will be 0
            imul    rdx, [x], 125   ; multiply 64 bit variable x by 125
                                    ; and store in rdx
            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.