为了调试我写的一些C代码中的问题,我正在检查IAR AVR编译器生成的一些汇编代码。在.s90文件的顶部有几个声明的函数。每个函数delcaration都具有以下形式:
PUBLIC FunctionName1
FUNCTION FunctionName1,021201H
ARGFRAME CSTACK, 0, STACK
LOCFRAME RSTACK, 2, STACK有人知道ARGFRAME和LOCFRAME指令是做什么的吗?它们仅在IAR EWAVR汇编程序参考中简要提及。有时我看到使用RSTACK声明的函数作为ARGFRAME的参数,而不是CSTACK:
PUBLIC FunctionName2
FUNCTION FunctionName2,021201H
ARGFRAME RSTACK, 0, STACK
LOCFRAME RSTACK, 2, STACK有人知道在ARGFRAME中使用RSTACK和CSTACK背后的原因吗?
发布于 2012-09-20 17:58:11
我相信您已经知道,CSTACK通常用作参数堆栈,而RSTACK则用于返回地址堆栈。在上面概述的情况下,没有参数。所以在指令中使用RSTACK是安全的,因为它实际上不会在那里存储任何东西。
就它们的实际功能而言,它们似乎有助于在正确的位置预留空间。ARGFRAME和LOCFRAME可以指向堆栈位置,如果函数不需要是可重入的,则可以指向静态区域。这看起来像是一个抽象的概念,说明了它到底是如何做到的。我已经很久没有使用IAR的AVR编译器了。我不记得10年前有过这个设施,所以很抱歉在这方面我不能提供更多的帮助。
https://stackoverflow.com/questions/12497129
复制相似问题