- 論壇徽章:
- 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}^ |
|