一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲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)不再提示

新手 RISC-V 編程應(yīng)該注意哪幾點(diǎn)內(nèi)容

strongerHuang ? 來源:CSDN ? 作者:CSDN ? 2021-06-01 09:14 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

原文:

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

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

1

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

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

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

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

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

2

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

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

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

3

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

例如,4+3*4 的運(yùn)算,作何一種語(yǔ)言的編譯器都先執(zhí)行乘法,然后再加法。然而在匯編語(yǔ)言的編程世界中,我們必須首先選擇乘法指令,然后再選擇加法指令。沒有為我們進(jìn)行運(yùn)算符號(hào)的優(yōu)先級(jí)重排。

4

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

在匯編語(yǔ)言中編寫一個(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)用方。

以下面這段代碼為例:

.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 的語(yǔ)句構(gòu)造函數(shù)禎,保存所有寄存器后執(zhí)行相應(yīng)函數(shù)邏輯,接下來將所有包括sp寄存器內(nèi)的調(diào)用環(huán)境恢復(fù),最后返回。

5

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

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

免責(zé)聲明:本文素材來源網(wǎng)絡(luò),版權(quán)歸原作者所有。如涉及作品版權(quán)問題,請(qǐng)與我聯(lián)系刪除。

編輯:jq

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

    關(guān)注

    31

    文章

    5434

    瀏覽量

    124513
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7256

    瀏覽量

    91884
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4381

    瀏覽量

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

    關(guān)注

    30

    文章

    4900

    瀏覽量

    70750

原文標(biāo)題:新手 RISC-V 編程的幾點(diǎn)內(nèi)容

文章出處:【微信號(hào):strongerHuang,微信公眾號(hào):strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    FPGA與RISC-V淺談

    全球半導(dǎo)體產(chǎn)業(yè)競(jìng)爭(zhēng)格局正在經(jīng)歷深刻變革,物聯(lián)網(wǎng)、邊緣計(jì)算等新興技術(shù)的蓬勃發(fā)展,讓RISC-V憑借其開源、精簡(jiǎn)以及模塊化的靈活優(yōu)勢(shì),日益成為業(yè)界焦點(diǎn),也為全球半導(dǎo)體產(chǎn)業(yè)注入新的活力與挑戰(zhàn)
    發(fā)表于 04-11 13:53 ?356次閱讀
    FPGA與<b class='flag-5'>RISC-V</b>淺談

    芯來科技亮相RISC-V Day Tokyo 2025

    RISC-V Day Tokyo 2025春季會(huì)議于日前在東京大學(xué)ITO國(guó)際研究中心順利舉行。The RISC-V Day Tokyo作為日本最大的RISC-V活動(dòng),匯集了眾多優(yōu)秀的RISC-
    的頭像 發(fā)表于 03-03 14:07 ?583次閱讀

    關(guān)于RISC-V芯片的應(yīng)用學(xué)習(xí)總結(jié)

    RISC-V芯片作為一種基于精簡(jiǎn)指令集計(jì)算(RISC)原則的開源指令集架構(gòu)(ISA)芯片,近年來在多個(gè)領(lǐng)域展現(xiàn)出了廣泛的應(yīng)用潛力和顯著優(yōu)勢(shì)。以下是對(duì)RISC-V芯片應(yīng)用的總結(jié)。 RISC-V
    發(fā)表于 01-29 08:38

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

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

    RISC-V能否復(fù)制Linux 的成功?》

    完全自己開發(fā),他們就應(yīng)該能獲得高產(chǎn)量SoC公司所期望的結(jié)果?!監(jiān)\'Connor說。O\'Connor還指出了業(yè)界對(duì)RISC-VRISC-V International的誤解,后者是監(jiān)督內(nèi)核ISA
    發(fā)表于 11-26 20:20

    RISC-V的指令集位寬的幾點(diǎn)學(xué)習(xí)心得

    在學(xué)習(xí)RISC-V指令集過程中,指令位寬大多是32位和64的,它并不像其它指令集,還有8位的古老指令集。這估計(jì)也是RISC-V能輕裝前行的原因之一吧。RISC-V的指令集并非僅限于32位和64位
    發(fā)表于 10-31 22:05

    名單公布!【書籍評(píng)測(cè)活動(dòng)NO.45】RISC-V體系結(jié)構(gòu)編程與實(shí)踐(第二版)

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

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

    ,貢獻(xiàn)內(nèi)容,在社交媒體上推廣RISC-V。加入我們,共同發(fā)展RISC-V社區(qū),傳播RISC-V的消息!成為RISC-VAdvocate的好處
    的頭像 發(fā)表于 09-10 08:08 ?890次閱讀
    加入全球 <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高效落地

    沁恒在歷屆峰會(huì)上分享RISC-V在MCU領(lǐng)域的創(chuàng)新成果,和大家共同見證了本土RISC-V產(chǎn)業(yè)的成長(zhǎng)。早在第一屆RISC-V中國(guó)峰會(huì)上,沁恒就公開了青稞RISC-V系列量產(chǎn)芯片的關(guān)鍵技術(shù)
    的頭像 發(fā)表于 08-30 18:18 ?2377次閱讀
    <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 老朋友伴您走過每一屆峰會(huì) 沁恒在歷屆峰會(huì)上分享RISC-V在MCU領(lǐng)域的創(chuàng)新成果,和大家共同見證了本土RISC-V產(chǎn)業(yè)的成長(zhǎng)。早在第一屆RISC-V中國(guó)峰會(huì)上,沁恒就公開了青稞RISC-
    發(fā)表于 08-30 17:37

    2024 RISC-V 中國(guó)峰會(huì):華秋電子助力RISC-V生態(tài)!

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

    2024 RISC-V 中國(guó)峰會(huì):華秋電子助力RISC-V生態(tài)!

    第四屆RISC-V中國(guó)峰會(huì)(RISC-V Summit China 2024)于8月21日至23日在杭州盛大召開,成為RISC-V領(lǐng)域的一次重要盛會(huì)。峰會(huì)匯聚了RISC-V國(guó)際基金會(huì)的
    發(fā)表于 08-26 16:46

    risc-v的發(fā)展歷史

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

    rIsc-v的缺的是什么?

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

    為什么要有RISC-V

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