SB.RL

RISC-V SB.RL 指令详解

指令手册R-type

Zalasr 原子存储 1 字节,带 release-RCsc 排序标注。

指令语法

sb.rl rs2, (rs1)
操作数说明
源寄存器 rs2:提供要写入内存的低位数据,宽度由 B/H/W/D 形式决定。
地址寄存器 rs1:直接提供内存地址;Zalasr 语法没有 offset 立即数字段。
编码字段 rd 固定为 00000/x0;rl 位必须为 1,aq/rl 只影响排序标注。
Zalasr缓存与同步

指令行为说明

SB.RL 是 Zalasr 独立原子 load-acquire/store-release 家族中的 1 字节有序原子存储。它把 x[rs2] 的低 8 位原子写入 x[rs1] 指向的地址;语法没有 offset 字段,编码中的 rd 固定为 x0。地址默认必须按访问宽度自然对齐,除非 misaligned atomicity granule PMA 放宽该要求。

SB.RL Zalasr 指令解析与执行动画

展示 Zalasr 独立 store-release 的 AMO 编码、无 offset 地址语法、8-bit 数据传输和 aq/rl 排序标注。

rs2
rs1
sb.rl
,(
)
31..27
26
25
24..20
19..15
14..12
11..7
6..0
00111
funct5
0
aq
1
rl
01011
rs2
01010
rs1
000
funct3
00000
rd=00000
0101111
opcode
Zalasr 数据路径
instruction
0x3AB5002F
opcode
0101111 -> AMO major opcode
funct5
00111 -> SB.RL
aq / rl
0/1 -> release
operands
rs2=a1(x11), rs1=a0(x10), rd=x0
address
a0(x10) -> 0x00001000 (no offset)
store source
low 8 bits of a1(x11) -> 0x7F
execute
atomic store 8 bits at 0x00001000
writeback
mem[0x00001000] = 0x7F
8-bit 传输视图
7
6
5
4
3
2
1
0
0
1
1
1
1
1
1
1
rs2 low 8
-
-
-
-
-
-
-
-

SB.RL 只把 rs2 的低 8 位写入内存;rs2 高位不参与本次存储值。

该动画展示 Zalasr 的 ISA 可见原子 load/store 与 aq/rl 排序标注;不模拟 LR/SC 预留、AMO read-modify-write 旧值返回、cache、总线或流水线时序。

快速理解与检索要点

SB.RL 直接使用 rs1 作为地址,原子写入 rs2 的低 8 位;aq/rl 位提供排序标注,不会改变写入数据。

语法是 sb.rl rs2, (rs1),没有 offset 字段,地址来自 x[rs1]。
funct5=00111 选择 Zalasr store-release 类,funct3=000 选择 SB.RL 的访问宽度;AMO major opcode 为 0101111,Zalasr store 的 rl 位必须为 1,rd 固定为 x0。
存储值来自 x[rs2] 的低 8 位。
aq/rl 只描述内存排序,不改变写入数据,也不会返回旧内存值。

常见使用场景

原子与同步

结合 «sb.rl x5, (x6)» 等实际代码理解该场景。

并发与多核

结合 «sb.rl x5, (x6)» 等实际代码理解该场景。

使用前检查清单

语法检查
  • 确认当前指令格式为 R-type。
  • 确认操作数排列顺序与示例一致。
语义检查
  • 确认目标寄存器用途和调用约定兼容。
  • 确认该指令不是伪指令展开后的底层形式。

容易混淆 / 常见误区

语法没有 offset 立即数字段;地址直接取自 rs1。
存储只使用 rs2 的低 8 位;高位不参与写入值。
未设置 rl 的 Zalasr store 编码是 RESERVED。
Zalasr 是单条有序原子 load/store,不是 LR/SC 预留协议,也不是 AMO read-modify-write 旧值返回。

常见问题

SB.RL 可以写 offset(rs1) 吗?

不可以。官方语法是 sb.rl rs2, (rs1),没有 offset 立即数字段;地址直接来自 rs1。

SB.RL 是 LR/SC 或 AMO read-modify-write 吗?

不是。Zalasr 这些指令是单条有序原子 load/store;动画不展示预留状态或旧值返回。

aq/rl 会改变数据结果吗?

不会。aq/rl 是排序标注;存储值仍是 rs2 的低 8 位。