; Program that demonstrates C-style procedure manipulating ; C-like local variables on the stack. .386 .MODEL FLAT ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD .CODE ; start of main program code _start: mov eax, 10 ; Load data into EAX push eax ; Push first argument call subtract3 ; push address of next instruction ; onto the stack, and pass control ; to the address of subtract3 add sp, 4 ; Destroy the pushed arguments ; (equivalent to one pop) INVOKE ExitProcess, 0 ; exit with return code 0 PUBLIC _start ; make entry point public subtract3 PROC NEAR32 push ebp ; Save base pointer mov ebp, esp ; Load stack into base pointer sub esp, 4 ; Save 2 bytes for a local variable mov DWORD PTR [ ebp - 4 ], 6 ; Initialize local variable with 6 mov eax, [ ebp - 4 ] ; put value in EAX sub [ ebp + 8 ], eax ; Subtract value from the 1st argument mov eax, [ ebp + 8 ] ; put result in EAX mov esp, ebp ; Clear local variables pop ebp ; Restore EBP ret ; Return result in EAX subtract3 ENDP END ; end of source code