皋陶 发表于 2020-8-24 23:08:31

RISC-V反汇编显示原始指令和寄存器编号

本帖最后由 皋陶 于 2020-8-25 18:04 编辑

反汇编时添加 -M no-aliases,numeric选项,输出原始指令和寄存器编号。
mingdu.zheng at gmail dot com

调用objdump反汇编,默认情况下,会将指令反汇编成伪指令或指令别名,会将寄存器反汇编成ABI寄存器名。用默认参数反汇编结果如下:
$ riscv64-unknown-elf-objdump -d hello.o

00000000 <main>:
   0:      00000537                  lui      a0,0x0
   4:      1141                        addi      sp,sp,-16
   6:      00050513                  mv      a0,a0
   a:      c606                        sw      ra,12(sp)
   c:      00000097                  auipc      ra,0x0
10:      000080e7                  jalr      ra
14:      40b2                        lw      ra,12(sp)
16:      4501                        li      a0,0
18:      0141                        addi      sp,sp,16
1a:      8082                        ret
上面的输出不区分普通指令(32位指令)和压缩指令(16位指令),还有像ret这样的伪指令,寄存器名称是a0、sp、ra等ABI名称。添加 -M no-aliases,numeric选项后反汇编结果如下:
$ riscv64-unknown-elf-objdump -d hello.o -M no-aliases,numeric

00000000 <main>:
   0:      00000537                  lui      x10,0x0
   4:      1141                        c.addi      x2,-16
   6:      00050513                  addi      x10,x10,0 # 0 <main>
   a:      c606                        c.swsp      x1,12(x2)
   c:      00000097                  auipc      x1,0x0
10:      000080e7                  jalr      x1,0(x1) # c <main+0xc>
14:      40b2                        c.lwsp      x1,12(x2)
16:      4501                        c.li      x10,0
18:      0141                        c.addi      x2,16
1a:      8082                        c.jr      x1
no-aliases选项要求输出原始指令,即指令集架构文档中的指令名称;numeric选项要求输出寄存器编号。
添加附加选项后,明确区分普通指令和压缩指令(c.打头),寄存器名全部是x1、x2、x10了。本篇完,感谢关注:RISC-V单片机中文网
页: [1]
查看完整版本: RISC-V反汇编显示原始指令和寄存器编号