1、链接寄存器(Link Register,LR)是 64位寄存器。

2、链接寄存器保存区存有被调用函数(而非当前函数)的链接寄存器内容。

3、也请注意必须要显式指定链接寄存器

4、链接寄存器保存区与 ABI的其他部分不同。

5、正如我先前提到的,LR_OFFSET是堆栈末端到链接寄存器保存区的偏移量。

6、链接寄存器只在约定的意义上有一些特殊 ——SPU汇编语言允许在您所选择的任何 寄存器内设置链接。

7、链接寄存器只在约定的意义上有一些特殊 ——SPU汇编语言允许在您所选择的任何寄存器内设置链接。

8、所以,在这个函数中,我们使用了回链指针、链接寄存器保存区和一个本地变量。

9、所以该指令会将链接寄存器(存有返回地址)存储到调用函数堆栈框架的恰当位置。

10、请记住链接寄存器存储在调用函数的堆栈框架内,而非函数自身的堆栈框架。

11、brsl代表“branch relative and setlink”,用来分支到函数的入口点并将链接寄存器(LR)设置为返回地址的下一个指令。

12、但由于基线条件并不调用任何其他函数,所以无需从堆栈框架加载链接寄存器——值还在原处。

13、当函数开始时,它实际上会将链接寄存器保存到调用函数的堆栈帧中,而不是自己的堆栈帧中,然后只有在需要时才会保存它。

14、由于未调用任何函数,也未使用任何本地存储,所以您根本无需堆栈框架,并可通过链接寄存器退出。