那曲檬骨新材料有限公司

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

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

3天內不再提示

初學RISC-V編程的技巧

我快閉嘴 ? 來源:CSDN ? 作者:馬超 ? 2021-06-12 15:44 ? 次閱讀

如果編程本身就是一門藝術,那么匯編語言的編程就是編程領域中的皇冠,在這個基礎軟件全面回歸的時代,匯編語言似乎再次煥發了青春,根據 TOBIE 發布的編程語言排行榜,匯編語言重回前十,雖然這是 X86、ARM單片機等等所有平臺的匯編語言加在一起才取得的成果,不過在印象中上次匯編語言取得這樣的成績還是上個世紀 90 年代的事。

初學RISC-V編程的技巧

匯編語言對于操作系統,數據庫,人工智能框架等核心基礎軟件有著不可取代的作用,從了解到的情況看,比如龍芯對于 OpenJDK 的貢獻已經達到了全球前五名,這其中最為關鍵的貢獻方向就是將 Java 虛擬機針對 Looongarch 指令集進行專項優化,可以說熟練掌握一種匯編語言是高階程序員的必經之路。

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

譯者對于原文進行了一定的修訂與校對。

1、用合適的語言設計邏輯

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

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

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

初學RISC-V編程的技巧

在譯者的理念中,匯編語言是專門用于填補空白,只有當其它語言不能勝任的時候才會考慮用匯編語言上場工作,不過從這篇博文中透露出的信息來看,國外在教學過程中對于匯編語言的運用范圍也是不設限的,而在譯者印象中能用匯編語言實現任何功能的程序員,在國內只有求伯君,嚴援朝等廖廖數人而已,由此可見我們在 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 寄存器做為返回值,將數據返回給調用方。

以下面這段代碼為例:

初學RISC-V編程的技巧

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

5、文檔

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

初學RISC-V編程的技巧

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

責任編輯:tzh

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

    關注

    68

    文章

    10905

    瀏覽量

    213031
  • 編程
    +關注

    關注

    88

    文章

    3637

    瀏覽量

    93989
  • 編譯器
    +關注

    關注

    1

    文章

    1642

    瀏覽量

    49289
  • RISC-V
    +關注

    關注

    45

    文章

    2324

    瀏覽量

    46600
收藏 人收藏

    評論

    相關推薦

    什么是RISC-V

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

    關于RISC-V學習路線圖推薦

    架構(ISA)、流水線、內存層次結構等。 編程語言 : 熟悉C/C++或Rust等編程語言,這些是RISC-V架構下常用的編程語言。C語言必須好好學習,這是基礎哦。 二、
    發表于 11-30 15:21

    可對任何RISC-V系統進行直接編程

    SEGGER推出了新的Open Flashloader,可對任何RISC-V系統進行直接編程德國萊茵河畔蒙海姆– 2021年1月29日SEGGER剛剛發布了用于RISC-V系統的新型Open
    發表于 03-09 19:35

    什么是RISC-VRISC-V指令具有哪些特點應用?

    什么是RISC-VRISC-V指令具有哪些特點應用?自己怎么才能設計出設計一套指令集?
    發表于 10-14 09:05

    初探RISC-V—《RISC-V體系結構編程與實踐》

    最近有幸讀了一本介紹RISC-V的書籍《RISC-V體系結構編程與實踐》,這是一本非常有價值的書籍,它介紹了RISC-V體系結構的各個方面,包括指令集、寄存器、內存管理、中斷等等。在閱
    發表于 03-28 11:41

    RISC-V體系結構編程與實踐》試讀

    本書詳細地介紹了RISC-V的基本原理、指令集、編程工具和環境、體系結構和擴展以及應用案例和實踐等方面的內容,覆蓋了RISC-V體系結構的各個方面,使讀者能夠全面深入地了解RISC-V
    發表于 04-03 15:15

    關于學習RISC-V的方法問題

    最近看到很多人和論壇都在討論RISC-V,怎么說也要趕上潮流吧,請問各位大佬,如果作為一名初學者,要學習RISC-V,有什么好的學習方法和資料推薦呢?謝謝。
    發表于 04-14 21:53

    RISC-V規范的演進 RISC-V何時爆發?

    RISC-V的關注度越來越高,開源的理念也正在被越來越多的開發者和公司接受。對于尚不成熟的RISC-V而言,無論是規范和技術的演進還是生態的建設,還有人才和專利都還有不小挑戰。2021年RISC-V
    的頭像 發表于 02-11 10:10 ?3250次閱讀

    RISC-V嵌入式開發

    RISC-V處理核,很多初學者留言詢問有關RISC-V工具鏈使用的問題,因此本公眾號將開始陸續發表若干篇有關RISC-V軟件工具鏈使用的文章,包括:
    發表于 11-03 14:06 ?52次下載
    <b class='flag-5'>RISC-V</b>嵌入式開發

    RISC-V學習筆記【1】RISC-V概述

    國產處理器芯片起步較晚,從2013年至今,集成電路每年的進口額均超過了 2000 億美元。RISC-V和AI(人工智能)芯片是我國最有希望突破的領域之一。RISC-V使用的領域還是對于生態依賴比較
    發表于 11-24 09:28 ?2693次閱讀

    openEuler加入RISC-V Landscape

    北京時間2023年3月8日,openEuler加入RISC-V Landscape。 此次加入RISC-V Landscape,意味著openEuler在對RISC-V架構的生態適配
    的頭像 發表于 03-13 18:40 ?1387次閱讀

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

    主題演講:RISC-VRISC-V AI的未來(特邀講座)ppt分享
    發表于 07-14 17:15 ?16次下載

    RISC-V設計支持工具,支持RISC-V技術的基礎

    RISC-V設計支持工具,支持RISC-V技術的基礎 ppt分享
    發表于 07-14 17:15 ?12次下載

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

    沁恒在歷屆峰會上分享RISC-V在MCU領域的創新成果,和大家共同見證了本土RISC-V產業的成長。早在第一屆RISC-V中國峰會上,沁恒就公開了青稞RISC-V系列量產芯片的關鍵技術
    的頭像 發表于 08-30 18:18 ?1638次閱讀
    <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 Advocate 行列,共筑 RISC-V 的未來 !

    加入RISC-VAdvocate行列!我們正在尋找來自世界各地的RISC-V愛好者,通過全球推廣和參與,成為支持RISC-V進步的關鍵參與者。作為一名RISC-VAdvocate,您將
    的頭像 發表于 09-10 08:08 ?505次閱讀
    加入全球 <b class='flag-5'>RISC-V</b> Advocate 行列,共筑 <b class='flag-5'>RISC-V</b> 的未來 !
    免费百家乐计划| 菲律宾太阳城官方网| 百家乐官网外套| 百家乐娱乐平台网| 龙口市| 百家乐辅助分析软件| 博彩e族| 网上百家乐靠谱吗| 欧博娱乐| 百家乐合理的投注法| 皇冠最新投注网| 百家乐视频游戏网站| 余姚市| 百家乐赌场彩| 百家乐官网技巧之写路| 百家乐庄闲赢负表| 博九网百家乐官网现金网| 百家乐英皇赌场娱乐网规则| 加州百家乐官网娱乐城| 网上百家乐娱乐平台| 百家乐官网有方法赚反水| 成都百家乐牌具| 百家乐官网大轮转| 百家乐龙虎斗扎金花| 秦安县| 百家乐双面数字筹码怎么出千| 太阳城百家乐官网赌博害人| 全讯网sp| 诺贝尔百家乐官网的玩法技巧和规则| 最新棋牌游戏| 百家乐如何看牌| 澳门百家乐官网自杀| 网上百家乐哪家较安全| 百家乐官网扑克筹码| 德州扑克官网| 百家乐视频下载地址| 网络百家乐官网怎么作弊| 大发888赌场| 新澳博百家乐现金网| 诚信百家乐官网平台| 大发888在线注册|