macros.asm
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:3k
- ; Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
;
; This library is free software; you can redistribute it and/or
; modify it under the terms of the GNU Library General Public
; License as published by the Free Software Foundation; either
; version 2 of the License, or (at your option) any later version.
;
; This library is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
; Library General Public License for more details.
;
; You should have received a copy of the GNU Library General Public
; License along with this library; if not, write to the Free
; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
; MA 02111-1307, USA
; Some useful macros
- .386P
- .387
- _FLAT equ 0 ;FLAT memory model
- _STDCALL equ 0 ;default to _stdcall
- I386 equ 1
- begcode macro module
- if _FLAT
- _TEXT segment dword use32 public 'CODE'
- assume CS:FLAT,DS:FLAT,SS:FLAT
- else
- _TEXT segment dword public 'CODE'
- assume CS:_TEXT
- endif
- endm
- endcode macro module
- _TEXT ENDS
- endm
- begdata macro
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Set up segments for data
- ; Regular initialized data goes in _DATA
- _DATA segment dword public 'DATA'
- _DATA ends
- ;Function pointers to constructors
- XIB segment dword public 'DATA'
- XIB ends
- XI segment dword public 'DATA'
- XI ends
- XIE segment dword public 'DATA'
- XIE ends
- ;Function pointers to destructors
- XCB segment dword public 'DATA'
- XCB ends
- XC segment dword public 'DATA'
- XC ends
- XCE segment dword public 'DATA'
- XCE ends
- ;Constant data, such as switch tables, go here.
- CONST segment dword public 'CONST'
- CONST ends
- ;Segment for uninitialized data. This is set to 0 by the startup code/OS,
- ;so it does not consume room in the executable file.
- _BSS segment dword public 'BSS'
- _BSS ends
- HUGE_BSS segment dword public 'HUGE_BSS'
- HUGE_BSS ends
- EEND segment dword public 'ENDBSS'
- EEND ends
- STACK segment para stack 'STACK'
- STACK ends
- DGROUP group _DATA,XIB,XI,XIE,XCB,XC,XCE,CONST,_BSS,EEND,STACK
- _DATA segment
- if _FLAT
- assume DS:FLAT
- else
- assume DS:DGROUP
- endif
- endm
- enddata macro
- _DATA ends
- endm
- P equ 8 ; Offset of start of parameters on the stack frame
- ; From EBP assuming EBP was pushed.
- PS equ 4 ; Offset of start of parameters on the stack frame
- ; From ESP assuming EBP was NOT pushed.
- ESeqDS equ 0
- FSeqDS equ 0
- GSeqDS equ 0
- SSeqDS equ 1
- SIZEPTR equ 4 ; Size of a pointer
- LPTR equ 0
- SPTR equ 1
- LCODE equ 0
- func macro name
- _&name proc near
- ifndef name
- name equ _&name
- endif
- endm
- callm macro name
- call _&name
- endm
- ;Macros to replace public, extrn, and endp for C-callable assembly routines,
- ; and to define labels: c_label defines labels,
- ; c_public replaces public, c_extrn replaces extrn, and c_endp replaces endp
- c_name macro name
- name equ _&name
- endm
- c_label macro name
- _&name:
- endm
- c_endp macro name
- _&name ENDP
- endm
- clr macro list ;clear a register
- irp reg,<list>
- xor reg,reg
- endm
- endm
- jmps macro lbl
- jmp short lbl
- endm