機器態程序計數寄存器
外觀
類別 | 控制與狀態寄存器 | ||
---|---|---|---|
代碼 | mepc | ||
實現細節 | |||
寬度 | 與機器字長相同 | ||
特權態 | 機器態 | ||
讀寫權限 | 寫任意,讀合法 | ||
RISC-V標準寄存器 | |||
發佈版本 | 早於1.9.1 | ||
發佈時間 | 早於2017年 |
RISC-V特權指令集架構[1]規定了機器態程序計數寄存器,它是一個機器字長位的可讀寫寄存器。它主要用於在中斷發生時臨時保存產生中斷的指令地址,以便在中斷、異常結束後返回此條指令。
地址對齊
[編輯]機器態程序計數寄存器的最低位始終為零,即mepc[0]=0。在僅支持指令對齊為32位的實現中,最低位和次低位始終為零,即mepc[1:0]=0。
如果實現允許指令對齊為16或32位(例如,通過更改機器模式指令集架構寄存器),則每當指令對齊為32位時,位mepc[1]在讀取時被屏蔽,使其看起來為0。這種屏蔽也發生在MRET指令的隱式讀取。雖然被屏蔽,但當指令對齊為32位時,mepc[1]仍然可寫。
可保存的地址
[編輯]此寄存器是一個寫任意、讀合法寄存器,它必須能夠保存所有有效的虛擬地址。它不需要能夠保存所有可能的無效地址。在向此寄存器寫入值之前,實現可能會將無效地址轉換為此寄存器能夠保存的其它一些無效地址。
當地址翻譯無效時,虛擬地址和物理地址是相等的。因此,機器態程序計數寄存器能夠表示的值,必須包括程序計數器能夠指向的所有物理地址(這也被稱作等效地址)。
陷入
[編輯]當處理器陷入機器模式時,機器態程序計數寄存器被寫入被中斷或遇到異常的指令的虛擬地址。否則,此寄存器永遠不會由硬件實現寫入,儘管它可能由軟件顯式寫入。
引用
[編輯]- ^ RISC-V Community. RISC-V指令集架构手册. [2022-04-25]. (原始內容存檔於2022-06-01).