|
- ;-------------------------------------------------------------------------------
- ;-------------------------------------------------------------------------------
- NESTED_ENTRY FIQHandler
- sub lr, lr, #4 ; fix return address
- stmfd sp!, {r0-r3, r12, lr}
- PROLOG_END
- CALL OEMInterruptHandlerFIQ
- ldmfd sp!, {r0-r3, r12, pc}^ ; restore regs & return for NOP
- ENTRY_END FIQHandler
- ALTERNATE_ENTRY CaptureContext
- sub sp, sp, #CtxSizeof ; (sp) = CONTEXT_RECORD
- stmib sp, {r0-r15} ; store all registers
- mrs r1, cpsr ; (r1) = current status
- mov r0, #CONTEXT_FULL
- str r1, [sp,#CtxPsr]
- str r0, [sp,#CtxFlags] ; set ContextFlags
- mov r0, sp ; (r0) = Arg0 = ptr to CONTEXT_RECORD
- CALL ExceptionDispatch
- mov r1, sp ; (r1) = ptr to CONTEXT_RECORD
- ldr r2, [r1,#CtxPsr] ; (r0) = new Psr
- and r0, r2, #0x1f ; (r2) = destination mode
- cmp r0, #USER_MODE
- bne %F9
复制代码
C:\WINCE500\PRIVATE\WINCEOS\COREOS\NK\KERNEL\ARM\armtrap.s
我没有怀疑什么哦,我不知道是否对,所以就像上面说了。上面是wince的内核代码,够有说服力了,要保存的,有些书说FIQ不用入栈,但是这里都有入栈。
至于CALL在ARM中是个宏定义,传递参数什么都行。在X86下就直接拿来用了。
你也帮帮我看我的问题啊。不然我哪有心思看这个啊,(*^__^*) 嘻嘻……
|
|