DCD指令和IRQ堆栈

时间:2012-10-06 16:21:34

标签: assembly stack arm irq

我正在研究为ARM处理器的不同模式(IRQ,Supervisor,User,...)设置堆栈的主题。 由于设置不同的堆栈需要相同的指令序列(基本上只有堆栈地址更改),我会问我的问题是设置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以禁用中断并进入IRQ模式 在 2 行中,将值加载到CPSR_c。 然后,在 3 行,LDR用于将IRQ_NewStack标签的(32位)地址加载到以IRQ模式存储的堆栈指针中。

请您解释一下 7 上的教学目的是什么?

我在ARM手册上读到DCD用于“保留32位字”。当我读“保留一个32位字”时,我认为这就像为一个32位变量保留空间,这意味着DCD充当EQU(可能是{{ 1}}只是EQU的一个宏...)。 但是,如果是这种情况,为什么我应该为整个堆栈保留一个32位字,它可以比一个32位字增长更大?

感谢。

1 个答案:

答案 0 :(得分:4)

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