16位MUL装配

时间:2013-03-18 22:58:51

标签: assembly x86 16-bit

在x86 16位程序集上,如果1中有ax0x10中有16cl),则以下代码不会将0x1000放入cl

mul cl  ; ax = 0x  10
mul cl  ; ax = 0x 100
mul cl  ; ax = 0x0000 (not 0x1000)

为什么这段代码没有按预期工作?

1 个答案:

答案 0 :(得分:6)

您的源是8位(cl),因此乘法仅在al上执行。

改为使用mul cx

<强>说明: 如果是ax = 100h,那么al = 00h。由于mul cl的结果放在ax中,您所做的基本上是将ax的内容替换为00h*cl 00h

  

操作码MUL

     

CPU:i8086 +指令类型:用户

     

受影响的FLags:CF,OF,AF,PF,SF,ZF

     

说明:MUL src

     

注意:源的累加器的无符号乘法。 如果“src”是   一个字节值,然后AL用作另一个被乘数和结果   放在AX中。如果“src”是一个字值,则AX乘以   “src”和DX:AX接收结果。如果“src”是双字值,   然后EAX乘以“src”和EDX:EAX接收结果。该   386+使用早期的algorythm,这使得任何大小的倍增   EAX中的值在8位或16位寄存器中快速。

     

++++++++++++++++++++++++++++++++++++++
  时钟(i486):MUL reg8 13-18 MUL reg16 13-26 MUL reg32 13-42 MUL mem8 13-18 MUL mem16 13-26 MUL   mem32 13-42