我已经阅读了一些教程和示例,但是无法理解MUL
指令的工作原理。我使用了ADD
和SUB
都没有问题。因此,显然该指令将其操作数乘以寄存器中的值。
第一个操作数乘以哪个寄存器(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/