“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 的作用是什么? 进程上下文
# 环境安装
如果仅仅只是在一个终端窗口命令行输入这两条命令,那么此环境变量的配置只会在这个终端窗口生效。
之所以要改变 $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), 顾名思义,它是一条地址加载指令。