使用rax寄存器在汇编中进行乘法运算

时间:2018-02-15 02:40:54

标签: assembly x86-64


我想从函数调用生成汇编代码,如:(* 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是实用程序,它们已经过测试

0 个答案:

没有答案