2013-10-25 59 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