RISC-V

计算机系统组成原理

  • 冯诺伊曼架构:将指令和数据不加区别地存储在存储器中,由同一个总线传输。
  • 哈佛架构:将程序指令和数据分开存储。

ISA:底层硬件电路面向上层软件程序提供的一层接口规范

IBM 360是第一个将ISA与其实现分离的计算机。
ISA(处理器)的宽度指的是CPU中通用寄存器的宽度,决定寻址范围大小,这里要跟指令长度进行区分。
定义:

  • 基本数据类型
  • 寄存器
  • 指令
  • 寻址模式
  • 异常或者中断的处理方式

RISC-V

(gnu RISCV汇编器)一个完整的RISC-V汇编程序有多条语句(statement)组成。
典型的RISC-V汇编语句由三部分组成:

1
[label:] [operation] [comment]

Operation可以由一下多种类型:

  • instruction(指令): 直接对应二进制机器指令的字符串
  • pseudo-instruction(伪指令):用一条伪指令指示汇编器产生多条实际指令
  • macro(宏):采用.macro/.endm自定义的宏
  • directive(指示/伪操作):通过类似指令的形式,通知汇编器如何控制代码产生

汇编指令操作对象

寄存器

  • 32个通用寄存器,x0~x31
  • 在RISC-V中,Hart在执行算数逻辑运算时所操作的数据必须直接来自寄存器

内存

  • Hart可以执行在寄存器和内存之间的数据读写操作
  • 读写操作使用字节(Byte)为基本单位进行寻址
  • RV32可以访问最多2^32个字节的内存空间

指令编码格式

ADD
ADDI

SHIFT
LOAD/STROE
BRANCH

JAL
JALR

寻址模式

函数调用约定

C函数嵌入RISC-V汇编

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
asm [volatile] (
"asm code"
: output operation list
: input operation list
: influenced reg/mem
)
//eg:
int foo(int a,int b)
{
int c;
asm volatile(
"add %0, %1, %2"
:"=r"(c)
:"r"(a), "r"(b)
);
return c;
}

现代操作系统分类

实时操作系统RvOS

UART

UART-16550

内存管理

  • 自动管理内存 - 栈(stack)
  • 静态内存 - 全局变量/静态变量
  • 动态管理内存 - 堆

链接器脚本:gcc -T os.ld
[doc](https://sourceware.org/binutils/docs/ld/Script
s.html#Scripts)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 告诉连接器如何将input sections映射到output sections,以及如何将ouput sections放置在内存中。
SECTIONS
{
. = 0x10000;
.text : { *(.text)}
. = 0x8000000;
.data : { *(.data) }
.bss : { *(.bss) }
}
# 定义内存
MEMORY
{
rom(rx) : ORIGIN = 0,LENGTH = 256K
}
OUTPUT_ARCH("riscv")
# 定义符号(类似变量赋值)
PROVIDE(symbol=expression)

基于Page实现动态内存分配

上下文切换和协作式多任务


RISC-V
https://47.108.189.123/2026/06/22/实习经历/毕业实习-2026/RISC-V/
Author
Dong
Posted on
June 22, 2026
Licensed under