home *** CD-ROM | disk | FTP | other *** search
/ Reverse Code Engineering RCE CD +sandman 2000 / ReverseCodeEngineeringRceCdsandman2000.iso / RCE / LordLucifer / win32asm / tutorials / modelfs.txt < prev    next >
Text File  |  2000-05-25  |  2KB  |  58 lines

  1. A little about Model Flat,Stdcall
  2. Win32 Asm Basics
  3. by Lucifer
  4. Jan 26, 1999
  5.  
  6.  
  7. Model Flat, Stdcall:
  8. -----------------------------------------------------------------------------
  9. At the top of nearly every win32asm source file you will find the line:
  10. .model flat,Stdcall
  11. This tells the assembler what memory model and calling convention to use.
  12.  
  13. Flat:
  14. Windows uses a flat memory model, which basically is a 32-bit protected mode
  15. architecture, with segmentation effectively disabled.  The reason that
  16. windows uses the flat memory model is for portability; The segmented
  17. architecture of the intel processor is not found on other processors.  
  18.  
  19. For more information on the Flat Memory Model see the Intel Documentation at:
  20. ftp://download.intel.com/design/intarch/papers/esc_ia_p.pdf
  21.  
  22. Stdcall:
  23. The Windows API uses the stdcall calling convention exclusively (excepty for
  24. one function - wsprintf).  The proprties of the stdcall convention are that
  25. the function parameters are pushed onto the stack in reverse order and the
  26. function is responsible for adjusting the stack.  The stdcall option in the
  27. .model directive tells the assembler that every procedure uses the stcall
  28. convention. It basically changes the code inserted by the assembler for the
  29. PROC and ENDP directives:
  30.  
  31.   ;Written code
  32.   Procedure PROC p1:DWORD, p2:DWORD
  33.         xor eax,eax
  34.         ret
  35.   Procedure ENDP
  36.  
  37.   ;Assembled code
  38.   Procedure PROC p1:DWORD, p2:DWORD
  39.         ENTERD  00000h,0                ; inserted by assembler
  40.         xor eax,eax
  41.         LEAVED                          ; inserted by assembler
  42.         RET     00008h                  ; changed by assembler        
  43.   Procedure ENDP
  44.  
  45. As can be seen, using stdcall adds some overhead to the program (7 bytes in
  46. this example). However, it allows the ability to pass function parameters on
  47. the stack easily.  One advantage of using assembly language, though, is the
  48. ability to pass parameters using the registers, which both increases speed
  49. and reduces code size.
  50.  
  51. Generally, for type checking, readability, and programming ease it is
  52. worthwile to pass parameters via the stack.  But if maximum speed and minimum
  53. code size are required, parameters should be passed through the registers.
  54.  
  55.  
  56. Copyright (C) 1999
  57. lord-lucifer@usa.net
  58.