GCC是否为riscv的“jal”指令生成错误的汇编代码?

jhiyze9q  于 2023-05-18  发布在  其他
关注(0)|答案(1)|浏览(102)

riscv的generate jal指令获取意外代码
我在test_jal.s中有一个riscv汇编代码:

jal a0, 42

我把它编译成

riscv64-linux-gnu-gcc -c -Wl,-Ttext=0x0 -nostdlib -mno-relax -o test_jal test_jal.s

然后我生成原始的riscv二进制文件

riscv64-linux-gnu-objcopy -O binary test_jal test_jal.bin

我使用hexdump -C test_jal. bin来生成它的十六进制代码:

6F 05 00 00

然后我使用riscv 64-linux-gnu-objdump来分解它。我有

jal     a0,0x0

我可以做错什么吗?
系统:WSL ubuntu 22.04 gcc verison:9.3.0

zqdjd7g9

zqdjd7g91#

可能是汇编程序把42转换成0,因为基本上没有地方可以跳转。尝试更长的函数,如:

.global main

.data
    msg: .string "Hello World!"
.text
   main:    
       jal  ra, function
    
       li   a7, 93
       li   a0, 0
       ecall

   function:
      la t0, msg
    
      li a7, 4
      mv a0, t0
      ecall
    
      ret

这是针对Rars Emulator完成的示例

相关问题