11、函数调用与结果返回的深入解析

函数调用与结果返回的深入解析

1. 不同架构下的函数调用

在编程中,函数调用是一个常见的操作,不同的架构在处理函数调用时有着不同的方式。

1.1 x86架构

在x86架构中,函数参数通常通过栈来传递。以下是一段示例代码:

sub esp, 10h
mov [esp+10h+var_8], 3 ; 3rd argument
mov [esp+10h+var_C], 2 ; 2nd argument
mov [esp+10h+var_10], 1 ; 1st argument
call f
mov edx, offset aD ; "%d\n"
mov [esp+10h+var_C], eax
mov [esp+10h+var_10], edx
call _printf
mov eax, 0
leave
retn

流程如下:
1. 为参数分配栈空间。
2. 将参数依次存入栈中。
3. 调用函数 f
4. 处理函数 f 的返回值,并准备 printf 函数的参数。
5. 调用 printf 函数进行输出。
6. 将返回值设置为0。
7. 恢复栈指针并返回。

1.2 x64架构

在x86 - 64架构中,情况有所不同。前4个或前6个函数参数通过寄存器传递,而不是从栈中读取。

MSVC编译器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值