首页/指令库/PC加高位立即数
AUIPC

RISC-V AUIPC 指令详解

指令手册U-type

将 20 位 U-immediate 形成的 32 位偏移加到本条指令 PC;RV64 先符号扩展偏移,结果写入 rd

指令语法

auipc rd, imm
操作数说明
rd:接收 PC 加偏移的 XLEN 位结果;rd=x0 时丢弃写回。
imm:指定 bits [31:12] 的 20 位字段,低 12 位补零形成 32 位偏移;RV64 先符号扩展到 XLEN。
PC 基址是本条 AUIPC 指令的地址;结果的低 12 位不保证为零。
RV32IRV64I地址计算

指令行为说明

AUIPC 使用 U-type 编码(opcode=0010111)。汇编操作数是 20 位 U-immediate:低 12 位补零形成 32 位偏移,在 RV64 上先符号扩展到 64 位,再加到 AUIPC 指令自身的地址,结果保留低 XLEN 位写入 rd。AUIPC 自身不跳转、不访问数据内存。它可与 JALR 或 load/store 的 12 位偏移组成 PC 相对访问序列;RV32 可覆盖 32 位 PC 相对地址,RV64 的组合偏移范围为 [-2^31-2^11, 2^31-2^11-1]。

AUIPC 指令解析与执行动画

从机器码字段解析开始,依次展示操作数读取、该指令专属语义计算和 ISA 可见状态更新。

rd
imm20
auipc
,
执行环境

本例使用固定寄存器初值和初始 PC=0x2000;取指成功,没有异步中断或额外扩展检查。异常分支只显示普通提交停止,陷入后的 PC 和处理程序状态由 EEI 决定。

PC
0x00002000
31..12
11..7
6..0
00000000000000010000
imm[31:12]
00101
rd
0010111
opcode
执行数据路径
instruction
0x00010297
opcode
0010111 -> AUIPC
rd / pc
t0(x5) / 0x00002000
imm[31:12]
00000000000000010000 << 12 -> 0x00010000
PC add
尚未计算
x5
t0(x5) = 0x00003001; pc = 0x00002000
当前步骤

概念步骤:拿到 32-bit 指令编码

机器码按当前指令格式切成字段,动画从 encoding/decode 开始。

encoding: 0x00010297
syntax : auipc t0(x5), 0x10
待提交结果: 尚未计算
当前架构状态
t0(x5) = 0x00003001; pc = 0x00002000

该动画展示 ISA 可见的解码和状态变化,不表示任何特定 CPU 的流水线、缓存、预测或时序实现。

快速理解与检索要点

AUIPC 将本条指令的 PC 与 U-immediate 形成的偏移相加。RV64 先将该 32 位偏移符号扩展到 XLEN;它只生成地址,常与 JALR 或 load/store 配合。

AUIPC 使用当前 AUIPC 指令的 PC,而不是下一条指令地址。
AUIPC+JALR 可组成 PC 相对控制转移序列。
U-immediate 指定 bits [31:12];低 12 位补零后形成偏移,RV64 再符号扩展。
rd=x0 时丢弃结果;AUIPC 本身不执行控制转移或数据内存访问。

官方规范要点

以下要点按 RISC-V Unprivileged ISA 手册核准,用于补充操作语义、立即数范围和边界行为。

常见使用场景

地址与指针

RV32I/RV64I,PC=0x2000:auipc x5, 0x1000 得到 x5=0x01002000;只生成寄存器地址值,不跳转或访问数据内存。

常量与立即数

RV32I/RV64I,PC=0x2000:auipc x5, 0x1000 得到 x5=0x01002000;只生成寄存器地址值,不跳转或访问数据内存。

使用前检查清单

语法检查
  • 确认高 20 位立即数(imm[31:12])值正确。
语义检查
  • 确认配合 后续指令计算 PC 相对地址。
  • 确认 rd 不为 x0(除非故意写零寄存器)。

容易混淆 / 常见误区

PC 基址是 AUIPC 指令自身的地址,不是下一条指令。
低 12 位为零的是偏移;加上 PC 后,rd 的低 12 位来自 PC,不保证为零。
RV64 将 32 位偏移符号扩展到 XLEN;不能把它当作零扩展的正数。

常见问题

AUIPC 的 PC 是哪一个地址?

官方语义使用 AUIPC 指令自身的地址作为 PC 基址。

AUIPC 常和哪些指令配合?

常与 JALR 组成远距离 PC 相对跳转,或与 load/store 的 12 位偏移组成 PC 相对数据访问。