_AddPS関数はスタックのバランスを崩し、StdCAllを対象としています。それ以上の情報はありません。これは、アセンブラーコードの2番目の部分にすぎません(最初は、cdecl関数呼び出しをシミュレートしたテスト.exeでした)。
.386
.MODEL FLAT, STDCALL
option casemap :none ; case sensitive
.CODE
_LibMain proc instance:dword, reason:dword, unused:dword
mov EAX, 1 ;
ret
_LibMain endp
_AddPS proc a:dword, b:dword
push ebp ;
mov ebp, esp ; // ebp << esp
push EAX ;
push EBX ;
mov EAX, [ebp+8] ;
mov EBX, [ebp+4] ;
add EAX, EBX ;
pop EBX ;
pop EAX ;
mov esp, ebp ;
pop ebp ;
RET 8
_AddPS endp
END _LibMain
MASMと次のコマンドラインを使用してコンパイルします。
c:\Asm\Test.asm /coff /Gz /FeC:\Asm\Test.dll /FoC:\Asm\Test.obj /link /SUBSYSTEM:WINDOWS /link /DLL
編集:次のコードは機能しますが、理由がわかりません。
_Test proc a:dword, b:dword
push ebp ; Store the stack frame.
push EAX ; Store EAX. Probably not needed.
mov EAX, a ; Move a into EAX.
add EAX, b ; Add b to EAX.
add esp, 4 ; Move past the stored EAX without popping.
pop ebp ; pop the stack frame.
RET 8 // dword is 4 bytes in .386. We return past the parameters.
_Test endp // Marks where to stop compiling the function.