risc-v--常用跳转指令

2024-06-26
阅读 1 分钟
928
jal rd, offset:跳转到 PC + offset,并将返回地址存储到 rd。jalr rd, offset(rs1):跳转到 rs1 + offset,并将返回地址存储到 rd。

risc-v--mcause寄存器

2024-06-26
阅读 1 分钟
2.7k
#### 点评:描述是哪一种类型, risc-v中中断和异常都是陷入 {代码...} N位:陷入类型:0 表示异常,1 表示中断。N-1到0位: 异常类型陷入类型细分:中断异常

risc-v--mvec寄存器/mepc 寄存器/mcause 寄存器

2024-06-26
阅读 1 分钟
1k
MODE 字段位置:位 1:0描述:模式字段,决定陷阱向量的处理模式。00:直接模式(Direct Mode)在这种模式下,所有的陷阱都会跳转到 BASE 字段指定的地址。01:向量模式(Vectored Mode)在这种模式下,不同的陷阱类型会跳转到 BASE 字段加上一个偏移量的地址。偏移量通常是根据陷阱原因(异常或中断)计算的。10 和 11:...

risc-v--mstatus寄存器

2024-06-26
阅读 3 分钟
2.8k
mstatus 和 mie 的关系mstatus 寄存器:提供全局中断使能控制,通过 MIE 位来启用或禁用所有机器模式的中断。mie 寄存器:提供具体类型的中断使能控制,通过各个位来启用或禁用特定类型的中断。

risc-v--mhartid寄存器

2024-06-25
阅读 1 分钟
1.2k
mhartid(Machine Hart ID Register)是 RISC-V 架构中的一个控制和状态寄存器(CSR),用于存储当前硬件线程(hart)的标识符。在多核处理器中,每个核心可能有一个或多个硬件线程,每个硬件线程都有一个唯一的 hartid。

risc-v--M模式的csr寄存器列表

2024-06-25
阅读 2 分钟
1k
机器模式状态寄存器mstatus(Machine Status Register):机器模式状态寄存器,用于存储和管理处理器的状态信息。misa(Machine ISA Register):指令集架构寄存器,描述处理器支持的指令集扩展。mie(Machine Interrupt Enable Register):机器模式中断使能寄存器,用于控制各类中断的使能。mtvec(Machine Trap-Vecto...

risc-v --指令分类以及读写csr的指令

2024-06-25
阅读 1 分钟
1.2k
基础指令算术指令:ADD, SUB, MUL, DIV逻辑指令:AND, OR, XOR移位指令:SLL, SRL, SRA比较指令:SLT, SLTU加载和存储指令:LW, SW, LH, SH, LB, SB控制流指令:JAL, JALR, BEQ, BNE, BLT, BGE特权指令集合比如读写csr的指令等

risc-v--读取isa

2024-06-25
阅读 1 分钟
499
{代码...}

risc-v--misa寄存器

2024-06-25
阅读 1 分钟
875
RISC-V 指令集架构中的基础指令长度是固定为 32 位的,无论是 RV32、RV64 还是未来可能的 RV128。也就是说,RV128 的基础指令也是 32 位的。这种固定长度的指令格式简化了指令解码和处理过程,有助于提高处理器的效率。尽管指令长度是 32 位的,但 RV64 处理的是 64 位的数据和地址。这意味着寄存器、操作数和内存地址都...

risc-v--函数调用的本质

2024-06-24
阅读 1 分钟
634
risc-v 很一部分来源 riscv-operating-system-mooc 这个项目,b站也有教程有一些我的心得, 方便应用开发的人了解底层的知识。用架构的思维去看底层吧

引导程序做了什么事情呢?

2024-06-24
阅读 2 分钟
497
插入一段小广告:在 RISC-V 架构中,控制和状态寄存器(CSR,Control and Status Registers)用于存储和管理处理器的状态和控制信息。

c语言-内联汇编

2024-06-24
阅读 2 分钟
663
先来一个小插曲 {代码...} printf 接受一个指针, #x 相当于一个地址在头文件里面, 下面定义一个函数(宏的方式) {代码...} 调用这个函数 {代码...} 内敛的汇编的基本格式 {代码...} 举个例子01: {代码...} 解释:=r 表示将结果存储在一个通用寄存器中"r" (a), "r" (b):这是输入操作数部分。r 表示将变量 a 和 b 的...

链接脚本--03

2024-06-24
阅读 1 分钟
514
接上一话题,我们声明了各个段的地址, 这个部分是更为详细的说明各个段,相当于在各个段中开始定义变量了。 {代码...} {代码...}

链接脚本--02

2024-06-24
阅读 1 分钟
479
上篇文章介绍过各种段 :. = 0x80000000;这行代码将当前地址(location counter)设置为 0x80000000。这意味着接下来的段(sections)将从这个地址开始布局。

链接脚本--各个段的解释说明

2024-06-24
阅读 2 分钟
562
在编译和链接过程中,代码被划分为多个段(sections),每个段都有特定的用途。这些段在最终的可执行文件或目标文件中被组织和管理。以下是一些常见的段及其用途:常见的段

macOS 如何使用docker配置一个linux开发环境?

2024-06-23
阅读 1 分钟
703
下载docker的桌面应用启动docker容器( 可以多添加一些选项,后期修改头大,多一些端口映射之类的) {代码...} 进入容器 {代码...} 补充一种dockerfile的方式, 因为我经常用到ssh. {代码...} 利用当前的Dockerfile文件,构建一个self_ubuntu的镜像 {代码...} 启动容器 {代码...} 配置免密码登陆: {代码...} 安装必要系...