2013-06-04 83 views
0

當你做PUSH 10我的意思是,它類似於DEC ESP; MOVE [ESP], 10x386,有沒有辦法使用另一個寄存器PUSH?

,但有沒有辦法在一個命令做DEC EDX; MOV [EDX], 10? 和同爲其他寄存器,EDX,EAX ...

+0

沒有,但是作爲你已經看到了,你不需要那麼嚴重 - 你只需要兩條(快速)指令來模擬它。 – harold

+0

我諮詢了Intel x86手冊,似乎只有需要立即字節和符號的'PUSH'指令將其擴展到16位或32位。沒有「PUSH」8位立即堆棧爲8位變量。 –

回答

2
std 
mov EDI, offset ... 
mov AL, 10 
; Single instruction (save AL to ES:EDI, post-decrement of EDI) 
stosb 
+0

您仍然需要重複'mov AL,X; stosb'指示。事實上,這個答案導致了2個額外的說明。 –

+0

@WouterHuysentruit - 是的,只有AL/AX/EAX可以這種方式存儲,只有'EDI'可以用作指針。 –

2

不,我知道,但你可以使用宏:

PUSHEAX MACRO Value 
DEC EAX 
MOV [EAX], Value 
ENDM 

或者

PUSHREG MACRO Reg, Value 
DEC Reg 
MOV [Reg], Value 
ENDM 
相關問題