Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

114 lines
3.1 KiB

;/* *************************************************************************
;** INTEL Corporation Proprietary Information
;**
;** This listing is supplied under the terms of a license
;** agreement with INTEL Corporation and may not be copied
;** nor disclosed except in accordance with the terms of
;** that agreement.
;**
;** Copyright (c) 1995 Intel Corporation.
;** All Rights Reserved.
;**
;** *************************************************************************
;*/
;////////////////////////////////////////////////////////////////////////////
;// $Header: S:\h26x\src\enc\memmodel.inv 1.1 27 Dec 1995 15:33:02 RMCKENZX $
;// $Log: S:\h26x\src\enc\memmodel.inv $
;//
;// Rev 1.1 27 Dec 1995 15:33:02 RMCKENZX
;// Added copyright notice
;////////////////////////////////////////////////////////////////////////////
IFDEF memmodel_inc
ELSE
.486
.MODEL FLAT, STDCALL
Zd EQU <>
Ze EQU <>
Zf EQU <>
Zg EQU <>
Zs EQU <>
Zc EQU <>
BPTR equ ebp
SPTR equ esp
NAT_WORD TEXTEQU <DWORD>
PD EQU <DWORD PTR>
PW EQU <WORD PTR>
PB EQU <BYTE PTR>
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; this provides a normal return when under WIN32 and
;; a 16 bit mode instruction override when under not WIN32
;;
;; This is needed as the segment this code runs in is
;; in 32 bit mode but the caller is in 16 bit mode.
;;
;; under WIN32, we must relieve the stack of passed
;; args, and with proper setup of the PROC directive,
;; the assembler will calculate the correct value
;; to relieve every time it sees the ret.
;;
;; this also sets the language to 'C' when not under WIN32 and
;; stdcall when under WIN32
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LANG TEXTEQU <stdcall>
DIST TEXTEQU <>
rturn MACRO
ret
ENDM
memmodel_inc=1
; this is intended to emulate a disabled epilouge with the single
; exception of relieving the stack of passed parameters if
; the calling type is STDCALL.
;
; only stdcall and c calling conventions are directly supported.
; VARARGS is not supported.
; NONE of the standard prologue or epilogue switches
; are used.
; Like the standard epilogue, the use of retf, retn or ret n
; where n is the number of bytes to relieve, this macro
; is effectively disabled.
ReturnAndRelieveEpilogueMacro MACRO procname, \
flag, \
parmbytes, \
localbytes, \
reglist, \
macroargs
LOCAL RET_DIST
if (flag AND 020h)
; We are in a FAR procedure
RET_DIST TEXTEQU <retf>
else
; We are in a local procedure
RET_DIST TEXTEQU <ret>
endif
if (flag AND 010h)
; user restoring the stack: ret n, retf or retn was used
RET_DIST
else
; user expects us to restore the stack: ret was used
if (flag AND 007h) EQ 3
; stdcall calling convention
if parmbytes EQ 0
RET_DIST
else
RET_DIST parmbytes
endif
else
; assume 'C' calling convention
RET_DIST
endif
endif
ENDM
ENDIF