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