LB.AQ

RISC-V LB.AQ 指令详解

指令手册R-type

Zalasr 原子加载 1 字节,带 acquire-RCsc 排序标注。

指令语法

lb.aq rd, (rs1)
操作数说明
目标寄存器 rd:接收符号扩展后的加载结果;若 rd=x0,写回被丢弃。
地址寄存器 rs1:直接提供内存地址;Zalasr 语法没有 offset 立即数字段。
编码字段 rs2 固定为 00000;aq 位必须为 1,aq/rl 只影响排序标注。
Zalasr缓存与同步

指令行为说明

LB.AQ 是 Zalasr 独立原子 load-acquire/store-release 家族中的 1 字节有序原子加载。它从 x[rs1] 指向的地址原子读取 8 位,按该宽度符号扩展后写入 x[rd];语法没有 offset 字段。地址默认必须按访问宽度自然对齐,除非 misaligned atomicity granule PMA 放宽该要求。

LB.AQ Zalasr 指令解析与执行动画

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

rd
rs1
lb.aq
,(
)
排序标注
aq=1, rl=0 (acquire)
31..27
26
25
24..20
19..15
14..12
11..7
6..0
00110
funct5
1
aq
0
rl
00000
rs2=00000
01010
rs1
000
funct3
00101
rd
0101111
opcode
Zalasr 数据路径
instruction
0x340502AF
opcode
0101111 -> AMO major opcode
funct5
00110 -> LB.AQ
aq / rl
1/0 -> acquire
operands
rd=t0(x5), rs1=a0(x10)
address
a0(x10) -> 0x00001000 (no offset)
memory read
mem[0x00001000] -> 0xF2
execute
sign_extend(0xF2, 8) -> 0xFFFFFFF2
writeback
t0(x5) = 0xFFFFFFF2
8-bit 传输视图
7
6
5
4
3
2
1
0
1
1
1
1
0
0
1
0
memory 8
-
-
-
-
-
-
-
-

LB.AQ 从内存取 8 位,并按该宽度的符号位扩展到 XLEN 后写 rd。

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

快速理解与检索要点

LB.AQ 直接使用 rs1 作为地址,原子读取 1 字节并符号扩展到 rd;aq/rl 位提供排序标注,不会改变加载数据。

语法是 lb.aq rd, (rs1),没有 offset 字段,地址来自 x[rs1]。
funct5=00110 选择 Zalasr load-acquire 类,funct3=000 选择 LB.AQ 的访问宽度;AMO major opcode 为 0101111,Zalasr load 的 aq 位必须为 1。
加载 8 位后按源宽度符号扩展到 XLEN。
aq/rl 只描述内存排序,不改变加载、符号扩展或 rd=x0 的架构语义。

常见使用场景

原子与同步

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

并发与多核

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

使用前检查清单

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

容易混淆 / 常见误区

语法没有 offset 立即数字段;地址直接取自 rs1。
加载结果按 8 位源宽度符号扩展到 XLEN;Zalasr 没有无符号加载形式。
未设置 aq 的 Zalasr load 编码是 RESERVED。
Zalasr 是单条有序原子 load/store,不是 LR/SC 预留协议,也不是 AMO read-modify-write 旧值返回。

常见问题

LB.AQ 可以写 offset(rs1) 吗?

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

LB.AQ 是 LR/SC 或 AMO read-modify-write 吗?

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

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

不会。aq/rl 是排序标注;加载值仍按源宽度符号扩展到 rd。