You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

x86-64汇编中函数调用如何返回值?以foo函数为例解析

x86-64下函数返回值%rax寄存器的原理说明

补全foo的汇编定义

按照x86-64的System V调用约定,foo函数的汇编实现如下:

foo:
    movq %rdi, %rax   ; 将第一个参数x(存在%rdi)移入%rax寄存器
    addq %rsi, %rax   ; 把第二个参数y(存在%rsi)加到%rax,结果存于%rax
    ret               ; 返回到调用者,此时%rax中就是x+y的结果

%rax的使用说明

在foo的汇编代码里,%rax是核心的结果存储寄存器:

  • 第一步将第一个参数从%rdi拷贝到%rax,作为加法的初始值;
  • 第二步执行加法操作,把%rsi里的第二个参数加到%rax中,最终的求和结果直接保存在%rax里;
  • 执行ret指令返回时,%rax里的值会被保留,供调用者读取。

返回值传递机制解释

x86-64平台遵循System V AMD64调用约定,这个约定明确了整数、指针类型的函数返回值必须通过%rax寄存器传递:

  1. 被调用函数(比如这里的foo)完成计算后,必须把最终结果写入%rax寄存器;
  2. 当ret指令执行,程序控制权回到调用者后,调用者无需额外内存读取操作,直接读取%rax寄存器就能拿到函数返回值;
  3. 这是平台统一的规范,编译器、手写汇编都遵循这个规则,确保调用者和被调用者之间能正确传递返回值,避免交互错误。

内容的提问来源于stack exchange,提问作者chez93

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 08:40:41