查看: 1936|回复: 0
收起左侧

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

[复制链接]

  离线 

  • TA的每日心情
    奋斗
    2021-3-3 12:32
  • 签到天数: 10 天

    [LV.3]

    发表于 2020-8-24 23:08:31 | 显示全部楼层 |阅读模式

    有人预言,RISC-V或将是继Intel和Arm之后的第三大主流处理器体系。欢迎访问全球首家只专注于RISC-V单片机行业应用的中文网站

    您需要 登录 才可以下载或查看,没有帐号?立即注册

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

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


    mingdu.zheng at gmail dot com

    调用objdump反汇编,默认情况下,会将指令反汇编成伪指令或指令别名,会将寄存器反汇编成ABI寄存器名。用默认参数反汇编结果如下:


    1. $ riscv64-unknown-elf-objdump -d hello.o

    2. 00000000 <main>:
    3.    0:        00000537                  lui        a0,0x0
    4.    4:        1141                        addi        sp,sp,-16
    5.    6:        00050513                  mv        a0,a0
    6.    a:        c606                        sw        ra,12(sp)
    7.    c:        00000097                  auipc        ra,0x0
    8.   10:        000080e7                  jalr        ra
    9.   14:        40b2                        lw        ra,12(sp)
    10.   16:        4501                        li        a0,0
    11.   18:        0141                        addi        sp,sp,16
    12.   1a:        8082                        ret
    复制代码


    上面的输出不区分普通指令(32位指令)和压缩指令(16位指令),还有像ret这样的伪指令,寄存器名称是a0、sp、ra等ABI名称。

    添加 -M no-aliases,numeric选项后反汇编结果如下:


    1. $ riscv64-unknown-elf-objdump -d hello.o -M no-aliases,numeric

    2. 00000000 <main>:
    3.    0:        00000537                  lui        x10,0x0
    4.    4:        1141                        c.addi        x2,-16
    5.    6:        00050513                  addi        x10,x10,0 # 0 <main>
    6.    a:        c606                        c.swsp        x1,12(x2)
    7.    c:        00000097                  auipc        x1,0x0
    8.   10:        000080e7                  jalr        x1,0(x1) # c <main+0xc>
    9.   14:        40b2                        c.lwsp        x1,12(x2)
    10.   16:        4501                        c.li        x10,0
    11.   18:        0141                        c.addi        x2,16
    12.   1a:        8082                        c.jr        x1
    复制代码


    no-aliases选项要求输出原始指令,即指令集架构文档中的指令名称;numeric选项要求输出寄存器编号。


    添加附加选项后,明确区分普通指令和压缩指令(c.打头),寄存器名全部是x1、x2、x10了。

    本篇完,感谢关注:RISC-V单片机中文网




    上一篇:Sifive Learn Inventor基础之GPIO 按键中断 RISC-V
    下一篇:ARM太贵,80多家科技巨头悄然站队开源芯片架构RISC-V
    RISCV作者优文
    全球首家只专注于RISC-V单片机行业应用的中文网站
    回复

    使用道具 举报

    高级模式
    B Color Image Link Quote Code Smilies

    本版积分规则

    关闭

    RISC-V单片机中文网上一条 /2 下一条



    版权及免责声明|RISC-V单片机中文网 |网站地图

    GMT+8, 2024-4-19 06:44 , Processed in 0.827759 second(s), 45 queries .

    快速回复 返回顶部 返回列表