scall
RISC-V scall 伪指令详解
汇编器伪指令旧名系统调用伪指令,展开为 ecall。它保留早期汇编写法兼容性,现代代码通常直接写 ECALL。
你写下的是
scall
常见真实展开
ecall
这条伪指令到底在帮你省什么
早期 RISC-V 汇编和教材中使用过 scall 名称;保留该别名有助于兼容旧代码,但官方现代名称是 ECALL。
scall 的核心作用是“ECALL 旧别名”。它是汇编器层面的简写;调试、审计或阅读机器码时,应回到页面列出的真实展开指令和相关重定位语义来判断行为。
官方语义核对重点
官方汇编手册把 scall 作为汇编器层面的伪指令/别名处理,硬件执行的是展开后的真实指令序列。
真实语义以 ECALL 等展开指令的 ISA 定义为准;本页不把 scall 当作独立硬件 opcode。
展开过程怎么理解
步骤 1
汇编器将旧名 scall 编码为 ECALL。
在 objdump / 反汇编里可能看到什么
反汇编可能显示伪指令,也可能显示展开后的真实指令,取决于工具选项和上下文。
官方依据与阅读顺序
本页把伪指令当作汇编器层面的别名或宏来解释:先看它会展开成哪些真实指令,再回到官方 ISA 手册理解真实指令的行为。涉及 ABI、重定位或链接器松弛时,以 psABI 文档为准。
什么时候优先想到它
阅读或移植旧 RISC-V 汇编
保留旧教材中的系统调用示例
确认旧代码中的 scall 实际对应 ecall
容易混淆 / 常见误区
这是旧别名,新代码优先使用 ecall
ECALL 只触发环境调用异常;具体系统调用 ABI 由操作系统或执行环境定义
不要把 scall 和断点 ebreak/sbreak 混淆
常见问题
scall 是真实 RISC-V 指令吗?
scall 是汇编器伪指令或别名,不是单独硬件 opcode。页面中的“常见真实展开”列出官方展开,真实行为由展开后的 ISA 指令决定。
使用 scall 时最容易误解什么?
这是旧别名,新代码优先使用 ecall