精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

新手 RISC-V 編程應該注意哪幾點內容

strongerHuang ? 來源:CSDN ? 作者:CSDN ? 2021-06-01 09:14 ? 次閱讀

原文:

https://blog.stephenmarz.com/2021/05/12/tips-to-writing-assembly/

當用戶使用 C、C++ 或任何其他高級語言時,編譯器決定了程序的藝術。然而這一次,我們將自行面對 CPU,新手實現面向指令集編程的藝術,本文使用RISC-V 為例來向大家展示,來如何使用編寫語言設計程序邏輯,并最終將程序邏輯轉換為匯編語言的程序。

1

用合適的語言設計邏輯對于初學者來說,這是最難的一步,因為現在學生們常用的高級語言中,往往使用更抽象的工具進行邏輯設計,許多學生想直接編寫完整的功能模塊。但是對于匯編語言來說,這是一種注定要失敗的方法。相反,為了把邏輯和語言分開,我們必須用我們理解的語言來設計程序邏輯。

如果一個學生不懂 C 或一些“低級”語言,那么我建議他們用偽碼寫。因為用太高級的語言如 Java 其實是面向虛擬機編程的,這會增加程序邏輯到匯編語言的轉換難度,而使用太低級的語言會使程序邏輯設計變得困難。因此,我推薦 C 或 C++,在將代碼進行轉換的時候,最好將有對應的代友橫向放在一起,一些編輯可以把它們并排放在一起,這是很有幫助的。

說實話這部分雖然看似平平無奇,但卻讓我頗感到意外,因為 C 語言和匯編的對照完全可以通過 gcc 的 -o -g 參數以及 objdump 實現。

fcdddd28-c238-11eb-9e57-12bb97331649.png

在譯者的理念中,匯編語言是專門用于填補空白,只有當其它語言不能勝任的時候才會考慮用匯編語言上場工作,不過從這篇博文中透露出的信息來看,國外在教學過程中對于匯編語言的運用范圍也是不設限的,而在譯者印象中能用匯編語言實現任何功能的程序員,在國內只有求伯君,嚴援朝等廖廖數人而已,由此可見我們在 IT 基礎教育領域要做的工作還很多。

2

小步快跑,不要試圖一口吃個胖子很多匯編語言的初學者試著從頭到尾寫完整的程序,而沒有在中間進行過任何測試關鍵,但是我建議在完成部分邏輯時就立刻進行測試。這樣做其實很簡單,比如完成了一個 for 循環,等等一小部分功能就要開始測試。

可以將 C 或 C++ 程序與匯編程序連接起來。通過在 C++ 中原型化組裝函數的名稱實現這一點。按照一般的做法通常會在 C 函數前面加上一個 “c” 來區分。我們可以調用 Show 來運行匯編語言編寫的函數。

其實這部分的建議并不僅僅針對于 RISC-V 甚至不是針對匯編語言,無論是什么語言的編程,當你想到要進行單元測試的時候往往就已經晚了,隨時對于一個細小的模塊進行測試真的是一個好習慣。

3

了解匯編語言的功能定位這里我們必須要充分認識到沒有匯編語言和有編譯器解釋器的高級語言真的完全不一樣,不養兒不知父母恩,不寫匯編不知各類語言之父有多神。在匯編語言中操作順序都需要程序員自己去掌握。

例如,4+3*4 的運算,作何一種語言的編譯器都先執行乘法,然后再加法。然而在匯編語言的編程世界中,我們必須首先選擇乘法指令,然后再選擇加法指令。沒有為我們進行運算符號的優先級重排。

4

了解如何調用函數

在匯編語言中編寫一個函數是一項非常艱苦的任務,大多數 ISA 體系結構(如ARM和RISC-V)的芯片都將附帶專門的工作手冊,當然這些手冊中只是制定了一些基本規則,如何傳遞參數,如何接收返回結果,又如何構造函數棧禎等等具體的話題都值得深入討論。

不過幸運的是 RISC-V 寄存器的 “ABI” 命名規則,有助于程序員理解它們的含義。比如:

整數參數在寄存器 A0-A7 中,浮點參數在寄存器 FA0-FA7 中

通過對堆棧指針的 sub 操作去分配函數堆棧。在調用完成后使用 add 操作進行銷毀

堆棧大小必須以 8 的整數倍形式分配

所有參數和臨時寄存器必須在函數調用后,被視為銷毀態

在函數調用之后,已保存寄存器才能被顯式保存。如果使用了任何已保存的寄存器,則必須在函數返回之前還原它們的原始值

通過 a0 寄存器做為返回值,將數據返回給調用方。

以下面這段代碼為例:

.global mainmain:addi sp, sp, -8sd ra, 0(sp)la a0, test_solvecall solvemv a0, zerold ra, 0(sp)addi sp, sp, 8ret

我們可以看到先通過 addi sp,sp,-8 的語句構造函數禎,保存所有寄存器后執行相應函數邏輯,接下來將所有包括sp寄存器內的調用環境恢復,最后返回。

5

文檔建議使用 C 或其他語言編寫匯編語言的注釋,用以下代碼為例:

# used |= 1 《《 ( x[i * 9 + col] - 1) li t0, 9 mul t1, s3, t0 # t1 = i * 9 add t1, t1, s2 # t1 = i * 9 + col slli t2, t1, 2 # Scale by 4 add t2, t2, s6 # x + i * 9 + col lw t3, 0(t2) # x[i * 9 + col] addi t3, t3, -1 # x[i * 9 + col] - 1 li t4, 1 sll t4, t4, t3 # 1 《《 x[i * 9 + col] - 1 or s5, s5, t4 # used |= 。。.

原始 C 語言代碼進行一個總的注釋,然后將每個匯編語言片段的也使用 C 語言進行注釋。尤其當涉及到運算操作順序時,這樣的方式使我們能夠保證程序可以正確地執行每一步。

免責聲明:本文素材來源網絡,版權歸原作者所有。如涉及作品版權問題,請與我聯系刪除。

編輯:jq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 寄存器
    +關注

    關注

    31

    文章

    5317

    瀏覽量

    120003
  • 數據
    +關注

    關注

    8

    文章

    6890

    瀏覽量

    88826
  • 函數
    +關注

    關注

    3

    文章

    4304

    瀏覽量

    62429
  • 代碼
    +關注

    關注

    30

    文章

    4746

    瀏覽量

    68348

原文標題:新手 RISC-V 編程的幾點內容

文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    名單公布!【書籍評測活動NO.45】RISC-V體系結構編程與實踐(第二版)

    了解一下,《RISC-V 體系結構編程與實踐(第2版)》 相比第 1 版有哪些內容升級。 ![] 新版升級了哪些內容? 本書第1版得到了廣泛的關注和討論,許多專業人士、高校師生都提出了
    發表于 09-25 10:08

    加入全球 RISC-V Advocate 行列,共筑 RISC-V 的未來 !

    ,貢獻內容,在社交媒體上推廣RISC-V。加入我們,共同發展RISC-V社區,傳播RISC-V的消息!成為RISC-VAdvocate的好處
    的頭像 發表于 09-10 08:08 ?313次閱讀
    加入全球 <b class='flag-5'>RISC-V</b> Advocate 行列,共筑 <b class='flag-5'>RISC-V</b> 的未來 !

    RISC-V Summit China 2024 青稞RISC-V+接口PHY,賦能RISC-V高效落地

    沁恒在歷屆峰會上分享RISC-V在MCU領域的創新成果,和大家共同見證了本土RISC-V產業的成長。早在第一屆RISC-V中國峰會上,沁恒就公開了青稞RISC-V系列量產芯片的關鍵技術
    的頭像 發表于 08-30 18:18 ?1377次閱讀
    <b class='flag-5'>RISC-V</b> Summit China 2024  青稞<b class='flag-5'>RISC-V</b>+接口PHY,賦能<b class='flag-5'>RISC-V</b>高效落地

    RISC-V Summit China 2024 | 青稞RISC-V+接口PHY,賦能RISC-V高效落地

    01 老朋友伴您走過每一屆峰會 沁恒在歷屆峰會上分享RISC-V在MCU領域的創新成果,和大家共同見證了本土RISC-V產業的成長。早在第一屆RISC-V中國峰會上,沁恒就公開了青稞RISC-
    發表于 08-30 17:37

    2024 RISC-V 中國峰會:華秋電子助力RISC-V生態!

    第四屆RISC-V中國峰會(RISC-V Summit China 2024)于8月21日至23日在杭州盛大召開,成為RISC-V領域的一次重要盛會
    的頭像 發表于 08-26 18:33 ?816次閱讀
    2024 <b class='flag-5'>RISC-V</b> 中國峰會:華秋電子助力<b class='flag-5'>RISC-V</b>生態!

    risc-v的發展歷史

    RISC-V的發展歷史可以追溯到2006年左右,當時David Patterson和其他研究者開始探索創建一個開放和可擴展的指令集架構(ISA)。以下是RISC-V發展的主要里程碑: 一、起源與初步
    發表于 07-29 17:20

    rIsc-v的缺的是什么?

    RISC-V作為一種開源的指令集架構(ISA),自其誕生以來就受到廣泛關注和應用,但它也存在一些不足之處。以下是RISC-V架構目前存在的主要缺點: 1. 性能問題 相對于專用ISA的性能差距:盡管
    發表于 07-29 17:18

    為什么要有RISC-V

    RISC-V(“RISC five”)的目標是成為一個通用的指令集架構(ISA):①、它要能適應包括從最袖珍的嵌入式控制器,到最快的高性能計算機等各種規模的處理器。②、它應該能兼容各種流行的軟件棧
    發表于 07-27 15:05

    esp32 哪幾款芯片是RISC-V的內核

    esp32 哪幾款芯片是RISC-V的內核?大佬們解答一下。
    發表于 06-29 19:15

    RISC-V有哪些優點和缺點

    新的、尚未被廣泛驗證的技術。 需要注意的是,隨著RISC-V技術的不斷發展和生態系統的逐步完善,其缺點可能會逐漸被克服。同時,RISC-V的優點也使其在多個領域具有廣闊的應用前景,包括服務器、物聯網、嵌入式系統等。
    發表于 04-28 09:03

    RISC-V有哪些優缺點?是堅持ARM方向還是投入risc-V的懷抱?

    的架構,而不是嘗試新的、尚未被廣泛驗證的技術。 需要注意的是,隨著RISC-V技術的不斷發展和生態系統的逐步完善,其缺點可能會逐漸被克服。同時,RISC-V的優點也使其在多個領域具有廣闊的應用前景,包括服務器、物聯網、嵌入式系統
    發表于 04-28 08:51

    解鎖RISC-V技術力量丨曹英杰:RISC-V與大模型探索

    4月12日,第二期“大家來談芯|解鎖RISC-V技術力量”在上海臨港新片區頂科永久會址舉辦,本期沙龍聚焦RISC-V技術,圍繞AI時代的RISC-V市場機會、RISC-V在汽車領域的應
    的頭像 發表于 04-16 08:16 ?637次閱讀
    解鎖<b class='flag-5'>RISC-V</b>技術力量丨曹英杰:<b class='flag-5'>RISC-V</b>與大模型探索

    什么是RISC-V

    siFive搞RISC-V 賽昉搞RISC-V 香山搞RISC-V 到底什么是RISC-V? 先不問有什么用,RISC-V目前的能力來說,工
    發表于 02-02 10:41

    RISC-V開放架構設計之道|閱讀體驗】一本別出心裁的RISC-V架構之書(第一章)

    書籍似乎差不多,但是其內容的組織確實有點意思,整篇都在用ARM、X86和RISC-V做著對比,從模塊化設計、從ISA設計思想中的成本、簡潔、性能、架構和實現分離、提升空間、代碼大小、易于編程/編譯/鏈接
    發表于 01-24 19:06

    RISC-V開放架構設計之道|閱讀體驗】 RISC-V設計必備之案頭小冊

    列出一個良好的指令集架構需要哪幾方面的特征。 由此,我們開始了RISC-V基礎指令集的閱讀,從基礎的RV32I開始,這是一個目前已經完全不改變的指令集,也就是說無論RISC-V指令集怎么演變
    發表于 01-22 16:24