为什么通用寄存器按原样排序(eax,ecx,edx,ebx)? 例如,对于“inc”指令,操作码是:
inc eax - 40
inc ecx - 41
inc edx - 42
inc ebx - 43
有没有理由为他们这样订购?
答案 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代表累加器,基数,计数器和数据,而不仅仅是字母表中的前四个字母。