首页/指令库/AES32 末轮解密字节
AES32DSI

RISC-V AES32DSI 指令详解

指令手册R-type

RV32 AES 解密末轮字节步骤:按 bs 选择 rs2 字节,经逆 S-Box 和字节位置旋转后与 rs1 异或。

指令语法

aes32dsi rd, rs1, rs2, bs

语法为 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 丢弃写回;重叠操作数使用同一执行前值。该指令必须以数据无关执行延迟实现。

Zknd加密与密码

指令行为说明

aes32dsi 是仅适用于 RV32 的 Zknd 标量 AES 末轮解密指令。它从 rs2[31:0] 中按 2 位 bs 选择一个字节,应用 AES 逆 S-Box,将结果循环左移到 bs 指定的字节位置后与 rs1[31:0] 异或并写入 rd;该末轮形式不包含 InvMixColumns。

AES32DSI 指令解析与执行动画

RV32 AES 最终轮解密:取字节、逆 SBox、旋转、异或与整数寄存器写回。

aes32dsi
执行环境

XLEN 固定为 32;需要 Zknd,假定取指成功。源值范围为 0..0xFFFFFFFF,bs 为 0–3;x0 源值须为 0,重叠源须有一致初值。

31..30
29..25
24..20
19..15
14..12
11..7
6..0
01
bs
10101
fixed
01100
rs2
01011
rs1
000
funct3
01010
rd
0110011
opcode
执行数据路径
rs1[31:0]
0x11223344
rs2[31:0]
0xA1B2C3D4
si
0xC3
InvSBox(si)
0x33
rol32(so, shamt)
0x00003300
当前步骤

解码 AES32 固定字段与 bs

AES32DSI 仅为 RV32 定义:bits 31..30 是 bs,其余固定字段、两个整数源寄存器和 rd 共同识别该 OP 编码。

encoding: 0x6AC58533
syntax: aes32dsi a0(x10), a1(x11), a2(x12), 1
架构可见结果
a0(x10) = 未指定初值

动画仅展示官方定义的 ISA 字段和状态,不表示具体 CPU 的流水线、缓存或时序实现。

快速理解与检索要点

AES32DSI 仅用于 RV32:按 bs 取 rs2 的一个字节,经逆 AES S-Box 后零扩展为 32 位,循环左移 bs×8 位,再与 rs1 异或写入 rd。

bs 为 0–3:从 rs2 选择字节,应用逆 AES S-Box,将零扩展后的 32 位结果循环左移 bs×8 位,再与 rs1 异或;不包含 InvMixColumns。
操作数使用整数 X 寄存器;AES32DSI 必须以不依赖操作数数据值的执行延迟实现。
bs 选择 rs2[31:0] 中的字节;该指令只在 RV32 上定义,32 位结果写入整数 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。这只是单字节组合步骤。

使用前检查清单

语法检查
  • 语法为 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 丢弃写回;重叠操作数使用同一执行前值。该指令必须以数据无关执行延迟实现。

容易混淆 / 常见误区

bs 字段选择 rs2[31:0] 中的字节索引(0-3),rs1 是异或源。
此为末轮操作:不执行 InvMixColumns。中间轮应使用 aes32dsmi。
该指令只在 RV32 上定义;不要将其当作 RV64 AES 指令。

常见问题

AES32DSI 使用浮点或向量寄存器吗?

不使用。标量密码扩展的这些指令使用整数 X 寄存器。

AES32DSI 是完整算法实现吗?

不是。它只处理 rs2 中由 bs 选择的一个字节并与 rs1 组合;不执行完整 AES 解密轮或整个算法。