2011-05-02 32 views
0

我想知道是否有使用匯編語言將參數傳遞給函數的優點。 這裏是我的意思是:程序集:在使用堆棧時將參數傳遞給函數有什麼好處嗎?

readString PROTO :DWORD ;Prototype for function 
;Now we call the function by moving a DWORD value into eax and pushing eax 
mov eax, FAD37EABh 
push eax 
CALL readString 

有沒有使用這種方法在以下任何優勢?

INVOKE readString, FAD37EABh 

問候,

Devjeet

回答

1

不,最終代碼沒有區別,但它非常方便。這是一個宏自動檢查參數類型是否匹配,從而幫助您發現錯誤。當然,invoke readString, eaxpush eax; call readString幾乎是相同的,但假設你需要調用API Win32'a與他們的成千上萬的參數:

 
    push NULL 
    push hInst 
    push NULL 
    push NULL 
    push 200 
    push 300 
    push CW_USEDEFAULT 
    push CW_USEDEFAULT 
    push WS_OVERLAPPEDWINDOW 
    push addr Appame 
    push addr Classame 
    push WS_EX_CLIENTEDGE 
    call CreateWindowEx 
 
    INVOKE CreateWindowEx,WS_EX_CLIENTEDGE,ADDR ClassName,ADDR AppName,\ 
      WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\ 
      CW_USEDEFAULT,300,200,NULL,NULL,\ 
      hInst,NULL 

在這種情況下uning invoke更加有用和可讀性。

1

不是真的; invoke基本上只是一個內置的宏,無論如何將擴展到幾乎相同的代碼。

+0

在程序的可讀性方面? – devjeetroy 2011-05-02 04:18:28

+1

@devjeetroy:我通常更喜歡'invoke'語法,但也有人不同意。特別是,如果您明確地進行所有推送(例如,對CreateFile的單個調用最多隻有20行),特別是Windows代碼會變得很長*。 – 2011-05-02 04:21:51

相關問題