C.ADD 可以使用哪些寄存器?
CR 格式的 rd 和 rs2 是完整的 5 位字段,因此编码可引用 x0-x31 中的寄存器;但常规 C.ADD 语义要求 rd 与 rs2 都不为 x0。
常规 C.ADD 将 rd 与 rs2 相加,结果写回 rd。CR 格式;rd 与 rs2 都必须非零。
扩展条件:RV32I/RV64I 的 C 扩展(或 Zca);16 位编码,IALIGN=16。动画按取指成功且无异步中断的条件展示架构效果。
C.ADD(CR 格式,可访问全部 32 个寄存器)将 rd 与 rs2 相加并写回 rd,等价于 add rd, rd, rs2。常规 C.ADD 要求 rd≠x0 且 rs2≠x0:rs2=x0 时,rd≠x0 编码为 C.JALR,rd=x0 编码为 C.EBREAK。rs2 非零且 rd=x0 的编码通常是 HINT;其中 rs2=x2-x5 在实现 Zihintntl 扩展时分别编码为 C.NTL.P1、C.NTL.PALL、C.NTL.S1、C.NTL.ALL。
RV32I/RV64I + C(或 Zca),16 位编码,IALIGN=16。
c.add rd, rs20x952E = 1001010100101110还原完整寄存器字段和立即数,并区分普通指令、HINT 与共享编码。
这是架构效果的教学步骤,不代表处理器流水线或周期。
C.ADD 使用 CR 格式,把 rd 与 rs2 相加后写回 rd;常规 C.ADD 要求 rd 与 rs2 都不为 x0。
RV32I/RV64I + C/Zca,旧 x10=7、x11=9 时,c.add x10, x11 得到 x10=16,x11 不变;成功后 PC+2。
CR 格式的 rd 和 rs2 是完整的 5 位字段,因此编码可引用 x0-x31 中的寄存器;但常规 C.ADD 语义要求 rd 与 rs2 都不为 x0。