我已经阅读了一些教程和示例,但是无法理解MUL指令的工作原理。我使用了ADDSUB都没有问题。因此,显然该指令将其操作数乘以寄存器中的值。

第一个操作数乘以哪个寄存器(eax,ebp,esp等)?结果存储在哪个寄存器中,因此我可以将其移到堆栈中?抱歉,我正在学习x86汇编。

当我尝试编译此行时...

mul     9

我知道了Error: suffix or operands invalid for 'mul'。谁能帮我吗?
    global  main
    main:
    push    ebp
    movl    ebp, esp
    sub     esp, byte +8
    mov     eax, 7
    mul     9
    mov     [esp], eax
    call    _putchar
    xor     eax, eax
    leave
    ret

最佳答案

MUL不能使用立即数作为参数。您必须将“9”加载到寄存器中,例如,

 movl    $7, %eax
 movl    $9, %ecx
 mull    %ecx

它将eax乘以ecx并将64位乘积存储在edx:eax中。

英特尔网站上有关于x86汇编指令的很好的综合引用,请参见此处。

http://www.intel.com/Assets/PDF/manual/253666.pdf

http://www.intel.com/Assets/PDF/manual/253667.pdf

但这可能是您现在需要的更多信息。

关于assembly - MUL指令不支持立即值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4529260/

10-11 18:52