SWI程序举例:
T_bit EQU 0x20 ;用于测试Thumb标志位(第5位)
SWI_handler
STMFD SP!,{R0-R3,R12,LR}
MRS R0,SPSR ;保存中断前的CPSR值
STMFD SP!,{R0} ;到堆栈中
TST R0,#T_bit ;测试T位标志
LDRNEH R0,[LR,# -2] ;读取16位的SWI指令码
BICNE R0,R0,#0xFF00 ;获取SWI中的中断号
LDREQ R0,[LR,# -4] ;读取32的SWI指令码
BICEQ R0,R0,#0xFF000000;获取SWI中的中断号
…… ;转去处理相应的软中断
LDMFD SP!,{R0-R3,R12,PC}
;中断返回,包括恢复原CPSR值
2021-11-17 16:49:37
899KB
ARM
汇编
指令
1