深圳建站公司專業(yè)公司最近熱點(diǎn)新聞事件2023
簡(jiǎn)介
RISC-V64位/32位提供了32個(gè)整型通用寄存器,編號(hào)是x0~x31,這些整型通用寄存器的寬度與架構(gòu)位數(shù)一致。
浮點(diǎn)數(shù)寄存器與整形寄存器一樣也提供了32個(gè):f0~f31,位數(shù)與架構(gòu)位數(shù)一致。
通用寄存器介紹
零寄存器
x0/zero
x0寄存器又被稱為zero寄存器,它的讀寫是無效的,它的值只能為0,這是為了讓編譯器進(jìn)行優(yōu)化
比如當(dāng)進(jìn)行一些運(yùn)算時(shí):
add x1, x2 , x3
上面這段匯編的作用是進(jìn)行相加運(yùn)算,將x2和x3寄存器的值相加的結(jié)果并放入x1寄存器,但是如果x3寄存器的值為0
處理器仍然需要去讀取一次x3寄存器的值,所以編譯器可以進(jìn)行這樣的優(yōu)化:
add x1, x2, x0
當(dāng)RISC-V處理器執(zhí)行這條指令的時(shí)不會(huì)去讀取x0寄存器的值,會(huì)直接按0來運(yùn)算,這樣就可以省去與0做運(yùn)算時(shí)讀取的步驟。
RISC-V處理器在設(shè)計(jì)時(shí)只要涉及到x0寄存器的讀取一律按0來處理不會(huì)去讀取x0的寄存器,這么做的目的是為了方便編譯器優(yōu)化某些運(yùn)算。
返回地址寄存器
x1/ra
x1寄存器也稱為RA寄存器,意為Return Address。當(dāng)一個(gè)函數(shù)被調(diào)用時(shí),RA寄存器會(huì)被自動(dòng)保存下來,以便在函數(shù)執(zhí)行完畢后能夠返回調(diào)用該函數(shù)的位置。因此,在函數(shù)執(zhí)行過程中,RA寄存器也可以被用來存儲(chǔ)函數(shù)的返回地址。它也時(shí)常被用來函數(shù)傳參。
棧指針寄存器
x2/sp
通常用于存儲(chǔ)棧指針(stack pointer)。在RISC-V中,棧是一種先進(jìn)后出(Last-In-First-Out)的數(shù)據(jù)結(jié)構(gòu),常用于函數(shù)調(diào)用時(shí)的變量保存和程序現(xiàn)場(chǎng)保護(hù)等操作。
全局寄存器
x3/gp
x3寄存器是RISC-V架構(gòu)中的通用寄存器之一,通常用于存儲(chǔ)全局指針(global pointer)。在RISC-V中,全局指針是一個(gè)特殊的指針,指向全局變量和靜態(tài)數(shù)據(jù)區(qū)(static data region)的起始地址。
全局變量是在程序啟動(dòng)時(shí)就已經(jīng)被分配好的變量,它們通常存儲(chǔ)在靜態(tài)數(shù)據(jù)區(qū)中,其內(nèi)存地址在編譯時(shí)就已經(jīng)確定。全局指針GP通常指向靜態(tài)數(shù)據(jù)區(qū)的起始地址,用于訪問和管理全局變量。
線程寄存器
x4/tp
x4寄存器是RISC-V架構(gòu)中的通用寄存器之一,通常用于存儲(chǔ)線程指針(thread pointer),也稱為線程局部存儲(chǔ)器指針(thread-local storage pointer)。
在線程級(jí)別的編程中,線程指針是一個(gè)非常重要的概念。它是一個(gè)指針,指向當(dāng)前線程的局部存儲(chǔ)器(thread-local storage),也就是線程私有的數(shù)據(jù)區(qū)域。在多線程編程中,每個(gè)線程都有自己獨(dú)立的線程指針,并且可以在其對(duì)應(yīng)的局部存儲(chǔ)器中存儲(chǔ)和管理線程私有的數(shù)據(jù)。
臨時(shí)寄存器
x5/t0、x6/t1、x7/t2、x28/t3、x29/t4、x30/t5、x31/t6
這些寄存器是一個(gè)臨時(shí)寄存器,通常用于臨時(shí)存儲(chǔ)計(jì)算中的中間結(jié)果或臨時(shí)變量。
函數(shù)調(diào)用寄存器
x8/ra
x8是一個(gè)通用寄存器,主要用于存儲(chǔ)數(shù)據(jù)和地址。
x8通常被稱為ra寄存器,它有一個(gè)特殊的作用,即用于存儲(chǔ)函數(shù)返回地址,因此也被稱為返回寄存器。在函數(shù)調(diào)用時(shí),調(diào)用者將函數(shù)返回地址壓入棧中,然后調(diào)用函數(shù)時(shí)將返回地址存儲(chǔ)在ra寄存器中,函數(shù)執(zhí)行完畢后再從ra寄存器中取出返回地址并跳轉(zhuǎn)回調(diào)用者。X8寄存器還可以被用作普通的通用寄存器,存儲(chǔ)數(shù)據(jù)和地址。
x9/s1
x9寄存器是RISC-V CPU的一個(gè)通用寄存器,通常被稱為s1(scratch register 1)。
由于RISC-V代碼遵循RISC(Reduced Instruction Set Computing,精簡(jiǎn)指令集計(jì)算機(jī))原則,所以寄存器數(shù)量比較有限,因此x9寄存器通常被用作一個(gè)通用寄存器,多種指令都會(huì)使用到它,比如函數(shù)調(diào)用時(shí)用于保存函數(shù)調(diào)用者的棧指針,或者作為全局指針等。除此之外,x9寄存器也可以用于實(shí)現(xiàn)一些特殊指令的優(yōu)化,比如乘法指令的高32位運(yùn)算或者計(jì)算指令的中間結(jié)果等。
x18/s2
它的作用是用于執(zhí)行指令時(shí)暫存臨時(shí)數(shù)據(jù),比如保存函數(shù)調(diào)用時(shí)的參數(shù)、局部變量等等。由于它是一個(gè)特殊寄存器,因此在CPU中還有一些特殊的用途。
x18寄存器還可以用于執(zhí)行一些特殊操作,比如RISC-V CPU中的原子操作。原子操作需要在保證操作的原子性的同時(shí),還需要快速地完成,因此x18寄存器就成了很好的選擇。此外,x18寄存器還可以用于實(shí)現(xiàn)一些編譯器優(yōu)化,比如進(jìn)行指令選取、指令調(diào)度等等。因此,x18寄存器可以看做是一個(gè)非常重要的寄存器,在程序運(yùn)行過程中扮演著舉足輕重的角色。
x19/s3、x20/s4、x21/s6、x22/s7、x24/s8、x25/s9、x26/s10、x27/s11
這些寄存器可以用來存儲(chǔ)臨時(shí)變量或者函數(shù)參數(shù)等數(shù)據(jù)。在函數(shù)調(diào)用時(shí),這些寄存器通常被用來存儲(chǔ)調(diào)用者保存的寄存器、返回地址或者參數(shù)值,具體使用方式取決于編程語言規(guī)范和系統(tǒng)調(diào)用規(guī)范。
傳參寄存器
x10/a0
x10 寄存器通常被稱為 a0 寄存器,在程序中,a0寄存器通常被用于存儲(chǔ)函數(shù)的輸入?yún)?shù),也可以用于存儲(chǔ)函數(shù)的返回值。當(dāng)函數(shù)被調(diào)用時(shí),輸入?yún)?shù)的值被加載到a0寄存器中,并通過函數(shù)調(diào)用將參數(shù)傳遞給被調(diào)用的函數(shù)。被調(diào)用的函數(shù)可以將返回值存儲(chǔ)在a0寄存器中,并通過函數(shù)調(diào)用返回給調(diào)用方。
x11/a1、x12/a2、x13/a3、x14/a4、x15/a5、x16/a6、x17/a7
x11 ~ x17用于傳遞函數(shù)參數(shù),從x11到x17分別對(duì)應(yīng)函數(shù)第一個(gè)參數(shù)和第七個(gè)參數(shù)