【问题标题】:DCD instruction and IRQ stackDCD 指令和 IRQ 堆栈
【发布时间】:2012-10-06 16:21:33
【问题描述】:

我正在研究为 ARM 处理器的不同模式(IRQ、主管、用户...)设置堆栈的主题。 由于设置不同的堆栈需要相同的指令序列(基本上只有堆栈地址更改),我将求助于设置 IRQ 堆栈的问题来问我的问题。 前提是我有以下定义:

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

以下代码用于设置堆栈(我添加行号以启用 cmets):

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(可能是 EQU 只是一个DCD...的宏)。 但是,如果是这种情况,我为什么要为整个堆栈保留一个 32 位字,它可以比一个 32 位字还大?

谢谢。

【问题讨论】:

  • 我认为您的代码中存在错误。它应该是LDR r13_irq, =IRQ_StackLDR r13_irq, IRQ_NewStack

标签: assembly stack arm irq


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2012-10-12
    • 2013-06-12
    • 2023-03-17
    • 2015-08-05
    • 2018-06-22
    • 1970-01-01
    • 2021-09-17
    • 1970-01-01
    • 2014-08-04
    相关资源
    最近更新 更多