Copyright (C) 2000-2012 |
GNU Info (nasm.info)Section 8.1.48.1.4. `c32.mac': Helper Macros for the 32-bit C Interface ---------------------------------------------------------- Included in the NASM archives, in the `misc' directory, is a file `c32.mac' of macros. It defines three macros: `proc', `arg' and `endproc'. These are intended to be used for C-style procedure definitions, and they automate a lot of the work involved in keeping track of the calling convention. An example of an assembly function using the macro set is given here: proc _proc32 %$i arg %$j arg mov eax,[ebp + %$i] mov ebx,[ebp + %$j] add eax,[ebx] endproc This defines `_proc32' to be a procedure taking two arguments, the first (`i') an integer and the second (`j') a pointer to an integer. It returns `i + *j'. Note that the `arg' macro has an `EQU' as the first line of its expansion, and since the label before the macro call gets prepended to the first line of the expanded macro, the `EQU' works, defining `%$i' to be an offset from `BP'. A context-local variable is used, local to the context pushed by the `proc' macro and popped by the `endproc' macro, so that the same argument name can be used in later procedures. Of course, you don't _have_ to do that. `arg' can take an optional parameter, giving the size of the argument. If no size is given, 4 is assumed, since it is likely that many function parameters will be of type `int' or pointers. |