SVC处理程序从哪种模式开始?

时间:2012-01-28 09:38:26

标签: arm

ARM SVC处理程序从哪种模式开始?基本上,我想知道在引发SVC异常时ARM内核处于哪种模式?

似乎无法在ARM ARM中找到它,但我的猜测是它始于Supervisor

1 个答案:

答案 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