ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

操作码与指令编码:从字节码虚拟机到 x86、ARM 与 RISC-V 的真实取指链路

操作码与指令编码:从字节码虚拟机到 x86、ARM 与 RISC-V 的真实取指链路

一、CPU 只认数字:操作码到底是什么

1.1 先把话说死

你写的代码,不管是 C 还是 C#,CPU 都看不懂。

CPU 能读的只有内存里的一串数字。所以编译器要做的事,就是把你的代码翻译成一串数字:

你写的: a = b + c 变成数字: 3, 1, 2, 5

问题来了:CPU 看到3, 1, 2, 5这几个数,怎么知道这是「做加法」而不是「读文件」?

答案是事先约好。有一张表,规定好:

1 号 = 做加法 2 号 = 做减法 3 号 = 从内存读一个数 4 号 = 往内存写一个数 ...

CPU 看到第一个数字是3,查表知道「要读内存」,于是就去读内存。

这个「1 号」「2 号」「3 号」的编号,就叫操作码(opcode)。

就这么简单。它是一个编号,一个 enum 值。

但「简单」只是入门时的感觉。真正会咬人的地方在于:操作码从来不是孤零零躺在一个字节里的。它旁边还跟着操作数、寻址方式、寄存器编号、条件码、前缀字节。这一篇要往下走的地方,就是这些。

1.2 源码到机器码的四段旅程

先把整条链路摆出来,后面每一节都是在这张图上定位:

① 你写的源码 int x = a + b; ↓ 编译器前端:语法分析、类型检查、IR
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进