Menu
CoddyTech

指令如何工作

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

你知道 CPU 会逐条执行指令。但 CPU 怎么知道下一条要运行哪条指令?指令存储在哪里?指令实际是什么样的?

指令是数字。

这是关于计算机的一个基本事实。一切都是数字。你处理的数据(比如数字 42)是数字。数据所在的地址(比如 1000)是数字。指令本身(比如 mov、add、cmp)也是数字。

当你编写像 mov rax, 5 这样的汇编代码时,汇编器会将这段人类可读的文本转换成 CPU 能理解的数字。这个数字称为指令代码。

指令存储在哪里?

指令像数据一样存储在内存中。指令没有单独的内存。相同的内存中存储着:

  • 数据(数字、字符、数组)
  • 指令(程序本身)

字节本身不会说明它们是指令还是数据。CPU 会把程序计数器所指向的内存地址中的内容当作下一条指令。在现代系统中,操作系统会将存放程序指令的内存标记为可执行,CPU 会拒绝运行未以这种方式标记的内存中的字节,例如程序的数据。你在第 0.1 课中简要了解过 PC。现在该准确了解它的工作原理了。

程序计数器(也称为指令指针)是 CPU 内部的一个特殊寄存器。它唯一的作用是保存下一条要执行的指令的内存地址。

取指执行周期:

CPU 会永远重复以下三个步骤:

步骤发生了什么
1. FETCH读取 PC 中地址对应的指令
2. EXECUTE执行该指令
3. ADVANCE将 PC 移到下一条指令

简单示例:

如果 PC = 1000,CPU 会:

  • 获取地址 1000 处的指令
  • 执行它
  • 将 PC 移动到下一个地址(1000 + 指令大小)

然后,它会使用新的 PC 值重复执行。

指令的形式:

每条指令都有两部分:

部分作用示例
操作码要执行什么操作mov、add、cmp
操作数对什么执行操作rax、5、[result]

有些指令有一个操作数(例如 inc rax,用于加 1)。有些有两个操作数(例如 mov rax, 5)。有些有三个操作数(例如某些架构中的 add rax, rbx, rcx)。

亲手试试

这节课没有代码挑战。

quiz icon自我测试

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

基础知识中的所有课

自己练习: Assembly 在线编辑器