mirror of
https://github.com/netwide-assembler/nasm.git
synced 2024-12-27 09:29:06 +08: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
|
|
|