0

私が書いた C コードの問題をデバッグするために、IAR AVR コンパイラによって生成されたアセンブリ コードを調べています。.s90 ファイルの先頭には、いくつかの関数が宣言されています。各関数宣言の形式は次のとおりです。

PUBLIC FunctionName1
FUNCTION FunctionName1,021201H
ARGFRAME CSTACK, 0, STACK
LOCFRAME RSTACK, 2, STACK

ARGFRAME および LOCFRAME ディレクティブが何をするか知っている人はいますか? これらは、IAR EWAVR Assembler Reference で簡単に言及されているだけです。CSTACK の代わりに RSTACK を ARGFRAME のパラメーターとして使用して宣言された関数を時々見かけます。

PUBLIC FunctionName2
FUNCTION FunctionName2,021201H
ARGFRAME RSTACK, 0, STACK
LOCFRAME RSTACK, 2, STACK

ARGFRAME で RSTACK と CSTACK を使用する理由を知っている人はいますか?

4

1 に答える 1

1

既にご存じのとおり、CSTACKは通常、パラメーター スタックとして使用されRSTACK、リターン アドレス スタックで使用されます。上記の場合、パラメーターはありません。RSTACK実際には何も格納しないため、ディレクティブで安全に使用できます。

彼らが実際に行っていることに関しては、正しい場所にスペースを確保するのに役立っているようです。 ARGFRAME関数が再入LOCFRAME可能である必要がない場合は、スタックの場所または静的領域を指すことができます。それが正確にどのように行われるかについての抽象化のようです。IAR の AVR コンパイラを使用してから長い時間が経ちました... 10 年前にこの機能を使用したことを覚えていないので、その面でこれ以上お役に立てず申し訳ありません。

于 2012-09-20T09:58:11.177 に答える