mirror of
				https://github.com/netwide-assembler/nasm.git
				synced 2025-10-10 00:25:06 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			83 lines
		
	
	
		
			872 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			872 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| ; 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
 | |
| 
 |