Arm处理器指令集详解:异常、睡眠、内存屏障及更多
1. 异常相关指令
1.1 SVC指令
SVC(SuperVisor Call)指令用于生成SVC异常(异常类型11)。通常,SVC允许嵌入式操作系统(OS)或实时操作系统(RTOS)向非特权应用任务提供服务(在特权状态下执行)。SVC异常提供了从非特权状态到特权状态的转换机制。
SVC机制经过优化,成为操作系统服务的网关。应用任务访问操作系统服务时,只需知道SVC服务编号和输入参数,无需了解服务的实际程序内存地址。
SVC指令要求SVC异常的优先级必须高于当前优先级,且该异常未被屏蔽寄存器(如PRIMASK寄存器)屏蔽。否则,执行SVC指令将触发故障异常。因此,不能在NMI或HardFault处理程序中使用SVC指令。
SVC指令的语法如下:
SVC #<immed>
立即值( #<immed> )为8位。该值本身不影响SVC异常的行为,但SVC处理程序可以通过软件提取该值并将其用作输入参数。
在传统的Arm汇编语法中,SVC指令中的立即值不需要“#”符号,即可以写成:
SVC <immed>
大多数汇编工具仍然支持这种语法,但对于新软件,建议使用“#”符号。
| 指令 |
|---|
超级会员免费看
订阅专栏 解锁全文
1549

被折叠的 条评论
为什么被折叠?



