You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ARM架构SVC(SWI)指令工作原理及相关信息咨询

ARM架构中SVC(SWI)指令的工作机制及相关细节

一、SVC指令的工作原理

SVC(旧称SWI)是ARM架构的超级调用指令,核心作用是触发从用户模式到特权模式(ARMv7及之前为管理模式,ARMv8+为EL1异常级别)的切换,进入内核态处理系统请求:

  • 执行SVC #imm指令时,硬件自动完成以下关键操作:
    1. 将当前模式的程序计数器(PC)、程序状态寄存器(CPSR),分别保存到特权模式的链接寄存器(LR)和保存程序状态寄存器(SPSR)
    2. 切换CPU至特权模式
    3. 将PC指向异常向量表的SVC入口地址,启动内核的系统调用处理流程

二、超级调用ID及数据的存储位置

SVC的调用ID和参数存储规则无硬件强制要求,完全由**操作系统的ABI(应用二进制接口)**定义,主流约定如下:

  • 超级调用ID:常见存放位置为r7寄存器(ARMv7)或x8寄存器(ARMv64);部分系统会直接把ID编码在SVC指令的立即数中(如SVC #0x10)
  • 调用参数:按顺序存入r0-r6(ARMv7)或x0-x7(ARMv64)寄存器,无需额外内存存储
  • 返回值:内核处理完成后,将结果放回r0(ARMv7)或x0(ARMv64)寄存器

三、超级调用ID、参数及返回类型的获取途径

这类信息不存在通用全量列表,完全依赖你使用的操作系统及对应ABI,可行的获取方式:

  • 内核源码:以Linux为例,ARMv7的系统调用表在arch/arm/include/asm/unistd.h,ARMv64的在arch/arm64/include/asm/unistd.h,文件内明确列出所有调用ID、参数数量及返回类型
  • 官方ABI文档:比如ARM官方的《ARM Architecture Procedure Call Standard》(AAPCS),或特定系统的ABI规范(如Android ARM ABI、Linux ARM系统调用规范)
  • 用户态头文件:编译程序依赖的unistd.h等头文件中,会定义系统调用对应的宏(如__NR_open),可直接查看宏定义及注释

注意:不同操作系统(Linux、FreeBSD、Android等)的SVC调用规则可能完全不同,同一系统的不同版本也会有调用ID的增减,必须对应具体系统版本查询

内容的提问来源于stack exchange,提问作者TX3

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 23:32:47