PC 相对地址生成
AUIPC 将 20 位 U-immediate 左移 12 位后加到当前指令地址 PC,并把结果写入 rd,常与 JALR 或加载/存储指令组成 PC-relative 地址序列。
RISC-V Unprivileged ISA, RV32I integer computational instructions将20位立即数左移12位后与当前PC相加,结果写入目标寄存器
AUIPC 使用 opcode 0010111(0x17)。20 位立即数加载到 rd 的高 20 位,低 12 位填零。
AUIPC指令采用U型格式(opcode=0010111)。将U型立即数左移12位(低12位补零)后,加上当前AUIPC指令的地址(PC),结果存入rd。该指令是实现PC相对寻址的关键,配合JALR可实现任意32位PC相对地址的控制转移,配合load/store指令的12位偏移可访问任意PC相对地址的数据。
AUIPC 用当前指令地址 PC 加上 U-immediate 左移 12 位形成 PC 相对地址,常与 JALR 或 load/store 组合访问附近代码或数据。
以下要点按 RISC-V Unprivileged ISA 手册核准,用于补充操作语义、立即数范围和边界行为。
AUIPC 将 20 位 U-immediate 左移 12 位后加到当前指令地址 PC,并把结果写入 rd,常与 JALR 或加载/存储指令组成 PC-relative 地址序列。
RISC-V Unprivileged ISA, RV32I integer computational instructions结合 «auipc x5, 0x1000 # x5 = pc + (0x1000 << 12)» 等实际代码理解该场景。
结合 «auipc x5, 0x1000 # x5 = pc + (0x1000 << 12)» 等实际代码理解该场景。
官方语义使用 AUIPC 指令自身的地址作为 PC 基址。
常与 JALR 组成远距离 PC 相对跳转,或与 load/store 的 12 位偏移组成 PC 相对数据访问。