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]