當你做PUSH 10
我的意思是,它類似於DEC ESP; MOVE [ESP], 10
x386,有沒有辦法使用另一個寄存器PUSH?
,但有沒有辦法在一個命令做DEC EDX; MOV [EDX], 10
? 和同爲其他寄存器,EDX,EAX ...
當你做PUSH 10
我的意思是,它類似於DEC ESP; MOVE [ESP], 10
x386,有沒有辦法使用另一個寄存器PUSH?
,但有沒有辦法在一個命令做DEC EDX; MOV [EDX], 10
? 和同爲其他寄存器,EDX,EAX ...
std
mov EDI, offset ...
mov AL, 10
; Single instruction (save AL to ES:EDI, post-decrement of EDI)
stosb
您仍然需要重複'mov AL,X; stosb'指示。事實上,這個答案導致了2個額外的說明。 –
@WouterHuysentruit - 是的,只有AL/AX/EAX可以這種方式存儲,只有'EDI'可以用作指針。 –
不,我知道,但你可以使用宏:
PUSHEAX MACRO Value
DEC EAX
MOV [EAX], Value
ENDM
或者
PUSHREG MACRO Reg, Value
DEC Reg
MOV [Reg], Value
ENDM
沒有,但是作爲你已經看到了,你不需要那麼嚴重 - 你只需要兩條(快速)指令來模擬它。 – harold
我諮詢了Intel x86手冊,似乎只有需要立即字節和符號的'PUSH'指令將其擴展到16位或32位。沒有「PUSH」8位立即堆棧爲8位變量。 –