; Program that demonstrates INVOKE
.386
.MODEL FLAT
ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD
; Procedure prototypes:
load_data PROTO NEAR32 C, arg1:WORD, arg2:WORD, arg3:WORD
save_data PROTO NEAR32 C, arg1:DWORD, arg2:BYTE
.DATA
x WORD ?
y WORD ?
.CODE ; start of main program code
_start:
INVOKE load_data, ax, x, y
INVOKE save_data, ebx, 10
INVOKE ExitProcess, 0 ; exit with return code 0
PUBLIC _start ; make entry point public
load_data PROC NEAR32 C, arg1:WORD, arg2:WORD, arg3:WORD
;
ret
load_data ENDP
save_data PROC NEAR32 C PUBLIC USES di si, arg1:DWORD, arg2:BYTE
;
ret
save_data ENDP
END ; end of source code
; Compiled:
;
; _start:
; 00401058 83EC 02 SUB ESP,2
; 0040105B 66:FF35 02404000 PUSH WORD PTR DS:[404002]
; 00401062 83EC 02 SUB ESP,2
; 00401065 66:FF35 00404000 PUSH WORD PTR DS:[404000]
; 0040106C 83EC 02 SUB ESP,2
; 0040106F 66:50 PUSH AX
; 00401071 E8 15000000 CALL main._load_data
; 00401076 83C4 0C ADD ESP,0C
; 00401079 6A 0A PUSH 0A
; 0040107B 53 PUSH EBX
; 0040107C E8 0F000000 CALL main._save_data
; 00401081 83C4 08 ADD ESP,8
; 00401084 6A 00 PUSH 0
; 00401086 E8 97 03 00 00 CALL _ExitProcess@4
; _load_data:
; 0040108B 55 PUSH EBP
; 0040108C 8BEC MOV EBP,ESP
; 0040108E C9 LEAVE
; 0040108F C3 RETN
; _save_data:
; 00401090 55 PUSH EBP
; 00401091 8BEC MOV EBP,ESP
; 00401093 66:57 PUSH DI
; 00401095 66:56 PUSH SI
; 00401097 66:5E POP SI
; 00401099 66:5F POP DI
; 0040109B C9 LEAVE
; 0040109C C3 RETN
;