C.AND

RISC-V C.AND 指令详解

指令手册C-type

RV32/RV64:对 x8–x15 中的 rd' 和 rs2' 执行 XLEN 位按位与,结果写回 rd'。

指令语法

c.and rd', rs2'
操作数说明
RV32/RV64,C 2.0 或 Zca;16 位 CA 格式。
rd'/rs1' 和 rs2' 的三位字段均选 x8–x15;没有立即数。
按位与两个旧 XLEN 位源值并写回 rd';同名源使用同一个旧值。
C压缩指令

指令行为说明

C.AND(C 2.0 / Zca,CA)在RV32/RV64对rd'和rs2'的旧XLEN位值按位与,写回rd'。两个三位字段均限x8–x15,没有立即数。等价and rd', rd', rs2';同名源使用同一个旧值。

C.AND 压缩编码学习实验

展示 16 位编码、操作数、计算和架构结果。

c.and,

RV32C/RV64C / Zca

0x000000000000F0F0 & 0x0000000000000FF0 x8 <- 0x00000000000000F0

16 位编码字段

15..10: funct6
100011
9..7: rd'/rs1'
000
6..5: funct2
11
4..2: rs2'
001
1..0: op
01
rd'/rs1' = 000 -> x8
rs2' = 001 -> x9
x8 = 0x000000000000F0F0
x9 = 0x0000000000000FF0
0x000000000000F0F0 按位与 0x0000000000000FF0 = 0x00000000000000F0
尚未提交架构状态。

快速理解与检索要点

RV32/RV64:对 x8–x15 中的 rd' 和 rs2' 执行 XLEN 位按位与,结果写回 rd'。

CA:funct6=100011,funct2=11,op=01;rd'/rs1' 和 rs2' 均为三位字段。
两个操作数都为 x8–x15 寄存器;没有立即数操作数。

常见使用场景

位操作与掩码

RV32/RV64,x8=0xf0f0、x9=0x0ff0:c.and x8, x9 得到 x8=0x00f0;两个寄存器均属 x8–x15。

使用前检查清单

语法检查
  • RV32/RV64,C 2.0 或 Zca;16 位 CA 格式。
  • rd'/rs1' 和 rs2' 的三位字段均选 x8–x15;没有立即数。
语义检查
  • 按位与两个旧 XLEN 位源值并写回 rd';同名源使用同一个旧值。

容易混淆 / 常见误区

仅限x8-x15寄存器(CA格式,3位寄存器字段)
没有立即数操作数;两个操作数都编码为 x8-x15 压缩寄存器

常见问题

两个操作数能是同一寄存器吗?

可以,x & x = x;操作数来自同一份旧寄存器值,结果写回 rd'。

能对 x1 或立即数做与运算吗?

不能。两个三位压缩寄存器字段仅编码 x8–x15。C.AND 没有立即数;与立即数的压缩形式是 C.ANDI。