There's no immediate mul
, but there is non-widening imul
-immediate in 186 and newer, and imul reg, r/m
in 386 and newer. See @phuclv's answer on problem in understanding mul & imul instructions of Assembly language for more details, and of course Intel's instruction set reference manuals for mul and imul:
There's no memory-destination mul
or imul
even on the newest CPUs.
There is imul cx, [si], 5
if you want, though, on 186 and newer, for 16-bit operand-size and wider. And on 386, also imul di, [si]
.
But those new forms of imul don't exist for 8-bit operand-size, so there is no imul cl, [si], 5
.
On a 386 or newer, it would typically be more efficient to use an LEA for a multiply by a simple constant, although it does cost a bit more code-size.
; assuming 16-bit mode
mov cx, [si] ; or better movzx ecx, word [si] on newer CPUs
lea cx, [ecx + ecx*4] ; CX *= 5