Assembly Language Help (alang.hlp) (
Table of Contents;
Topic list)
Important Notice
The pages on this site contain documentation for very old MS-DOS software,
purely for historical purposes.
If you're looking for up-to-date documentation, particularly for programming,
you should not rely on the information found here, as it will be woefully
out of date.
IMUL Instruction
◄Summary► ◄Key► ◄Example► ◄Up► ◄Contents► ◄Index► ◄Back►
────────────────────────────────────────────────────────────────────────────
1111011w mod,101,r/m disp (0, 1, or 2)
──────────────────────────┬────────────────┬────────────────────────────────
IMUL reg │imul dx │ 88/86 b=80-98,w=128-154
│ │ 286 b=13,w=21
│ │ 386 b=9-14,w=9-22,d=9-38*
│ │ 486 b=13-18,w=13-26,d=13-42
──────────────────────────┼────────────────┼────────────────────────────────
IMUL mem │imul factor │ 88/86 (b=86-104,w=134-160)+EA
│ │ 286 b=16,w=24
│ │ 386 b=12-17,w=12-25,d=12-41*
│ │ 486 b=13-18,w=13-26,d=13-42
──────────────────────────┴────────────────┴────────────────────────────────
* The 80386/486 has an early-out multiplication algorithm. Therefore,
multiplying an 8-bit or 16-bit value in EAX takes the same time as
multiplying the value in AL or AX.
Word memory operands on the 8088 take (138-164)+EA clocks.
011010s1 mod,reg,r/m disp (0, 1, or 2) data (1 or 2)
──────────────────────────┬────────────────┬────────────────────────────────
IMUL reg16,immed │imul cx,25 │ 88/86 ──
IMUL reg32,immed* │ │ 286 21
│ │ 386 b=9-14,w=9-22,d=9-38
│ │ 486 b=13-18,w=13-26,d=13-42
──────────────────────────┼────────────────┼────────────────────────────────
IMUL reg16,reg16,immed │imul dx,ax,18 │ 88/86 ──
IMUL reg32,reg32,immed* │ │ 286 21
│ │ 386 b=9-14,w=9-22,d=9-38
│ │ 486 b=13-18,w=13-26,d=13-42
──────────────────────────┼────────────────┼────────────────────────────────
IMUL reg16,mem16,immed │imul bx,[si],60│ 88/86 ──
IMUL reg32,mem32,immed* │ │ 286 24
│ │ 386 b=12-17,w=12-25,d=12-41
│ │ 486 b=13-18,w=13-26,d=13-42
──────────────────────────┴────────────────┴────────────────────────────────
* 80386/486 only.
The variations depend on the source constant size; destination
size is not a factor.
00001111 10101111 mod,reg,r/m disp (0, 1, or 2)
──────────────────────────┬────────────────┬────────────────────────────────
IMUL reg16,reg16 │imul cx,ax │ 88/86 ──
IMUL reg32,reg32* │ │ 286 ──
│ │ 386 w=9-22,d=9-38
│ │ 486 b=13-18,w=13-26,d=13-42
──────────────────────────┼────────────────┼────────────────────────────────
IMUL reg16,mem16 │imul dx,[si] │ 88/86 ──
IMUL reg32,mem32* │ │ 286 ──
│ │ 386 w=12-25,d=12-41
│ │ 486 b=13-18,w=13-26,d=13-42
──────────────────────────┴────────────────┴────────────────────────────────
* 80386/486 only.
The variations depend on the source constant size; destination
size is not a factor.
-♦-