汇编:在使用堆栈时向函数传递参数是否有任何优势?

时间:2011-05-02 04:03:20

标签: assembly stack masm procedure

我想知道在汇编语言中使用堆栈向函数传递参数是否有任何优势。   这就是我的意思:

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

2 个答案:

答案 0 :(得分:1)

不是真的; invoke基本上只是一个内置的宏,无论如何都会扩展到几乎相同的代码。

答案 1 :(得分:1)

不,最终代码没有区别,但非常方便。它是一个宏,可以自动检查参数类型是否匹配,从而帮助您发现错误。当然,invoke readString, eaxpush eax; call readString几乎相同,但假设您需要使用数千个参数调用Win32'a API:

    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

在这种情况下,取消invoke更有帮助和可读性。