![](/img/trans.png)
[英]Multiply two 16 bit numbers and store 32 bit answer in dx:ax without mul instruction in assembly 8086
[英]16 bit MUL assembly
在x86 16位汇编程序上,如果ax
在a中为1
,在cl
0x10
( 16
),则以下代码不会在cl
放入0x1000
:
mul cl ; ax = 0x 10
mul cl ; ax = 0x 100
mul cl ; ax = 0x0000 (not 0x1000)
为什么此代码无法按预期工作?
您的源是8位( cl
),因此乘法仅在al
上执行。
请改用mul cx
。
说明:如果ax = 100h
,则al = 00h
。 由于mul cl
的结果放在ax
,因此您要做的基本上是用00h*cl
替换ax
的内容,即00h
。
操作码MUL
CPU:i8086 +指令类型:用户
受影响的标志:CF,OF,AF,PF,SF,ZF
说明:MUL src
注意:累加器与源的无符号乘法。 如果“ src”是字节值,则将AL用作另一个被乘数,并将结果放在AX中。 如果“ src”是单词值,则将AX乘以“ src”,然后DX:AX接收结果。 如果“ src”是双字值,则将EAX乘以“ src”,然后EDX:EAX接收结果。 386+使用早期算法,可以使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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.