2010-09-29 66 views
4

为什么通用寄存器按照它们的顺序排列(eax,ecx,edx,ebx)? 例如,对于“公司”指令操作码是:通用寄存器 - 订购

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

有他们为什么要下令方式的原因吗?

+0

不知道为什么你觉得他们必须要在任何特定的顺序,除非它们被推入堆栈。此外,它取决于你做什么样的增量,“字”,“字节”等...目标存储可以是内存位置或寄存器。 – EKet 2010-09-29 17:12:59

+0

因为它是EAX,EBX等,这些都是32位寄存器......而且,除了ebx,它们似乎是字母,不是? – 0x90 2010-09-29 17:14:40

回答

0

有8个寄存器,所以它们中的每一个接收到的顺序从0到7

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

+0

他们为什么收到这样的数字?你只是告诉他们为什么被命名。 – 0x90 2010-09-29 17:20:31

+0

多寄存器操作,如mul和div使用edx:eax,所以我期望这些至少是相邻的数字。 IIRC在16位版本中可以使用bx进行寻址,但不能使用ax,cx,dx,这可能是其与其他索引寄存器位于顶端的原因。 – Rup 2010-09-29 17:28:02

+0

@NOP它为什么重要?你有8个寄存器,所以你必须给它们分配不同的数字。就这样。也许它取决于一些内部的x86实现细节,但它并不重要。 – ruslik 2010-09-29 17:35:16

4

(E)BX的奇数放置可能是由于该8086从8080

8080演进具有通用寄存器B,C,d的蓄能器(A)和图6的方式, 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 

正如另一个答案指出,AX,BX,CX和DX在8086是不是4个通用寄存器,只是随意的名字 - 他们对这些寄存器具有的特殊功能具有助记符意义:“累加器”,“基址”,“计数”和“数据”。给定上述映射,将“累加器”功能分配给内部寄存器0以及将“基本”功能分配给内部寄存器3是有意义的(并且8086内部寄存器5,6和7是BP,SI和DI,其中是新功能)

当然,这是真正意义稍稍通知(见here例如)猜测 - 只有8086名设计师肯定知道...