C.ANDI

RISC-V C.ANDI 指令详解

指令手册CB-format

rd'与有符号6位立即数按位与。CB格式。

指令语法

c.andi rd', imm

rd′ 选择 x8–x15,既是旧源又是写回目标;读取旧值后写回。

imm 是 -32–31 的有符号 6 位立即数,符号扩展到 XLEN。

RV32C/RV64C:按 XLEN 位计算 x[rd′] AND sext(imm),写回 rd′。

C压缩指令

指令行为说明

RV32C/RV64C 的 16 位 CB 格式:将 x[rd'] 与符号扩展到 XLEN 的 6 位立即数按位与后写回 rd';rd' 为 x8–x15,立即数范围 -32–31。

C.ANDI 指令解析与执行动画

只展示手册定义的 16 位字段、操作数和 ISA 可见结果;不模拟流水线、缓存、时序或实现的内存异常处理。

c.andi,
执行环境

适用:RV32C/RV64C,16 位 CB 编码。

x8 = 0x0000000000001234; imm = -16 -> 0x0000000000001234 AND sext(imm[5:0]=-16) = 0x0000000000001230 -> x8 = 0x0000000000001230
16 位编码字段

rd'=000 -> x8; imm[5:0]=110000 -> sext(-16)

15..13
funct3
100
12
imm[5]
1
11..10
funct2
10
9..7
rd'/rs1'
000
6..2
imm[4:0]
10000
1..0
op
01
执行数据路径
x8 = 0x0000000000001234; imm = -16
0x0000000000001234 AND sext(imm[5:0]=-16) = 0x0000000000001230
x8 <- 0x0000000000001230
尚未提交架构状态。

快速理解与检索要点

RV32C/RV64C 的 16 位 CB 格式:将 x[rd'] 与符号扩展到 XLEN 的 6 位立即数按位与后写回 rd';rd' 为 x8–x15,立即数范围 -32–31。

C.ANDI 是真实 16 位编码,语义对应 ANDI,目标同时提供第一个旧源值。
立即数是符号扩展,不是零扩展。
rd' 使用 x8..x15 压缩寄存器子集。

常见使用场景

位操作与掩码

RV32C/RV64C,旧 x8=0x1234:c.andi x8, 0xF 写 x8=0x4;0xF 是合法的6位有符号立即数15。

使用前检查清单

语法检查
  • rd′ 选择 x8–x15,既是旧源又是写回目标;读取旧值后写回。
  • imm 是 -32–31 的有符号 6 位立即数,符号扩展到 XLEN。
语义检查
  • RV32C/RV64C:按 XLEN 位计算 x[rd′] AND sext(imm),写回 rd′。

容易混淆 / 常见误区

立即数是符号扩展,不是零扩展。
rd' 使用 x8..x15 压缩寄存器子集。

常见问题

c.andi 为什么有寄存器限制?

多数 C 扩展格式用较短字段编码寄存器,因此部分形式只能访问 x8..x15 或固定寄存器。

c.andi 是否只是汇编伪指令?

不是。它是 C 扩展定义的 16 位编码指令。