小米科技|为什么早期x86处理器寄存器很少?

来自读者的问题有读者在看我之前的关于16位系统上的调用约定的文章时 , 有这么一个问题:为什么在早期x86处理器上可用的寄存器为什么那么少?
8086是一款16位的微处理器 , 比它更早的是8080 。 它有6个8位寄存器 , 分别命名为:A B C D E H和L 。 通过两两组合 , 我们可以用它们产生16位的虚拟寄存器 , 例如:BC DE和HL 。
另外 , 你甚至可以将一个16位的地址放入HL寄存器 , 并用另外一个虚拟寄存器”M”来解引用它 。
所以 , 举个例子 , 你可以这样写”MOV B M” , 表示:将HL寄存器指向的8位数值加载到B寄存器中 。
8086处理器沿用了8080处理器的寄存器设计 , 并使用了如下的方式对它们进行了映射:
> A => AL
> H => BH L => BL; HL => BX; M => [BX
> B => CH C => CL; BC => CX
> D => DH E => DL; DE => DX
这就是为什么8086指令集只能通过[BX
而不是[CX
或[DX
来进行解引用操作 , 以实现将旧的8位代码迁移到新的16位处理器 。 甚至连MS-DOS操作系统调用也以这种类似的方式进行设计 , 已实现代码的机器级别转换 。
那SI和DI寄存器呢?我猜想 , 它们的引入可能来自Z-80上IX和IY寄存器的灵感 。 Z-80是8080处理器的竞品 , 它使用了8080的指令集并使用更多的寄存器对指令集进行了扩展 。 Z-80处理器上 , 可以通过[IX
和[IY
来解引用 , 同样的在8086上 , 也可以通过[SI
和[DI
来解引用 。
那BP寄存器呢?我再次猜想 , 它的引入是为了能实现基于栈的参数传递 。 请注意 , BP寄存器是8086处理器上唯一一个默认的SS段寄存器 , 它可以用来直接对内存进行访问 。
为什么不能像现代处理器动不动就上16个甚至128个寄存器那样 , 添加更多的寄存器呢?
为什么在8086处理器上只保留了8个寄存器(AX BX CX DX SI DI BP SP)呢?
简单来说 , 是历史原因吧 。 在8086那会儿 , 大部分处理器都没有设计很多的寄存器 。
另外一款处理器68000 , 设计了多达16个寄存器 , 但是如果你仔细看看它的设计文档 , 这些寄存器中 , 只有一半能进行通用计算 , 而另外一半只能用来进行内存访问 。
总结历史(处理器的寄存器个数) , 由胜利者(Intel)书写 。
最后Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一 , 里面有很多关于Windows的小知识 , 对于广大Windows平台开发者来说 , 确实十分有帮助 。
本文来自:《Why does the x86 have so few registers?》
【小米科技|为什么早期x86处理器寄存器很少?】
推荐阅读
- 兔子|兔兔这么可爱,为什么要吃屎?
- 银河系|不用一万光年,银河系就是一座黑暗森林|近期科技趣评
- 埃及金字塔|探秘尼罗河|为什么会有人觉得,埃及金字塔是伪造的?
- 减肥|较真丨减肥产品含违禁药再被曝光,为什么说滥用这些产品是在玩命?
- 酿酒|用真全粮酿酒机器做酒,为什么发酵时间越长口感越好?
- 为什么商家卖的馒头又白又胖?里面加了什么东西,今天我来告诉你
- 中国载人航天|中国载人航天科普展亮相中国科技馆,观众可体验航天员选拔训练
- 慢性乙肝|慢性乙肝,为什么要等到转氨酶高,才抗病毒治疗?医生告诉你原因
- 保罗·狄拉克|为什么物质比反物质多?
- 月球|站在月球上眺望地球,为什么有人会觉得恐惧?他们看到了什么?
