一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

初學(xué)RISC-V編程的技巧

我快閉嘴 ? 來源:CSDN ? 作者:馬超 ? 2021-06-12 15:44 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

初學(xué)RISC-V編程的技巧

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

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

譯者對(duì)于原文進(jìn)行了一定的修訂與校對(duì)。

1、用合適的語言設(shè)計(jì)邏輯

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

如果一個(gè)學(xué)生不懂 C 或一些低級(jí)語言,那么我建議他們用偽碼寫。因?yàn)橛锰呒?jí)的語言如 Java 其實(shí)是面向虛擬機(jī)編程的,這會(huì)增加程序邏輯到匯編語言的轉(zhuǎn)換難度,而使用太低級(jí)的語言會(huì)使程序邏輯設(shè)計(jì)變得困難。因此,我推薦 C 或 C++,在將代碼進(jìn)行轉(zhuǎn)換的時(shí)候,最好將有對(duì)應(yīng)的代友橫向放在一起,一些編輯可以把它們并排放在一起,這是很有幫助的。

說實(shí)話這部分雖然看似平平無奇,但卻讓我頗感到意外,因?yàn)?C 語言和匯編的對(duì)照完全可以通過 gcc 的 -o -g 參數(shù)以及 objdump 實(shí)現(xiàn)。

初學(xué)RISC-V編程的技巧

在譯者的理念中,匯編語言是專門用于填補(bǔ)空白,只有當(dāng)其它語言不能勝任的時(shí)候才會(huì)考慮用匯編語言上場工作,不過從這篇博文中透露出的信息來看,國外在教學(xué)過程中對(duì)于匯編語言的運(yùn)用范圍也是不設(shè)限的,而在譯者印象中能用匯編語言實(shí)現(xiàn)任何功能的程序員,在國內(nèi)只有求伯君,嚴(yán)援朝等廖廖數(shù)人而已,由此可見我們?cè)?IT 基礎(chǔ)教育領(lǐng)域要做的工作還很多。

2、小步快跑,不要試圖一口吃個(gè)胖子

很多匯編語言的初學(xué)者試著從頭到尾寫完整的程序,而沒有在中間進(jìn)行過任何測試關(guān)鍵,但是我建議在完成部分邏輯時(shí)就立刻進(jìn)行測試。這樣做其實(shí)很簡單,比如完成了一個(gè) for 循環(huán),等等一小部分功能就要開始測試。

可以將 C 或 C++ 程序與匯編程序連接起來。通過在 C++ 中原型化組裝函數(shù)的名稱實(shí)現(xiàn)這一點(diǎn)。按照一般的做法通常會(huì)在 C 函數(shù)前面加上一個(gè) “c” 來區(qū)分。我們可以調(diào)用 Show 來運(yùn)行匯編語言編寫的函數(shù)。

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

3、了解匯編語言的功能定位

這里我們必須要充分認(rèn)識(shí)到?jīng)]有匯編語言和有編譯器解釋器的高級(jí)語言真的完全不一樣,不養(yǎng)兒不知父母恩,不寫匯編不知各類語言之父有多神。在匯編語言中操作順序都需要程序員自己去掌握。例如,4+3*4 的運(yùn)算,作何一種語言的編譯器都先執(zhí)行乘法,然后再加法。然而在匯編語言的編程世界中,我們必須首先選擇乘法指令,然后再選擇加法指令。沒有為我們進(jìn)行運(yùn)算符號(hào)的優(yōu)先級(jí)重排。

4、了解如何調(diào)用函數(shù)

在匯編語言中編寫一個(gè)函數(shù)是一項(xiàng)非常艱苦的任務(wù),大多數(shù) ISA 體系結(jié)構(gòu)(如ARM和RISC-V)的芯片都將附帶專門的工作手冊(cè),當(dāng)然這些手冊(cè)中只是制定了一些基本規(guī)則,如何傳遞參數(shù),如何接收返回結(jié)果,又如何構(gòu)造函數(shù)棧禎等等具體的話題都值得深入討論。不過幸運(yùn)的是 RISC-V 寄存器的 “ABI” 命名規(guī)則,有助于程序員理解它們的含義。比如:

整數(shù)參數(shù)在寄存器 A0-A7 中,浮點(diǎn)參數(shù)在寄存器 FA0-FA7 中

通過對(duì)堆棧指針的 sub 操作去分配函數(shù)堆棧。在調(diào)用完成后使用 add 操作進(jìn)行銷毀

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

所有參數(shù)和臨時(shí)寄存器必須在函數(shù)調(diào)用后,被視為銷毀態(tài)

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

通過 a0 寄存器做為返回值,將數(shù)據(jù)返回給調(diào)用方。

以下面這段代碼為例:

初學(xué)RISC-V編程的技巧

我們可以看到先通過 addi sp,sp,-8 的語句構(gòu)造函數(shù)禎,保存所有寄存器后執(zhí)行相應(yīng)函數(shù)邏輯,接下來將所有包括sp寄存器內(nèi)的調(diào)用環(huán)境恢復(fù),最后返回。

5、文檔

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

初學(xué)RISC-V編程的技巧

原始 C 語言代碼進(jìn)行一個(gè)總的注釋,然后將每個(gè)匯編語言片段的也使用 C 語言進(jìn)行注釋。尤其當(dāng)涉及到運(yùn)算操作順序時(shí),這樣的方式使我們能夠保證程序可以正確地執(zhí)行每一步。

責(zé)任編輯:tzh

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

    關(guān)注

    68

    文章

    11062

    瀏覽量

    216454
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3686

    瀏覽量

    95030
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1659

    瀏覽量

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

    關(guān)注

    46

    文章

    2525

    瀏覽量

    48495
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    什么是RISC-V

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

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

    架構(gòu)(ISA)、流水線、內(nèi)存層次結(jié)構(gòu)等。 編程語言 : 熟悉C/C++或Rust等編程語言,這些是RISC-V架構(gòu)下常用的編程語言。C語言必須好好學(xué)習(xí),這是基礎(chǔ)哦。 二、
    發(fā)表于 11-30 15:21

    可對(duì)任何RISC-V系統(tǒng)進(jìn)行直接編程

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

    RISC-V嵌入式開發(fā)的特點(diǎn)有哪些

    RISC-V處理核,很多初學(xué)者留言詢問有關(guān)RISC-V工具鏈?zhǔn)褂玫膯栴},因此本公眾號(hào)將開始陸續(xù)發(fā)表若干篇有關(guān)RISC-V軟件工具鏈?zhǔn)褂玫奈恼?,包括?/div>
    發(fā)表于 11-08 08:33

    初探RISC-V—《RISC-V體系結(jié)構(gòu)編程與實(shí)踐》

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

    risc-v是什么意思

      risc-v是什么意思  RISC-V是一種指令集  RISC-V,一般被念做:risk five。V,即羅馬數(shù)字5。該指令集是RISC
    發(fā)表于 03-30 16:40

    RISC-V體系結(jié)構(gòu)編程與實(shí)踐》試讀

    本書詳細(xì)地介紹了RISC-V的基本原理、指令集、編程工具和環(huán)境、體系結(jié)構(gòu)和擴(kuò)展以及應(yīng)用案例和實(shí)踐等方面的內(nèi)容,覆蓋了RISC-V體系結(jié)構(gòu)的各個(gè)方面,使讀者能夠全面深入地了解RISC-V
    發(fā)表于 04-03 15:15

    關(guān)于學(xué)習(xí)RISC-V的方法問題

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

    RISC-V規(guī)范的演進(jìn) RISC-V何時(shí)爆發(fā)?

    RISC-V的關(guān)注度越來越高,開源的理念也正在被越來越多的開發(fā)者和公司接受。對(duì)于尚不成熟的RISC-V而言,無論是規(guī)范和技術(shù)的演進(jìn)還是生態(tài)的建設(shè),還有人才和專利都還有不小挑戰(zhàn)。2021年RISC-V
    的頭像 發(fā)表于 02-11 10:10 ?3536次閱讀

    RISC-V嵌入式開發(fā)

    RISC-V處理核,很多初學(xué)者留言詢問有關(guān)RISC-V工具鏈?zhǔn)褂玫膯栴},因此本公眾號(hào)將開始陸續(xù)發(fā)表若干篇有關(guān)RISC-V軟件工具鏈?zhǔn)褂玫奈恼?,包括?
    發(fā)表于 11-03 14:06 ?53次下載
    <b class='flag-5'>RISC-V</b>嵌入式開發(fā)

    RISC-V學(xué)習(xí)筆記【1】RISC-V概述

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

    openEuler加入RISC-V Landscape

    北京時(shí)間2023年3月8日,openEuler加入RISC-V Landscape。 此次加入RISC-V Landscape,意味著openEuler在對(duì)RISC-V架構(gòu)的生態(tài)適配
    的頭像 發(fā)表于 03-13 18:40 ?1568次閱讀

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

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

    RISC-V設(shè)計(jì)支持工具,支持RISC-V技術(shù)的基礎(chǔ)

    RISC-V設(shè)計(jì)支持工具,支持RISC-V技術(shù)的基礎(chǔ) ppt分享
    發(fā)表于 07-14 17:15 ?22次下載

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

    加入RISC-VAdvocate行列!我們正在尋找來自世界各地的RISC-V愛好者,通過全球推廣和參與,成為支持RISC-V進(jìn)步的關(guān)鍵參與者。作為一名RISC-VAdvocate,您將
    的頭像 發(fā)表于 09-10 08:08 ?825次閱讀
    加入全球 <b class='flag-5'>RISC-V</b> Advocate 行列,共筑 <b class='flag-5'>RISC-V</b> 的未來 !