Menu
CoddyTech

寄存器与内存

本课属于 Coddy Assembly 学习旅程的“基础知识”单元。第 3 课,共 45 课。

现在,你已经了解了计算机中可以存放数据的两个地方:

  • 寄存器:CPU 内部的小型存储单元
  • 内存(RAM):CPU 外部由编号槽位组成的巨大网格

但是为什么有两个位置?为什么 CPU 不把所有内容都保存在内存中?

答案是速度。寄存器非常快,因为它们位于 CPU 内部。内存比较慢,因为它位于 CPU 外部。CPU 可以在一个周期内访问寄存器,但访问内存需要更长时间。

并排比较:

特征寄存器内存(RAM)
位置CPU 内部CPU 外部
速度极快(1 个周期)较慢(多个周期)
存储槽数量很少(x86-64 上有 16-32 个)数百万或数十亿个
每个存储槽的大小8 字节(64 位)1 字节
访问方式按名称(rax、rbx、rcx...)按地址(1000、msg、buffer)
易失性?是(断电后数据会消失)是(断电后数据会消失)

汇编中最重要的规则:

一条指令最多只能使用一个内存操作数。要合并两个都在内存中的值,先将其中一个加载到寄存器中。

寄存器也是你保存要处理的值的地方,因为每次访问内存都很慢。

你会经常用到的三步模式:

步骤发生了什么示例
1. LOAD将数据从内存复制到寄存器mov rax, [count]
2. WORK对寄存器中的数据进行操作add rax, 5
3. STORE将结果复制回内存(如果需要)mov [result], rax

如果你忘记这条规则,会发生什么?

如果你尝试把两个都在内存中的数字相加,汇编器会报错。CPU 无法完成这个操作。你必须先把其中一个加载到寄存器中。

亲手试试

这节课没有代码挑战。

quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

基础知识中的所有课

自己练习: Assembly 在线编辑器