4.3 栈的管理:函数调用

    科技2026-02-01  5

    4.3 栈的管理:函数调用

    寄存器

    FP 栈帧指针寄存器

    frame pointer 始终指向栈底

    SP 保存栈底指针

    stack pointer 始终指向栈顶

    LR 返回连接寄存器

    https://www.cnblogs.com/cmleung/archive/2012/11/06/2757967.html

    在ARM处理器中使用R14用作返回连接寄存器(LR), 实现对断点和调用点的记录。在硬件上和指令执行上,CPU 自动完成相应返回点的记录。在ARM 汇编语言程序设计时,R14和LR通用。

    ARM处理器相应异常时,会自动完成将当前的PC保存到LR寄存器。

    在程序跳转时保存当前地址,即子程序返回地址。子程序通过把r14复制到PC来实现返回

    ARM处理器执行子程序调用指令(BL )时,会将调用指令的下紧邻指令的地址保存到LR。即将 当前PC - 4 保存到LR寄存器。

    ARM处理器针对不同的模式,共有6个链接寄存器资源(LR ),其中用户模式和系统模式共用一个 LR,每种异常模式都有各自专用的R14 寄存器(LR )。这些链接寄存器分别为 R14、R14_svc、R14_abt、R14_und、R14_irq、R14_fiq, 程序设计者要清晰处理器的模式与相应寄存器的对应关系,都是使用 R14,但不同模式下的R14 不是同一个物理资源,其内容可能天壤之别。

    R14 不用做链接寄存器(LR )时,也可以用做通用数据寄存器。

    栈操作

    入栈 push {FP,LR} 出栈 {FP,PC}

    汇编讲解

    命令解释push {fp} ; (str fp, [sp, #-4]!)sp-4栈顶向下移动一个字节 作为下一个函数的栈帧sub sp, fp, #0出栈的准备工作,栈顶指针指向fppop {fp} ; (ldr fp, [sp], #4)1. fp/sp中的内容作为上一个函数的fp 2. sp+4 相当于fp向上移动一个字节 作为上一个函数的sp
    Processed: 0.022, SQL: 9