ARM SVC处理程序从哪种模式开始?基本上,我想知道在引发SVC异常时ARM内核处于哪种模式?
似乎无法在ARM ARM中找到它,但我的猜测是它始于Supervisor
。
答案 0 :(得分:2)
你在谈论SWI处理程序吗?是的,我看到一些地方他们称之为SWI指令,但有时指的是SVC指令。
注意:在旧版本的ARM体系结构中,SVC称为SWI,软件中断。
来自ARM ARM
Exception type Mode Address
----------------------------------------------
Reset Supervisor 0x00000000
Undefined Instruction Undefined 0x00000004
Software Interrupt (SWI) Supervisor 0x00000008
Prefetch Abort Abort 0x0000000C
Data Abort Abort 0x00000010
IRQ IRQ 0x00000018
FIQ FIQ 0x0000001C
...
软件中断异常
软件中断指令(SWI)进入管理程序模式以请求特定的管理程序(操作系统)功能。执行SWI时,将执行以下操作:
R14_svc = address of next instruction after the SWI instruction
SPSR_svc = CPSR
CPSR[4:0] = 0b10011 /* Enter Supervisor mode */
CPSR[5] = 0 /* Execute in ARM state */
/* CPSR[6] is unchanged */
CPSR[7]= 1 /* Disable normal interrupts */
/* CPSR[8] is unchanged */
CPSR[9] = CP15_reg1_EEbit /* Endianness on exception entry */
PC = 0x00000008
要在执行SWI操作后返回,请使用以下指令从PC(从R14_svc)和CPSR(从SPSR_svc)恢复并返回到SWI之后的指令: MOVS PC,R14