首页/指令库/AES64密钥调度步骤1
AES64KS1I

RISC-V AES64KS1I 指令详解

指令手册I-type

AES 密钥调度步骤 1(RV64):由 rnum 选择轮常量,对 rs1 高 32 位进行条件旋转与 SubWord

指令语法

aes64ks1i rd, rs1, rnum
操作数说明
rd:接收重复写入两个 32 位半部的密钥调度字。
rs1:只提供 rs1[63:32];rs1[31:0] 不参与该操作。
rnum:bits 23..20 的 4 位轮号。0x0..0xA 合法,0xB..0xF 为保留编码并导致非法指令异常;rnum=0xA 不旋转,且不调用 Rcon。
ZkndZkne加密与密码

指令行为说明

aes64ks1i 是 Zknd/Zkne 共用的 RV64 AES 密钥调度指令。它从 rs1[63:32] 取字;rnum=0x0..0x9 时选择轮常量并先将该字循环右移 8 位,然后应用 SubWord。rnum=0xA 不旋转,且该 AES-256 情况不调用 Rcon。得到的字复制到 rd 的两个 32 位半部。rnum=0xB..0xF 为保留编码并导致非法指令异常。

AES64KS1I 指令解析与执行动画

受限教学输入直接按本地官方手册的 ISA 公式计算;不表示完整 AES 算法或微架构。

aes64ks1i
执行环境

XLEN 固定为 64;该 AES64 形式不在 RV32 定义。

fixed
round number
source
fixed
destination
OP-IMM
31..24
00110001
23..20
rnum=1
19..15
rs1=x11
14..12
001
11..7
rd=x10
6..0
0010011
执行数据路径
rs1[63:32]
0x11223344
conditional ror32
0x44112233
SubWord XOR Rcon
0x1B8293C1
当前步骤

解码固定字段和操作数

AES64KS1I 仅在 RV64 定义;rnum 位于 bits 23..20;0x0..0xA 合法,0xB..0xF 不解码为该指令。

encoding: 0x31159513
syntax: aes64ks1i a0(x10), a1(x11), 1
架构可见结果
a0(x10) = 0x1B8293C11B8293C1

动画只展示官方 ISA 字段和架构状态,不表示特定 CPU 的流水线、缓存或时序实现。

快速理解与检索要点

AES64KS1I 是 Zknd/Zkne 标量密码指令,AES 密钥调度 S-box/轮常数步骤。页面内容按官方标量密码扩展校对,避免把算法轮函数、密钥调度和寄存器来源混淆。

RV64 指令,执行 AES 密钥调度中的旋转、SubBytes 和轮常数步骤;rnum 有效范围为 0x0..0xA,0xB..0xF 保留。
标量密码指令使用整数 X 寄存器,官方要求相关密码指令以数据无关执行延迟实现。
aes64* 形式只在 RV64 上定义。

常见使用场景

加密与密码

结合 «aes64ks1i a0, a1, 1» 等实际代码理解该场景。

密钥调度

结合 «aes64ks1i a0, a1, 1» 等实际代码理解该场景。

使用前检查清单

语法检查
  • 确认立即数字段在有效范围内。
  • 确认源寄存器 rs1 指向正确的操作数。
语义检查
  • 确认立即数符号扩展是否符合预期。
  • 确认结果寄存器 rd 的用途是否明确。

容易混淆 / 常见误区

仅适用于 RV64;rnum 是 4 位编码,但只有 0x0..0xA 合法,0xB..0xF 为保留编码。
rnum=0xA 不执行循环右移;其余合法 rnum 先将 rs1[63:32] 循环右移 8 位。
结果的两个 32 位半部相同,并非直接保留 rs1 的低 32 位。

常见问题

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

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

AES64KS1I 是完整算法实现吗?

不是。它只执行官方定义的 AES 密钥调度子步骤;软件仍需按算法顺序组合指令。