我正在研究为 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 位字大?
谢谢。