MUL
 用途: 该指令完成两个无符号值的乘法运算。
   语法结构/举例
   mul regB|memB   mul bl
   mul regW|memW   mul [aword]
   仅80386有:
   mul regDW|memDW mul ebx
   示范代码
   DATASEG
   multiplicand dw 1024
   multiplier dw 32
   answer dw 0
   CODESEG
   mov ax,[multiplicand] ;将被乘数装入ax
   mul [multiplier]  ;dx:ax←ax*multiplier
   jc Exit  ;若结果超过16位则跳转
   mov [answer],ax  ;否则存储
   描述:8086程序使用无符号乘法指令要比使用带符号乘法指令(见imul)简单得多。mul指令只有一个操作数,该操作数可以是一个通用寄存器,也可以是一个存储器操作数,它们表示乘数。乘数的长度决定着被乘数及结果的存放。若乘数为一个字节,则被乘数为al,结果存放在ax寄存器中;若乘数为一个字,则被乘数为ax中,结果存放在dx:ax中(ax中存放结果的低位部分);若乘数为一个双字(仅80386有),则被乘数放在eax中,结果存放在edx:eax中(eax存放结果的低32位部分)。这样可以保证目的寄存器不可能发生溢出。
   mul指令运行之后,of和cf标志位可以用来决定结果的长度。若结果的长度超过了源操作数的长度,则这两个标志都将被置1,否则,这两个标志将被清零。这样,若mul bl语句运行之后cf=0,则ah为0,且8位结果存放在al中;若该语句运行之后cf=1,则说明结果占据了32的双字寄存器dx:ax。如范例中所示,用户可以在mul语句之后自行测试cf(或of)的值来检查结果是否大于源操作数的长度。
 -------------------------
 IMUL
 用途:完成两个带符号数的乘法操作。
   语法结构/举例
   imul regB|memB   imul [byte bx]
   imul regW|memW   imul cx
   仅80286、80386有:
   imul regW|immB   imul cx,9
   imul regW|immW   imul bx,451
   imul regW,regW|memW,immW   imul cx,[word bx],3
   imul regW,regW|memW,immW   imul ax,bx,300
   仅80386有:
   imul regDW|memDW   imul [dword bx]
   imul regDW,immB   imul ebx,10
   imul regDW,immDW   imul eax,32769
   imul regW,regW|memW   imul bx,cx
   imul regDW,regDW|memDW   imul ecx,[dword bx]
   imul regDW,regDW|memDW,immB imul eax,edx,12
   imul regDW,regDW|memDW,immDW imul eax,[dword bx],35790
   示范代码
   mov al,4  ;被乘数
   mov bl,-2 ;乘数
   imul bl  ;ax←al*bl
    ;(ax=0FFF8h,cf=of=0)
   mov al,127  ;被乘数
   mov bl,-128 ;乘数
   imul bl  ;ax←al*bl
    ;(ax=0C080h,cf-of=1)
   描述:根据所使用处理器的不同,imul指令有三种基本格式,所带操作数为1~3个。其中有些格式需要显式地指定寄存器。其最简单的格式就是通过al寄存器完成一个字节寄存器或变量的乘运算,并将结果存放在ax寄存器中;与之相似的另一种格式就是用ax完成对一个字寄存器或变量的乘法,并将结果放在dx:ax中(低字放在ax中);对于80386处理器,imul指令还可以通过eax完成对一个双字寄存器或变量的乘法,并将结果放在edx:eax中。对于上述三种格式,若imul指令执行之后cf和of都为0,则高字节(字或双字)部分只是其低字节(字或双字)部分的符号扩展。也就是说,如范例中的第一部分所示,4*-2将把ax设置成0FFF8h。因为cf和of都为0,因此,指令对al(0F8h)进行符号扩展形成16位的值。当cf和of都为1时(如范例中第二部分所示),结果将占用整个目的寄存器(范例中为ax,其值为二进制补码形式的0C080h,即十进制的-16,256,这是127*-128所得的结果)。
   80286和80386处理器在上述指令的基础上扩充出imul指令的带乘法操作数的格式。在双操作数格式中,第一个操作数中存放被乘数;第二个操作数中是一个立即数——乘数(一个字节或字)。在三操作数格式中,第一个操作数指定了存放结果的目的寄存器,第二个寄存器中为被乘数,第三个操作数为一个立即数——乘法(一个字节或字)。未来的80386处理器还可以将这种格式扩展成为各种双字寄存器操作数,存储器操作数和立即值的组合形式。对于这些扩充格式,若在imul执行之后cf和af都为0,则说明所指定的目的寄存器可以容纳得下产生的结果;否则,说明结果太大,该寄存器容纳不下。