Author Topic: Very simple macro to display ESP.  (Read 2183 times)

hutch--

  • Administrator
  • Member
  • ******
  • Posts: 6868
  • Mnemonic Driven API Grinder
    • The MASM32 SDK
Very simple macro to display ESP.
« on: December 17, 2014, 10:50:55 AM »
Sometimes when you are writing low level procedures and in particular with FASTPROC procedures, you risk messing up the stack where the OS requires that the stack be the same value both before and after a procedure call. This is a very simple macro to test the before and after value of ESP. If they are the same before and after your procedure has balanced the stack, if its not you need to fix it.

It is possible to write C calling convention VARARG procedures in PowerBASIC but you have to code it completely from scratch as PB does not support C style VARARG and as with any C calling convention procedure, the stack must be balanced AFTER the procedure has returned. This simple macro will help get this stack balance right.

' ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤

    MACRO showESP
      MACROTEMP dvar
      LOCAL dvar as DWORD
      ! mov dvar, esp
      StdOut "ESP register, Decimal = "+format$(dvar)+" - Hex = "+hex$(dvar,8)
    END MACRO

' ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤

FUNCTION PBmain as LONG

    showESP

    StdOut $CRLF+"Text Operation"+$CRLF

    showESP

    waitkey$

End FUNCTION

' ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
hutch at movsd dot com
http://www.masm32.com    :biggrin:  :skrewy: