Computer Organization: RISC-V Assembly
/ 14 min read
Table of Contents
Course index · Previous: Floating Point · Next: Formats and Logic
架构图
Register
Addition and Subtraction
Immediates 立即数
Memory Addresses are in Bytes
教学上默认地址都为32位
现代计算机(包括绝大多数 RISC-V、x86、ARM 架构)的内存地址绝大多数都是以“字节”(Byte)为单位的。这在计算机体系结构中被称为按字节编址(Byte-Addressable)。 简单来说,内存就像一排连续的信箱,每个信箱里固定只能装 8 个比特位(1 个字节)的数据。每一个信箱都有一个独一无二的编号,这个编号就是“内存地址”。
- 地址
0x00000000指向第 0 个字节。 - 地址
0x00000001指向第 1 个字节。 - 地址
0x00000002指向第 2 个字节。
假设你要存第一个 32 位整数,计算机会给它分配一个起始地址(通常叫作“字地址”,这里是地址 0)。这个整数会被切成 4 块,对号入座:
- 数据最右边的
0-7bits (最低有效字节),存进门牌号为 0 的格子。 - 数据的
8-15bits,存进门牌号为 1 的格子。 - 数据的
16-23bits,存进门牌号为 2 的格子。 - 数据最左边的
24-31bits (最高有效字节),存进门牌号为 3 的格子。
存完这第一个整数后,0、1、2、3 这四个格子就被占满了。如果你接着要存第二个 32 位整数,它就会顺延存到上一排的 4、5、6、7 这四个格子里(它的起始地址就是 4)。
Load and Store
解析: 首先x11寄存器存储的是16进制数0x000003f5(一个16进制位=4个2进制位,需要4bit=1word=0.5byte)这里使用sign-extend 接下去将x11存到x5+0这个地址,再load byte,因为是小端序,只load一个byte,offset = 1 byte也就是这个16进制数的后3,4位,0x03,经过sign-extend之后为0x00000003
Decision Making
比大小
Loops
Logical Instructions
- 操作字(Word)内的特定位段 (fields of bits): 传统的 RISC-V 架构中一个字通常是 32 位。逻辑指令允许你精准地提取或修改这 32 位中的某几位,而不会干扰其他位。
- 例子: 一个 32 位的字可以容纳 4 个 8 位的字符数据。你可以利用逻辑指令单独“抠出”其中的某一个字符。
- 数据的打包与解包 (Operations to pack / unpack bits into words): 在底层开发(如配置硬件寄存器或处理网络协议头)时,为了最大化利用存储空间,经常需要把多个状态标志或小数据片段“打包”塞进同一个 32 位寄存器中,或者在需要读取时将它们“解包”出来。
逻辑右移 (srl) 是不管原来的数字是正是负,高位一律无脑补 0。而这张讲的算术右移 (sra, srai) 之所以补符号位,是为了在移位后保持数字原有的正负号不变
在 RISC-V 中只有逻辑左移(sll, slli),而没有专门的“算术左移”指令
Machine Program
.s是汇编语言,.o是机器码
Function Calls
jal jal,jalr,j,jr,ret五个指令对比
Stack
stack frame 栈帧
在这一段汇编中,先存了s0,s1的值,是不是因为主程序之前可能在s0,s1存了数据,但是函数需要用s0,s1,先把s0,s1保存起来,函数调用完再恢复
Nested Calls and Register Conventions
问题:外层函数的ra会被内层函数overwritten,因此需要用stack保存ra
Memory Allocation
静态变量 (Static variables): 包括全局变量,以及用 static 关键字修饰的局部变量。它们的寿命贯穿整个程序的运行周期,无论函数进进出出多少次,它们的值都会被一直保留。因为要一直存活,静态变量不存储在栈中,而是存在内存中另一块专属的区域(通常叫数据段 Data Segment)。
memory allocation
RISC-V Instruction Representation
架构图与定位
为了降低硬件设计的复杂度,指令被统一成与数据长度一致的 32 位数字,并且这 32 位数字仅通过 6 种标准化的结构模板来解析。
Course index · Previous: Floating Point · Next: Formats and Logic