尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Cortex-M3:为什么 FRAME 伪操作很少直接用?

Cortex-M3:为什么 FRAME 伪操作很少直接用? 难度:★★★本文首发于我的嵌入式技术号「OneChan」,未经授权禁止转载。翻开 ARM 汇编器的指令手册,你会看到一组名为FRAME的伪操作:FRAME PUSH {R4-R11, LR} FRAME POP {R4-R11, PC} FRAME ADDRESS R11, 0它们看起来像是对栈操作的某种“注释”。但是,你随便打开一个工程里的启动文件,大概率从头翻到尾都找不到一条FRAME。那这些指令是给谁用的?为什么它们几乎从不出现?答案是:它们不是给你用的,至少不是给今天的你。在编译器足够聪明的时代,FRAME已经从开发者手中退场,变成了工具链内部自动生成的“隐形乘客”。但如果你曾经手写过复杂的汇编函数,或者在调试器中看到过一片混乱的调用栈,你就知道——理解FRAME,就是理解调试器如何“窥视”你的汇编代码。今天这篇文章,就来拆开FRAME的真面目,以及它为什么在现代工程中销声匿迹。一、FRAME 到底在干什么?在汇编里,一个函数的执行离不开栈。函数调用时,返回地址、部分寄存器会被压栈;函数内部,局部变量可能开辟在栈上;函数返回时,栈指针恢复到调用前的状态。调
返回列表