esp32 c6價格樂鑫wifi模塊代理商RISC-V指令集長度/助記符/指令格式,模塊化是 RISC-V 指令集的大特點之一?;局噶罴?RV32I 充分體現了RISC-V 指令集簡單、精煉的風格。esp32 c6價格樂鑫wifi模塊代理商RV321指令集共有 47 條指令,包括算術和邏輯運算、存儲器訪問,以及分支與跳轉等操作。與 RV32I相比,RV64I、RV128I僅擴展了64 位、128 位數據訪問指令,其他基本操作指令沒有變化。
RV32I 指合
esp32 c6價格樂鑫wifi模塊代理商RV32I 指令是能夠被處理器內核解碼并執行的二進制數。在匯編語言中,用助記符表示指令,以便于編程和理解。下面首先介紹 RV32I 指令格式和助記符,然后詳細討論 RV32I指令集中的指令。
1.指令長度
RISC-V 架構支持固定長度指令。
一條指令通常包括兩個部分:操作碼和操作數。操作碼標識該指令的操作類型,操作數則是該指令的操作對象。
RV32I是 32 位 RISC-V 處理器架構的基礎指令集。esp32 c6價格樂鑫wifi模塊代理商RV32I 指令集指令長度是32 位,其中低 7 位是指令的操作碼(Opcode),高 25 位是指令的操作數(Operands)。
RV64I和RV128I指今中的指今長度也是 32 位,擴展指令集“M”“A”“F”“Q”“D”,以及CSR寄存器訪問指令的長度也是32位,擴展指令集“C”的指令長度是16位。
其結構與圖 4.2相廚為展"我Y-Q-D以及CSK寄存器訪同指今的長度也是32億,打集“C”的指令長度是 16 位。
在內存中,32位指令必須位于4字節對其的邊界,16位指令必須是2字節邊界對其,否則,處理器內核運行程序時將無法正確取指令,出現異常錯誤
2.助記符
為了便于記憶和編程,編寫匯編程序時用文本格式符號表示指令,即助記符。
RISC V匯編語言采用字母聯想方式定義指令的助記符。通常,如果播述書的短語只有一個單詞,則取單詞的前3 個字母構成助記符。如果描述操作的短語。于一個單詞,則取短語中所有單詞的首字母,順序構成助記符。
esp32 c6價格樂鑫wifi模塊代理商RV32I指令集中包括算術、邏輯和移位 3 種整數運算指令。通常在運算助記后增加“i”,構成新的助記符,表示源操作數是立即數。如果助記符后附加“u",則示操作數是無符號整數。表列出了 RV32I整數計算指令的助記符。其中,助符后的“(i)”和“(u)”是可選項,分別說明操作數是立即數和無符號整數類型
RV32I整數計算指令助記符
功能 操 作 助記符 解釋
整數計算(Integer Computation) addition (immediate) add(i) “加法”運算(i,立即數)
subtract sub “減法”運算(i,立即數)
and (immediate) and(i) “與”運算(i,立即數)
or (immediate) or(i) “或”運算(i,立即數)
xor (immediate) xor(i) “異或”運算(i,立即數)
shift left logical (immediate) sll(i) 邏輯左移(i,立即數)
shift right arithmetic(immediate) sra(i) 算術右移(i,立即數)
shift right logical(immediate) srl(i) 邏輯右移(i,立即數)
load upper immediate lui 裝載立即數到寄存器的高 20位
add upper immediate to pc auipc 把立即數加到程序指針的高 20位
set less than immediate unsigned slt(i)(u) 根據比較結果設置寄存器值
在RV32I指令集中,內存訪指令裝載(load)和存儲(store)支持 32 位(word)、16位(halfword)和 8 位(byte)三種數據格式。esp32 c6價格樂鑫wifi模塊代理商對于 halfword 和 byte 類型數據指令還支持無符導(unsigne)形式,不需要擴展所裝載數據的符號位。為了RV32I的不同類型load和sore 指令助記符。load 和store指令要求中內存數據地址按所訪問的數據型對齊。例如,"lw”指令要求數據地址4字節對齊。
RV32Iload和store 指令助記符
功能 操 作 助記符 解 釋
裝載與儲存(Load and Store) load byte (unsigned) Ib(u) 讀取 1字節(8 位,u,無符號)
load halfword (unsigned) lh(u) 讀取 2字節(16 位,u,無符號)
load word lw 讀取4字節(32位)
store byte sb 保存1字節(8位)
store halfword sh 保存2字節(16位)
store word sw 保存4字節(32位)
RV32I跳轉指令助記符
功能 操 作 助記符 解 釋
跳轉(Control Transfer) branch equal beq 如果相等則跳轉
branch not equal bne 如果不等則跳轉
branch less than (unsigned) blt(u) 如果小于則跳轉(u,無符號數)
branch greater and equal( unsigned) bge(u) 如果不小于則跳轉(u,無符號數)
jump and link jal 可返回跳轉,PC=PC十立即數
jump and link register jalr 可返回跳轉,PC-寄存器中的值
RV32I指令集包括分支跳轉(branch)和無條件跳轉(jump)兩種程序跳轉指令。esp32 c6價格樂鑫wifi模塊代理商branch 指令支持相等(equal)不等(not equal)、大于或等于(greater than or equal)和小于(less than)四種條件判斷。branch 指令跳轉時,將 12 位立即數以2字節的倍數(忽略立即數的低位)與 PC 相加,作為分支跳轉的目標地址。
執行jump 指令時,將jump 的下一條指令的地址(PC + 4,PC 是當前指令jump的指針)保存到返回地址寄存器 ra,然后跳轉到目標地址。處理器從子程序返回到主程序時,從 ra 寄存器讀取程序返回的指針。因為 x0 不能更改,如果使用 x0 作為目標寄存器,則實現無條件和無返回跳轉。
在跳轉指令中,獲取目標指令地址的方式有立即數尋址和寄存器尋址兩種。esp32 c6價格樂鑫wifi模塊代理商RV32I 指令集中還包括一些其他(Miscellaneous)指令。其他指令包括控制狀態寄存器訪問、運行時環境調用以及同步訪問指令。
3.指令格式
RV32I 指令集包括算術運算、邏輯運算、移位操作、存儲訪問、跳轉和其他指令不同類型指令的格式有所差別。