|
这两天在看SWI的用法,但始终不能得到其中的玄机,这里问问朋友们。
- MSR CPSR_c, #0xd0 ;切换到用户模式
- MRS R0,CPSR
- SWI 1 ;*****1
- SWI_Hander
- STMFD SP!,{R0-R3,R12,LR} ;保存各寄存器
- MRS R0,SPSR ;保存SPSR
- STMFD SP!,{R0}
- TST R0,#T_bit ;测试是Thumb还是ARM
- LDRNEH R0,[LR,#-2]
- BICNE R0,R0,#0xFF00
- LDREQ R0,[LR,#-4]
- BICEQ R0,R0,#0xFF000000
- LDR PC,[PC,R0,LSL #2]
- MOVS PC,LR
- SWI_function
- DCD ChangeMode
-
- ChangeMode
- MRS R0,CPSR
复制代码
这段程序的不完整的,我的目的是想看看SWI是如何在用户模式下工作,并切换到系统模式,SWI_Hander这段代码的意思我理解,就是得到SWI的编号,然后通过LDR PC,[PC,R0,LSL #2]来跳转到相应的子程序,但我现在不明白的是SWI 1应该如何中断,像我上面这样写运行时走到SWI 1报告Undefined instruction的错误,各位大大能否告诉该如何做,最好能举个例子给我看看谢谢了
|
|