www.pudn.com > nasm-0.98.zip > c16.mac


; NASM macro set to make interfacing to 16-bit programs easier -*- nasm -*- 
 
%imacro proc 1			; begin a procedure definition 
%push proc 
	  global %1 
%1:	  push bp 
	  mov bp,sp 
%ifdef FARCODE PASCAL		; arguments may start at bp+4 or bp+6 
%assign %$arg 6 
%else 
%assign %$arg 4 
%endif 
%define %$procname %1 
%endmacro 
 
%imacro arg 0-1 2		; used with the argument name as a label 
	  equ %$arg 
%assign %$arg %1+%$arg 
%endmacro 
 
%imacro endproc 0 
%ifnctx proc 
%error Mismatched `endproc'/`proc' 
%else 
          mov sp,bp 
          pop bp 
%ifdef PASCAL 
          retf %$arg 
%elifdef FARCODE 
	  retf 
%else 
	  retn 
%endif 
__end_%$procname:		; useful for calculating function size 
%pop 
%endif 
%endmacro