奇怪的汇编问题

发布于 2022-10-15 05:44:51 字数 792 浏览 20 评论 0

在一个.S文件中定义了一个函数int func(int a, int b),功能是返回(a + b)

  1. func:
  2.         //push %ecx
  3.         push %ebp
  4.         movl %esp, %ebp
  5.         subl $16, %esp
  6.        
  7.         movl 8(%ebp), %eax
  8.         addl 12(%ebp), %eax
  9.                
  10.         movl %ebp, %esp
  11.         pop %ebp
  12.         //pop %ecx
  13.         ret

复制代码如果用上代码,一切正常,如果将上述代码里面的push %ecx和pop %ecx用上,函数func的返回值就错了,不知为啥不能保存%ecx?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

孤凫 2022-10-22 05:44:51

因为你改变了正常的栈帧结构

        movl 8(%ebp), %eax
        addl 12(%ebp), %eax

这里的值要相应地加4

绝影如岚 2022-10-22 05:44:51

回复 2# qtdszws

    所言极是

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文