机器态程序计数寄存器
外观
类别 | 控制与状态寄存器 | ||
---|---|---|---|
代码 | 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).