6.常见寄存器和指令

news/发布时间2024/5/6 0:28:40

一.寄存器

1.通用寄存器

image-20221017175611669

2.特殊寄存器

stvec(Supervisor Trap Vector) 内核在这里写入trap处理程序的地址;RISC-V会跳转到stvec中的地址来处理trap,xv6的stvec就是trampoline page的起始地址
sepc 发生trap时,RISC-V将当前的pc值存储到这里(pc随后会被stvec中的值覆盖)。从trap返回时,sret指令会将sepc复制回pc。内核可以通过写入sepc来控制sret的去向。
scause RISC-V在这里放置一个数字,描述产生trap的原因
sscratch trap handler刚开始执行时,没有可用通用寄存器供使用,sscratch可作为临时存储器来存储某一通用寄存器的值,以提供一个可用寄存器
sstatus sstatus中的SIE位控制设备中断是否启用。如果内核清空SIE,RISC-V将推迟设备中断,直到内核重新设置SIESPP位指示trap是来自用户模式还是管理模式,并控制sret返回的模式。

2.1 mstatus寄存器

image-20221018111341690
SIE: 监管者模式(supervisor mode)的全局中断使能位。
MIE: 机器模式(machine mode)的全局中断使能位。
SPIE:用于保存进入异常之前,SIE的值。
MPIE:用于保存进入异常之前,MIE的值。
SPP:用于保存进入异常之前,处理器处于那种模式。(只有一位,只能用于保存 S-mode 或者 U-mode 模式)
MPP:用于保存进入异常之前,处理器处于那种模式。(有两位, U-mode,S-mode,M-mode 都可以保存)
FS:用于维护或者反映浮点单元状态的位域。这个位域可以用于操作系统上下文切换时对浮点状态的判断。
XS:用于维护或者反映用户自定义扩展指令单元的状态。这个位域可以用于操作系统上下文切换时对用户自定义扩展指令单元状态的判断。
SD: 用于反映FS或者XS的位域是否处于脏(dirty)状态。这个位域是 FS,XS 状态的汇总,方便操作系统上下文切换时快速判断(即:是否需要对浮点上下文或者其他扩展指令状态进行保存)。

2.2 medeleg&mideleg

  • medeleg(machine exception delegation Registers):机器异常委托寄存器

  • mideleg(machine interrupt delegation Registers): 机器中断委托寄存器

默认情况下,任何特权级别的所有陷阱都会在机器模式下处理,当然机器模式处理程序可以使用 MRET 指令将陷阱重定向回适当的模式级别。但是为了提高性能,RISC-V 提供了一种硬件机制,那就是异常中断委托机制。有了这个机制后,就不再需要软件程序上使用 MRET 指令将陷阱重定向回想要的模式级别。

2.3 PMP指令

为了安全或其他原因,需要限制可访问的内存范围,就可以通过PMP指令做到

PMP指令由pmpcfgXpmpaddrX组成,以riscv32为例,一共有16个pmpcfgpmpaddrX,其中pmpcfg是4个表项占用一个寄存器,每个pmpaddr单独占用一个寄存器,又因为RV32拥有34位物理地址空间,而寄存器只有32位,所以只存储\([2,33]\)位,低2位不存储

image-20221018120003913

二.指令

  1. csrr,读取一个 CSR 的值到通用寄存器。如:csrr t0, mstatus,读取 mstatus 的值到 t0 中。
  2. csrw,把一个通用寄存器中的值写入 CSR 中。如:csrw mstatus, t0,将 t0 的值写入 mstatus
  3. csrs,把 CSR 中指定的 bit 置 1。如:csrsi mstatus, (1 << 2),将 mstatus 的右起第 3 位置 1。
  4. csrc,把 CSR 中指定的 bit 置 0。如:csrci mstatus, (1 << 2),将 mstatus 的右起第 3 位置 0。
  5. csrrw,读取一个 CSR 的值到通用寄存器,然后把另一个值写入该 CSR。如:csrrw t0, mstatus, t0,将 mstatus 的值与 t0 的值交换。
  6. csrrs,读取一个 CSR 的值到通用寄存器,然后把该 CSR 中指定的 bit 置 1。
  7. csrrc,读取一个 CSR 的值到通用寄存器,然后把该 CSR 中指定的 bit 置 0。
  8. sfence.vma

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ulsteruni.cn/article/60606380.html

如若内容造成侵权/违法违规/事实不符,请联系编程大学网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

MFC-error C2589: “(”:“::”右边的非法标记

MFC-error C2589: “(”:“::”右边的非法标记错误信息 出错语句 问题原因 解决办法 错误信息 ① 错误 C2589 “(”:“::”右边的非法标记② 错误 C2059 语法错误:“)” 出错语句inline double getFitnessScore (double max_range = std::numeric_limits<double>::max()…

Thinkphp5.x全漏洞复现分析

基础知识 命名空间和子命名空间 我们可以把namespace理解为一个单独的空间,事实上它也就是一个空间而已,子命名空间那就是空间里再划分几个小空间,举个例子: <?phpnamespace animal\cat; class cat{public function __construct(){echo "meow"."\n"…

退出到restart application设置

在主题中加一个退出按钮。 点击退出按钮,增加退出事件中加入如下语句: ModalResult:=mrCancel;

CAN总线原理_学习

随着通信技术的发展,现今通信方式和协议五花八门,但CAN通信仍然是车载网络最安全可靠且应用最广的技术之一。过去,汽车通常采用常规的点对点通信方式将电子控制单元及电子装置连接起来,但随着电子设备的不断增加,导线数量也随之增多,采用CAN总线网络结构,可以达到信息共…

Hommie

Hommie靶机IP:192.168.56.115端口扫描 nmap -Pn -sV -sC 192.168.56.115PORT STATE SERVICE VERSION 21/tcp open ftp vsftpd 3.0.3 | ftp-syst: | STAT: | FTP server status: | Connected to ::ffff:192.168.56.101 | Logged in as ftp | TYPE: AS…

回归问题求解 python---梯度下降+最小二乘法

MSE = 1/m * ∑i=1m(yi−y^i)2 a = [1., 2., 3., 4., 5., 6., 7., 8., 9.] b = [3., 5., 7., 9., 11., 13., 15., 17., 19.] points = [[a[i],b[i]] for i in range(len(a))]lr= 0.001 eps = 0.0001 m = len(points) last_error = float(inf) k = b = grad_k = grad_b =…