2

ARM プロセッサのさまざまなモード (IRQ、スーパーバイザー、ユーザーなど) 用にスタックをセットアップするトピックを研究しています。異なるスタックをセットアップするには、同じ一連の命令が必要なので (基本的にはスタック アドレスの変更のみ)、IRQ スタックのセットアップの問題に頼って質問します。次の定義があると仮定します。

IRQ_Stack EQU 0x8000
NoInt     EQU 0xC0
IRQ32md   EQU 0x12

次のコードを使用してスタックをセットアップします (コメントを有効にするために行番号を追加します)。

1. MOV r2, #NoInt|IRQ32md
2. MSR CPSR_c, r2
3. LDR r13_irq, =IRQ_NewStack
4. ...
5. ...
6. IRQ_NewStack:
7. DCD IRQ_Stack

1行目は、値を にロードすることにより、2r2行目で割り込みを無効にして IRQ モードに入る目的でロードするだけです。次に、3行目で、ラベルの (32 ビット) アドレスを、IRQ モードでバンクされたスタック ポインターにロードするために使用されます。CPSR_cLDRIRQ_NewStack

7行目の指示の目的を教えてください。

「32ビットワードを予約する」DCDために使用されるARMマニュアルを読みました。「32ビットワードを予約する」を読んだとき、それは単一の32ビット変数用にスペースを予約するようなものだと思います。つまり、 (...の単なるマクロである可能性があります)。しかし、これが事実である場合、1 つの 32 ビット ワードよりも大きくなる可能性があるスタック全体に対して 32 ビット ワードのみを予約する必要があるのはなぜですか?DCDEQUEQUDCD

ありがとう。

4

1 に答える 1

4

DCD は、スタック自体ではなく、スタックを指す 1 つの 32 ビット ワードを予約します。

于 2012-10-06T20:24:13.360 に答える