网站数据没有更新,怎么做触屏版网站,贵州建设厅网站厅长,安防网站建设MUL 用途#xff1a; 该指令完成两个无符号值的乘法运算。 语法结构/举例 mul regB|memB mul bl mul regW|memW mul [aword] 仅80386有#xff1a; mul regDW|memDW mul ebx 示范代码 DATASEG multiplicand dw 1024 multiplier …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语句运行之后cf0则ah为0且8位结果存放在al中若该语句运行之后cf1则说明结果占据了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 ;(ax0FFF8h,cfof0) mov al,127 ;被乘数 mov bl,-128 ;乘数 imul bl ;ax←al*bl ;(ax0C080h,cf-of1) 描述:根据所使用处理器的不同imul指令有三种基本格式所带操作数为13个。其中有些格式需要显式地指定寄存器。其最简单的格式就是通过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则说明所指定的目的寄存器可以容纳得下产生的结果否则说明结果太大该寄存器容纳不下。