首页/指令库/C-EBREAK
C.EBREAK

RISC-V C.EBREAK 指令详解

指令手册C

压缩断点指令,执行与 EBREAK 相同的环境断点操作。

指令语法

c.ebreak
操作数说明
压缩指令仅 16 位,寄存器选择通常限制在 x8–x15。
立即数字段较窄,查看特定压缩指令的完整编码。
C压缩指令

指令行为说明

C.EBREAK 是 C 扩展中的 16 位 CR 格式断点指令,执行与 EBREAK 相同的操作。除非外部调试环境覆盖该行为,它产生 Breakpoint 同步异常且不执行其他操作;它不带操作数,也不读写通用寄存器。

C.EBREAK 指令解析与陷阱动画

从 16 位 CR 编码开始,展示固定字段、执行环境、同步异常以及 EPC/cause 状态更新。

无显式操作数
c.ebreakc.ebreak
执行环境
0x9002 (C.EBREAK) -> Breakpoint
EPC=0x0000000000002000;外部调试环境未覆盖时,产生同步 Breakpoint 异常。
15..12
11..2
1..0
1001
funct4
0000000000
fixed zero
10
C2
instruction
0x9002 (16-bit)
opcode
10 -> C2 quadrant
CR fixed bits
funct4=1001; bits 11..2=0
fixed
CR format: rd/rs1=0 and rs2=0
context
mode=M, pc=0x0000000000002000
exception
Breakpoint (code 3)
state
receiving privilege mode EPC=0x0000000000002000; receiving privilege mode cause=3
next EPC
if continuing after instruction: 0x0000000000002002

该动画只展示 ISA 可见的同步异常和状态记录;系统调用 ABI、调试器动作、trap handler 策略和时序由执行环境或特权架构配置决定。

快速理解与检索要点

C.EBREAK 是 EBREAK 的压缩编码形式,用于断点/调试进入;它不是可忽略提示。

C.EBREAK 使用 16 位 CR 格式:funct4=1001、bits[11:2]=0、bits[1:0]=10;共享 CR 编码中的 rd/rs1 和 rs2 均为 x0。
它执行与 EBREAK 相同的操作;除非外部调试环境覆盖,产生 Breakpoint 同步异常且不执行其他操作。
接收特权级的 EPC 写入 C.EBREAK 自身地址;该同步异常不退休,也不应递增 minstret。

常见使用场景

系统与特权

结合 «c.ebreak # trigger debug exception» 等实际代码理解该场景。

调试与监控

结合 «c.ebreak # trigger debug exception» 等实际代码理解该场景。

使用前检查清单

语法检查
  • 确认压缩指令 16 位编码只在支持 C 扩展的 CPU 上可用。
  • 确认 C.EBREAK 无显式操作数,CR 共享字段 rd/rs1 与 rs2 均为 x0。
语义检查
  • 确认该指令产生同步 Breakpoint 异常,而不是普通寄存器运算。
  • 确认接收特权级 EPC 记录该指令自身地址。

容易混淆 / 常见误区

C.EBREAK 不是普通 NOP;执行会产生断点/调试相关控制转移。
它没有 rd/rs 操作数;不要按 C.ADD 的寄存器语义解释。
除非外部调试环境覆盖,C.EBREAK 产生 Breakpoint 同步异常;接收特权级的 EPC 记录该指令自身地址,而非后续地址。

常见问题

C.EBREAK 和 EBREAK 的关系是什么?

C.EBREAK 执行与 EBREAK 相同的环境断点语义,只是编码为 16 位压缩形式。

C.EBREAK 可以当作 NOP 吗?

不可以。它是断点指令。