arm的 swi简述

ARM 的 SWI(Software Interrupt,软件中断)指令是用于实现系统调用(System Calls)的传统机制。它允许运行在用户模式(User mode)下的应用程序请求运行在特权模式(如 Supervisor mode)下的操作系统内核提供服务。

现在,SWI 指令在较新的 ARM 架构(ARMv7 及以后)中已被 SVC(Supervisor Call,监管调用)指令取代,但两者的概念和用法几乎完全相同。SWI 在 ARMv6 及之前的架构中更常见。


概念

  1. 触发异常:当 CPU 执行 SWI / SVC 指令时,它会产生一个异常(Exception),导致处理器模式切换到监管模式(Supervisor Mode)。
  2. 跳转到异常向量表:处理器自动跳转到异常向量表(Exception Vector Table)中预定义的地址(对于 SWI,通常是 0x000000080xFFFF0008)。
  3. 执行异常处理程序:该地址处存放着软件中断处理程序(Software Interrupt Handler)的代码,也就是操作系统内核中处理系统调用的部分。
  4. 识别和分发:处理程序会检查 SWI 指令中自带的立即数(Number),这个数被称为 SWI numberSVC number。操作系统根据这个号码来查询系统调用表(Syscall Table),确定用户程序请求的是哪个服务(如打开文件、写入数据、创建进程等)。
  5. 返回用户模式:服务执行完毕后,处理程序会执行一条特殊的返回指令(如 MOVS PC, LR),将处理器模式恢复回用户模式,并返回到用户程序中 SWI 指令的下一条指令继续执行。

语法和编码

1. 汇编语法 (ARM/Thumb)
SWI #<immed_24>    ; ARM 指令集格式 (32位指令)
SVC #<immed_8>     ; Thumb 指令集格式 (16位指令)
  • <immed_24><immed_8> 是一个数字,用于标识具体的系统调用功能。
    • 例如,SWI #0 可能用于写入数据,SWI #1 可能用于读取数据。
2. 机器码格式

SWI 指令的ARM 32位编码格式如下:

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值