Skip to content

期末作業

jackuio440 edited this page Dec 29, 2022 · 9 revisions

RSIC-V手冊閱讀心得

閱讀資源

本書以RISC-V的架構編寫了指令集說明、匯編器指令、系統功能及介紹RISC-V 我將針對第二章的寄存與整數運算進行分享

RV32I是RISC-V指令集的部分,包含了32位的整數計算指令。這些指令可以用於處理整數數據,包括加減乘除、比較和邏輯運算。
RV32I提供了一些整數寄存器,可以用於存儲和操作整數數據。RV32I寄存器的名稱以x開頭,後面跟著一個數字,例如x0、x1等。這些寄存器的位數為32位,可以存儲一個整數。 RV32I也提供了一些指令用於對整數寄存器進行操作。例如,可以使用 add 指令來計算兩個整數寄存器的和,mul 指令來計算兩個整數寄存器的積,div 指令來計算兩個整數寄存器的商,and 指令來計算兩個整數寄存器的按位與,or 指令來計算兩個整數寄存器的按位或等。
另外,RV32I提供了一些指令用於比較兩個整數寄存器的值,例如slt指令可以用於比較兩個整數寄存器的值,並將結果存儲在一個整數寄存器中。這些比較指令可以用於實現控制流指令,例如beq指令可以用於在兩個整數寄存器的值相等時跳轉。
使用RV32I整數計算指令可以輕鬆地實現常見的整數計算操作,這對於編寫各種類型的程序都是非常有用的。

在我瀏覽一遍本書後我嘗試了解了一下指令集,並試著用python來模擬他的指令集

li x2, 5
li x3, 7
add x1, x2, x3
li x4, 2
mul x0, x1, x4
mv a0, x0
ecall

這是根據書上的程式集一部分我所看懂的指令所寫出一段RISC-V程式

在第一行與第二行與第四行我呼叫li(load immediate)指令將常數load入x值裡
在使用add 將x2,x3加總存入x1
在使用mul 將x1乘上x4
利用mv(move)指令將x0移動至a0
再用ecall指令來輸出

下面則是一段利用python模擬出的一段機碼

00000000010100010000000100010011
00000000011100011000000110010011
00000000001100010000000010110011
00000000001000100000001000010011
00000010010000001000000000110011
00000000000000000000010100010011

與書上寫的部分進行比較
add x1=x2+x3
是由
0000000 x2 x3 000 x1 0110011
0000000 00011 00010 000 00001 0110011
mul x0=x1+x4
0000001 x1 x4 000 x0 0110011
0000001 00100 00001 000 00000 0110011
其他部份書上只有給指令並無附機碼

這長度便是RV32I的寄存器長度由31個暫存器長度,加上一個恆值為0的一串數列所組成

Clone this wiki locally