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