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

版权声明:本文为博主原创文章,转载请保持文章完整,保留作者信息。 https://blog.csdn.net/zoomdy/article/details/82981599

反汇编时添加 -M no-aliases,numeric选项,输出原始指令和寄存器编号。

mingdu.zheng at gmail dot com
https://blog.csdn.net/zoomdy/article/details/82981599

调用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这样的伪指令,寄存器名称是a0spra等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.打头),寄存器名全部是x1x2x10了。

猜你喜欢

转载自blog.csdn.net/zoomdy/article/details/82981599