assembly - ARM 子程序调用和链接寄存器使用
问题描述
导致创建堆栈帧和当前 PC 值的每个函数调用都被压入堆栈。在函数返回期间展开堆栈时,PC 值(返回地址)可以从堆栈帧加载到 PC 上。如果是这样,链接寄存器(LR)需要什么。
解决方案
可以设计没有链接寄存器的处理器。这种架构的一个示例是 x86,其中函数调用直接将返回地址压入堆栈,而函数返回则直接从堆栈中提取返回地址。
拥有链接寄存器只是此设计的不同选择。虽然不是一个特别新颖的想法(例如 1960 年的 IBM S/360 已经有了这个概念),但链接寄存器已经被 RISC 处理器设计学校普及,因为它们降低了函数调用和返回指令的复杂性,使处理器更容易设计和由于所需的晶体管数量减少,可能更快。
链接寄存器的另一个优点是不调用其他函数(叶函数)的函数可以完全不将返回地址存储在堆栈中。这在每次执行函数时节省了加载和存储,当函数很短时,这可以节省大量时间。
推荐阅读
- ssl - 在 Ubuntu 16.04 上使用 ssl 从 www 重定向到非 www 在 Nginx 中不起作用
- css - 如何在 Stylelint 中定义规则,该规则需要在选择器中的换行符之前使用逗号?
- c++ - C ++如何将子字符串转换为int
- python - 信令服务器性能问题:Python vs NodeJS
- http - Xamarin.Auth:AddMultipartData - 它是如何工作的?
- swift - TableView 意外调整边界大小
- php - 有没有办法声明 php.ini open_basedir 对 htaccess 文件没有价值?
- extjs - 如何在 XTemplate -Extjs 中调用 2 个函数
- python - Linux Jupyter Notebook:“内核似乎已经死了。它将自动重新启动”
- jquery - 您可以在同一页面上有多个引导程序版本吗?