为什么早期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上

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页