1
我一直在研究x86彙編語言,並且PUSHA指令產生了一個問題。據我所知,Pusha與PUSH AX,CX,DX,BX,原始SP,BP,SI和DI相同。
我想知道的是爲什麼在PUSHA指令中執行PUSH BX之前執行PUSH CX。爲什麼在PUSHA指令中執行PUSH BX之前執行PUSH CX
硬件架構中是否有任何理由?
我一直在研究x86彙編語言,並且PUSHA指令產生了一個問題。據我所知,Pusha與PUSH AX,CX,DX,BX,原始SP,BP,SI和DI相同。
我想知道的是爲什麼在PUSHA指令中執行PUSH BX之前執行PUSH CX。爲什麼在PUSHA指令中執行PUSH BX之前執行PUSH CX
硬件架構中是否有任何理由?
的通用寄存器不按字母順序排列的字母是一個詞捷徑:
AX => Accumulator register
BX => Base register
CX => Counter register
DX => Data register
大多數人使用AX
,BX
,CX
,DX
因爲它更容易記住,但對於建築,訂單實際上是AX
,CX
,DX
,BX
,這可以在指令操作碼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
非常感謝您的回覆,對於遲到的回覆感到抱歉。但在閱讀你的回覆之後,又有一個問題出現了。爲什麼操作碼的順序不是按字母順序排列的?有什麼歷史原因嗎? – joejo
@joejo它是通過op代碼來排序的,所以你可以看到架構在任何地方都可以使用這個命令......將重新映射表添加到CPU控制單元或微代碼中只是爲了重新排序操作數而不匹配寄存器文件地址(這會浪費時間,晶體管和芯片空間並降低功耗)。 – Spektre