RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

RISC-V查看匯編代碼的幾種方式

嵌入式USB開發(fā) ? 來源:嵌入式USB開發(fā) ? 作者:嵌入式USB開發(fā) ? 2023-06-09 19:13 ? 次閱讀

RISC-V查看匯編代碼的幾種方式 (qq.com)

本文轉(zhuǎn)自公眾號歡迎關(guān)注

前言

很多時候需要對照C和匯編進(jìn)行分析和調(diào)試,所以需要查閱匯編代碼,以下分享幾種方式。

使用網(wǎng)頁

可以進(jìn)入如下網(wǎng)站輸入C查看對應(yīng)的匯編,右側(cè)可以選擇編譯器版本

https://godbolt.org/

image.png

使用工具

推薦ripes項目

參考https://mp.weixin.qq.com/s/tcG7yCYMsDzUIQmwL-e6BQ

使用GCC

可以用GCC生成匯編代碼,或者從目標(biāo)文件,可執(zhí)行文件中dump出匯編指令

比如有源碼main.c

int add(int a,int b)

{

return a+b;

}

int main(void)

{

int a=0;

int b=1;

int c=1;

a=add(b,c);

return 0;

}

編譯生成匯編

riscv64-unknown-elf-gcc -S -o mian.s main.c

main.s如下

.file   "main.c"

.option nopic

.attribute arch, "rv64i2p0_m2p0_a2p0_f2p0_d2p0_c2p0"

.attribute unaligned_access, 0

.attribute stack_align, 16

.text

.align  1

.globl  add

.type   add, @function

add:

addi    sp,sp,-32

sd  s0,24(sp)

addi    s0,sp,32

mv  a5,a0

mv  a4,a1

sw  a5,-20(s0)

mv  a5,a4

sw  a5,-24(s0)

lw  a4,-20(s0)

lw  a5,-24(s0)

addw    a5,a4,a5

sext.w  a5,a5

mv  a0,a5

ld  s0,24(sp)

addi    sp,sp,32

jr  ra

.size   add, .-add

.align  1

.globl  main

.type   main, @function

main:

addi    sp,sp,-32

sd  ra,24(sp)

sd  s0,16(sp)

addi    s0,sp,32

sw  zero,-20(s0)

li  a5,1

sw  a5,-24(s0)

li  a5,1

sw  a5,-28(s0)

lw  a4,-28(s0)

lw  a5,-24(s0)

mv  a1,a4

mv  a0,a5

call    add

mv  a5,a0

sw  a5,-20(s0)

li  a5,0

mv  a0,a5

ld  ra,24(sp)

ld  s0,16(sp)

addi    sp,sp,32

jr  ra

.size   main, .-main

.ident  "GCC: (GNU) 10.2.0"

目標(biāo)文件或者可執(zhí)行文件導(dǎo)出匯編

riscv64-unknown-elf-objdump -s -d main.o > main.o.txt

riscv64-unknown-elf-objdump -s -d main > main.txt

 

main:     file format elf64-littleriscv

 

Contents of section .text:

 100b0 93070000 91c71705 00001305 052f05a6  ............./..

 100c0 82809721 00009381 e1be1385 01f61386  ...!............

 100d0 81f9098e 8145ef00 40161705 00001305  .....E..@.......

 100e0 453019c5 17050000 1305252c ef00202f  E0........%,.. /

 100f0 ef00000e 02452c00 0146ef00 e00755a8  .....E,..F....U.
......

使用GDB

如果使用了GDB進(jìn)行仿真,可以直接進(jìn)行匯編級別調(diào)試

使用如下指令進(jìn)入C和匯編對照布局

layout split

image.png

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 匯編
    +關(guān)注

    關(guān)注

    2

    文章

    214

    瀏覽量

    25927
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4779

    瀏覽量

    68520
  • 匯編代碼
    +關(guān)注

    關(guān)注

    0

    文章

    23

    瀏覽量

    7548
  • RISC-V
    +關(guān)注

    關(guān)注

    45

    文章

    2270

    瀏覽量

    46125
收藏 人收藏

    評論

    相關(guān)推薦

    【RT-Thread學(xué)習(xí)筆記】RISC-V匯編基礎(chǔ)三大塊知識

    【RT-Thread學(xué)習(xí)筆記】RISC-V匯編基礎(chǔ)的三大塊知識
    的頭像 發(fā)表于 07-30 11:01 ?2750次閱讀
    【RT-Thread學(xué)習(xí)筆記】<b class='flag-5'>RISC-V</b><b class='flag-5'>匯編</b>基礎(chǔ)三大塊知識

    RISC-V開放架構(gòu)設(shè)計之道|閱讀體驗】 RISC-V設(shè)計必備之案頭小冊

    ,最基礎(chǔ)的RV32已經(jīng)是完全不變化。以此來規(guī)避在過去指令集設(shè)計中的錯誤。 然后開始了在RISC-V中應(yīng)該如何編寫匯編代碼,書中大致講了將c語言編譯成計算機(jī)執(zhí)行的機(jī)器語言程序的重要步驟,并對每個步驟進(jìn)行了簡單的描述
    發(fā)表于 01-22 16:24

    RISC-V 匯編在線仿真器 Ripes OnLine 使用說明

    Ripes OnLine RISC-V 模擬器網(wǎng)址 RISC-V 旨在簡化。在線 Ripes 模擬器可讓您運行匯編代碼,而無需在計算機(jī)上進(jìn)行任何安裝。 Ripes.me 網(wǎng)頁 轉(zhuǎn)到網(wǎng)頁
    發(fā)表于 06-28 14:59

    RISC-V匯編語言

    一、導(dǎo)言 從 C 程序翻譯成為可以在計算機(jī)上執(zhí)行的機(jī)器語言程序的四個經(jīng)典步驟。這一章的內(nèi)容包括了后三個步驟,不過我們要從匯編語言在 RISC-V 函數(shù)調(diào)用規(guī)范中的作用開始說起。 上圖從C源代碼翻譯
    發(fā)表于 08-19 18:07

    關(guān)于RISC-V學(xué)習(xí)路線圖推薦

    開發(fā)板,如Arduino、Raspberry Pi等,并了解其硬件配置和特性。 安裝開發(fā)工具鏈 : 如GCC編譯器、RISC-V匯編器和鏈接器等,用于編寫、編譯和調(diào)試RISC-V程序。 搭建開發(fā)環(huán)境
    發(fā)表于 11-30 15:21

    一文看懂RISC-V代碼密度

    本帖最后由 jf_11671167 于 2021-10-9 10:35 編輯 關(guān)鍵詞:RISC-V處理器 ,平頭哥玄鐵CPU,RISC-V指令集,IoT芯片,RISC-V指令集,代碼
    發(fā)表于 09-01 14:29

    RISC-V匯編指令編碼格式是怎樣的

    匯編語言有哪幾類指令組成呢?RISC-V匯編指令編碼格式是怎樣的?有哪幾種格式?
    發(fā)表于 02-11 08:10

    RISC-V匯編語言開發(fā)起來難度大

    RISC-V匯編語言執(zhí)行效率高嗎?開發(fā)人員一般在什么場景下需要使用RISC-V匯編語言編程?
    發(fā)表于 03-27 14:14

    RISC-V 發(fā)展

    匯編當(dāng)中,都使用ABI名稱來代表這些寄存器。RISC-V CSR寄存器CSR是控制狀態(tài)寄存器,RISC-V中CSR寄存器,需要使用csrr、csrw、csrrw等特定指令進(jìn)行訪問。RISC-V
    發(fā)表于 04-14 10:18

    risc-v中國峰會直播:如何優(yōu)化RISC-V指令集架構(gòu)的代碼密度?

    第一屆中國峰會在上海舉辦,以下是小編整理的部分risc-v峰會的內(nèi)容。主要介紹了影響代碼密度的因素以及如何優(yōu)化RISC-V指令集架構(gòu)的代碼密度?感興趣的小伙伴可以詳細(xì)了解一下。
    的頭像 發(fā)表于 06-23 12:12 ?3114次閱讀
    <b class='flag-5'>risc-v</b>中國峰會直播:如何優(yōu)化<b class='flag-5'>RISC-V</b>指令集架構(gòu)的<b class='flag-5'>代碼</b>密度?

    第一屆RISC-V中國峰會看點 risc-v開發(fā)要怎么優(yōu)化risc-v指令集架構(gòu)代碼密度

    在第一屆RISC-V中國峰會上看點很多,RISC-V是開源的,那么代碼密度要怎么控制,會不會因為開源而導(dǎo)致代碼密度特別大? 我們一起來看看risc-
    發(fā)表于 06-23 18:22 ?9674次閱讀
    第一屆<b class='flag-5'>RISC-V</b>中國峰會看點 <b class='flag-5'>risc-v</b>開發(fā)要怎么優(yōu)化<b class='flag-5'>risc-v</b>指令集架構(gòu)<b class='flag-5'>代碼</b>密度

    RISC-V嵌入式開發(fā)入門篇2:RISC-V匯編語言程序設(shè)計(下)

    本文將介紹如何直接使用RISC-V架構(gòu)的匯編語言進(jìn)行程序設(shè)計。
    發(fā)表于 11-02 18:50 ?40次下載
    <b class='flag-5'>RISC-V</b>嵌入式開發(fā)入門篇2:<b class='flag-5'>RISC-V</b><b class='flag-5'>匯編</b>語言程序設(shè)計(下)

    RISC-V嵌入式開發(fā)入門篇2:RISC-V匯編語言程序設(shè)計(中)

    本文將介紹如何直接使用RISC-V架構(gòu)的匯編語言進(jìn)行程序設(shè)計。
    發(fā)表于 11-03 09:51 ?42次下載
    <b class='flag-5'>RISC-V</b>嵌入式開發(fā)入門篇2:<b class='flag-5'>RISC-V</b><b class='flag-5'>匯編</b>語言程序設(shè)計(中)

    RISC-V匯編簡介

    RISC-V匯編簡介匯編語言有3類指令組成:a.匯編指令:機(jī)器碼的助記符,有對應(yīng)的機(jī)器碼,可以翻譯成對應(yīng)的二進(jìn)制機(jī)器碼。b.偽指令:沒有對應(yīng)的機(jī)器碼,由
    發(fā)表于 12-08 18:21 ?9次下載
    <b class='flag-5'>RISC-V</b><b class='flag-5'>匯編</b>簡介

    RISC-VRISC-V AI的未來(特邀講座)

    主題演講:RISC-VRISC-V AI的未來(特邀講座)ppt分享
    發(fā)表于 07-14 17:15 ?16次下載
    RM新时代网站-首页