日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RV32I:RISC-V 基础整数指令集

發布時間:2024/3/12 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RV32I:RISC-V 基础整数指令集 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • RV32I指令
  • 指令格式
  • RV32I寄存器
  • RV32I 整數計算
  • RV32I load 和 Store
  • 條件分支
  • 無條件跳轉
  • RV32I 雜項
  • RV32I特性
  • 一個例子
  • 參考

提升計算性能并且讓用戶能切實享受到性能提升的唯一方法是同時設計編譯器和計算機。這樣軟件用不 到的特性將不會被實現在硬件上…
——Frances Elizabeth “Fran” Allen, 1981

RV32I指令

??圖 2.1 是 RV32I 基礎指令集的一頁圖形表示。對于每幅圖,將有下劃線的字母從左到 右連接起來,即可組成完整的 RV32I 指令集。對于每一個圖,集合標志{}內列舉了指令的 所有變體,變體用加下劃線的字母或下劃線字符_表示。特別的,下劃線字符_表示對于此 指令變體不需用字符表示。。例如,下圖表示了這四個 RV32I 指令:slt,slti,sltu,sltiu:


指令格式

??六種基本指令格式,分別是:

  • 用于寄存器-寄存器操作的 R 類型指令
  • 用 于短立即數和訪存 load 操作的 I 型指令
  • 用于訪存 store 操作的 S 型指令
  • 用于條件跳轉操作的 B 類型指令
  • 用于長立即數的 U 型指令
  • 用于無條件跳轉的 J 型指令

??即使是指令格式也能從一些方面說明 RISC-V 更簡潔的 ISA 設計能提高性能功耗比。 首先,指令只有六種格式,并且所有的指令都是 32 位長,這簡化了指令解碼。ARM-32, 還有更典型的 x86-32 都有許多不同的指令格式,使得解碼部件在低端實現中偏昂貴,在中高端處理器設計中容易帶來性能挑戰。第二,RISC-V 指令提供三個寄存器操作數,而不是 像 x86-32 一樣,讓源操作數和目的操作數共享一個字段。當一個操作天然就需要有三個不 同的操作數,但是 ISA 只提供了兩個操作數時,編譯器或者匯編程序程序員就需要多使用 一條 move(搬運)指令,來保存目的寄存器的值。第三,在 RISC-V 中對于所有指令,要讀寫的寄存器的標識符總是在同一位置,意味著在解碼指令之前,就可以先開始訪問寄存 器。在許多其他的 ISA 中,某些指令字段在部分指令中被重用作為源目的地,在其他指令 中又被作為目的操作數(例如,ARM-32 和 MIPS-32)。因此,為了取出正確的指令字 段,我們需要時序本就可能緊張的解碼路徑上添加額外的解碼邏輯,使得解碼路徑的時序 更為緊張。第四,這些格式的立即數字段總是符號擴展,符號位總是在指令中最高位。這 意味著可能成為關鍵路徑的立即數符號擴展,可以在指令解碼之前進行。

??為了給 ISA 擴展留出足夠的空間,最基礎的 RV32I 指令集只使用了 32 位指令字中的 編碼空間的不到八分之一。架構師們也仔細挑選了 RV32I 操作碼,使擁有共同數據通路的 指令的操作碼位有盡可能多的位的值是一樣的,這簡化了控制邏輯。最后,當我們看到,B 和 J 格式的分支和跳轉地址必須向左移動 1 位以將地址乘以 2,從而給予分支和跳轉指令 更大的跳轉范圍。RISC-V 將立即數中的位從自然排布進行了一些移位輪換,將指令信號的 扇出和立即數多路復用的成本降低了近兩倍,這也簡化了低端實現中的數據通路邏輯。

RV32I寄存器

??圖 4 列出了 RV32I 寄存器以及由 RISC-V 應用程序二進制接口(ABI)所定義的寄存 器名稱。為了滿足匯編 語言程序員和編譯器編寫者,RV32I 有 31 寄存器加上一個值恒為 0 的 x0 寄存器。為常量 0 單獨分配一個寄存器是 RISC-V ISA 能如此簡單的一個很 大的因素。

RV32I 整數計算

??簡單的算術指令(add, sub)、邏輯指令(and, or, xor),以及圖 2.1 中的移位指令 (sll, srl, sra)和其他 ISA 差不多。他們從寄存器讀取兩個 32 位的值,并將 32 位結果寫 入目標寄存器。RV32I 還提供了這些指令的立即數版本。和 ARM-32 不同,立即數總是進 行符號擴展,這樣子如果需要,我們可以用立即數表示負數,正因為如此,我們并不需要 一個立即數版本的 sub。

??程序可以根據比較結果生成布爾值。為應對這種使用場景下,RV32I 提供一個當小于 時置位的指令。如果第一個操作數小于第二個操作數,它將目標寄存器設置為 1,否則為 0。不出所料,對這個指令,有一個有符號版本(slt)和無符號版本(sltu),分別用于處 理有符號和無符號整數比較。相應的,上述兩條指令也有立即數版本的(slti,sltiu)。

??1 剩下的兩條整數計算指令主要用于構造大的常量數值和鏈接。加載立即數到高 位(lui)將 20 位常量加載到寄存器的高 20 位。接著便可以使用標準的立即指令來創建 32 位常量。這樣子,僅使用 2 條 32 位 RV32I 指令,便可構造一個 32 位常量。向 PC 高位加 上立即數(auipc)讓我們僅用兩條指令,便可以基于當前 PC 以任意偏移量轉移控制流或 者訪問數據。將 auipc 中的 20 位立即數與 jalr(參見下面)中 12 位立即數的組合,我們 可以將執行流轉移到任何 32 位 PC 相對地址。而 auipc 加上普通加載或存儲指令中的 12 位立即數偏移量,使我們可以訪問任何 32 位 PC 相對地址的數據。

??,RISC-V 中沒有字節或半字寬度的整數計算操作。操作始終 是以完整的寄存器寬度。RV32I 不包含乘法和除法,它們包含在可選的 RV32M 擴展。

RV32I load 和 Store

??除了提供 32 位字(lw,sw)的加載和存儲外,圖 2.1 中說明,RV32I 支持加載有符 號和無符號字節和半字(lb,lbu,lh,lhu)和存儲字節和半字(sb,sh)。有符號字節 和半字符號擴展為 32 位再寫入目的寄存器。在文本和無符號整數 中常用的無符號字節和半字,在寫入目標寄存器之前都被無符號擴展到 32 位。

??加載和存儲的支持的唯一尋址模式是符號擴展 12 位立即數到基地址寄存器,這在 x86-32 中被稱為位偏移尋址模式。

??RV32I 省略了 ARM-32 和 x86-32 的復雜尋址模式。另外,ARM-32 提供的尋址模式并非適用于所有數據類型,但 RV32I 尋址不會歧視任何數據類型。RISCV 可以模仿某些 x86 尋址模式。例如,將立即數字段設置為 0 即與 x86 中的寄存器間接尋 址效果相同。與 x86-32 不同,RISC-V 沒有特殊的堆棧指令。將 31 個寄存器中的某一個作 為堆棧指針(見圖 2.4),標準尋址模式使用起來和壓棧(push)和出棧(pop)類似,并 且不增加 ISA 的復雜性。與 MIPS-32 不同,RISC-V 不支持延遲加載(delayed load)。

??雖然 ARM-32 和 MIPS-32 要求存儲在內存中的數據,要按照數據的自然大小進行邊界 對齊,但是 RISC-V 沒有這個要求。

條件分支

??RV32I 可以比較兩個寄存器并根據比較結果上進行分支跳轉。比較可以是:相等 (beq),不相等 (bne),大于等于(bge),或小于(blt)。最后兩種比較有符號比 較,RV32I 也提供相應的無符號版本比較的:bgeu 和 bltu。剩下的兩個比較關系(大于和 小于等于)可以通過簡單地交換兩個操作數,即可完成比較。

??由于 RISC-V 指令長度必須是兩個字節的倍數。分支指令的尋址方式是 12 位的立即數乘以 2,符號擴展它,然后將得到值加到 PC 上作為分支的跳轉地址。PC 相對尋址可用于位置無關的代碼,簡化了鏈接器和加載器 的工作。

??對于條件分支,它還沒有像 ARM-32 和 x86-32 那樣使用條件 碼。條件碼的存在使得大多數指令都需要隱式設置一些額外狀態,這使亂序執行的依賴計 算復雜化。最后,它省略了 x86-32 中的循環指令:loop,loope,loopz,loopne, loopnz。

無條件跳轉

??圖 2.1 中的跳轉并鏈接指令(jal)具有雙重功能。若將下一條指令 PC + 4 的地址保存 到目標寄存器中,通常是返回地址寄存器 ra(見圖 2.4),便可以用它來實現過程調用。 如果使用零寄存器(x0)替換 ra 作為目標寄存器,則可以實現無條件跳轉,因為 x0 不能 更改。像分支一樣,jal 將其 20 位分支地址乘以 2,進行符號擴展后再添加到 PC 上,便得 到了跳轉地址。

??跳轉和鏈接指令的寄存器版本(jalr)同樣是多用途的。它可以調用地址是動態計算 出來的函數,或者也可以實現調用返回(只需 ra 作為源寄存器,零寄存器(x0)作為目的 寄存器)。Switch 和 case 語句的地址跳轉,也可以使用 jalr 指令,目的寄存器設為 x0。

??RV32I 避開了錯綜復雜的程序調用指令。

RV32I 雜項

??圖 2.1 中的控制狀態寄存器指令 (csrrc、csrrs、csrrw、csrrci、csrrsi、csrrwi), 使我們可以輕松地訪問一些程序性能計數器。對于這些 64 位計數器, 我們一次可以讀取 32 位。這些計數器包括了系統時間, 時鐘周期以及執行的指令數目。

??在 RISC-V 指令集中,ecall 指令用于向運行時環境發出請求,例如系統調用。調試器 使用 ebreak 指令將控制轉移到調試環境。

??fence 指令對外部可見的訪存請求,如設備 I / O 和內存訪問等進行串行化。外部可見 指對處理器的其他核心、線程,外部設備或協處理器可見。fence.i 指令同步指令和數據 流。在執行 fence.i 指令之前,對于同一個硬件線程,RISC-V 不保證用存儲指令寫到內存 指令區的數據可以被取指令取到。

?&ems;RISC-V 使用內存映射 I / O 。為支持字符串處理,RISC-V 實現了 字節存取。

RV32I特性

??圖 2.7 使用七個 ISA 設計指標來組織前面提到的一些過去的指令集中學習 到的經驗教訓,并說明了這些經驗教訓對 RV32I 設計的積極影響。

  • 32 位字節可尋址的地址空間
  • 所有指令均為 32 位長
  • 31 個寄存器,全部 32 位寬,寄存器 0 硬連線為零
  • 所有操作都在寄存器之間(沒有寄存器到內存的操作)
  • 加載/存儲字加上有符號和無符號加載/存儲字節和半字
  • 所有算術,邏輯和移位指令都有立即數版本的指令
  • 立即數總是符號擴展
  • 僅提供一種數據尋址模式(寄存器+立即數)和 PC 相對分支
  • 無乘法或除法指令
  • 一個指令,用于將大立即數加載到寄存器的高位,這樣加載 32 位常量到寄存器只需要兩條指令

一個例子

??冒泡排序算法的C實現如下:

??編譯成RV32I匯編語言之后如下:

參考

RISC-V 手冊 第二章

總結

以上是生活随笔為你收集整理的RV32I:RISC-V 基础整数指令集的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 粉嫩av蜜桃av蜜臀av | 国产精品系列在线 | 亚洲自拍色 | 瑟瑟视频在线免费观看 | 亚色视频在线观看 | 免费美女av | 丁香六月五月婷婷 | 另类小说色 | 女人床技48动态图 | 五月天国产在线 | 国产精品视频一二三 | 好紧好爽再浪一点视频 | 91精品国产色综合久久不卡98 | 高清黄色一级片 | 亚洲天堂久 | 亚洲视频一区二区三区在线观看 | 热re99久久精品国产99热 | 美女扒开尿口给男人看 | caoprom97| 亚洲羞羞 | 丝袜脚交国产在线观看 | 国产三级全黄裸体 | 亚洲91av | 亚洲精品无吗 | 亚洲 日本 欧美 中文幕 | 北条麻妃99精品青青久久 | 日本综合色 | 国产精品成人aaaa在线 | bt天堂av | 在线观看无码精品 | 天天干天天操天天射 | 超碰女人 | 人操人视频 | 欧美精品一二三四区 | 另类视频在线观看+1080p | 亚洲一区欧美激情 | 亚洲自拍偷拍一区二区三区 | 欧美sese | 国产成人无码一区二区三区在线 | 日本激情视频在线 | 蜜桃视频导航 | 久久国产影视 | 91中文字幕在线视频 | 欧美性爱精品一区 | eeuss一区二区 | 亚洲精品欧洲 | 2024av视频| 色网站入口 | 亚洲区欧美区 | 一区二区三区国产在线 | 在线观看视频亚洲 | 在线观看sm | 91呦呦| 亚洲国产精品18久久久久久 | 国产人妖ts重口系列网站观看 | www亚洲成人 | 91精品国产自产在线观看 | 日韩理论在线观看 | 国产深夜福利 | 国产免费网址 | 国产天天射 | 亚洲成网| 亚洲成人久久久久 | 国产成人亚洲一区二区 | 久久精品色欲国产AV一区二区 | 日韩精品电影一区二区 | 啪啪网站免费观看 | 手机在线成人av | 丁香色欲久久久久久综合网 | 日韩不卡一区 | 国产无遮挡又黄又爽又色视频 | 天天添天天操 | 日本精品入口免费视频 | 亚洲特级黄色片 | 欧美午夜精品一区二区蜜桃 | 久久精品视频国产 | 一二三区在线播放 | 亚洲av中文无码乱人伦在线视色 | 91精品国产乱码久久久 | 波多野结衣免费看 | 午夜影视福利 | 欧美成人三级在线观看 | 日韩射吧| 又粗又猛又爽又黄少妇视频网站 | 成人伊人 | 天天干夜夜爱 | 涩涩999| 性中文字幕| 成人国产视频在线观看 | 中文字幕国产日韩 | 懂色视频在线观看 | 中文字幕无码人妻少妇免费 | 亚洲欧美日韩色 | 国产麻豆精品久久一二三 | av丝袜在线 | 成人午夜免费在线 | 国产亚洲精品成人无码精品网站 | 国产无套丰满白嫩对白 | 超碰蜜臀 |