NASM 0.98-j4
[nasm/avx512.git] / c16.mac
blob81a9c5e2925ecf2926dca167ae24c15cdcd4dad9
1 ; NASM macro set to make interfacing to 16-bit programs easier -*- nasm -*-
3 %imacro proc 1                  ; begin a procedure definition
4 %push proc
5           global %1
6 %1:       push bp
7           mov bp,sp
8 %ifdef FARCODE PASCAL           ; arguments may start at bp+4 or bp+6
9 %assign %$arg 6
10 %define %$firstarg 6
11 %else
12 %assign %$arg 4
13 %define %$firstarg 4
14 %endif
15 %define %$procname %1
16 %endmacro
18 %imacro arg 0-1 2               ; used with the argument name as a label
19 %00       equ %$arg
20                                 ; we could possibly be adding some
21                                 ; debug information at this point...?
22 %assign %$arg %1+%$arg
23 %endmacro
25 %imacro endproc 0
26 %ifnctx proc
27 %error Mismatched `endproc'/`proc'
28 %else
29           mov sp,bp
30           pop bp
31 %ifdef PASCAL
32           retf %$arg - %$firstarg
33 %elifdef FARCODE
34           retf
35 %else
36           retn
37 %endif
38 __end_%$procname:               ; useful for calculating function size
39 %pop
40 %endif
41 %endmacro