AES32DSI 使用浮点或向量寄存器吗?
不使用。标量密码扩展的这些指令使用整数 X 寄存器。
RV32 AES 解密末轮字节步骤:按 bs 选择 rs2 字节,经逆 S-Box 和字节位置旋转后与 rs1 异或。
语法为 rd, rs1, rs2, bs;整数寄存器选择 x0–x31 或 ABI 名称,bs 是 0–3 的两位字节选择子。
32 位 OP 编码:bits31:30=bs、bits29:25=10101、funct3=000、opcode=0110011。
仅 RV32,需启用 Zknd(也包含于 Zkn/Zk);按 bs×8 右移 rs2 后取低字节,应用逆 AES S-Box。
逆 S-Box 结果零扩展到 32 位,循环左移 bs×8 位,再与执行前 rs1 异或写入 rd;不含 InvMixColumns。
x0 源为零,rd=x0 丢弃写回;重叠操作数使用同一执行前值。该指令必须以数据无关执行延迟实现。
aes32dsi 是仅适用于 RV32 的 Zknd 标量 AES 末轮解密指令。它从 rs2[31:0] 中按 2 位 bs 选择一个字节,应用 AES 逆 S-Box,将结果循环左移到 bs 指定的字节位置后与 rs1[31:0] 异或并写入 rd;该末轮形式不包含 InvMixColumns。
RV32 AES 最终轮解密:取字节、逆 SBox、旋转、异或与整数寄存器写回。
XLEN 固定为 32;需要 Zknd,假定取指成功。源值范围为 0..0xFFFFFFFF,bs 为 0–3;x0 源值须为 0,重叠源须有一致初值。
AES32DSI 仅为 RV32 定义:bits 31..30 是 bs,其余固定字段、两个整数源寄存器和 rd 共同识别该 OP 编码。
动画仅展示官方定义的 ISA 字段和状态,不表示具体 CPU 的流水线、缓存或时序实现。
AES32DSI 仅用于 RV32:按 bs 取 rs2 的一个字节,经逆 AES S-Box 后零扩展为 32 位,循环左移 bs×8 位,再与 rs1 异或写入 rd。
RV32 Zknd,a1=0x11223344、a2=0xA1B2C3D4、bs=0:取字节 0xD4,逆 S-Box 为 0x19,旋转 0 位,a0=0x1122335D。这只是单字节组合步骤。
RV32 Zknd,a1=0x11223344、a2=0xA1B2C3D4、bs=0:取字节 0xD4,逆 S-Box 为 0x19,旋转 0 位,a0=0x1122335D。这只是单字节组合步骤。
不使用。标量密码扩展的这些指令使用整数 X 寄存器。
不是。它只处理 rs2 中由 bs 选择的一个字节并与 rs1 组合;不执行完整 AES 解密轮或整个算法。