伪指令与汇编写法工作台

RISC-V 伪指令与汇编写法查询:展开、编码和使用场景

这里按 RISC-V Assembly Programmer's Manual 组织伪指令、汇编别名和标准编码写法,帮助你先看懂 li、call、ret、fence.tso 等写法,再回到真实指令或编码理解行为、范围和注意事项。

59 条条目59 条可见
先分清层级

伪指令和汇编写法属于汇编器层;性能、异常、扩展依赖和立即数范围要看展开后的真实指令或编码。

再看展开

同一写法可能因 XLEN、PIC/nopic、符号距离、可用扩展或链接器松弛产生不同序列,详情页会标出常见路径。

官方来源

展开表参考 RISC-V Assembly Programmer's Manual;真实指令语义参考 Unprivileged ISA;ABI 和重定位参考 psABI。

按用途

伪指令列表

59 条可见

call

汇编器伪指令

RISC-V Assembly Programmer's Manual 第 26 章将 call symbol 和 call rd, symbol 列为用于调用远距离子程序的汇编器伪指令。call symbol 默认使用 ra 作为链接寄存器保存返回地址;call rd, symbol 则使用指定的 rd 作为链接寄存器保存返回地址。psABI 将 CALL 伪指令生成的 AUIPC+JALR 指令对与 R_RISCV_CALL 或 R_RISCV_CALL_PLT 重定位关联。

call
详情页
你写下
call symbol call rd, symbol
真实展开
auipc ra, 0 jalr ra, ra, 0

j

汇编器伪指令

RISC-V j 伪指令在 RISC-V Assembly Programmer's Manual 中写作 j offset,并展开为 jal x0, offset。Unprivileged ISA 说明 J 是 rd=x0 的 JAL 汇编器伪指令。

j
详情页
你写下
j offset
真实展开
jal x0, offset

la

汇编器伪指令

RISC-V la 伪指令在 RISC-V Assembly Programmer's Manual 中按 .option nopic 或 .option pic 选择不同展开:前者为 AUIPC 加 ADDI,后者为 AUIPC 加经 GOT 的 l{w|d}。

la
详情页
你写下
la rd, symbol
真实展开
.option nopic auipc rd, symbol[31:12] addi rd, rd, symbol[11:0] .option pic auipc rd, symbol@GOT[31:12] l{w|d} rd, symbol@GOT[11:0](rd)

li

汇编器伪指令

RISC-V li 伪指令在 RISC-V Assembly Programmer's Manual 中写作 li rd, immediate,含义为加载立即数。该表将其展开列为 Myriad sequences,并说明具体数值可生成不同序列。

li
详情页
你写下
li rd, immediate
真实展开
Myriad sequences

mv

汇编器伪指令

RISC-V mv 伪指令在 RISC-V Assembly Programmer's Manual 中写作 mv rd, rs,并展开为 addi rd, rs, 0。Unprivileged ISA 说明 ADDI rd, rs1, 0 用于实现 MV。

mv
详情页
你写下
mv rd, rs
真实展开
addi rd, rs, 0

nop

汇编器伪指令

RISC-V nop 伪指令的 nop 展开为 ADDI x0, x0, 0,是标准 NOP 编码;除推进 PC 和递增适用性能计数器外,不改变架构可见状态。

详情页
你写下
nop
真实展开
addi x0, x0, 0

ret

汇编器伪指令

RISC-V ret 伪指令的 ret 展开为 JALR x0, x1, 0;RISC-V Assembly Programmer's Manual 将其列为 Return from subroutine。JALR 目标由 rs1 加符号扩展 12 位立即数形成,并清除最低位。

详情页
你写下
ret
真实展开
jalr x0, x1, 0

beqz

汇编器伪指令

RISC-V beqz 伪指令的 beqz 展开为 BEQ rs, x0, offset,表示寄存器等于零时分支。BEQ 使用有符号 B 立即数形成分支目标,条件分支范围为正负 4 KiB。

详情页
你写下
beqz rs, offset
真实展开
beq rs, x0, offset

bnez

汇编器伪指令

RISC-V bnez 伪指令的 bnez 展开为 BNE rs, x0, offset,表示寄存器不等于零时分支。BNE 使用有符号 B 立即数形成分支目标,条件分支范围为正负 4 KiB。

详情页
你写下
bnez rs, offset
真实展开
bne rs, x0, offset

jr

汇编器伪指令

jr 是汇编器伪指令,展开为 jalr x0, rs, 0。JALR 用 rs 加符号扩展的 12 位立即数形成目标,并清除目标最低位。

详情页
你写下
jr rs
真实展开
jalr x0, rs, 0

tail

汇编器伪指令

tail symbol 是对远距离子程序的尾调用伪指令。默认基础指令为 auipc x6, offset[31:12] 与 jalr x0, x6, offset[11:0];启用 Zicfilp 时使用 x7 作为暂存寄存器。

tail
详情页
你写下
tail symbol
真实展开
auipc x6, offset[31:12] jalr x0, x6, offset[11:0]

neg

汇编器伪指令

neg 是汇编器伪指令,展开为 sub rd, x0, rs。SUB 计算零减 rs,忽略溢出并把低 XLEN 位结果写入 rd。

详情页
你写下
neg rd, rs
真实展开
sub rd, x0, rs

not

汇编器伪指令

RISC-V not 伪指令展开为 xori rd, rs, -1。XORI 将 rs 与符号扩展的 12 位立即数按位异或;立即数为 -1 时实现按位逻辑取反并写入 rd。

not伪指令按位取反XORI位操作反码
详情页
你写下
not rd, rs
真实展开
xori rd, rs, -1

seqz

汇编器伪指令

RISC-V seqz 伪指令展开为 sltiu rd, rs, 1。SLTIU 进行无符号比较;该形式仅在 rs 为零时向 rd 写入 1,否则写入 0。

seqz伪指令等于零SLTIU置位空指针判断
详情页
你写下
seqz rd, rs
真实展开
sltiu rd, rs, 1

snez

汇编器伪指令

RISC-V snez 伪指令展开为 sltu rd, x0, rs。SLTU 进行无符号比较;该形式仅在 rs 非零时向 rd 写入 1,否则写入 0。

snez伪指令非零置位SLTU布尔化非零判断
详情页
你写下
snez rd, rs
真实展开
sltu rd, x0, rs

lga

汇编器伪指令

RISC-V lga rd, symbol 是加载全局符号地址的汇编器伪指令。它使用 AUIPC 加 GOT 加载;文档示例在 RV64 使用 ld,在 RV32 使用 lw。

RISC-V lgalga rd全局符号地址AUIPC 加RV64 使用 ld
详情页
你写下
lga rd, symbol
真实展开
auipc rd, symbol@GOT[31:12] l{w|d} rd, symbol@GOT[11:0](rd)

lla

汇编器伪指令

RISC-V lla rd, symbol 是加载局部符号地址的汇编器伪指令。它使用 AUIPC 加 PC 相对低立即数序列,展开为 AUIPC 与 ADDI。

RISC-V llalla rd局部符号地址PC 相对低立即数
详情页
你写下
lla rd, symbol
真实展开
auipc rd, symbol[31:12] addi rd, rd, symbol[11:0]

sgtz

汇编器伪指令

RISC-V sgtz 伪指令展开为 slt rd, x0, rs。SLT 进行有符号比较;当 rs 大于零时该形式向 rd 写入 1,否则写入 0。

sgtz伪指令比较有符号正数汇编别名
详情页
你写下
sgtz rd, rs
真实展开
slt rd, x0, rs

sltz

汇编器伪指令

RISC-V sltz 伪指令展开为 slt rd, rs, x0。SLT 进行有符号比较;当 rs 小于零时该形式向 rd 写入 1,否则写入 0。

sltz伪指令比较有符号负数汇编别名
详情页
你写下
sltz rd, rs
真实展开
slt rd, rs, x0

csrr

汇编器伪指令

RISC-V csrr 伪指令的 csrr 展开为 CSRRS rd, csr, x0,用于读取 CSR。CSRRS 将 CSR 值零扩展至 XLEN 后写入 rd;rs1 为 x0 时不写 CSR,但仍会读取并可能产生读取副作用。

详情页
你写下
csrr rd, csr
真实展开
csrrs rd, csr, x0

csrw

csrw 是汇编器伪指令,展开为 csrrw x0, csr, rs。CSRRW 将 rs 的初值写入所选 CSR;rd 为 x0 时不会读取该 CSR。

详情页
你写下
csrw csr, rs
真实展开
csrrw x0, csr, rs

csrc

汇编器伪指令

csrc 是汇编器伪指令,展开为 csrrc x0, csr, rs。CSRRC 清除 rs 选中的可写 CSR 位,旧值写入 x0。

详情页
你写下
csrc csr, rs
真实展开
csrrc x0, csr, rs

csrs

汇编器伪指令

csrs 是汇编器伪指令,展开为 csrrs x0, csr, rs。CSRRS 设置 rs 选中的可写 CSR 位,旧值写入 x0。

详情页
你写下
csrs csr, rs
真实展开
csrrs x0, csr, rs

csrci

汇编器伪指令

RISC-V csrci 是 CSR 立即数伪指令,展开为 csrrci x0, csr, imm。5 位 uimm 零扩展为 XLEN 位值,用作清除可写 CSR 位的掩码;uimm=0 时不写入 CSR,但仍读取。

csrci
详情页
你写下
csrci csr, imm
真实展开
csrrci x0, csr, imm

csrsi

汇编器伪指令

RISC-V csrsi 是 CSR 立即数伪指令,展开为 csrrsi x0, csr, imm。5 位 uimm 零扩展为 XLEN 位值,用作设置可写 CSR 位的掩码;uimm=0 时不写入 CSR,但仍读取。

csrsi
详情页
你写下
csrsi csr, imm
真实展开
csrrsi x0, csr, imm

csrwi

汇编器伪指令

RISC-V csrwi 是 CSR 立即数伪指令,展开为 csrrwi x0, csr, imm。5 位 uimm 零扩展为 XLEN 位值;即使 uimm=0 也执行 CSR 写入,且因 rd=x0 不读取 CSR。

csrwi
详情页
你写下
csrwi csr, imm
真实展开
csrrwi x0, csr, imm

bgez

bgez 是汇编器伪指令,展开为 bge rs, x0, offset。当 rs 按有符号数大于或等于 x0 时,底层 BGE 采用 B 型偏移转移。

详情页
你写下
bgez rs, offset
真实展开
bge rs, x0, offset

bgt

bgt 是汇编器伪指令,展开为 blt rt, rs, offset。它通过反转 BLT 的操作数,在 rs 按有符号数大于 rt 时转移。

详情页
你写下
bgt rs, rt, offset
真实展开
blt rt, rs, offset

bgtu

汇编器伪指令

bgtu 是汇编器伪指令,展开为 bltu rt, rs, offset。它在 rs 按无符号数大于 rt 时分支。

详情页
你写下
bgtu rs, rt, offset
真实展开
bltu rt, rs, offset

bgtz

汇编器伪指令

bgtz 是汇编器伪指令,展开为 blt x0, rs, offset。它在 rs 按有符号数大于零时分支。

详情页
你写下
bgtz rs, offset
真实展开
blt x0, rs, offset

ble

汇编器伪指令

ble 是汇编器伪指令,展开为 bge rt, rs, offset。它在 rs 按有符号数小于等于 rt 时分支。

详情页
你写下
ble rs, rt, offset
真实展开
bge rt, rs, offset

bleu

汇编器伪指令

bleu 是汇编器伪指令,展开为 bgeu rt, rs, offset。它在 rs 按无符号数小于等于 rt 时分支。

详情页
你写下
bleu rs, rt, offset
真实展开
bgeu rt, rs, offset

blez

汇编器伪指令

blez 是汇编器伪指令,展开为 bge x0, rs, offset。它在 rs 按有符号数小于等于零时分支。

详情页
你写下
blez rs, offset
真实展开
bge x0, rs, offset

bltz

汇编器伪指令

bltz 是汇编器伪指令,展开为 blt rs, x0, offset。BLT 在 rs 按有符号数小于 x0 时分支。

详情页
你写下
bltz rs, offset
真实展开
blt rs, x0, offset

frflags

frflags 是汇编器伪指令,展开为 csrrs rd, fflags, x0。fflags 是 fcsr 的累计异常标志字段,位于 bit 4:0。

详情页
你写下
frflags rd
真实展开
csrrs rd, fflags, x0

fsflags

fsflags 是汇编器伪指令。fsflags rd, rs 展开为 csrrw rd, fflags, rs;fsflags rs 展开为 csrrw x0, fflags, rs。fflags 位于 fcsr bit 4:0。

详情页
你写下
fsflags rd, rs fsflags rs
各写法对应的展开
fsflags rd, rs
csrrw rd, fflags, rs
fsflags rs
csrrw x0, fflags, rs

frcsr

汇编器伪指令

RISC-V frcsr 伪指令按 RISC-V Assembly Programmer's Manual 展开为 csrrs rd, fcsr, x0;ISA 第 21.2 节说明它把 fcsr 复制到整数寄存器 rd。

frcsr 伪指令RISC-V frcsrfrcsr 展开读取浮点控制状态CSRRS fcsr
详情页
你写下
frcsr rd
真实展开
csrrs rd, fcsr, x0

frrm

汇编器伪指令

RISC-V frrm 伪指令按 RISC-V Assembly Programmer's Manual 展开为 csrrs rd, frm, x0;ISA 第 21.2 节说明它把 frm 复制到 rd 的低三位,并将其他位清零。

frrm 伪指令RISC-V frrmfrrm 展开读取浮点舍入模式CSRRS frm
详情页
你写下
frrm rd
真实展开
csrrs rd, frm, x0

fscsr

汇编器伪指令

fscsr 通过 CSRRW 写入 fcsr。两操作数形式在 rd 非 x0 时读取并返回旧值;rd=x0 时不读取 CSR。单操作数形式使用 x0 作为目的寄存器。

fscsr 伪指令RISC-V fscsrfscsr 展开交换浮点控制状态CSRRW fcsr
详情页
你写下
fscsr rd, rs fscsr rs
各写法对应的展开
fscsr rd, rs
csrrw rd, fcsr, rs
fscsr rs
csrrw x0, fcsr, rs

fsflagsi

汇编器伪指令

RISC-V fsflagsi 通过 CSRRWI 用五位零扩展立即数写入 fflags。fsflagsi rd, imm 仅在 rd 不是 x0 时读取并返回旧值;rd=x0 时,包括单操作数形式,不读取 fflags。

fsflagsi 伪指令RISC-V fsflagsifsflagsi 展开立即数异常标志CSRRWI fflags
详情页
你写下
fsflagsi rd, imm fsflagsi imm
各写法对应的展开
fsflagsi rd, imm
csrrwi rd, fflags, imm
fsflagsi imm
csrrwi x0, fflags, imm

fsrm

汇编器伪指令

fsrm 通过 CSRRW 将 rs 的低三位写入 frm。两操作数形式只有在 rd 非 x0 时读取并返回旧值;rd=x0 或单操作数形式不读取 frm。

fsrm 伪指令RISC-V fsrmfsrm 展开交换浮点舍入模式CSRRW frm
详情页
你写下
fsrm rd, rs fsrm rs
各写法对应的展开
fsrm rd, rs
csrrw rd, frm, rs
fsrm rs
csrrw x0, frm, rs

fsrmi

汇编器伪指令

RISC-V fsrmi 是访问 frm 的汇编器伪指令:fsrmi rd, imm 展开为 csrrwi rd, frm, imm;fsrmi imm 展开为 csrrwi x0, frm, imm。CSR 立即数字段为五位。

RISC-V fsrmifsrmi rdfsrmi immcsrrwi rdCSR 立即数字段
详情页
你写下
fsrmi rd, imm fsrmi imm
各写法对应的展开
fsrmi rd, imm
csrrwi rd, frm, imm
fsrmi imm
csrrwi x0, frm, imm

jal

汇编器别名(单操作数 jal)

RISC-V jal offset 是单操作数汇编别名,展开为 jal x1, offset。底层 JAL 把 pc+4 写入 rd,并以两字节倍数的有符号偏移形成目标,范围为正负 1 MiB。

RISC-V jaljal offsetjal x1pc+41 MiB
详情页
你写下
jal offset
真实展开
jal x1, offset

jalr

汇编器别名(单寄存器 jalr)

RISC-V jalr rs 是单寄存器汇编别名,展开为 jalr x1, rs, 0。底层 JALR 将符号扩展 12 位立即数加到 rs1、清除目标最低位,并把 pc+4 写入 rd。

RISC-V jalrjalr rsjalr x112 位立即数pc+4
详情页
你写下
jalr rs
真实展开
jalr x1, rs, 0

sext-w

汇编器伪指令

RISC-V sext.w 伪指令展开为 addiw rd, rs, 0。它是 RV64I 形式:把 rs 的低 32 位结果符号扩展到 64 位 rd。

sext.w 伪指令ADDIWRV64I低 32 位符号扩展
详情页
你写下
sext.w rd, rs
真实展开
addiw rd, rs, 0

negw

汇编器伪指令

RISC-V negw 是 RV64 汇编器伪指令,展开为 subw rd, x0, rs。SUBW 先在低 32 位相减,再将 32 位结果符号扩展至 XLEN。

negw 伪指令RISC-V negwnegw 展开SUBW 展开RV64 字取负32 位符号扩展
详情页
你写下
negw rd, rs
真实展开
subw rd, x0, rs

rdcycle

汇编器伪指令

RISC-V rdcycle 是读取 cycle CSR 的伪指令,展开为 csrrs rd, cycle, x0。它读取 cycle 的低 XLEN 位;在 XLEN 至少为 64 时可读取完整 64 位计数器。

rdcycle 伪指令RISC-V rdcyclerdcycle 展开CSRRS cycleZicntr 计数器低 XLEN 位
详情页
你写下
rdcycle rd
真实展开
csrrs rd, cycle, x0

rdcycleh

汇编器伪指令

RISC-V rdcycleh 是读取 cycle 高半的伪指令,展开为 csrrs rd, cycleh, x0。它只在 XLEN=32 时存在,读取同一 64 位 cycle 计数器的位 63 至 32。

rdcycleh 伪指令RISC-V rdcyclehrdcycleh 展开CSRRS cyclehRV32 高半读取cycle 高低重试
详情页
你写下
rdcycleh rd
真实展开
csrrs rd, cycleh, x0

rdinstret

汇编器伪指令

RISC-V rdinstret 是读取 instret CSR 的伪指令,展开为 csrrs rd, instret, x0。它读取低 XLEN 位;instret 从过去任意起点计数该 hart 已退休的指令。

rdinstret 伪指令RISC-V rdinstretrdinstret 展开CSRRS instretZicntr 计数器低 XLEN 位
详情页
你写下
rdinstret rd
真实展开
csrrs rd, instret, x0

rdinstreth

汇编器伪指令

RISC-V rdinstreth 伪指令展开为 csrrs rd, instreth, x0;它只在 RV32 中读取 instret 计数器的 bits 63:32。

rdinstreth 伪指令instret 高32位RV32 instreth后缀形式Zicntr
详情页
你写下
rdinstreth rd
真实展开
csrrs rd, instreth, x0

rdtime

汇编器伪指令

RISC-V rdtime 伪指令展开为 csrrs rd, time, x0,读取 time CSR 的低 XLEN 位。

rdtime 伪指令time CSR低XLEN位Zicntrrdtimeh
详情页
你写下
rdtime rd
真实展开
csrrs rd, time, x0

rdtimeh

汇编器伪指令

RISC-V rdtimeh 伪指令展开为 csrrs rd, timeh, x0;它只在 RV32 中读取 time 计数器的 bits 63:32。

rdtimeh 伪指令time 高32位RV32 timeh后缀形式Zicntr
详情页
你写下
rdtimeh rd
真实展开
csrrs rd, timeh, x0

zext-b

汇编器伪指令

RISC-V zext.b 伪指令展开为 andi rd, rs, 255。ANDI 对 rs 与符号扩展的 12 位立即数做按位与;立即数 255 保留低 8 位。

zext.b 伪指令ANDIANDI 255低 8 位零扩展
详情页
你写下
zext.b rd, rs
真实展开
andi rd, rs, 255

zext-h

Zbb/Zbkb 指令;另列等价移位序列

zext.h 指令将源寄存器低 16 位零扩展到 XLEN。Zbb 扩展提供该指令;Zbkb 扩展的 RV32 PACK 或 RV64 PACKW 在 rs2=x0 时也是 zext.h。RISC-V Assembly Programmer's Manual 另列等价的 SLLI/SRLI 移位序列。

zext.h 指令Zbb 扩展Zbkb 扩展移位序列低 16 位零扩展
详情页
你写下
zext.h rd, rs
等价移位序列
slli rd, rs, XLEN - 16 srli rd, rd, XLEN - 16

zext-w

汇编器伪指令

RISC-V zext.w 伪指令按RISC-V Assembly Programmer's Manual展开为 slli rd, rs, XLEN - 32 后接 srli rd, rd, XLEN - 32,以零扩展字。在 RV64 且 Zba 可用时,表中有单指令形式。

zext.w 伪指令SLLISRLI低 32 位零扩展
详情页
你写下
zext.w rd, rs
真实展开
slli rd, rs, XLEN - 32 srli rd, rd, XLEN - 32

pause

Zihintpause PAUSE HINT 指令(汇编写法:pause)

RISC-V Assembly Programmer's Manual将 pause 列为 fence w, 0 的 PAUSE hint 汇编写法。非特权 ISA 将 PAUSE 定义为 Zihintpause 的 HINT 指令:它提示当前 hart 暂时降低或暂停指令退休速率,效果持续时间有界且可为零。

PAUSE HINT 指令RISC-V pausepause 展开fence w 0Zihintpause 提示自旋等待提示
详情页
你写下
pause
真实展开
fence w, 0

sbreak

旧版兼容名称

RISC-V sbreak 是 EBREAK 的旧名称;规范说明两者具有相同功能和编码,EBREAK 返回控制到调试环境。

sbreak 旧名称EBREAK相同功能和编码旧版兼容名称RISC-V sbreak
详情页
你写下
sbreak
真实展开
EBREAK

scall

旧版兼容名称

RISC-V scall 是 ECALL 的旧名称;规范说明两者具有相同功能和编码,ECALL 向执行环境提出服务请求。

scall 旧名称ECALL相同功能和编码旧版兼容名称RISC-V scall
详情页
你写下
scall
真实展开
ECALL

fence-tso

真实 FENCE 指令编码写法

RISC-V FENCE.TSO 是真实 FENCE 指令的编码写法:fm=1000、pred=RW、succ=RW。它排序前驱加载与所有后继内存操作,以及前驱存储与后继存储;前驱非 AMO 存储与后继非 AMO 加载仍不排序。

fence.tso
详情页
你写下
fence.tso
编码字段
FENCE.TSO # fm=1000, pred=RW, succ=RW