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 
 
%define %$firstarg 6 
 
%else 
 
%assign %$arg 4 
 
%define %$firstarg 4 
 
%endif 
 
%define %$procname %1 
 
%endmacro 
 
 
 
%imacro arg 0-1 2		; used with the argument name as a label 
 
%00	  equ %$arg 
 
				; we could possibly be adding some 
 
				; debug information at this point...? 
 
%assign %$arg %1+%$arg 
 
%endmacro 
 
 
 
%imacro endproc 0 
 
%ifnctx proc 
 
%error Mismatched `endproc'/`proc' 
 
%else 
 
          mov sp,bp 
 
          pop bp 
 
%ifdef PASCAL 
 
          retf %$arg - %$firstarg 
 
%elifdef FARCODE 
 
	  retf 
 
%else 
 
	  retn 
 
%endif 
 
__end_%$procname:		; useful for calculating function size 
 
%pop 
 
%endif 
 
%endmacro