; Program that demonstrates C-style procedure call and definition. ; Procedure parameters are declared as pointers to data. .386 .MODEL FLAT ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD .DATA ; reserve storage for data number1 DWORD ? number2 DWORD ? .CODE ; start of main program code _start: mov number1, 10 ; Load data mov number2, 20 push offset number2 ; Push second argument push offset number1 ; Push first argument call add2nums ; push address of next instruction ; onto the stack, and pass control ; to the address of add2nums add sp, 8 ; Destroy the pushed arguments ; (equivalent to two pops) INVOKE ExitProcess, 0 ; exit with return code 0 PUBLIC _start ; make entry point public add2nums PROC NEAR32 C arg1:NEAR32 PTR DWORD, arg2:NEAR32 PTR DWORD mov ebx, arg1 ; get address of the 1st parameter mov eax, [ebx] ; get the value mov ebx, arg2 ; get address of the 2nd parameter add eax, [ebx] ; compute sum ret ; return result in EAX add2nums ENDP END ; end of source code