首页 > 解决方案 > ARM 子程序调用和链接寄存器使用

问题描述

导致创建堆栈帧和当前 PC 值的每个函数调用都被压入堆栈。在函数返回期间展开堆栈时,PC 值(返回地址)可以从堆栈帧加载到 PC 上。如果是这样,链接寄存器(LR)需要什么。

标签: assemblyarm

解决方案


可以设计没有链接寄存器的处理器。这种架构的一个示例是 x86,其中函数调用直接将返回地址压入堆栈,而函数返回则直接从堆栈中提取返回地址。

拥有链接寄存器只是此设计的不同选择。虽然不是一个特别新颖的想法(例如 1960 年的 IBM S/360 已经有了这个概念),但链接寄存器已经被 RISC 处理器设计学校普及,因为它们降低了函数调用和返回指令的复杂性,使处理器更容易设计和由于所需的晶体管数量减少,可能更快。

链接寄存器的另一个优点是不调用其他函数(叶函数)的函数可以完全不将返回地址存储在堆栈中。这在每次执行函数时节省了加载和存储,当函数很短时,这可以节省大量时间。


推荐阅读