我想从函数调用生成汇编代码,如:(* 2 3)。
它适用于:(+ 7 3)这样的例子:
.text
.globl _main
.globl main
_main:
main:
push $7
push $3
pop %rax
add %rax,(%rsp)
call print_word_dec
push $10
call putchar
mov $0, %rax
当我想将它应用于乘法时:
.text
.globl _main
.globl main
_main:
main:
push $2
push $3
pop %rbx
imulq %rbx
call print_word_dec
push $10
call putchar
mov $0, %rax
ret
我总是得到相同的结果:2(第一个操作数)就像乘法没有工作一样。
我做了一些研究并且理解一个函数正在使用寄存器rax存储返回值。
所以在乘法示例中:它在rax寄存器中存储2和3,当我调用pop%rbx时,它将3移动到%rbx并且它将%rbx与%rax上的内容相乘,所以它应该是6点。
我想我误解了一些东西。
感谢您的帮助
PS:函数putchar和print_word_dec是实用程序,它们已经过测试