A little about Model Flat,Stdcall Win32 Asm Basics by Lucifer Jan 26, 1999 Model Flat, Stdcall: ----------------------------------------------------------------------------- At the top of nearly every win32asm source file you will find the line: .model flat,Stdcall This tells the assembler what memory model and calling convention to use. Flat: Windows uses a flat memory model, which basically is a 32-bit protected mode architecture, with segmentation effectively disabled. The reason that windows uses the flat memory model is for portability; The segmented architecture of the intel processor is not found on other processors. For more information on the Flat Memory Model see the Intel Documentation at: ftp://download.intel.com/design/intarch/papers/esc_ia_p.pdf Stdcall: The Windows API uses the stdcall calling convention exclusively (excepty for one function - wsprintf). The proprties of the stdcall convention are that the function parameters are pushed onto the stack in reverse order and the function is responsible for adjusting the stack. The stdcall option in the .model directive tells the assembler that every procedure uses the stcall convention. It basically changes the code inserted by the assembler for the PROC and ENDP directives: ;Written code Procedure PROC p1:DWORD, p2:DWORD xor eax,eax ret Procedure ENDP ;Assembled code Procedure PROC p1:DWORD, p2:DWORD ENTERD 00000h,0 ; inserted by assembler xor eax,eax LEAVED ; inserted by assembler RET 00008h ; changed by assembler Procedure ENDP As can be seen, using stdcall adds some overhead to the program (7 bytes in this example). However, it allows the ability to pass function parameters on the stack easily. One advantage of using assembly language, though, is the ability to pass parameters using the registers, which both increases speed and reduces code size. Generally, for type checking, readability, and programming ease it is worthwile to pass parameters via the stack. But if maximum speed and minimum code size are required, parameters should be passed through the registers. Copyright (C) 1999 lord-lucifer@usa.net