ARM-异常中的链接寄存器

时间:2019-03-10 17:58:03

标签: exception assembly arm

我的树莓派的IRQ异常具有以下代码:

push {r0-r12, lr}

mov r1, r11
str r1, [r0, #GPIO_EVT_STAT0]
ldr r5, =State
ldr r2, [r5]
tst r2, #0x01
streq r12, [r0, #GPIO_OUT_CLR0]
strne r12, [r0, #GPIO_OUT_SET0]
mvn r2, r2
str r2, [r5]

pop  {r0-r12, lr}
subs pc, lr, #0x04

ARM手册指出,链接寄存器(r14)以不同的模式存储。因此,我不必将链接寄存器压入堆栈。这是正确的吗?

当我尝试此代码时(与上面相同,但是没有按下链接寄存器)

push {r0-r12}

mov r1, r11
str r1, [r0, #GPIO_EVT_STAT0]
ldr r5, =State
ldr r2, [r5]
tst r2, #0x01
streq r12, [r0, #GPIO_OUT_CLR0]
strne r12, [r0, #GPIO_OUT_SET0]
mvn r2, r2
str r2, [r5]

pop  {r0-r12}
subs pc, lr_irq, #0x04

在编译过程中出现此错误:

source/main.s:121: Error: immediate expression requires a # prefix -- `subs pc,lr_irq,#0x04'

那么为什么会出现此错误?我的理解是,r14存储在IRQ模式下,并且存储的寄存器可通过符号register_mode进行访问。

0 个答案:

没有答案