[英]General Purpose Registers - Order
为什么通用寄存器按原样排序(eax,ecx,edx,ebx)? 例如,对于“inc”指令,操作码是:
inc eax - 40
inc ecx - 41
inc edx - 42
inc ebx - 43
有没有理由为他们这样订购?
(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,它们是新功能。)
当然,这真的只是略微了解(见这里的例子)推测 - 只有8086设计师肯定知道......
有8个寄存器,因此每个寄存器都接收0到7的序数。
我不明白这个问题。 它是“为什么他们不按字典顺序排序?” 这是因为字母a,b,c,d代表累加器,基数,计数器和数据,而不仅仅是字母表的前四个字母。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.