4、编程中的函数、栈与指针深入解析

编程中的函数、栈与指针深入解析

1. 不同架构代码示例及特点

1.1 ARM64 代码示例

以下是一个 main() 函数返回 uint64_t 类型值的示例代码:

#include <stdio.h>
#include <stdint.h>
uint64_t main()
{
    printf ("Hello!\n");
    return 0;
}

使用非优化的 GCC 4.8.1 编译并使用 objdump 查看,相关的 MOV 指令如下:

4005a4:
d2800000
mov
x0, #0x0
// #0

LDP (Load Pair)指令用于恢复 X29 X30 寄存器。这里指令后没有感叹号,意味着先从栈中加载值,然后将 SP 增加 16,这被称为后索引。在 ARM64 中还出现了新指令 RET ,它的功能与 BX LR 类似,但添加了一个特殊的提示位,告知 CPU 这是从函数返回,而非普通的跳转指令,从而能更高效地执行。由于该函数较为简单,优化后的 GCC 生成的代码与未优化时相同。

1.2 MIP

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值