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指令集

_light ? 來源:_light ? 作者:_light ? 2022-11-18 10:11 ? 次閱讀

1、寄存器

RV32I有32個(gè)通用寄存器,以及一個(gè)PC寄存器。其中有一個(gè)通過硬件設(shè)置的值恒為 0 的 x0 寄存器

在這里插入圖片描述

注:RISC-V的32個(gè)寄存器x0~x31是用0~31這些數(shù)字來表示。

2、基礎(chǔ)指令

RISC-V有六種基本指令格式:

在這里插入圖片描述

每個(gè)字段名稱的含義:


  • opcode (操作碼):指令的基本操作,這個(gè)縮寫是它慣用名稱。
  • rd : 目的操作寄存器,用來存放操作結(jié)果。
  • funct3 : 一個(gè)另外的操作碼字段。
  • rs1 : 第一個(gè)源操作數(shù)寄存器。
  • rs2 : 第二個(gè)源操作數(shù)寄存器。
  • funct7 : 一個(gè)另外的操作碼字段。
  • imm :立即數(shù)

2.1、R 型指令

字段:

funct7 rs2 rs1 funct3 rd opcode
7位 5位 5位 3位 5位 7位

指令:

在這里插入圖片描述

示例:

指令 示例 含義
add add a0, a1, a2 a0 = a1 + a2
sub sub a0, a1, a2 a0 = a1 - a2
sll sll a0, a1, a2 a0 = a1 << a2 (低位補(bǔ)0)
srl srl a0, a1, a2 a0 = a1 >> a2(高位補(bǔ)0)
sra sra a0, a1, a2 a0 = a1 >> a2 (算術(shù)右移,高位補(bǔ)原來的符號(hào)位)
slt slt a0, a1, a2 a1 < a2 ? 1 : 0
xor xor a0, a1, a2 a0 = a1 ^ a2
or or a0, a1, a2 a0 = a1
and and a0, a1, a2 a0 = a1 & a2

2.2、I 型指令

字段:

imm rs1 funct3 rd opcode
12位 5位 3位 5位 7位

指令:

在這里插入圖片描述

示例:

指令 示例 含義
addi add a0, a1, 0x50
slli slli a0, a1, 5 a0 = a1 << 5 (低位補(bǔ)0)
srli srli a0, a1, 5 a0 = a1 >> 5 (高位補(bǔ)0)
srai sra a0, a1, 5 a0 = a1 >> 5 (高位補(bǔ)原來的高位)
slti slti a0, a1, 0x50 a1 < 0x50 ? 1 : 0
xori xor a0, a1, 0x50 a0 = a1 ^ 0x50
ori ori a0, a1, 0x50 a0 = a1
andi andi a0, a1, 0x50 a0 = a1 & 0x50

取值指令—Load

字段:

imm rs1 funct3 rd opcode
12位 5位 3位 5位 7位

指令:

在這里插入圖片描述

示例:

lb x10,  0(x1)  //將x1的值加上0,將這個(gè)值作為地址, 取出這個(gè)地址所對(duì)應(yīng)的內(nèi)存中的值, 將這個(gè)值賦值給x10(取出的是8位數(shù)值)
lh x10,  0(x1)  //從內(nèi)存中取出16位數(shù)值
lw x10, 0(x1)  //從內(nèi)存中取出32位數(shù)值
lbu x10, 0(x1) //從內(nèi)存中取出8位無符號(hào)數(shù)值
lhu x10, 0(x1) //從內(nèi)存中取出16位無符號(hào)數(shù)值

2.3、S 型指令

字段:

imm[11:5] rs2 rs1 funct3 imm[4:0] opcode
7位 5位 5位 3位 5位 7位

指令:

在這里插入圖片描述

示例:

sb  x10, 0(x1)  //x1的值加上0,將這個(gè)值作為地址, 將x10的值存儲(chǔ)到上述地址所對(duì)應(yīng)的內(nèi)存中去 (只會(huì)將x10的值的低8位寫入)
sh  x10, 0(x1)  //只會(huì)將x10的值的低16位寫入
sw  x10, 0(x1)  //只會(huì)將x10的值的低32位寫入

2.4、B 型指令

字段:

imm[12] imm[10:5] rs2 rs1 funct3 imm[4:1] imm[11] opcode
1位 6位 5位 5位 3位 4位 1位 7位

指令:

在這里插入圖片描述

指令 示例 含義 備注
beq beq a1, a2, Lable if(a1 == a2){goto Label;} Lable是任意自定義的標(biāo)簽
bne bne a1, a2, Lable if(a1 != a2){goto Label;}
blt blt a1, a2, Lable if(a1 < a2){goto Label;}
bgt bgt a1, a2, 100 if(a1 > a2){goto Label;} 100與Label對(duì)應(yīng)著相同的指令, 實(shí)際上在運(yùn)行時(shí)Label會(huì)變成pc+xxx
bge bge a1, a2, 100 if(a1 <= a2){goto Label;}
ble ble a1, a2, 100 if(a1 >= a2){goto Lable;}

2.5、U 型指令

字段:

imm[31:12] rd opcode
10位 5位 7位

指令:

在這里插入圖片描述

lui  x10, 0x65432 //得到立即數(shù)的高20位,低位補(bǔ)0,立即數(shù)范圍為:0x00~0xFFFFF

2.6、J 型指令

字段:

imm[20] imm[10:1] imm[11] imm[19:12] rd opcode
1位 10位 1位 8位 5位 7位

指令:

在這里插入圖片描述

示例:

jal ra, symbol   // 跳轉(zhuǎn)到Symbol中去, 并把ra設(shè)置成返回地址 Symbol 可以是自定義的Label ,也可以是某個(gè)函數(shù)名
jal ra, 100        // 跳轉(zhuǎn)到pc + 100 * 2的地方中去, 并把ra設(shè)置成返回地址  pc相對(duì)尋址,對(duì)應(yīng)的是位置無關(guān)代碼(PIC)
jalr ra, 40(x10) //跳轉(zhuǎn)到x10+40 的地方中去, 并把ra設(shè)置成返回地址x10+40必須是絕對(duì)地址,指向內(nèi)存中某個(gè)確定的地方(往往是函數(shù)的開頭),非PIC

3、匯編語言翻譯成機(jī)器語言

示例1:


例題

對(duì)于符號(hào)表示為:

add x9, x20, x21

的RISC-V指令,首先以十進(jìn)制表示,然后用二進(jìn)制表示

答案

有上面的介紹可知add指令的字段如下:

在這里插入圖片描述

直接用十進(jìn)制表示如下:

funct7 rs2 rs1 funct3 rd opcode
0 21 20 0 9 51

一條指令的每一段稱為一個(gè)宇段。

第一、第四和第六個(gè)字段(0、0 和 51)組合起來告訴RISC-V計(jì)算機(jī)該指令執(zhí)行加法操作。

第二個(gè)字段給出了作為加法運(yùn)算的第二個(gè)源操作數(shù)的寄存器編號(hào)(21 表示 x21),

第三個(gè)字段給出了加法運(yùn)算的另一個(gè)源操作數(shù)(20代表×20)。

第五個(gè)字段存放要接收總和的奇存器編號(hào)(9代表x9)。

因此,該指令將寄存器 x20 和寄存器 x21 相加并將和存放在寄存器x9中。

用二進(jìn)制表示如下:

funct7 rs2 rs1 funct3 rd opcode
0000000 10101 10100 000 01001 0110011

總上,add x9, x20, x21 的RISC-V指令對(duì)應(yīng)的機(jī)器碼為: 00000001010110100000010010110011


示例2


例題

有以下幾條匯編:

ld x9, 240(x10)
add x9, x21, x9
addi x9, x9, 1
sd x9, 240(x10)

將它們翻譯為對(duì)應(yīng)的機(jī)器碼

答案

審核編輯:湯梓紅

聲明:本文內(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

    文章

    5254

    瀏覽量

    119214
  • 指令集
    +關(guān)注

    關(guān)注

    0

    文章

    220

    瀏覽量

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

    關(guān)注

    44

    文章

    2142

    瀏覽量

    45713
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    正式的RISC-V基礎(chǔ)指令集架構(gòu)與特權(quán)架構(gòu)規(guī)范來了,RISC-V基金會(huì)已正式批準(zhǔn)

    根據(jù)RISC-V基金會(huì)官網(wǎng)發(fā)布的公告,RISC-V 基金會(huì)宣布了批準(zhǔn)RISC-V 基礎(chǔ)指令集架構(gòu)與特權(quán)架構(gòu)規(guī)范,為 RISC-V的可擴(kuò)展性進(jìn)
    的頭像 發(fā)表于 07-11 10:46 ?9720次閱讀

    淺談RISC-V指令集架構(gòu)的來龍去脈

    最近和幾個(gè)行業(yè)內(nèi)的朋友聊天,聊到了近兩年比較火的AI人工智能,并向我推薦了一款目前在小范圍內(nèi)比較火的國產(chǎn)處理器,我查了一下該處理器是采用的開源RISC-V指令集架構(gòu)。曾有人將RISC-V比作“半導(dǎo)體行業(yè)的Linux”,今天就和大
    的頭像 發(fā)表于 01-24 17:42 ?6181次閱讀

    Microchip發(fā)布業(yè)界首款基于RISC-V指令集架構(gòu)的SoC FPGA開發(fā)工具包

    免費(fèi)和開源的 RISC-V 指令集架構(gòu)(ISA)的應(yīng)用日益普遍,推動(dòng)了經(jīng)濟(jì)、標(biāo)準(zhǔn)化開發(fā)平臺(tái)的需求,該平臺(tái)嵌入 RISC-V 技術(shù)并利用多樣化 RISC-V 生態(tài)系統(tǒng)。
    發(fā)表于 09-17 12:56 ?1411次閱讀

    RISC-V指令集架構(gòu)介紹和主要處理器IP廠商匯總

    電子發(fā)燒友網(wǎng)報(bào)道(文/吳子鵬)RISC-V起源于2010年,當(dāng)時(shí)加州大學(xué)伯克利分校的一個(gè)研究團(tuán)隊(duì)為了不使用復(fù)雜的ARM、MIPS、SPARC和X86等現(xiàn)有架構(gòu),設(shè)計(jì)了一套全新的指令集。雖然四人
    的頭像 發(fā)表于 08-19 08:57 ?2823次閱讀

    有沒有RISC-V指令集文檔分享一下?

    有沒有RISC-V指令集文檔分享一下?了解一下他的匯編指令。
    發(fā)表于 03-30 11:48

    RISC-V指令集說明哪里有?

    RISC-V指令集說明哪里有?匯編指令文檔哪有?
    發(fā)表于 04-30 17:44

    RISC-V指令集的特點(diǎn)總結(jié)

    開源 定義:RISC-V 是完全開源的指令集架構(gòu)(ISA),意味著任何人都可以查看、使用、修改以及分發(fā)其設(shè)計(jì),而無需支付版權(quán)費(fèi)用。 優(yōu)勢(shì):這種開源特性促進(jìn)了全球性的創(chuàng)新和合作。 社區(qū)化 定義
    發(fā)表于 08-30 22:05

    僅用7個(gè)月就設(shè)計(jì)出了一款基于RISC-V指令集的AI芯片

    中國最早做RISC-V的公司選擇了落戶深圳,并且僅用7個(gè)月就設(shè)計(jì)出了一款基于RISC-V指令集的AI芯片,能耗和面積明顯優(yōu)于同級(jí)別Arm架構(gòu)芯片,更讓行業(yè)吃驚的是該款芯片一次性流片成功。這是否意味著
    發(fā)表于 08-02 11:59

    RISC-V指令集架構(gòu)微控制器相關(guān)知識(shí)

    本系列痞子衡給大家介紹的是RISC-V指令集架構(gòu)微控制器相關(guān)知識(shí)?! ?b class='flag-5'>RISC-V指令集最早要追溯到2010年,是加州大學(xué)伯克利分校的一個(gè)研究團(tuán)隊(duì)的項(xiàng)目,目標(biāo)是設(shè)計(jì)一種新的
    發(fā)表于 12-16 06:24

    基于RISC-V指令集Egret系列處理器的性能及應(yīng)用場(chǎng)景

    risc-v峰會(huì)上由廈門半導(dǎo)體投資集團(tuán)有限公司的王旭給我們介紹了基于RISC-V指令集的Egret系列處理器,分別從特性、應(yīng)用場(chǎng)景、優(yōu)勢(shì)等幾個(gè)方面對(duì)這個(gè)系列的處理器進(jìn)行了詳細(xì)的展現(xiàn)。
    發(fā)表于 06-22 15:36 ?2180次閱讀
    基于<b class='flag-5'>RISC-V</b><b class='flag-5'>指令集</b>Egret系列處理器的性能及應(yīng)用場(chǎng)景

    risc-v中國峰會(huì)直播:如何優(yōu)化RISC-V指令集架構(gòu)的代碼密度?

    第一屆中國峰會(huì)在上海舉辦,以下是小編整理的部分risc-v峰會(huì)的內(nèi)容。主要介紹了影響代碼密度的因素以及如何優(yōu)化RISC-V指令集架構(gòu)的代碼密度?感興趣的小伙伴可以詳細(xì)了解一下。
    的頭像 發(fā)表于 06-23 12:12 ?3004次閱讀
    <b class='flag-5'>risc-v</b>中國峰會(huì)直播:如何優(yōu)化<b class='flag-5'>RISC-V</b><b class='flag-5'>指令集</b>架構(gòu)的代碼密度?

    第一屆RISC-V中國峰會(huì)看點(diǎn) risc-v開發(fā)要怎么優(yōu)化risc-v指令集架構(gòu)代碼密度

    在第一屆RISC-V中國峰會(huì)上看點(diǎn)很多,RISC-V是開源的,那么代碼密度要怎么控制,會(huì)不會(huì)因?yàn)殚_源而導(dǎo)致代碼密度特別大? 我們一起來看看risc-v峰會(huì)其中一個(gè)非常重要的亮點(diǎn);卡姆派樂信息科技有限公司解讀針對(duì)
    發(fā)表于 06-23 18:22 ?9590次閱讀
    第一屆<b class='flag-5'>RISC-V</b>中國峰會(huì)看點(diǎn) <b class='flag-5'>risc-v</b>開發(fā)要怎么優(yōu)化<b class='flag-5'>risc-v</b><b class='flag-5'>指令集</b>架構(gòu)代碼密度

    RT-Thread全球技術(shù)大會(huì):RISC-V指令集開源軟件生態(tài)介紹

    RT-Thread全球技術(shù)大會(huì):RISC-V指令集開源軟件生態(tài)介紹
    的頭像 發(fā)表于 05-27 09:47 ?1090次閱讀
    RT-Thread全球技術(shù)大會(huì):<b class='flag-5'>RISC-V</b><b class='flag-5'>指令集</b>開源軟件生態(tài)介紹

    簡單講講RISC-V指令集CPU的參數(shù)

    本次CPU采用32位RISC-V指令集架構(gòu)(一代是自己瞎編指令集)。指令集就是程序指令的集合,指引硬件如何設(shè)計(jì)、如何運(yùn)行。
    的頭像 發(fā)表于 08-07 14:55 ?3400次閱讀
    簡單講講<b class='flag-5'>RISC-V</b><b class='flag-5'>指令集</b>CPU的參數(shù)

    瑞薩推出首款基于RISC-V指令集架構(gòu)的處理器內(nèi)核

    嵌入式硬件專家瑞薩電子宣布推出首款基于免費(fèi)開放的 RISC-V 指令集架構(gòu) (ISA) 的完全自主研發(fā)的處理器內(nèi)核。
    的頭像 發(fā)表于 12-01 17:28 ?1275次閱讀
    瑞薩推出首款基于<b class='flag-5'>RISC-V</b><b class='flag-5'>指令集</b>架構(gòu)的處理器內(nèi)核