“A” 代表原子(Atomic)扩展,支持对寄存器进行的原子读、修改和原子写操作

上面这句话是啥意思?

编译和汇编有什么区别?

riscv64-unknown-elf-gcc -c ./helloworld.c
///////////////////////
$ riscv64-unknown-elf-gcc hello.cpp -o hello
\2. 使用-E选项,输出预处理阶段的hello.i文件
$ riscv64-unknown-elf-gcc -E hello.cpp -o hello.i
\3. 使用-S选项,输出编译阶段的hello.s文件
$ riscv64-unknown-elf-gcc -S hello.cpp -o hello.s
\4. 使用-c选项,输出二进制文件hello.o
$ riscv64-unknown-elf-gcc -c hello.s -o hello.o

上面可以看到,-c 可以对原始 c 文件,也可以对编译之后的文件进行汇编操作。(chapter1 和 chapter3)

程序节 是什么意思?

trapframe 的作用是什么? 进程上下文

# 环境安装

1680254098645

如果仅仅只是在一个终端窗口命令行输入这两条命令,那么此环境变量的配置只会在这个终端窗口生效。

之所以要改变 $pwd ,是因为这个表示的是当前地址,如果在其他路径下打开终端窗口,这个就没用了。

在命令行输入 spike 检查环境变量是否安装成功。

/home/xi/Documents/pke
export RISCV=$PWD/riscv64-elf-gcc
export RISCV=/home/xi/Documents/pke/riscv64-elf-gcc
export PATH=$PATH:$RISCV/bin

make 命令为构造,生成文件放在 obj 目录下, make clean 是删除此目录。

# Linux 文件 profile、bashrc、bash_profile 区别

在文件中设置环境变量

https://zhuanlan.zhihu.com/p/405174594

# chapter 3

# la

la 概述
la 是 risc-v 指令集中的一条伪指令。伪指令,一般会被汇编器翻译成一条或者多条等价的实际指令。伪指令存在的意义就类似于 C 语言中的 typedef 或者 #define 等,完全是出于方便程序员编程、阅读源代码的目的,它本身并没有扩展整个指令集的表达能力。

la (load address), 顾名思义,它是一条地址加载指令。