首页/指令库/SHA-512 σ0 变换
SHA512SIG0

RISC-V SHA512SIG0 指令详解

指令手册SHA2 OP-IMM fixed-selector fields

SHA-512 σ0:ROTR64(x,1) ⊕ ROTR64(x,8) ⊕ (x >> 7)

指令语法

sha512sig0 rd, rs1

语法为 sha512sig0 rd, rs1;只有两个整数寄存器操作数,选择 x0–x31 或 ABI 名称。

32 位 OP-IMM 编码:bits 31..20=000100000110、funct3=001、opcode=0010011;没有汇编立即数。

仅 RV64 Zknh(也包含于 Zkn/Zk);对完整 64 位源执行固定循环右移、逻辑右移和异或。

x0 源恒为 0,写入 x0 被丢弃;rd=rs1 时先读取原始源值。本指令必须具有数据无关执行延迟。

Zknh加密与密码

指令行为说明

sha512sig0 是 Zknh 扩展的 SHA-512 σ0 变换:σ0(x) = ROTR64(x,1) ⊕ ROTR64(x,8) ⊕ (x >> 7)。仅在 RV64 定义,x 是完整 64 位 X(rs1),64 位结果写入 rd。RV32 的完整 σ0 变换使用 sha512sig0l/sha512sig0h 指令序列。循环右移限于输入字宽,>> 是补零的逻辑右移。

SHA512SIG0 指令解析与执行动画

受限教学输入直接执行官方 SHA-512 固定宽度位运算;不表示完整算法或微架构。

rd
rs1
sha512sig0
,

执行前 rd=rs1 时共用源值,否则演示初值 rd=0;rs1=x0 时始终读取 0。 SHA512SIG0 仅在 RV64 定义,并对完整 64 位 X(rs1) 计算。

fixed selector
source
fixed
destination
OP-IMM
31..20
000100000110
19..15
rs1=x11
14..12
001
11..7
rd=x10
6..0
0010011
执行数据路径
inb
0x0123456789ABCDEF
ror64(inb, 1)
0x8091A2B3C4D5E6F7
ror64(inb, 8)
0xEF0123456789ABCD
inb >> 7
0x0002468ACF13579B
result
0x6F92C77C6C4F1AA1
架构可见结果
a0(x10) = 0x0000000000000000

动画只展示官方 ISA 字段和架构状态;不表示完整哈希算法、流水线、缓存或时序实现。

快速理解与检索要点

sha512sig0 读取一个整数源寄存器,按固定公式计算 SHA-512 σ0,再写入 rd。只在 RV64 定义,输入和结果均为 64 位。

32 位指令的 bits 31..20 固定为 000100000110(0x106),funct3=001,opcode=0010011;语法没有立即数。
x0 源恒为 0,rd=x0 丢弃写回;rd=rs1 时读取写回前的源值。
本指令必须具有数据无关执行延迟;动画步骤不代表处理器周期。

常见使用场景

SHA-512 σ0 变换

RV64 Zknh,x11=1:sha512sig0 x10, x11 按本页固定公式得到 x10=0x8100000000000000。输入和结果均为 64 位。

使用前检查清单

语法检查
  • 语法为 sha512sig0 rd, rs1;只有两个整数寄存器操作数,选择 x0–x31 或 ABI 名称。
  • 32 位 OP-IMM 编码:bits 31..20=000100000110、funct3=001、opcode=0010011;没有汇编立即数。
语义检查
  • 仅 RV64 Zknh(也包含于 Zkn/Zk);对完整 64 位源执行固定循环右移、逻辑右移和异或。
  • x0 源恒为 0,写入 x0 被丢弃;rd=rs1 时先读取原始源值。本指令必须具有数据无关执行延迟。

容易混淆 / 常见误区

σ0/σ1 与 Σ0/Σ1 是不同的固定公式,编号 0/1 不表示输入的低半部/高半部。
旋转在固定字宽内进行;有 >> 项时必须逻辑右移,不复制符号位。
仅 RV64;不要将 32 位 SHA-256 公式用于此 64 位变换。

常见问题

SHA512SIG0 的寄存器宽度是什么?

sha512sig0 读取一个整数源寄存器,按固定公式计算 SHA-512 σ0,再写入 rd。只在 RV64 定义,输入和结果均为 64 位。

固定选择子是立即数操作数吗?

不是。汇编语法是 sha512sig0 rd, rs1;bits 31..20 选择此变换,不能作为算术立即数修改或符号扩展。