RISC-V汇编中能否在同一行设置两个标签?
RISC-V汇编能否将两个标签放在同一行?
标准RISC-V汇编语法通常不支持直接在同一行写两个连续标签(比如你尝试的jump:loop:会被汇编器误判,把第二个标签当成指令的一部分),不过有两种可行方案实现两个标签指向同一条指令的需求:
方案1:分两行写标签(通用兼容)
这是所有RISC-V汇编器都支持的稳妥写法,把两个标签分别放在单独的行,都指向后续的同一条指令:
v: .word 5, 7, 7, -2, 0, 1, 1 n: .word 7 .text lui s0, 0x10010 lw s3, n jal jump li a7, 1 ecall li a7, 10 ecall jump: loop: lw t0, 0(s0) add s1, s1, t0 addi s0, s0, 4 #or 0x1 addi s3, s3, -1 bne s3, zero, loop mv a0, s1 jalr zero, ra, 0
这里jump和loop标签都指向lw t0, 0(s0)这条指令,完全符合你的功能需求。
方案2:同一行写多个标签(仅部分汇编器支持)
部分汇编器(比如GNU汇编器gas)允许在同一行写多个标签,每个标签后加冒号,写法如下:
jump: loop: lw t0, 0(s0)
但注意这种写法不具备通用性,换用其他RISC-V汇编器(如Spike的汇编器)可能会报语法错误,因此不推荐在需要跨环境兼容的代码中使用。
内容的提问来源于stack exchange,提问作者Fausto Zamparelli
相关产品推荐
相关产品推荐

