通用寄存器 - 订单

时间:2010-09-29 16:54:42

标签: assembly x86

为什么通用寄存器按原样排序(eax,ecx,edx,ebx)? 例如,对于“inc”指令,操作码是:

inc eax - 40
inc ecx - 41
inc edx - 42
inc ebx - 43

有没有理由为他们这样订购?

2 个答案:

答案 0 :(得分:4)

(E)BX的奇怪位置可能是由于8086从8080演变而来。

8080有一个累加器(A)和6个通用寄存器B,C,D,E,H和L,其中B / C,D / E和H / L可以成对使用,并且特定H / L可用作存储器访问的地址。 8086的设计使现有的8080代码可以轻松转换为它;我想以下列顺序映射寄存器似乎合乎逻辑:

8080 register A   -> 8086 internal register 0
              B,C ->                        1
              D,E ->                        2
              H,L ->                        3
              SP  ->                        4

如另一个答案所述,8086中的AX,BX,CX和DX不仅仅是4个通用寄存器的任意名称 - 它们具有这些寄存器所具有的特殊功能的助记符含义:“累加器”,“基数” “,”“数”和“数据”。鉴于上面的映射,分配它是有意义的 “累加器”功能到内部寄存器0,“基”功能到内部寄存器3.(和8086内部寄存器5,6和7是BP,SI和DI,这是新功能。)

当然,这实际上只是略微了解(例如here)猜测 - 只有8086名设计师肯定知道......

答案 1 :(得分:0)

有8个寄存器,因此每个寄存器都接收0到7的序数。

我不明白这个问题。它是“为什么他们不按字典顺序排序?” 这是因为字母a,b,c,d代表累加器,基数,计数器和数据,而不仅仅是字母表中的前四个字母。