home *** CD-ROM | disk | FTP | other *** search
/ For Beginners & Professional Hackers / cd.iso / softcrc / masm / masm.510 / mixed.inc < prev    next >
Encoding:
Text File  |  1988-02-01  |  3.1 KB  |  168 lines

  1. ; High-Level-Language Interface Macros - Version 2.0
  2. ;   for Microsoft Macro Assembler 5.10
  3. ; (C) Copyright Microsoft Corporation, 1987.
  4.  
  5. ;   Syntax                   Purpose
  6. ;   ------                   -------
  7. ;
  8. ;   setModel                 Sets model from text equate
  9. ;
  10. ;   hProc  <name [NEAR|FAR]> [,<USES reglist>] [,arg[:type] [,arg[:type]]]...
  11. ;                            Starts a procedure with optional stack arguments
  12. ;
  13. ;   hLocal var[:type] [,var[:type]]...
  14. ;                            Defines local stack variables
  15. ;
  16. ;   hRet                     Returns from the current procedure
  17. ;
  18. ;   hEndp                    Ends the current procedure
  19. ;
  20. ;   ifFP  statement          Assembles statement if far data
  21. ;
  22. ;   FPoperand                Conditionally provides ES override for data
  23. ;
  24. ;   pLes  register,address   Conditionally loads data through ES
  25. ;
  26. ;   pLds  register,address   Conditionally loads data through DS
  27.  
  28. ;if1
  29.  
  30. ; Translate command-line arguments
  31.  
  32.  
  33. ; Initialize procName
  34.  
  35.     procName equ <foo>
  36.  
  37. ; Set model passed from command line
  38.  
  39. setModel macro mod
  40.  
  41.     ifdef cLang
  42.       .model mod, C
  43.       lang  EQU   <C>
  44.     elseifdef BASIC
  45.       .model mod, Basic
  46.     elseifdef FORTRAN
  47.       .model mod, FORTRAN
  48.     elseifdef Pascal
  49.       .model mod, Pascal
  50.     endif
  51.  
  52. ; FP - supply far pointer ES overide as needed - must be inside for setModel
  53.  
  54.     if @DataSize
  55.       FP equ <es:>
  56.     else
  57.       FP equ <>
  58.     endif
  59.  
  60. endm
  61.  
  62. ; FP - supply far pointer ES overide as needed - must be outside for .MODEL
  63.  
  64. ifdef @DataSize
  65.     if @DataSize
  66.       FP equ <es:>
  67.     else
  68.       FP equ <>
  69.     endif
  70. endif
  71.  
  72. ; Declare high level routine and parameters
  73.  
  74. hProc macro funName, a,b,c,d,e,f,g,h,i,j
  75. ;    LOCAL argstr
  76.  
  77.     ii instr <funName>,< >
  78.     if ii
  79.       procName subStr <funName>,1,ii
  80.       nearFar subStr <funName>,ii
  81.     else
  82.       procName equ <funName>
  83.       nearFar equ <>
  84.     endif
  85.  
  86.     argstr equ <a>
  87.     irp arg,<b,c,d,e,f,g,h,i,j>
  88.       ifnb <arg>
  89.     argstr catstr argstr,<, arg>
  90.       else
  91.         exitm
  92.       endif
  93.     endm
  94. defineProc %nearFar, %argstr
  95. endm
  96.  
  97. defineProc Macro size,args
  98. procName proc size args
  99. endm
  100.  
  101. ; Declare local stack variables
  102.  
  103. hLocal macro a,b,c,d,e,f,g,h,i,j
  104. ;    LOCAL argstr
  105.     argstr EQU <a>
  106.     irp arg,<b,c,d,e,f,g,h,i,j>
  107.       ifnb <arg>
  108.     argstr catstr argstr,<, arg>
  109.       else
  110.         exitm
  111.       endif
  112.     endm
  113. defineLocal %argstr
  114. endm
  115.  
  116. defineLocal macro args
  117.     &local args
  118. endm
  119.  
  120. ; Generate high level return
  121.  
  122. hRet macro
  123.     ret
  124. endm
  125.  
  126. ; End a high level procedure
  127.  
  128. hEndp macro
  129.     procName endp
  130. endm
  131.  
  132. ; Execute instruction if far data
  133.  
  134. ifFP macro a,b,c,d,e,f,g,h,i,j
  135.  
  136.     if @DataSize
  137.        a b c d e f g h i j
  138.     endif
  139. endm
  140.  
  141. ; Load 16/32 bit pointers into [ES:] reg
  142.  
  143. pLes macro reg, address
  144.  
  145.     if @DataSize
  146.  
  147.         les reg,address
  148.     else
  149.         mov reg,address
  150.  
  151.     endif
  152. endm
  153.  
  154. ;Load 16/32 bit pointers into [DS:] reg
  155.  
  156. pLds macro reg, address
  157.  
  158.     if @DataSize
  159.  
  160.         lds reg,address
  161.     else
  162.         mov reg,address
  163.  
  164.     endif
  165. endm
  166.  
  167. ;endif ; Pass 1 only
  168.