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行只是r2为了禁用中断和在第2行进入 IRQ 模式而加载,方法是将值加载到CPSR_c. 然后,在第3行,LDR用于将IRQ_NewStack标签的(32 位)地址加载到以 IRQ 模式存储的堆栈指针中。

你能解释一下第7行指令的目的是什么吗?

我阅读了DCD用于“保留 32 位字”的 ARM 手册。当我阅读"reserve a 32 bit word"时,我认为这就像为单个 32 位变量保留空间,这意味着DCD充当EQU(可能EQU只是DCD...的宏)。但是,如果是这种情况,我为什么要为整个堆栈保留一个 32 位字,它可以比一个 32 位字大?

谢谢。

4

1 回答 1

4

DCD 保留 1 个指向堆栈的 32 位字,它不是堆栈本身。

于 2012-10-06T20:24:13.360 回答