0

为了调试我编写的一些 C 代码中的问题,我正在检查由 IAR AVR 编译器生成的一些汇编代码。在 .s90 文件的顶部声明了几个函数。每个函数声明具有以下形式:

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

有人知道将 RSTACK 与 CSTACK 与 ARGFRAME 结合使用的原因吗?

4

1 回答 1

1

正如我确定你已经知道的那样,CSTACK通常用作参数堆栈,并RSTACK在返回地址堆栈中。在您上面概述的情况下,没有参数。所以RSTACK在指令中使用是安全的,因为它实际上不会在那里存储任何东西。

就他们实际所做的而言,它们似乎有助于在正确的位置保留空间。 如果函数不需要可重入,则可以指向堆栈位置或静态区域ARGFRAMELOCFRAME这似乎是关于如何完成的抽象。我已经很久没有使用 IAR 的 AVR 编译器了……我不记得 10 年前有过这个工具,所以很抱歉我在这方面无法提供更多帮助。

于 2012-09-20T09:58:11.177 回答