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

问候,

开发者

4

2 回答 2

1

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

于 2011-05-02T04:10:15.523 回答
1

不,最终的代码没有区别,但是很方便。这是一个自动检查参数类型是否匹配的宏,因此可以帮助您发现错误。当然,invoke readString, eax或者push eax; call readString几乎是一样的,但是假设你需要调用 Win32'a API 和它们的数千个参数:

    推空
    推送提示
    推空
    推空
    推200
    推300
    推送 CW_USEDEFAULT
    推送 CW_USEDEFAULT
    推送 WS_OVERLAPPEDWINDOW
    推送地址 Appame
    push addr 类名
    推送 WS_EX_CLIENTEDGE
    调用 CreateWindowEx
    INVOKE CreateWindowEx,WS_EX_CLIENTEDGE,ADDR ClassName,ADDR AppName,\
           WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\
           CW_USEDEFAULT,300,200,NULL,NULL,\
           hInst,NULL

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

于 2011-05-02T17:34:40.057 回答