2013-10-25 41 views
1

我一直在研究x86汇编语言,并且PUSHA指令产生了一个问题。据我所知,Pusha与PUSH AX,CX,DX,BX,原始SP,BP,SI和DI相同。
我想知道的是为什么在PUSHA指令中执行PUSH BX之前执行PUSH CX。为什么在PUSHA指令中执行PUSH BX之前执行PUSH CX

硬件架构中是否有任何理由?

回答

9

的通用寄存器不按字母顺序排列的字母是一个词捷径:

AX => Accumulator register 
BX => Base register 
CX => Counter register 
DX => Data register 

大多数人使用AXBXCXDX因为它更容易记住,但对于建筑,订单实际上是AXCXDXBX,这可以在指令操作码noties:

opcode | instruction 
--------+------------------ 
B80000 | MOV  AX,0000 
B90000 | MOV  CX,0000 
BA0000 | MOV  DX,0000 
BB0000 | MOV  BX,0000 
50  | PUSH AX 
51  | PUSH CX 
52  | PUSH DX 
53  | PUSH BX 
+1

非常感谢您的回复,对于迟到的回复感到抱歉。但在阅读你的回复之后,又有一个问题出现了。为什么操作码的顺序不是按字母顺序排列的?有什么历史原因吗? – joejo

+0

@joejo它是通过op代码来排序的,所以你可以看到架构在任何地方都可以使用这个命令......将重新映射表添加到CPU控制单元或微代码中只是为了重新排序操作数而不匹配寄存器文件地址(这会浪费时间,晶体管和芯片空间并降低功耗)。 – Spektre