-1

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

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

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

4

1 回答 1

6

您的源是 8 位 ( cl),因此仅执行乘法运算al

改为使用mul cx

Explanation: If ax = 100h, then al = 00h. Since the result of mul cl is placed in ax, what you do is basically to replace the content of ax with 00h*cl, which is 00h.

Opcode MUL

CPU: i8086+ Type of Instruction: User

Affected FLags: CF, OF, AF, PF, SF, ZF

Instruction: 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

于 2013-03-18T23:01:25.830 回答