前面我们这里假设的 CPU 很基础,所有指令都是 8 位,操作码只占了前面 4 位,即便用尽 4 位,也只能代表 16 个指令,而且我们有几条指令,是用后 4 位来指定内存地址,因为 4 位最多只能表示 16 个值,所以我们只能操作 16 个地址,这可不多。我们甚至不能 JUMP 17,因为 4 位二进制无法表示数字 17。
真正的现代 CPU 用两种策略
最直接的方法是用更多位来代表指令,比如 32 位或 64 位,这叫 指令长度。
第二个策略是 "可变指令长度",举个例子,比如某个 CPU 用 8 位长度的操作码,如果看到 HALT 指令,HALT 不需要额外数据,那么会马上执行。如果看到 JUMP,它得知道位置值,这个值在 JUMP 的后面,这叫 "立即值"。这样设计,指令可以是任意长度,但会让读取阶段复杂一点点。
4004 处理器
要说明的是,我们拿来举例的 CPU 和指令集都是假设的,是为了展示核心原理所以我们来看个真的 CPU 例子。
1971年,英特尔发布了 4004 处理器。这是第一次把 CPU 做成一个芯片,给后来的英特尔处理器打下了基础,它支持 46 个指令,足够做一台能用的电脑。它用了很多我们说过的指令,比如 JUMP ADD SUB LOAD,它也用 8 位的"立即值"来执行 JUMP, 以表示更多内存地址。
处理器发展
处理器从 1971 年到现在发展巨大.,现代 CPU, 比如英特尔酷睿 i7, 有上千个指令和指令变种,长度从1到15个字节。举例,光 ADD 指令就有很多变种。指令越来越多,是因为给 CPU 设计了越来越多功能。
相关阅读:
一个会思考的技术小工
长按扫码关注,每天五分钟学习计算机最基础的知识和原理