dos.mac
上传用户:xiaoan1112
上传日期:2013-04-11
资源大小:19621k
文件大小:4k
源码类别:

操作系统开发

开发平台:

Visual C++

  1. ;***
  2. ;* $Workfile:   dos.mac  $
  3. ;* $Revision:   1.1  $
  4. ;*   $Author:   Dave Sewell  $
  5. ;*     $Date:   13 Oct 1989 11:33:12  $
  6. ;*
  7. ;* Various useful macros for assembly language programs.
  8. ;*
  9. ;* NOTE:  This file is identical for both XENIX and MSDOS assemblies, so it
  10. ;* should be linked in "/usr/include" and "/usr/include/dos".
  11. ;***
  12. ; The following include file should have any macros, etc., which are different
  13. ; for XENIX and MSDOS assemblies.  Unique copies should be maintained in
  14. ; "/usr/include" for XENIX and "/usr/include/dos" for MSDOS.
  15. INCLUDE osdep.mac
  16. ; IMPORTANT NOTE:  If the middle, compact, large, or huge memory model is being
  17. ; used, the symbol "MMODEL", "CMODEL", "LMODEL", or "HMODEL" respectively, must
  18. ; be defined on the command line when "masm" is invoked.  If none of the
  19. ; symbols is defined, small model is assumed as the default.
  20. CONST SEGMENT  WORD PUBLIC 'CONST'
  21. CONST ENDS
  22. _BSS SEGMENT  WORD PUBLIC 'BSS'
  23. _BSS ENDS
  24. _DATA SEGMENT  WORD PUBLIC 'DATA'
  25. _DATA ENDS
  26. DGROUP GROUP CONST, _BSS, _DATA
  27. ASSUME DS: DGROUP, SS: DGROUP, ES: DGROUP
  28. DATASEG MACRO
  29. _DATA SEGMENT
  30. ENDM
  31. DATAEND MACRO
  32. _DATA ENDS
  33. ENDM
  34. IFDEF LMODEL
  35. ;*** Large model definitions ***
  36. LPROG EQU 1
  37. LDATA EQU 1
  38. ENDIF
  39. IFDEF HMODEL
  40. ;*** Large model definitions ***
  41. LPROG EQU 1
  42. LDATA EQU 1
  43. ENDIF
  44. IFDEF MMODEL
  45. ;*** Medium model definitions ***
  46. LPROG EQU 1
  47. LDATA EQU 0
  48. ENDIF
  49. IFDEF CMODEL
  50. ;*** Medium model definitions ***
  51. LPROG EQU 0
  52. LDATA EQU 1
  53. ENDIF
  54. IFNDEF LPROG
  55. ;*** Small model definitions ***
  56. LPROG EQU 0
  57. LDATA EQU 0
  58. ENDIF
  59. IF  (LPROG EQ 0)
  60. TEXTSEG     MACRO
  61. _TEXT     SEGMENT BYTE PUBLIC 'CODE'
  62.     ASSUME CS:_TEXT
  63.     ENDM
  64. TEXTEND     MACRO
  65. _TEXT     ENDS
  66.     ENDM
  67. PUBPROCDEF  MACRO   PROCNAME
  68.     PUBLIC  _&PROCNAME
  69. _&PROCNAME  PROC    NEAR
  70.     ENDM
  71. PASCALDEF   MACRO   PROCNAME
  72.     PUBLIC  PROCNAME
  73. PROCNAME    PROC    NEAR
  74.     ENDM
  75. LOCPROCDEF  MACRO   PROCNAME
  76. PROCNAME    PROC    NEAR
  77.     ENDM
  78. ELSE
  79. TEXTSEG     MACRO
  80. PARAGON_TEXT    SEGMENT BYTE PUBLIC 'CODE'
  81.     ASSUME CS:PARAGON_TEXT
  82.     ENDM
  83. TEXTEND     MACRO
  84. PARAGON_TEXT    ENDS
  85.     ENDM
  86. PUBPROCDEF  MACRO   PROCNAME
  87.     PUBLIC  _&PROCNAME
  88. _&PROCNAME  PROC    FAR
  89.     ENDM
  90. PASCALDEF   MACRO   PROCNAME
  91.     PUBLIC  PROCNAME
  92. PROCNAME    PROC    FAR
  93.     ENDM
  94. ENDIF
  95. PUBPROCEND  MACRO   PROCNAME
  96. _&PROCNAME  ENDP
  97.     ENDM
  98. PASCALEND   MACRO   PROCNAME
  99. PROCNAME    ENDP
  100.     ENDM
  101. ;***
  102. ;* The following macros may be useful in accessing stack arguments.
  103. ;* Here 'X' defines the offset from BP where the first argument may be found.
  104. ;* In the small code models, the offset is 4 (2 for the BP register saved
  105. ;* on procedure entry and 2 for the return address).  In the large code models
  106. ;* the offset is 6 because the return address takes up 4 bytes instead of two.
  107. ;***
  108. IF LPROG
  109. X EQU 6
  110. ELSE
  111. X EQU 4
  112. ENDIF
  113. ;***
  114. ;* The following defines are used in conjunction with 'X' to access arguments
  115. ;* after the first one:
  116. ;* I   = integer argument
  117. ;* L   = long argument
  118. ;* NDP = near data pointer argument
  119. ;* FDP = far data pointer argument
  120. ;* NCP = near code pointer argument
  121. ;* FCP = far code pointer argument
  122. ;* DP  = data pointer argument
  123. ;* CP  = code pointer argument
  124. ;***
  125. I EQU 2
  126. L EQU 4
  127. NDP EQU 2
  128. FDP EQU 4
  129. NCP EQU 2
  130. FCP EQU 4
  131. IF LDATA
  132. DP EQU 4
  133. ELSE
  134. DP EQU 2
  135. ENDIF
  136. IF LPROG
  137. CP EQU 4
  138. ELSE
  139. CP EQU 2
  140. ENDIF
  141. procent     MACRO
  142.     PUSH    BP
  143.     MOV     BP, SP
  144.     PUSH    DI
  145.     PUSH    SI
  146.     ENDM
  147. ;Note: the procret macro accepts up to a maximum of seven args and plus signs.
  148. ;If more are needed, take out white space between pluses and arguments.
  149. procret     MACRO   arg1,p1,arg2,p2,arg3,p4,arg4,p5,arg5,p6,arg6,p7,arg7
  150.     POP     SI
  151.     POP     DI
  152.     POP     BP
  153.     RET     arg1 p1 arg2 p2 arg3 p4 arg4 p5 arg5 p6 arg6 p7 arg7
  154.     ENDM
  155. pubcall     MACRO   procname
  156.     IF     LPROG
  157.     call    FAR PTR _&procname
  158.     ELSE
  159.     call    _&procname
  160.     ENDIF
  161.     ENDM