ECALL 的参数寄存器由 RISC-V ISA 规定吗?
不。ISA 只定义 ECALL 产生环境调用异常;参数寄存器、系统调用号和返回值由执行环境或 OS ABI 定义。
向执行环境发起请求并产生环境调用异常
ECALL 是 RV32I/RV64I 的 SYSTEM 指令,编码为 funct12=000000000000、rs1=x0、funct3=000、rd=x0、opcode=1110011。它产生精确的环境调用异常,异常原因由当前特权级区分(例如 U/S/M 模式的 environment call),异常 PC 记录 ECALL 指令本身。参数传递、系统调用号和返回约定由执行环境或 OS ABI 定义,不属于 ECALL 指令编码语义。
从 SYSTEM 编码开始,展示固定字段、执行环境、同步异常以及 EPC/cause 状态更新。
该动画只展示 ISA 可见的同步异常和状态记录;系统调用 ABI、调试器动作、trap handler 策略和时序由执行环境或特权架构配置决定。
ECALL 的核心是“当前特权级发起环境调用异常”。它不携带显式操作数,也不规定 Linux 或其他 OS 的具体系统调用 ABI;页面动画只展示固定编码、当前模式、trap cause 与 EPC 记录。
结合 «ecall # raise environment-call exception» 等实际代码理解该场景。
结合 «ecall # raise environment-call exception» 等实际代码理解该场景。
不。ISA 只定义 ECALL 产生环境调用异常;参数寄存器、系统调用号和返回值由执行环境或 OS ABI 定义。
异常 PC 记录 ECALL 指令本身,而不是自动记录下一条指令。处理程序若要返回后续指令,通常需要前进 EPC。