问题描述
|
我想知道以汇编语言使用堆栈将参数传递给函数是否有任何优势。
这是我的意思:
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
问候,
德吉耶
解决方法
不,最终代码没有区别,但是非常方便。这是一个宏,可自动检查参数类型是否匹配,从而帮助您发现错误。当然,
invoke readString,eax
或push eax; call readString
几乎相同,但是假设您需要使用它们的数千个参数调用Win32 \ a API:
推送NULL
推送提示
推送NULL
推送NULL
推200
推300
推CW_USEDEFAULT
推CW_USEDEFAULT
推送WS_OVERLAPPEDWINDOW
推送地址Appame
推送地址Classame
推送WS_EX_CLIENTEDGE
呼叫CreateWindowEx
调用CreateWindowEx,WS_EX_CLIENTEDGE,ADDR ClassName,ADDR AppName,\\
WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\\
CW_USEDEFAULT,300,200,NULL,NULL,\\
hInst,NULL
在这种情况下,解开“ 4”会更有帮助和可读性。
,并不是的; invoke
基本上只是一个内置宏,无论如何它将扩展为几乎相同的代码。