2013-03-18 45 views
-1

在x86 16位汇编,如果出现在clax0x1016)一1,下面的代码并没有把0x1000cl16位MUL装配

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

为什么没有按”这个代码按预期工作吗?

回答

6

您的源代码是8位(cl),所以乘法仅在al之上执行。

改为使用mul cx

说明: 如果ax = 100h,然后al = 00h。由于mul cl的结果被放置在ax中,因此您所做的基本上是将ax的内容替换为00h*cl,即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接收结果。在8位或16位寄存器中,使用早期的算法可以使EAX中的任何大小的值都乘以EAX中的任意大小。

++++++++++++++++++++++
时钟(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

+0

将被发短信忙啥非常感谢你 – Milmar 2013-03-18 23:06:48

+1

@Milmar确定。小心ch的内容。最好是在开始时将'cx'设置为'10h',而不是将'cl'设置为'10h'。以防万一。 – Jean 2013-03-18 23:13:48

+0

这只是我想要的非常感谢你为这个 我推cx无论如何,这只是我不知道,使用CL将意味着它不会去我需要的价值 – Milmar 2013-03-19 00:22:15