笔统给

笔统给

CPU的寄存器

首先,什么是位?位就是一个 0 或 1,是计算机能存储的最小信息单位。把 32 个位放在一起,就得到一个32 位数,它可以从 0 数到大约 40 亿。RISC-V 中的每个寄存器和每个内存槽都保存一个 32 位数。

寄存器是处理器内部的一个小型存储槽,保存一个 32 位数。RISC-V 提供 32 个寄存器。由于它们位于处理器核心中,使用寄存器比使用主内存快得多,快好几个数量级。其中少数几个就能覆盖你编写的大部分内容:t0 到 t2(临时值)、a0 到 a2(参数和结果)、zero(始终为 0)、sp(栈指针)和 ra(返回地址)。

ℹ
Simulator 标签页会在程序运行时显示每个寄存器值的变化。观察这个视图是感受寄存器行为方式的最快方法。
您的第一个程序:打印 42
# 打印数字 42,然后退出。
# a7 选择服务,a0 携带值。
li a7, 1 # 服务 1 = 打印整数
li a0, 42 # 打印的值
ecall # 执行
li a7, 10 # 服务 10 = 退出
ecall

代表 load immediate,它把一个常量放入寄存器。 选择服务 1,该服务打印一个整数。 把要打印的数字放入 a0。 把控制权交给系统,系统打印 a0 中的值。然后 选择退出服务, 结束程序。按 Run,然后修改 42 并再次运行程序。

程序执行
0x400000li a7, 1
0x400004li a0, 42
0x400008ecall
0x40000cli a7, 10
0x400010ecall
a71
a0—
输出—
pc0x400000

将 a7 设置为 1 会使下一次 ecall 打印一个数字。

下图跟随模拟器执行上面五行代码的过程。每一行都带有程序加载后它所占据的地址,地址之间相隔四个字节,因为每条 RISC-V 指令都是四字节宽。标有 pc 的框是程序计数器(program counter)的缩写,保存当前高亮行的地址。这个数字就是处理器对其在程序中位置所知道的全部:它取出程序计数器中地址处的指令,执行它,然后给程序计数器加四以到达下一条指令。寄存器在其所在行的 执行时接收值,而输出只在第一个 运行时出现。