- 論壇徽章:
- 0
|
下面這段代碼是從entry-armv.s中的摘抄的,其中vector_\name后進入的是中斷的通用代碼
- .macro vector_stub, name, mode, correction=0
- .align 5
- vector_\name:
- .if \correction
- sub lr, lr, #\correction
- .endif
- @
- @ Save r0, lr_ (parent PC) and spsr_
- @ (parent CPSR)
- @
- stmia sp, {r0, lr} @ save r0, lr
- mrs lr, spsr
- str lr, [sp, #8] @ save spsr
- @
- @ Prepare for SVC32 mode. IRQs remain disabled.
- @
- mrs r0, cpsr
- eor r0, r0, #(\mode ^ SVC_MODE)
- msr spsr_cxsf, r0 @為后面進入svc模式做準(zhǔn)備
復(fù)制代碼
我不太明白的是這句 stmia sp, {r0, lr} @ save r0, lr , 按照arm手冊上說stmia操作后相應(yīng)的寄存器地址向上增長,而Linux內(nèi)核的堆棧是向下增長的。
請求高手指點。 |
|