- 论坛徽章:
- 0
|
arm汇编有一段代码是用户模式相应中断模式,在中断模式中支持中断嵌套而又转到管理模式(宏CHANGE_TO_SVC转到管理模式),下面是简单一段的汇编代码。在CHANGE_TO_SVC之前的这些代码我都能读懂。但在这条语句之后,特别是
str r14,[r13,#-0x8]!
str r14,[r13,#-0x4]
ldr r14,[r0,#-0x4]
这条语句之后,我在纸上画的图就感觉不对了,我觉得stmdb r13!,{r0-r3,r14}中的r0会覆盖str r14,[r13,#-0x4]当中的r14.我知道我某个地方肯定错了。所以,请哪位老大给详细的能否分析下这里的寄存器变化情况。以及内存分布。谢谢。。。。。。。。。。。
__vector_irq:
sub r14,r14,#4
str r14,[r13,#-0x4]
mrs r14,spsr
str r14,[r13,#-0x8]
str r0,[r13,#-0xc]
mov r0,r13
CHANGE_TO_SVC
str r14,[r13,#-0x8]!
ldr r14,[r0,#-0x4]
str r14,[r13,#-0x4]
ldr r14,[r0,#-0x8]
ldr r0,[r0,#-0xc]
stmdb r13!,{r0-r3,r14}
bl common_irq_handler
ldmia r13!,{r0-r3,r14}
msr spsr,r14
ldmfd r13!,{r14,pc}^ |
|