我想知道在汇编语言中使用堆栈向函数传递参数是否有任何优势。 这就是我的意思:
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
答案 0 :(得分:1)
不是真的; invoke
基本上只是一个内置的宏,无论如何都会扩展到几乎相同的代码。
答案 1 :(得分:1)
不,最终代码没有区别,但非常方便。它是一个宏,可以自动检查参数类型是否匹配,从而帮助您发现错误。当然,invoke readString, eax
或push 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
更有帮助和可读性。