CS61C笔记
前言 CS61C的笔记。以下描述的所有内容基于RV32(RISC-V的32位变体)。 CS61C的视频:Youtube 寄存器 RISC-V中有32个寄存器,每个寄存器的位宽为32。命名为x0-x31,其中x0永远存储0值(通过硬连线到地)。其中x10-x17又被命名为a0-a7,作为函数调用的参数寄存器。 汇编 关于RISC-V指令我发现一个很实用的项目,他将RV32I的指令和汇编伪指令做成了tldr库。安装后可以方便的查询指令的用法。 加减法 add 加法。 示例: add x1,x2,x3 (in RISC-V) 等同于:a = b + c (in C) sub 减法。 示例:sub x3,x4,x5 (in RISC-V) 等同于:d = e - f (in C) addi 立即数加法。 示例:addi x3,x4,10 (in RISC-V) 等同于: f = g + 10 (in C) 不存在立即数减法指令,将立即数设置为负数即可实现减法。 它可以用内存操作指令配合加法指令来替代,但我们仍然需要它。因为立即数加法非常常用。 内存操作 内存 内存按照字(words,4 bytes = 1 words)组织。数据遵循小端模式,高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。 lw 从内存读取一个字到寄存器。 示例: int A[100]; g = h + A[3]; lw x10, 12(x15) add x11, x12, x10 其中x15表示A所在的地址,12(字节)为偏移量。由于内存按照字(4字节)组织,故A[3]便是由A的地址偏移3个字得到的。偏移量必须是4的倍数。...