Document Infinity and NaN
[nasm.git] / doc / nasmdoc.src
blobc79cd39b8f336d02df75cc9d4e8ee52794ffb263
1 \#
2 \# Source code to NASM documentation
3 \#
4 \M{category}{Programming}
5 \M{title}{NASM - The Netwide Assembler}
6 \M{year}{2007}
7 \M{author}{The NASM Development Team}
8 \M{license}{All rights reserved. This document is redistributable under the license given in the file "COPYING" distributed in the NASM archive.}
9 \M{summary}{This file documents NASM, the Netwide Assembler: an assembler targetting the Intel x86 series of processors, with portable source.}
10 \M{infoname}{NASM}
11 \M{infofile}{nasm}
12 \M{infotitle}{The Netwide Assembler for x86}
13 \M{epslogo}{nasmlogo.eps}
14 \IR{-D} \c{-D} option
15 \IR{-E} \c{-E} option
16 \IR{-F} \c{-F} option
17 \IR{-I} \c{-I} option
18 \IR{-M} \c{-M} option
19 \IR{-On} \c{-On} option
20 \IR{-P} \c{-P} option
21 \IR{-U} \c{-U} option
22 \IR{-X} \c{-X} option
23 \IR{-a} \c{-a} option
24 \IR{-d} \c{-d} option
25 \IR{-e} \c{-e} option
26 \IR{-f} \c{-f} option
27 \IR{-g} \c{-g} option
28 \IR{-i} \c{-i} option
29 \IR{-l} \c{-l} option
30 \IR{-o} \c{-o} option
31 \IR{-p} \c{-p} option
32 \IR{-s} \c{-s} option
33 \IR{-u} \c{-u} option
34 \IR{-v} \c{-v} option
35 \IR{-w} \c{-w} option
36 \IR{-y} \c{-y} option
37 \IR{!=} \c{!=} operator
38 \IR{$, here} \c{$}, Here token
39 \IR{$, prefix} \c{$}, prefix
40 \IR{$$} \c{$$} token
41 \IR{%} \c{%} operator
42 \IR{%%} \c{%%} operator
43 \IR{%+1} \c{%+1} and \c{%-1} syntax
44 \IA{%-1}{%+1}
45 \IR{%0} \c{%0} parameter count
46 \IR{&} \c{&} operator
47 \IR{&&} \c{&&} operator
48 \IR{*} \c{*} operator
49 \IR{..@} \c{..@} symbol prefix
50 \IR{/} \c{/} operator
51 \IR{//} \c{//} operator
52 \IR{<} \c{<} operator
53 \IR{<<} \c{<<} operator
54 \IR{<=} \c{<=} operator
55 \IR{<>} \c{<>} operator
56 \IR{=} \c{=} operator
57 \IR{==} \c{==} operator
58 \IR{>} \c{>} operator
59 \IR{>=} \c{>=} operator
60 \IR{>>} \c{>>} operator
61 \IR{?} \c{?} MASM syntax
62 \IR{^} \c{^} operator
63 \IR{^^} \c{^^} operator
64 \IR{|} \c{|} operator
65 \IR{||} \c{||} operator
66 \IR{~} \c{~} operator
67 \IR{%$} \c{%$} and \c{%$$} prefixes
68 \IA{%$$}{%$}
69 \IR{+ opaddition} \c{+} operator, binary
70 \IR{+ opunary} \c{+} operator, unary
71 \IR{+ modifier} \c{+} modifier
72 \IR{- opsubtraction} \c{-} operator, binary
73 \IR{- opunary} \c{-} operator, unary
74 \IR{! opunary} \c{!} operator, unary
75 \IR{alignment, in bin sections} alignment, in \c{bin} sections
76 \IR{alignment, in elf sections} alignment, in \c{elf} sections
77 \IR{alignment, in win32 sections} alignment, in \c{win32} sections
78 \IR{alignment, of elf common variables} alignment, of \c{elf} common
79 variables
80 \IR{alignment, in obj sections} alignment, in \c{obj} sections
81 \IR{a.out, bsd version} \c{a.out}, BSD version
82 \IR{a.out, linux version} \c{a.out}, Linux version
83 \IR{autoconf} Autoconf
84 \IR{bin} bin
85 \IR{bitwise and} bitwise AND
86 \IR{bitwise or} bitwise OR
87 \IR{bitwise xor} bitwise XOR
88 \IR{block ifs} block IFs
89 \IR{borland pascal} Borland, Pascal
90 \IR{borland's win32 compilers} Borland, Win32 compilers
91 \IR{braces, after % sign} braces, after \c{%} sign
92 \IR{bsd} BSD
93 \IR{c calling convention} C calling convention
94 \IR{c symbol names} C symbol names
95 \IA{critical expressions}{critical expression}
96 \IA{command line}{command-line}
97 \IA{case sensitivity}{case sensitive}
98 \IA{case-sensitive}{case sensitive}
99 \IA{case-insensitive}{case sensitive}
100 \IA{character constants}{character constant}
101 \IR{common object file format} Common Object File Format
102 \IR{common variables, alignment in elf} common variables, alignment
103 in \c{elf}
104 \IR{common, elf extensions to} \c{COMMON}, \c{elf} extensions to
105 \IR{common, obj extensions to} \c{COMMON}, \c{obj} extensions to
106 \IR{declaring structure} declaring structures
107 \IR{default-wrt mechanism} default-\c{WRT} mechanism
108 \IR{devpac} DevPac
109 \IR{djgpp} DJGPP
110 \IR{dll symbols, exporting} DLL symbols, exporting
111 \IR{dll symbols, importing} DLL symbols, importing
112 \IR{dos} DOS
113 \IR{dos archive} DOS archive
114 \IR{dos source archive} DOS source archive
115 \IA{effective address}{effective addresses}
116 \IA{effective-address}{effective addresses}
117 \IR{elf} ELF
118 \IR{elf, 16-bit code and} ELF, 16-bit code and
119 \IR{elf shared libraries} ELF, shared libraries
120 \IR{executable and linkable format} Executable and Linkable Format
121 \IR{extern, obj extensions to} \c{EXTERN}, \c{obj} extensions to
122 \IR{extern, rdf extensions to} \c{EXTERN}, \c{rdf} extensions to
123 \IR{freebsd} FreeBSD
124 \IR{freelink} FreeLink
125 \IR{functions, c calling convention} functions, C calling convention
126 \IR{functions, pascal calling convention} functions, Pascal calling
127 convention
128 \IR{global, aoutb extensions to} \c{GLOBAL}, \c{aoutb} extensions to
129 \IR{global, elf extensions to} \c{GLOBAL}, \c{elf} extensions to
130 \IR{global, rdf extensions to} \c{GLOBAL}, \c{rdf} extensions to
131 \IR{got} GOT
132 \IR{got relocations} \c{GOT} relocations
133 \IR{gotoff relocation} \c{GOTOFF} relocations
134 \IR{gotpc relocation} \c{GOTPC} relocations
135 \IR{intel number formats} Intel number formats
136 \IR{linux, elf} Linux, ELF
137 \IR{linux, a.out} Linux, \c{a.out}
138 \IR{linux, as86} Linux, \c{as86}
139 \IR{logical and} logical AND
140 \IR{logical or} logical OR
141 \IR{logical xor} logical XOR
142 \IR{masm} MASM
143 \IA{memory reference}{memory references}
144 \IR{minix} Minix
145 \IA{misc directory}{misc subdirectory}
146 \IR{misc subdirectory} \c{misc} subdirectory
147 \IR{microsoft omf} Microsoft OMF
148 \IR{mmx registers} MMX registers
149 \IA{modr/m}{modr/m byte}
150 \IR{modr/m byte} ModR/M byte
151 \IR{ms-dos} MS-DOS
152 \IR{ms-dos device drivers} MS-DOS device drivers
153 \IR{multipush} \c{multipush} macro
154 \IR{nan} NaN
155 \IR{nasm version} NASM version
156 \IR{netbsd} NetBSD
157 \IR{omf} OMF
158 \IR{openbsd} OpenBSD
159 \IR{operating system} operating system
160 \IR{os/2} OS/2
161 \IR{pascal calling convention}Pascal calling convention
162 \IR{passes} passes, assembly
163 \IR{perl} Perl
164 \IR{pic} PIC
165 \IR{pharlap} PharLap
166 \IR{plt} PLT
167 \IR{plt} \c{PLT} relocations
168 \IA{pre-defining macros}{pre-define}
169 \IA{preprocessor expressions}{preprocessor, expressions}
170 \IA{preprocessor loops}{preprocessor, loops}
171 \IA{preprocessor variables}{preprocessor, variables}
172 \IA{rdoff subdirectory}{rdoff}
173 \IR{rdoff} \c{rdoff} subdirectory
174 \IR{relocatable dynamic object file format} Relocatable Dynamic
175 Object File Format
176 \IR{relocations, pic-specific} relocations, PIC-specific
177 \IA{repeating}{repeating code}
178 \IR{section alignment, in elf} section alignment, in \c{elf}
179 \IR{section alignment, in bin} section alignment, in \c{bin}
180 \IR{section alignment, in obj} section alignment, in \c{obj}
181 \IR{section alignment, in win32} section alignment, in \c{win32}
182 \IR{section, elf extensions to} \c{SECTION}, \c{elf} extensions to
183 \IR{section, win32 extensions to} \c{SECTION}, \c{win32} extensions to
184 \IR{segment alignment, in bin} segment alignment, in \c{bin}
185 \IR{segment alignment, in obj} segment alignment, in \c{obj}
186 \IR{segment, obj extensions to} \c{SEGMENT}, \c{elf} extensions to
187 \IR{segment names, borland pascal} segment names, Borland Pascal
188 \IR{shift command} \c{shift} command
189 \IA{sib}{sib byte}
190 \IR{sib byte} SIB byte
191 \IR{solaris x86} Solaris x86
192 \IA{standard section names}{standardized section names}
193 \IR{symbols, exporting from dlls} symbols, exporting from DLLs
194 \IR{symbols, importing from dlls} symbols, importing from DLLs
195 \IR{test subdirectory} \c{test} subdirectory
196 \IR{tlink} \c{TLINK}
197 \IR{underscore, in c symbols} underscore, in C symbols
198 \IR{unix} Unix
199 \IA{sco unix}{unix, sco}
200 \IR{unix, sco} Unix, SCO
201 \IA{unix source archive}{unix, source archive}
202 \IR{unix, source archive} Unix, source archive
203 \IA{unix system v}{unix, system v}
204 \IR{unix, system v} Unix, System V
205 \IR{unixware} UnixWare
206 \IR{val} VAL
207 \IR{version number of nasm} version number of NASM
208 \IR{visual c++} Visual C++
209 \IR{www page} WWW page
210 \IR{win32} Win32
211 \IR{win32} Win64
212 \IR{windows} Windows
213 \IR{windows 95} Windows 95
214 \IR{windows nt} Windows NT
215 \# \IC{program entry point}{entry point, program}
216 \# \IC{program entry point}{start point, program}
217 \# \IC{MS-DOS device drivers}{device drivers, MS-DOS}
218 \# \IC{16-bit mode, versus 32-bit mode}{32-bit mode, versus 16-bit mode}
219 \# \IC{c symbol names}{symbol names, in C}
222 \C{intro} Introduction
224 \H{whatsnasm} What Is NASM?
226 The Netwide Assembler, NASM, is an 80x86 and x86-64 assembler designed for
227 portability and modularity. It supports a range of object file
228 formats, including Linux and \c{*BSD} \c{a.out}, \c{ELF}, \c{COFF}, \c{Mach-O},
229 Microsoft 16-bit \c{OBJ}, \c{Win32} and \c{Win64}. It will also output plain
230 binary files. Its syntax is designed to be simple and easy to understand, similar
231 to Intel's but less complex. It supports from the upto and including \c{Pentium},
232 \c{P6}, \c{MMX}, \c{3DNow!}, \c{SSE}, \c{SSE2}, \c{SSE3} and \c{x64} opcodes. NASM has
233 a strong support for macro conventions.
236 \S{yaasm} Why Yet Another Assembler?
238 The Netwide Assembler grew out of an idea on \i\c{comp.lang.asm.x86}
239 (or possibly \i\c{alt.lang.asm} - I forget which), which was
240 essentially that there didn't seem to be a good \e{free} x86-series
241 assembler around, and that maybe someone ought to write one.
243 \b \i\c{a86} is good, but not free, and in particular you don't get any
244 32-bit capability until you pay. It's DOS only, too.
246 \b \i\c{gas} is free, and ports over to DOS and Unix, but it's not
247 very good, since it's designed to be a back end to \i\c{gcc}, which
248 always feeds it correct code. So its error checking is minimal. Also,
249 its syntax is horrible, from the point of view of anyone trying to
250 actually \e{write} anything in it. Plus you can't write 16-bit code in
251 it (properly.)
253 \b \i\c{as86} is specific to Minix and Linux, and (my version at least)
254 doesn't seem to have much (or any) documentation.
256 \b \i\c{MASM} isn't very good, and it's (was) expensive, and it runs only under
257 DOS.
259 \b \i\c{TASM} is better, but still strives for MASM compatibility,
260 which means millions of directives and tons of red tape. And its syntax
261 is essentially MASM's, with the contradictions and quirks that
262 entails (although it sorts out some of those by means of Ideal mode.)
263 It's expensive too. And it's DOS-only.
265 So here, for your coding pleasure, is NASM. At present it's
266 still in prototype stage - we don't promise that it can outperform
267 any of these assemblers. But please, \e{please} send us bug reports,
268 fixes, helpful information, and anything else you can get your hands
269 on (and thanks to the many people who've done this already! You all
270 know who you are), and we'll improve it out of all recognition.
271 Again.
274 \S{legal} License Conditions
276 Please see the file \c{COPYING}, supplied as part of any NASM
277 distribution archive, for the \i{license} conditions under which you
278 may use NASM.  NASM is now under the so-called GNU Lesser General
279 Public License, LGPL.
282 \H{contact} Contact Information
284 The current version of NASM (since about 0.98.08) is maintained by a
285 team of developers, accessible through the \c{nasm-devel} mailing list
286 (see below for the link).
287 If you want to report a bug, please read \k{bugs} first.
289 NASM has a \i{WWW page} at
290 \W{http://nasm.sourceforge.net}\c{http://nasm.sourceforge.net}. If it's
291 not there, google for us!
294 The original authors are \i{e\-mail}able as
295 \W{mailto:jules@dsf.org.uk}\c{jules@dsf.org.uk} and
296 \W{mailto:anakin@pobox.com}\c{anakin@pobox.com}.
297 The latter is no longer involved in the development team.
299 \i{New releases} of NASM are uploaded to the official sites
300 \W{http://nasm.sourceforge.net}\c{http://nasm.sourceforge.net}
301 and to
302 \W{ftp://ftp.kernel.org/pub/software/devel/nasm/}\i\c{ftp.kernel.org}
304 \W{ftp://ibiblio.org/pub/Linux/devel/lang/assemblers/}\i\c{ibiblio.org}.
306 Announcements are posted to
307 \W{news:comp.lang.asm.x86}\i\c{comp.lang.asm.x86},
308 \W{news:alt.lang.asm}\i\c{alt.lang.asm} and
309 \W{news:comp.os.linux.announce}\i\c{comp.os.linux.announce}
311 If you want information about NASM beta releases, and the current
312 development status, please subscribe to the \i\c{nasm-devel} email list
313 by registering at
314 \W{http://sourceforge.net/projects/nasm}\c{http://sourceforge.net/projects/nasm}.
317 \H{install} Installation
319 \S{instdos} \i{Installing} NASM under MS-\i{DOS} or Windows
321 Once you've obtained the \i{DOS archive} for NASM, \i\c{nasmXXX.zip}
322 (where \c{XXX} denotes the version number of NASM contained in the
323 archive), unpack it into its own directory (for example \c{c:\\nasm}).
325 The archive will contain four executable files: the NASM executable
326 files \i\c{nasm.exe} and \i\c{nasmw.exe}, and the NDISASM executable
327 files \i\c{ndisasm.exe} and \i\c{ndisasmw.exe}. In each case, the
328 file whose name ends in \c{w} is a \I{Win32}\c{Win32} executable,
329 designed to run under \I{Windows 95}\c{Windows 95} or \I{Windows NT}
330 \c{Windows NT} Intel, and the other one is a 16-bit \I{DOS}\c{DOS}
331 executable.
333 The only file NASM needs to run is its own executable, so copy
334 (at least) one of \c{nasm.exe} and \c{nasmw.exe} to a directory on
335 your PATH, or alternatively edit \i\c{autoexec.bat} to add the
336 \c{nasm} directory to your \i\c{PATH}. (If you're only installing the
337 \c{Win32} version, you may wish to rename it to \c{nasm.exe}.)
339 That's it - NASM is installed. You don't need the nasm directory
340 to be present to run NASM (unless you've added it to your \c{PATH}),
341 so you can delete it if you need to save space; however, you may
342 want to keep the documentation or test programs.
344 If you've downloaded the \i{DOS source archive}, \i\c{nasmXXXs.zip},
345 the \c{nasm} directory will also contain the full NASM \i{source
346 code}, and a selection of \i{Makefiles} you can (hopefully) use to
347 rebuild your copy of NASM from scratch.
349 Note that the source files \c{insnsa.c}, \c{insnsd.c}, \c{insnsi.h}
350 and \c{insnsn.c} are automatically generated from the master
351 instruction table \c{insns.dat} by a Perl script; the file
352 \c{macros.c} is generated from \c{standard.mac} by another Perl
353 script. Although the NASM source distribution includes these generated
354 files, you will need to rebuild them (and hence, will need a Perl
355 interpreter) if you change insns.dat, standard.mac or the
356 documentation. It is possible future source distributions may not
357 include these files at all. Ports of \i{Perl} for a variety of
358 platforms, including DOS and Windows, are available from
359 \W{http://www.cpan.org/ports/}\i{www.cpan.org}.
362 \S{instdos} Installing NASM under \i{Unix}
364 Once you've obtained the \i{Unix source archive} for NASM,
365 \i\c{nasm-X.XX.tar.gz} (where \c{X.XX} denotes the version number of
366 NASM contained in the archive), unpack it into a directory such
367 as \c{/usr/local/src}. The archive, when unpacked, will create its
368 own subdirectory \c{nasm-X.XX}.
370 NASM is an \I{Autoconf}\I\c{configure}auto-configuring package: once
371 you've unpacked it, \c{cd} to the directory it's been unpacked into
372 and type \c{./configure}. This shell script will find the best C
373 compiler to use for building NASM and set up \i{Makefiles}
374 accordingly.
376 Once NASM has auto-configured, you can type \i\c{make} to build the
377 \c{nasm} and \c{ndisasm} binaries, and then \c{make install} to
378 install them in \c{/usr/local/bin} and install the \i{man pages}
379 \i\c{nasm.1} and \i\c{ndisasm.1} in \c{/usr/local/man/man1}.
380 Alternatively, you can give options such as \c{--prefix} to the
381 configure script (see the file \i\c{INSTALL} for more details), or
382 install the programs yourself.
384 NASM also comes with a set of utilities for handling the \c{RDOFF}
385 custom object-file format, which are in the \i\c{rdoff} subdirectory
386 of the NASM archive. You can build these with \c{make rdf} and
387 install them with \c{make rdf_install}, if you want them.
389 If NASM fails to auto-configure, you may still be able to make it
390 compile by using the fall-back Unix makefile \i\c{Makefile.unx}.
391 Copy or rename that file to \c{Makefile} and try typing \c{make}.
392 There is also a Makefile.unx file in the \c{rdoff} subdirectory.
395 \C{running} Running NASM
397 \H{syntax} NASM \i{Command-Line} Syntax
399 To assemble a file, you issue a command of the form
401 \c nasm -f <format> <filename> [-o <output>]
403 For example,
405 \c nasm -f elf myfile.asm
407 will assemble \c{myfile.asm} into an \c{ELF} object file \c{myfile.o}. And
409 \c nasm -f bin myfile.asm -o myfile.com
411 will assemble \c{myfile.asm} into a raw binary file \c{myfile.com}.
413 To produce a listing file, with the hex codes output from NASM
414 displayed on the left of the original sources, use the \c{-l} option
415 to give a listing file name, for example:
417 \c nasm -f coff myfile.asm -l myfile.lst
419 To get further usage instructions from NASM, try typing
421 \c nasm -h
423 As \c{-hf}, this will also list the available output file formats, and what they
424 are.
426 If you use Linux but aren't sure whether your system is \c{a.out}
427 or \c{ELF}, type
429 \c file nasm
431 (in the directory in which you put the NASM binary when you
432 installed it). If it says something like
434 \c nasm: ELF 32-bit LSB executable i386 (386 and up) Version 1
436 then your system is \c{ELF}, and you should use the option \c{-f elf}
437 when you want NASM to produce Linux object files. If it says
439 \c nasm: Linux/i386 demand-paged executable (QMAGIC)
441 or something similar, your system is \c{a.out}, and you should use
442 \c{-f aout} instead (Linux \c{a.out} systems have long been obsolete,
443 and are rare these days.)
445 Like Unix compilers and assemblers, NASM is silent unless it
446 goes wrong: you won't see any output at all, unless it gives error
447 messages.
450 \S{opt-o} The \i\c{-o} Option: Specifying the Output File Name
452 NASM will normally choose the name of your output file for you;
453 precisely how it does this is dependent on the object file format.
454 For Microsoft object file formats (\i\c{obj} and \i\c{win32}), it
455 will remove the \c{.asm} \i{extension} (or whatever extension you
456 like to use - NASM doesn't care) from your source file name and
457 substitute \c{.obj}. For Unix object file formats (\i\c{aout},
458 \i\c{coff}, \i\c{elf}, \i\c{macho} and \i\c{as86}) it will substitute \c{.o}. For
459 \i\c{rdf}, it will use \c{.rdf}, and for the \i\c{bin} format it
460 will simply remove the extension, so that \c{myfile.asm} produces
461 the output file \c{myfile}.
463 If the output file already exists, NASM will overwrite it, unless it
464 has the same name as the input file, in which case it will give a
465 warning and use \i\c{nasm.out} as the output file name instead.
467 For situations in which this behaviour is unacceptable, NASM
468 provides the \c{-o} command-line option, which allows you to specify
469 your desired output file name. You invoke \c{-o} by following it
470 with the name you wish for the output file, either with or without
471 an intervening space. For example:
473 \c nasm -f bin program.asm -o program.com
474 \c nasm -f bin driver.asm -odriver.sys
476 Note that this is a small o, and is different from a capital O , which
477 is used to specify the number of optimisation passes required. See \k{opt-On}.
480 \S{opt-f} The \i\c{-f} Option: Specifying the \i{Output File Format}
482 If you do not supply the \c{-f} option to NASM, it will choose an
483 output file format for you itself. In the distribution versions of
484 NASM, the default is always \i\c{bin}; if you've compiled your own
485 copy of NASM, you can redefine \i\c{OF_DEFAULT} at compile time and
486 choose what you want the default to be.
488 Like \c{-o}, the intervening space between \c{-f} and the output
489 file format is optional; so \c{-f elf} and \c{-felf} are both valid.
491 A complete list of the available output file formats can be given by
492 issuing the command \i\c{nasm -hf}.
495 \S{opt-l} The \i\c{-l} Option: Generating a \i{Listing File}
497 If you supply the \c{-l} option to NASM, followed (with the usual
498 optional space) by a file name, NASM will generate a
499 \i{source-listing file} for you, in which addresses and generated
500 code are listed on the left, and the actual source code, with
501 expansions of multi-line macros (except those which specifically
502 request no expansion in source listings: see \k{nolist}) on the
503 right. For example:
505 \c nasm -f elf myfile.asm -l myfile.lst
507 If a list file is selected, you may turn off listing for a 
508 section of your source with \c{[list -]}, and turn it back on
509 with \c{[list +]}, (the default, obviously). There is no "user 
510 form" (without the brackets). This can be used to list only 
511 sections of interest, avoiding excessively long listings.
514 \S{opt-M} The \i\c{-M} Option: Generate \i{Makefile Dependencies}.
516 This option can be used to generate makefile dependencies on stdout.
517 This can be redirected to a file for further processing. For example:
519 \c NASM -M myfile.asm > myfile.dep
522 \S{opt-F} The \i\c{-F} Option: Selecting a \i{Debug Information Format}
524 This option is used to select the format of the debug information emitted 
525 into the output file, to be used by a debugger (or \e{will} be). Use
526 of this switch does \e{not} enable output of the selected debug info format.
527 Use \c{-g}, see \k{opt-g}, to enable output.
529 A complete list of the available debug file formats for an output format
530 can be seen by issuing the command \i\c{nasm -f <format> -y}. (only 
531 "borland" in "-f obj", as of 0.98.35, but "watch this space") 
532 See: \k{opt-y}.
534 This should not be confused with the "-f dbg" output format option which 
535 is not built into NASM by default. For information on how
536 to enable it when building from the sources, see \k{dbgfmt}
539 \S{opt-g} The \i\c{-g} Option: Enabling \i{Debug Information}.
541 This option can be used to generate debugging information in the specified
542 format. See: \k{opt-F}. Using \c{-g} without \c{-F} results in emitting 
543 debug info in the default format, if any, for the selected output format.
544 If no debug information is currently implemented in the selected output 
545 format, \c{-g} is \e{silently ignored}.
548 \S{opt-X} The \i\c{-X} Option: Selecting an \i{Error Reporting Format}
550 This option can be used to select an error reporting format for any 
551 error messages that might be produced by NASM.
553 Currently, two error reporting formats may be selected.  They are
554 the \c{-Xvc} option and the \c{-Xgnu} option.  The GNU format is 
555 the default and looks like this:
557 \c filename.asm:65: error: specific error message 
559 where \c{filename.asm} is the name of the source file in which the
560 error was detected, \c{65} is the source file line number on which 
561 the error was detected, \c{error} is the severity of the error (this
562 could be \c{warning}), and \c{specific error message} is a more
563 detailed text message which should help pinpoint the exact problem.
565 The other format, specified by \c{-Xvc} is the style used by Microsoft
566 Visual C++ and some other programs.  It looks like this:
568 \c filename.asm(65) : error: specific error message
570 where the only difference is that the line number is in parentheses
571 instead of being delimited by colons.  
573 See also the \c{Visual C++} output format, \k{win32fmt}.
575 \S{opt-E} The \i\c{-E} Option: Send Errors to a File
577 Under \I{DOS}\c{MS-DOS} it can be difficult (though there are ways) to
578 redirect the standard-error output of a program to a file. Since
579 NASM usually produces its warning and \i{error messages} on
580 \i\c{stderr}, this can make it hard to capture the errors if (for
581 example) you want to load them into an editor.
583 NASM therefore provides the \c{-E} option, taking a filename argument
584 which causes errors to be sent to the specified files rather than
585 standard error. Therefore you can \I{redirecting errors}redirect
586 the errors into a file by typing
588 \c nasm -E myfile.err -f obj myfile.asm
591 \S{opt-s} The \i\c{-s} Option: Send Errors to \i\c{stdout}
593 The \c{-s} option redirects \i{error messages} to \c{stdout} rather
594 than \c{stderr}, so it can be redirected under \I{DOS}\c{MS-DOS}. To
595 assemble the file \c{myfile.asm} and pipe its output to the \c{more}
596 program, you can type:
598 \c nasm -s -f obj myfile.asm | more
600 See also the \c{-E} option, \k{opt-E}.
603 \S{opt-i} The \i\c{-i}\I\c{-I} Option: Include File Search Directories
605 When NASM sees the \i\c{%include} or \i\c{incbin} directive in 
606 a source file (see \k{include} or \k{incbin}), 
607 it will search for the given file not only in the
608 current directory, but also in any directories specified on the
609 command line by the use of the \c{-i} option. Therefore you can
610 include files from a \i{macro library}, for example, by typing
612 \c nasm -ic:\macrolib\ -f obj myfile.asm
614 (As usual, a space between \c{-i} and the path name is allowed, and
615 optional).
617 NASM, in the interests of complete source-code portability, does not
618 understand the file naming conventions of the OS it is running on;
619 the string you provide as an argument to the \c{-i} option will be
620 prepended exactly as written to the name of the include file.
621 Therefore the trailing backslash in the above example is necessary.
622 Under Unix, a trailing forward slash is similarly necessary.
624 (You can use this to your advantage, if you're really \i{perverse},
625 by noting that the option \c{-ifoo} will cause \c{%include "bar.i"}
626 to search for the file \c{foobar.i}...)
628 If you want to define a \e{standard} \i{include search path},
629 similar to \c{/usr/include} on Unix systems, you should place one or
630 more \c{-i} directives in the \c{NASMENV} environment variable (see
631 \k{nasmenv}).
633 For Makefile compatibility with many C compilers, this option can also
634 be specified as \c{-I}.
637 \S{opt-p} The \i\c{-p}\I\c{-P} Option: \I{pre-including files}Pre-Include a File
639 \I\c{%include}NASM allows you to specify files to be
640 \e{pre-included} into your source file, by the use of the \c{-p}
641 option. So running
643 \c nasm myfile.asm -p myinc.inc
645 is equivalent to running \c{nasm myfile.asm} and placing the
646 directive \c{%include "myinc.inc"} at the start of the file.
648 For consistency with the \c{-I}, \c{-D} and \c{-U} options, this
649 option can also be specified as \c{-P}.
652 \S{opt-d} The \i\c{-d}\I\c{-D} Option: \I{pre-defining macros}Pre-Define a Macro
654 \I\c{%define}Just as the \c{-p} option gives an alternative to placing
655 \c{%include} directives at the start of a source file, the \c{-d}
656 option gives an alternative to placing a \c{%define} directive. You
657 could code
659 \c nasm myfile.asm -dFOO=100
661 as an alternative to placing the directive
663 \c %define FOO 100
665 at the start of the file. You can miss off the macro value, as well:
666 the option \c{-dFOO} is equivalent to coding \c{%define FOO}. This
667 form of the directive may be useful for selecting \i{assembly-time
668 options} which are then tested using \c{%ifdef}, for example
669 \c{-dDEBUG}.
671 For Makefile compatibility with many C compilers, this option can also
672 be specified as \c{-D}.
675 \S{opt-u} The \i\c{-u}\I\c{-U} Option: \I{Undefining macros}Undefine a Macro
677 \I\c{%undef}The \c{-u} option undefines a macro that would otherwise
678 have been pre-defined, either automatically or by a \c{-p} or \c{-d}
679 option specified earlier on the command lines.
681 For example, the following command line:
683 \c nasm myfile.asm -dFOO=100 -uFOO
685 would result in \c{FOO} \e{not} being a predefined macro in the
686 program. This is useful to override options specified at a different
687 point in a Makefile.
689 For Makefile compatibility with many C compilers, this option can also
690 be specified as \c{-U}.
693 \S{opt-e} The \i\c{-e} Option: Preprocess Only
695 NASM allows the \i{preprocessor} to be run on its own, up to a
696 point. Using the \c{-e} option (which requires no arguments) will
697 cause NASM to preprocess its input file, expand all the macro
698 references, remove all the comments and preprocessor directives, and
699 print the resulting file on standard output (or save it to a file,
700 if the \c{-o} option is also used).
702 This option cannot be applied to programs which require the
703 preprocessor to evaluate \I{preprocessor expressions}\i{expressions}
704 which depend on the values of symbols: so code such as
706 \c %assign tablesize ($-tablestart)
708 will cause an error in \i{preprocess-only mode}.
711 \S{opt-a} The \i\c{-a} Option: Don't Preprocess At All
713 If NASM is being used as the back end to a compiler, it might be
714 desirable to \I{suppressing preprocessing}suppress preprocessing
715 completely and assume the compiler has already done it, to save time
716 and increase compilation speeds. The \c{-a} option, requiring no
717 argument, instructs NASM to replace its powerful \i{preprocessor}
718 with a \i{stub preprocessor} which does nothing.
721 \S{opt-On} The \i\c{-On} Option: Specifying \i{Multipass Optimization}.
723 NASM defaults to being a two pass assembler. This means that if you
724 have a complex source file which needs more than 2 passes to assemble
725 optimally, you have to enable extra passes.
727 Using the \c{-O} option, you can tell NASM to carry out multiple passes.
728 The syntax is:
730 \b \c{-O0} strict two-pass assembly, JMP and Jcc are handled more
731         like v0.98, except that backward JMPs are short, if possible.
732         Immediate operands take their long forms if a short form is
733         not specified.
735 \b \c{-O1} strict two-pass assembly, but forward branches are assembled
736         with code guaranteed to reach; may produce larger code than
737         -O0, but will produce successful assembly more often if
738         branch offset sizes are not specified.
739         Additionally, immediate operands which will fit in a signed byte
740         are optimized, unless the long form is specified.
742 \b \c{-On} multi-pass optimization, minimize branch offsets; also will
743         minimize signed immediate bytes, overriding size specification
744         unless the \c{strict} keyword has been used (see \k{strict}).
745         The number specifies the maximum number of passes.  The more
746         passes, the better the code, but the slower is the assembly.
748 Note that this is a capital O, and is different from a small o, which
749 is used to specify the output format. See \k{opt-o}.
752 \S{opt-t} The \i\c{-t} option: Enable TASM Compatibility Mode
754 NASM includes a limited form of compatibility with Borland's \i\c{TASM}.
755 When NASM's \c{-t} option is used, the following changes are made:
757 \b local labels may be prefixed with \c{@@} instead of \c{.}
759 \b TASM-style response files beginning with \c{@} may be specified on
760 the command line. This is different from the \c{-@resp} style that NASM
761 natively supports.
763 \b size override is supported within brackets. In TASM compatible mode,
764 a size override inside square brackets changes the size of the operand,
765 and not the address type of the operand as it does in NASM syntax. E.g.
766 \c{mov eax,[DWORD val]} is valid syntax in TASM compatibility mode.
767 Note that you lose the ability to override the default address type for
768 the instruction.
770 \b \c{%arg} preprocessor directive is supported which is similar to
771 TASM's \c{ARG} directive.
773 \b \c{%local} preprocessor directive
775 \b \c{%stacksize} preprocessor directive
777 \b unprefixed forms of some directives supported (\c{arg}, \c{elif},
778 \c{else}, \c{endif}, \c{if}, \c{ifdef}, \c{ifdifi}, \c{ifndef},
779 \c{include}, \c{local})
781 \b more...
783 For more information on the directives, see the section on TASM
784 Compatiblity preprocessor directives in \k{tasmcompat}.
787 \S{opt-w} The \i\c{-w} Option: Enable or Disable Assembly \i{Warnings}
789 NASM can observe many conditions during the course of assembly which
790 are worth mentioning to the user, but not a sufficiently severe
791 error to justify NASM refusing to generate an output file. These
792 conditions are reported like errors, but come up with the word
793 `warning' before the message. Warnings do not prevent NASM from
794 generating an output file and returning a success status to the
795 operating system.
797 Some conditions are even less severe than that: they are only
798 sometimes worth mentioning to the user. Therefore NASM supports the
799 \c{-w} command-line option, which enables or disables certain
800 classes of assembly warning. Such warning classes are described by a
801 name, for example \c{orphan-labels}; you can enable warnings of
802 this class by the command-line option \c{-w+orphan-labels} and
803 disable it by \c{-w-orphan-labels}.
805 The \i{suppressible warning} classes are:
807 \b \i\c{macro-params} covers warnings about \i{multi-line macros}
808 being invoked with the wrong number of parameters. This warning
809 class is enabled by default; see \k{mlmacover} for an example of why
810 you might want to disable it.
812 \b \i\c{macro-selfref} warns if a macro references itself. This 
813 warning class is enabled by default.
815 \b \i\c{orphan-labels} covers warnings about source lines which
816 contain no instruction but define a label without a trailing colon.
817 NASM does not warn about this somewhat obscure condition by default;
818 see \k{syntax} for an example of why you might want it to.
820 \b \i\c{number-overflow} covers warnings about numeric constants which
821 don't fit in 32 bits (for example, it's easy to type one too many Fs
822 and produce \c{0x7ffffffff} by mistake). This warning class is
823 enabled by default.
825 \b \i\c{gnu-elf-extensions} warns if 8-bit or 16-bit relocations 
826 are used in \c{-f elf} format. The GNU extensions allow this. 
827 This warning class is enabled by default.
829 \b In addition, warning classes may be enabled or disabled across 
830 sections of source code with \i\c{[warning +warning-name]} or 
831 \i\c{[warning -warning-name]}. No "user form" (without the 
832 brackets) exists. 
835 \S{opt-v} The \i\c{-v} Option: Display \i{Version} Info
837 Typing \c{NASM -v} will display the version of NASM which you are using,
838 and the date on which it was compiled. This replaces the deprecated 
839 \c{-r}.
841 You will need the version number if you report a bug.
843 \S{opt-y} The \i\c{-y} Option: Display Available Debug Info Formats
845 Typing \c{nasm -f <option> -y} will display a list of the available 
846 debug info formats for the given output format. The default format 
847 is indicated by an asterisk. E.g. \c{nasm -f obj -y} yields \c{* borland}.
848 (as of 0.98.35, the \e{only} debug info format implemented).
851 \S{opt-pfix} The \i\c{--prefix} and \i\c{--postfix} Options.
853 The \c{--prefix} and \c{--postfix} options prepend or append 
854 (respectively) the given argument to all \c{global} or
855 \c{extern} variables. E.g. \c{--prefix_} will prepend the 
856 underscore to all global and external variables, as C sometimes 
857 (but not always) likes it.
860 \S{nasmenv} The \c{NASMENV} \i{Environment} Variable
862 If you define an environment variable called \c{NASMENV}, the program
863 will interpret it as a list of extra command-line options, which are
864 processed before the real command line. You can use this to define
865 standard search directories for include files, by putting \c{-i}
866 options in the \c{NASMENV} variable.
868 The value of the variable is split up at white space, so that the
869 value \c{-s -ic:\\nasmlib} will be treated as two separate options.
870 However, that means that the value \c{-dNAME="my name"} won't do
871 what you might want, because it will be split at the space and the
872 NASM command-line processing will get confused by the two
873 nonsensical words \c{-dNAME="my} and \c{name"}.
875 To get round this, NASM provides a feature whereby, if you begin the
876 \c{NASMENV} environment variable with some character that isn't a minus
877 sign, then NASM will treat this character as the \i{separator
878 character} for options. So setting the \c{NASMENV} variable to the
879 value \c{!-s!-ic:\\nasmlib} is equivalent to setting it to \c{-s
880 -ic:\\nasmlib}, but \c{!-dNAME="my name"} will work.
882 This environment variable was previously called \c{NASM}. This was
883 changed with version 0.98.31.
886 \H{qstart} \i{Quick Start} for \i{MASM} Users
888 If you're used to writing programs with MASM, or with \i{TASM} in
889 MASM-compatible (non-Ideal) mode, or with \i\c{a86}, this section
890 attempts to outline the major differences between MASM's syntax and
891 NASM's. If you're not already used to MASM, it's probably worth
892 skipping this section.
895 \S{qscs} NASM Is \I{case sensitivity}Case-Sensitive
897 One simple difference is that NASM is case-sensitive. It makes a
898 difference whether you call your label \c{foo}, \c{Foo} or \c{FOO}.
899 If you're assembling to \c{DOS} or \c{OS/2} \c{.OBJ} files, you can
900 invoke the \i\c{UPPERCASE} directive (documented in \k{objfmt}) to
901 ensure that all symbols exported to other code modules are forced
902 to be upper case; but even then, \e{within} a single module, NASM
903 will distinguish between labels differing only in case.
906 \S{qsbrackets} NASM Requires \i{Square Brackets} For \i{Memory References}
908 NASM was designed with simplicity of syntax in mind. One of the
909 \i{design goals} of NASM is that it should be possible, as far as is
910 practical, for the user to look at a single line of NASM code
911 and tell what opcode is generated by it. You can't do this in MASM:
912 if you declare, for example,
914 \c foo     equ     1
915 \c bar     dw      2
917 then the two lines of code
919 \c         mov     ax,foo
920 \c         mov     ax,bar
922 generate completely different opcodes, despite having
923 identical-looking syntaxes.
925 NASM avoids this undesirable situation by having a much simpler
926 syntax for memory references. The rule is simply that any access to
927 the \e{contents} of a memory location requires square brackets
928 around the address, and any access to the \e{address} of a variable
929 doesn't. So an instruction of the form \c{mov ax,foo} will
930 \e{always} refer to a compile-time constant, whether it's an \c{EQU}
931 or the address of a variable; and to access the \e{contents} of the
932 variable \c{bar}, you must code \c{mov ax,[bar]}.
934 This also means that NASM has no need for MASM's \i\c{OFFSET}
935 keyword, since the MASM code \c{mov ax,offset bar} means exactly the
936 same thing as NASM's \c{mov ax,bar}. If you're trying to get
937 large amounts of MASM code to assemble sensibly under NASM, you
938 can always code \c{%idefine offset} to make the preprocessor treat
939 the \c{OFFSET} keyword as a no-op.
941 This issue is even more confusing in \i\c{a86}, where declaring a
942 label with a trailing colon defines it to be a `label' as opposed to
943 a `variable' and causes \c{a86} to adopt NASM-style semantics; so in
944 \c{a86}, \c{mov ax,var} has different behaviour depending on whether
945 \c{var} was declared as \c{var: dw 0} (a label) or \c{var dw 0} (a
946 word-size variable). NASM is very simple by comparison:
947 \e{everything} is a label.
949 NASM, in the interests of simplicity, also does not support the
950 \i{hybrid syntaxes} supported by MASM and its clones, such as
951 \c{mov ax,table[bx]}, where a memory reference is denoted by one
952 portion outside square brackets and another portion inside. The
953 correct syntax for the above is \c{mov ax,[table+bx]}. Likewise,
954 \c{mov ax,es:[di]} is wrong and \c{mov ax,[es:di]} is right.
957 \S{qstypes} NASM Doesn't Store \i{Variable Types}
959 NASM, by design, chooses not to remember the types of variables you
960 declare. Whereas MASM will remember, on seeing \c{var dw 0}, that
961 you declared \c{var} as a word-size variable, and will then be able
962 to fill in the \i{ambiguity} in the size of the instruction \c{mov
963 var,2}, NASM will deliberately remember nothing about the symbol
964 \c{var} except where it begins, and so you must explicitly code
965 \c{mov word [var],2}.
967 For this reason, NASM doesn't support the \c{LODS}, \c{MOVS},
968 \c{STOS}, \c{SCAS}, \c{CMPS}, \c{INS}, or \c{OUTS} instructions,
969 but only supports the forms such as \c{LODSB}, \c{MOVSW}, and
970 \c{SCASD}, which explicitly specify the size of the components of
971 the strings being manipulated.
974 \S{qsassume} NASM Doesn't \i\c{ASSUME}
976 As part of NASM's drive for simplicity, it also does not support the
977 \c{ASSUME} directive. NASM will not keep track of what values you
978 choose to put in your segment registers, and will never
979 \e{automatically} generate a \i{segment override} prefix.
982 \S{qsmodel} NASM Doesn't Support \i{Memory Models}
984 NASM also does not have any directives to support different 16-bit
985 memory models. The programmer has to keep track of which functions
986 are supposed to be called with a \i{far call} and which with a
987 \i{near call}, and is responsible for putting the correct form of
988 \c{RET} instruction (\c{RETN} or \c{RETF}; NASM accepts \c{RET}
989 itself as an alternate form for \c{RETN}); in addition, the
990 programmer is responsible for coding CALL FAR instructions where
991 necessary when calling \e{external} functions, and must also keep
992 track of which external variable definitions are far and which are
993 near.
996 \S{qsfpu} \i{Floating-Point} Differences
998 NASM uses different names to refer to floating-point registers from
999 MASM: where MASM would call them \c{ST(0)}, \c{ST(1)} and so on, and
1000 \i\c{a86} would call them simply \c{0}, \c{1} and so on, NASM
1001 chooses to call them \c{st0}, \c{st1} etc.
1003 As of version 0.96, NASM now treats the instructions with
1004 \i{`nowait'} forms in the same way as MASM-compatible assemblers.
1005 The idiosyncratic treatment employed by 0.95 and earlier was based
1006 on a misunderstanding by the authors.
1009 \S{qsother} Other Differences
1011 For historical reasons, NASM uses the keyword \i\c{TWORD} where MASM
1012 and compatible assemblers use \i\c{TBYTE}.
1014 NASM does not declare \i{uninitialized storage} in the same way as
1015 MASM: where a MASM programmer might use \c{stack db 64 dup (?)},
1016 NASM requires \c{stack resb 64}, intended to be read as `reserve 64
1017 bytes'. For a limited amount of compatibility, since NASM treats
1018 \c{?} as a valid character in symbol names, you can code \c{? equ 0}
1019 and then writing \c{dw ?} will at least do something vaguely useful.
1020 \I\c{RESB}\i\c{DUP} is still not a supported syntax, however.
1022 In addition to all of this, macros and directives work completely
1023 differently to MASM. See \k{preproc} and \k{directive} for further
1024 details.
1027 \C{lang} The NASM Language
1029 \H{syntax} Layout of a NASM Source Line
1031 Like most assemblers, each NASM source line contains (unless it
1032 is a macro, a preprocessor directive or an assembler directive: see
1033 \k{preproc} and \k{directive}) some combination of the four fields
1035 \c label:    instruction operands        ; comment
1037 As usual, most of these fields are optional; the presence or absence
1038 of any combination of a label, an instruction and a comment is allowed.
1039 Of course, the operand field is either required or forbidden by the
1040 presence and nature of the instruction field.
1042 NASM uses backslash (\\) as the line continuation character; if a line
1043 ends with backslash, the next line is considered to be a part of the
1044 backslash-ended line.
1046 NASM places no restrictions on white space within a line: labels may
1047 have white space before them, or instructions may have no space
1048 before them, or anything. The \i{colon} after a label is also
1049 optional. (Note that this means that if you intend to code \c{lodsb}
1050 alone on a line, and type \c{lodab} by accident, then that's still a
1051 valid source line which does nothing but define a label. Running
1052 NASM with the command-line option
1053 \I{orphan-labels}\c{-w+orphan-labels} will cause it to warn you if
1054 you define a label alone on a line without a \i{trailing colon}.)
1056 \i{Valid characters} in labels are letters, numbers, \c{_}, \c{$},
1057 \c{#}, \c{@}, \c{~}, \c{.}, and \c{?}. The only characters which may
1058 be used as the \e{first} character of an identifier are letters,
1059 \c{.} (with special meaning: see \k{locallab}), \c{_} and \c{?}.
1060 An identifier may also be prefixed with a \I{$, prefix}\c{$} to
1061 indicate that it is intended to be read as an identifier and not a
1062 reserved word; thus, if some other module you are linking with
1063 defines a symbol called \c{eax}, you can refer to \c{$eax} in NASM
1064 code to distinguish the symbol from the register. Maximum length of 
1065 an identifier is 4095 characters.
1067 The instruction field may contain any machine instruction: Pentium
1068 and P6 instructions, FPU instructions, MMX instructions and even
1069 undocumented instructions are all supported. The instruction may be
1070 prefixed by \c{LOCK}, \c{REP}, \c{REPE}/\c{REPZ} or
1071 \c{REPNE}/\c{REPNZ}, in the usual way. Explicit \I{address-size
1072 prefixes}address-size and \i{operand-size prefixes} \c{A16},
1073 \c{A32}, \c{O16} and \c{O32} are provided - one example of their use
1074 is given in \k{mixsize}. You can also use the name of a \I{segment
1075 override}segment register as an instruction prefix: coding
1076 \c{es mov [bx],ax} is equivalent to coding \c{mov [es:bx],ax}. We
1077 recommend the latter syntax, since it is consistent with other
1078 syntactic features of the language, but for instructions such as
1079 \c{LODSB}, which has no operands and yet can require a segment
1080 override, there is no clean syntactic way to proceed apart from
1081 \c{es lodsb}.
1083 An instruction is not required to use a prefix: prefixes such as
1084 \c{CS}, \c{A32}, \c{LOCK} or \c{REPE} can appear on a line by
1085 themselves, and NASM will just generate the prefix bytes.
1087 In addition to actual machine instructions, NASM also supports a
1088 number of pseudo-instructions, described in \k{pseudop}.
1090 Instruction \i{operands} may take a number of forms: they can be
1091 registers, described simply by the register name (e.g. \c{ax},
1092 \c{bp}, \c{ebx}, \c{cr0}: NASM does not use the \c{gas}-style
1093 syntax in which register names must be prefixed by a \c{%} sign), or
1094 they can be \i{effective addresses} (see \k{effaddr}), constants
1095 (\k{const}) or expressions (\k{expr}).
1097 For x87 \i{floating-point} instructions, NASM accepts a wide range of
1098 syntaxes: you can use two-operand forms like MASM supports, or you
1099 can use NASM's native single-operand forms in most cases.
1100 \# Details of
1101 \# all forms of each supported instruction are given in
1102 \# \k{iref}.
1103 For example, you can code:
1105 \c         fadd    st1             ; this sets st0 := st0 + st1
1106 \c         fadd    st0,st1         ; so does this
1108 \c         fadd    st1,st0         ; this sets st1 := st1 + st0
1109 \c         fadd    to st1          ; so does this
1111 Almost any x87 floating-point instruction that references memory must
1112 use one of the prefixes \i\c{DWORD}, \i\c{QWORD} or \i\c{TWORD} to
1113 indicate what size of \i{memory operand} it refers to.
1116 \H{pseudop} \i{Pseudo-Instructions}
1118 Pseudo-instructions are things which, though not real x86 machine
1119 instructions, are used in the instruction field anyway because that's
1120 the most convenient place to put them. The current pseudo-instructions
1121 are \i\c{DB}, \i\c{DW}, \i\c{DD}, \i\c{DQ}, \i\c{DT} and \i\c{DO};
1122 their \i{uninitialized} counterparts \i\c{RESB}, \i\c{RESW},
1123 \i\c{RESD}, \i\c{RESQ}, \i\c{REST} and \i\c{RESO}; the \i\c{INCBIN}
1124 command, the \i\c{EQU} command, and the \i\c{TIMES} prefix.
1127 \S{db} \c{DB} and friends: Declaring initialized Data
1129 \i\c{DB}, \i\c{DW}, \i\c{DD}, \i\c{DQ}, \i\c{DT} and \i\c{DO} are
1130 used, much as in MASM, to declare initialized data in the output
1131 file. They can be invoked in a wide range of ways:
1132 \I{floating-point}\I{character constant}\I{string constant}
1134 \c       db    0x55                ; just the byte 0x55
1135 \c       db    0x55,0x56,0x57      ; three bytes in succession
1136 \c       db    'a',0x55            ; character constants are OK
1137 \c       db    'hello',13,10,'$'   ; so are string constants
1138 \c       dw    0x1234              ; 0x34 0x12
1139 \c       dw    'a'                 ; 0x61 0x00 (it's just a number)
1140 \c       dw    'ab'                ; 0x61 0x62 (character constant)
1141 \c       dw    'abc'               ; 0x61 0x62 0x63 0x00 (string)
1142 \c       dd    0x12345678          ; 0x78 0x56 0x34 0x12
1143 \c       dd    1.234567e20         ; floating-point constant
1144 \c       dq    0x123456789abcdef0  ; eight byte constant
1145 \c       dq    1.234567e20         ; double-precision float
1146 \c       dt    1.234567e20         ; extended-precision float
1148 \c{DT} and \c{DO} do not accept \i{numeric constants} as operands.
1149 \c{DB} does not accept \i{floating-point} numbers as operands.
1152 \S{resb} \c{RESB} and friends: Declaring \i{Uninitialized} Data
1154 \i\c{RESB}, \i\c{RESW}, \i\c{RESD}, \i\c{RESQ}, \i\c{REST} and
1155 \i\c{RESO} are designed to be used in the BSS section of a module:
1156 they declare \e{uninitialized} storage space. Each takes a single
1157 operand, which is the number of bytes, words, doublewords or whatever
1158 to reserve.  As stated in \k{qsother}, NASM does not support the
1159 MASM/TASM syntax of reserving uninitialized space by writing
1160 \I\c{?}\c{DW ?} or similar things: this is what it does instead. The
1161 operand to a \c{RESB}-type pseudo-instruction is a \i\e{critical
1162 expression}: see \k{crit}.
1164 For example:
1166 \c buffer:         resb    64              ; reserve 64 bytes
1167 \c wordvar:        resw    1               ; reserve a word
1168 \c realarray       resq    10              ; array of ten reals
1171 \S{incbin} \i\c{INCBIN}: Including External \i{Binary Files}
1173 \c{INCBIN} is borrowed from the old Amiga assembler \i{DevPac}: it
1174 includes a binary file verbatim into the output file. This can be
1175 handy for (for example) including \i{graphics} and \i{sound} data
1176 directly into a game executable file. It can be called in one of
1177 these three ways:
1179 \c     incbin  "file.dat"             ; include the whole file
1180 \c     incbin  "file.dat",1024        ; skip the first 1024 bytes
1181 \c     incbin  "file.dat",1024,512    ; skip the first 1024, and
1182 \c                                    ; actually include at most 512
1185 \S{equ} \i\c{EQU}: Defining Constants
1187 \c{EQU} defines a symbol to a given constant value: when \c{EQU} is
1188 used, the source line must contain a label. The action of \c{EQU} is
1189 to define the given label name to the value of its (only) operand.
1190 This definition is absolute, and cannot change later. So, for
1191 example,
1193 \c message         db      'hello, world'
1194 \c msglen          equ     $-message
1196 defines \c{msglen} to be the constant 12. \c{msglen} may not then be
1197 redefined later. This is not a \i{preprocessor} definition either:
1198 the value of \c{msglen} is evaluated \e{once}, using the value of
1199 \c{$} (see \k{expr} for an explanation of \c{$}) at the point of
1200 definition, rather than being evaluated wherever it is referenced
1201 and using the value of \c{$} at the point of reference. Note that
1202 the operand to an \c{EQU} is also a \i{critical expression}
1203 (\k{crit}).
1206 \S{times} \i\c{TIMES}: \i{Repeating} Instructions or Data
1208 The \c{TIMES} prefix causes the instruction to be assembled multiple
1209 times. This is partly present as NASM's equivalent of the \i\c{DUP}
1210 syntax supported by \i{MASM}-compatible assemblers, in that you can
1211 code
1213 \c zerobuf:        times 64 db 0
1215 or similar things; but \c{TIMES} is more versatile than that. The
1216 argument to \c{TIMES} is not just a numeric constant, but a numeric
1217 \e{expression}, so you can do things like
1219 \c buffer: db      'hello, world'
1220 \c         times 64-$+buffer db ' '
1222 which will store exactly enough spaces to make the total length of
1223 \c{buffer} up to 64. Finally, \c{TIMES} can be applied to ordinary
1224 instructions, so you can code trivial \i{unrolled loops} in it:
1226 \c         times 100 movsb
1228 Note that there is no effective difference between \c{times 100 resb
1229 1} and \c{resb 100}, except that the latter will be assembled about
1230 100 times faster due to the internal structure of the assembler.
1232 The operand to \c{TIMES}, like that of \c{EQU} and those of \c{RESB}
1233 and friends, is a critical expression (\k{crit}).
1235 Note also that \c{TIMES} can't be applied to \i{macros}: the reason
1236 for this is that \c{TIMES} is processed after the macro phase, which
1237 allows the argument to \c{TIMES} to contain expressions such as
1238 \c{64-$+buffer} as above. To repeat more than one line of code, or a
1239 complex macro, use the preprocessor \i\c{%rep} directive.
1242 \H{effaddr} Effective Addresses
1244 An \i{effective address} is any operand to an instruction which
1245 \I{memory reference}references memory. Effective addresses, in NASM,
1246 have a very simple syntax: they consist of an expression evaluating
1247 to the desired address, enclosed in \i{square brackets}. For
1248 example:
1250 \c wordvar dw      123
1251 \c         mov     ax,[wordvar]
1252 \c         mov     ax,[wordvar+1]
1253 \c         mov     ax,[es:wordvar+bx]
1255 Anything not conforming to this simple system is not a valid memory
1256 reference in NASM, for example \c{es:wordvar[bx]}.
1258 More complicated effective addresses, such as those involving more
1259 than one register, work in exactly the same way:
1261 \c         mov     eax,[ebx*2+ecx+offset]
1262 \c         mov     ax,[bp+di+8]
1264 NASM is capable of doing \i{algebra} on these effective addresses,
1265 so that things which don't necessarily \e{look} legal are perfectly
1266 all right:
1268 \c     mov     eax,[ebx*5]             ; assembles as [ebx*4+ebx]
1269 \c     mov     eax,[label1*2-label2]   ; ie [label1+(label1-label2)]
1271 Some forms of effective address have more than one assembled form;
1272 in most such cases NASM will generate the smallest form it can. For
1273 example, there are distinct assembled forms for the 32-bit effective
1274 addresses \c{[eax*2+0]} and \c{[eax+eax]}, and NASM will generally
1275 generate the latter on the grounds that the former requires four
1276 bytes to store a zero offset.
1278 NASM has a hinting mechanism which will cause \c{[eax+ebx]} and
1279 \c{[ebx+eax]} to generate different opcodes; this is occasionally
1280 useful because \c{[esi+ebp]} and \c{[ebp+esi]} have different
1281 default segment registers.
1283 However, you can force NASM to generate an effective address in a
1284 particular form by the use of the keywords \c{BYTE}, \c{WORD},
1285 \c{DWORD} and \c{NOSPLIT}. If you need \c{[eax+3]} to be assembled
1286 using a double-word offset field instead of the one byte NASM will
1287 normally generate, you can code \c{[dword eax+3]}. Similarly, you
1288 can force NASM to use a byte offset for a small value which it
1289 hasn't seen on the first pass (see \k{crit} for an example of such a
1290 code fragment) by using \c{[byte eax+offset]}. As special cases,
1291 \c{[byte eax]} will code \c{[eax+0]} with a byte offset of zero, and
1292 \c{[dword eax]} will code it with a double-word offset of zero. The
1293 normal form, \c{[eax]}, will be coded with no offset field.
1295 The form described in the previous paragraph is also useful if you
1296 are trying to access data in a 32-bit segment from within 16 bit code.
1297 For more information on this see the section on mixed-size addressing
1298 (\k{mixaddr}). In particular, if you need to access data with a known
1299 offset that is larger than will fit in a 16-bit value, if you don't
1300 specify that it is a dword offset, nasm will cause the high word of
1301 the offset to be lost.
1303 Similarly, NASM will split \c{[eax*2]} into \c{[eax+eax]} because
1304 that allows the offset field to be absent and space to be saved; in
1305 fact, it will also split \c{[eax*2+offset]} into
1306 \c{[eax+eax+offset]}. You can combat this behaviour by the use of
1307 the \c{NOSPLIT} keyword: \c{[nosplit eax*2]} will force
1308 \c{[eax*2+0]} to be generated literally.
1310 In 64-bit mode, NASM will by default generate absolute addresses.  The
1311 \i\c{REL} keyword makes it produce \c{RIP}-relative addresses. Since
1312 this is frequently the normally desired behaviour, see the \c{DEFAULT}
1313 directive (\k{default}). The keyword \i\c{ABS} overrides \i\c{REL}.
1316 \H{const} \i{Constants}
1318 NASM understands four different types of constant: numeric,
1319 character, string and floating-point.
1322 \S{numconst} \i{Numeric Constants}
1324 A numeric constant is simply a number. NASM allows you to specify
1325 numbers in a variety of number bases, in a variety of ways: you can
1326 suffix \c{H}, \c{Q} or \c{O}, and \c{B} for \i{hex}, \i{octal} and \i{binary},
1327 or you can prefix \c{0x} for hex in the style of C, or you can
1328 prefix \c{$} for hex in the style of Borland Pascal. Note, though,
1329 that the \I{$, prefix}\c{$} prefix does double duty as a prefix on
1330 identifiers (see \k{syntax}), so a hex number prefixed with a \c{$}
1331 sign must have a digit after the \c{$} rather than a letter.
1333 Some examples:
1335 \c         mov     ax,100          ; decimal
1336 \c         mov     ax,0a2h         ; hex
1337 \c         mov     ax,$0a2         ; hex again: the 0 is required
1338 \c         mov     ax,0xa2         ; hex yet again
1339 \c         mov     ax,777q         ; octal
1340 \c         mov     ax,777o         ; octal again
1341 \c         mov     ax,10010011b    ; binary
1344 \S{chrconst} \i{Character Constants}
1346 A character constant consists of up to four characters enclosed in
1347 either single or double quotes. The type of quote makes no
1348 difference to NASM, except of course that surrounding the constant
1349 with single quotes allows double quotes to appear within it and vice
1350 versa.
1352 A character constant with more than one character will be arranged
1353 with \i{little-endian} order in mind: if you code
1355 \c           mov eax,'abcd'
1357 then the constant generated is not \c{0x61626364}, but
1358 \c{0x64636261}, so that if you were then to store the value into
1359 memory, it would read \c{abcd} rather than \c{dcba}. This is also
1360 the sense of character constants understood by the Pentium's
1361 \i\c{CPUID} instruction.
1362 \# (see \k{insCPUID})
1365 \S{strconst} String Constants
1367 String constants are only acceptable to some pseudo-instructions,
1368 namely the \I\c{DW}\I\c{DD}\I\c{DQ}\I\c{DT}\i\c{DB} family and
1369 \i\c{INCBIN}.
1371 A string constant looks like a character constant, only longer. It
1372 is treated as a concatenation of maximum-size character constants
1373 for the conditions. So the following are equivalent:
1375 \c       db    'hello'               ; string constant
1376 \c       db    'h','e','l','l','o'   ; equivalent character constants
1378 And the following are also equivalent:
1380 \c       dd    'ninechars'           ; doubleword string constant
1381 \c       dd    'nine','char','s'     ; becomes three doublewords
1382 \c       db    'ninechars',0,0,0     ; and really looks like this
1384 Note that when used as an operand to \c{db}, a constant like
1385 \c{'ab'} is treated as a string constant despite being short enough
1386 to be a character constant, because otherwise \c{db 'ab'} would have
1387 the same effect as \c{db 'a'}, which would be silly. Similarly,
1388 three-character or four-character constants are treated as strings
1389 when they are operands to \c{dw}.
1392 \S{fltconst} \I{floating-point, constants}Floating-Point Constants
1394 \i{Floating-point} constants are acceptable only as arguments to
1395 \i\c{DW}, \i\c{DD}, \i\c{DQ}, \i\c{DT}, and \i\c{DO}. They are
1396 expressed in the traditional form: digits, then a period, then
1397 optionally more digits, then optionally an \c{E} followed by an
1398 exponent. The period is mandatory, so that NASM can distinguish
1399 between \c{dd 1}, which declares an integer constant, and \c{dd 1.0}
1400 which declares a floating-point constant.
1402 NASM also support C99-style hexadecimal floating-point: \c{0x},
1403 hexadecimal digits, period, optionally more hexadeximal digits, then
1404 optionally a \c{P} followed by a \e{binary} (not hexadecimal) exponent
1405 in decimal notation.
1407 Some examples:
1409 \c       dw    -0.5                    ; IEEE half precision
1410 \c       dd    1.2                     ; an easy one
1411 \c       dd    0x1p+2                  ; 1.0x2^2 = 4.0
1412 \c       dq    1.e10                   ; 10,000,000,000
1413 \c       dq    1.e+10                  ; synonymous with 1.e10
1414 \c       dq    1.e-10                  ; 0.000 000 000 1
1415 \c       dt    3.141592653589793238462 ; pi
1416 \c       do    1.e+4000                ; IEEE quad precision
1418 NASM cannot do compile-time arithmetic on floating-point constants.
1419 This is because NASM is designed to be portable - although it always
1420 generates code to run on x86 processors, the assembler itself can
1421 run on any system with an ANSI C compiler. Therefore, the assembler
1422 cannot guarantee the presence of a floating-point unit capable of
1423 handling the \i{Intel number formats}, and so for NASM to be able to
1424 do floating arithmetic it would have to include its own complete set
1425 of floating-point routines, which would significantly increase the
1426 size of the assembler for very little benefit.
1428 The special tokens \i\c{__Infinity__}, \i\c{__QNaN__} (or
1429 \i\c{__NaN__}) and \i\c{__SNaN__} can be used to generate
1430 \I{infinity}infinities, quiet \i{NaN}s, and signalling NaNs,
1431 respectively.  These are normally used as macros:
1433 \c %define Inf __Infinity__
1434 \c %define NaN __QNaN__
1436 \c       dq    +1.5, -Inf, NaN         ; Double-precision constants
1438 \H{expr} \i{Expressions}
1440 Expressions in NASM are similar in syntax to those in C.  Expressions
1441 are evaluated as 64-bit integers which are then adjusted to the
1442 appropriate size.
1444 NASM supports two special tokens in expressions, allowing
1445 calculations to involve the current assembly position: the
1446 \I{$, here}\c{$} and \i\c{$$} tokens. \c{$} evaluates to the assembly
1447 position at the beginning of the line containing the expression; so
1448 you can code an \i{infinite loop} using \c{JMP $}. \c{$$} evaluates
1449 to the beginning of the current section; so you can tell how far
1450 into the section you are by using \c{($-$$)}.
1452 The arithmetic \i{operators} provided by NASM are listed here, in
1453 increasing order of \i{precedence}.
1456 \S{expor} \i\c{|}: \i{Bitwise OR} Operator
1458 The \c{|} operator gives a bitwise OR, exactly as performed by the
1459 \c{OR} machine instruction. Bitwise OR is the lowest-priority
1460 arithmetic operator supported by NASM.
1463 \S{expxor} \i\c{^}: \i{Bitwise XOR} Operator
1465 \c{^} provides the bitwise XOR operation.
1468 \S{expand} \i\c{&}: \i{Bitwise AND} Operator
1470 \c{&} provides the bitwise AND operation.
1473 \S{expshift} \i\c{<<} and \i\c{>>}: \i{Bit Shift} Operators
1475 \c{<<} gives a bit-shift to the left, just as it does in C. So \c{5<<3}
1476 evaluates to 5 times 8, or 40. \c{>>} gives a bit-shift to the
1477 right; in NASM, such a shift is \e{always} unsigned, so that
1478 the bits shifted in from the left-hand end are filled with zero
1479 rather than a sign-extension of the previous highest bit.
1482 \S{expplmi} \I{+ opaddition}\c{+} and \I{- opsubtraction}\c{-}:
1483 \i{Addition} and \i{Subtraction} Operators
1485 The \c{+} and \c{-} operators do perfectly ordinary addition and
1486 subtraction.
1489 \S{expmul} \i\c{*}, \i\c{/}, \i\c{//}, \i\c{%} and \i\c{%%}:
1490 \i{Multiplication} and \i{Division}
1492 \c{*} is the multiplication operator. \c{/} and \c{//} are both
1493 division operators: \c{/} is \i{unsigned division} and \c{//} is
1494 \i{signed division}. Similarly, \c{%} and \c{%%} provide \I{unsigned
1495 modulo}\I{modulo operators}unsigned and
1496 \i{signed modulo} operators respectively.
1498 NASM, like ANSI C, provides no guarantees about the sensible
1499 operation of the signed modulo operator.
1501 Since the \c{%} character is used extensively by the macro
1502 \i{preprocessor}, you should ensure that both the signed and unsigned
1503 modulo operators are followed by white space wherever they appear.
1506 \S{expmul} \i{Unary Operators}: \I{+ opunary}\c{+}, \I{- opunary}\c{-},
1507 \i\c{~}, \I{! opunary}\c{!} and \i\c{SEG}
1509 The highest-priority operators in NASM's expression grammar are
1510 those which only apply to one argument. \c{-} negates its operand,
1511 \c{+} does nothing (it's provided for symmetry with \c{-}), \c{~}
1512 computes the \i{one's complement} of its operand, \c{!} is the
1513 \i{logical negation} operator, and \c{SEG} provides the \i{segment address}
1514 of its operand (explained in more detail in \k{segwrt}).
1517 \H{segwrt} \i\c{SEG} and \i\c{WRT}
1519 When writing large 16-bit programs, which must be split into
1520 multiple \i{segments}, it is often necessary to be able to refer to
1521 the \I{segment address}segment part of the address of a symbol. NASM
1522 supports the \c{SEG} operator to perform this function.
1524 The \c{SEG} operator returns the \i\e{preferred} segment base of a
1525 symbol, defined as the segment base relative to which the offset of
1526 the symbol makes sense. So the code
1528 \c         mov     ax,seg symbol
1529 \c         mov     es,ax
1530 \c         mov     bx,symbol
1532 will load \c{ES:BX} with a valid pointer to the symbol \c{symbol}.
1534 Things can be more complex than this: since 16-bit segments and
1535 \i{groups} may \I{overlapping segments}overlap, you might occasionally
1536 want to refer to some symbol using a different segment base from the
1537 preferred one. NASM lets you do this, by the use of the \c{WRT}
1538 (With Reference To) keyword. So you can do things like
1540 \c         mov     ax,weird_seg        ; weird_seg is a segment base
1541 \c         mov     es,ax
1542 \c         mov     bx,symbol wrt weird_seg
1544 to load \c{ES:BX} with a different, but functionally equivalent,
1545 pointer to the symbol \c{symbol}.
1547 NASM supports far (inter-segment) calls and jumps by means of the
1548 syntax \c{call segment:offset}, where \c{segment} and \c{offset}
1549 both represent immediate values. So to call a far procedure, you
1550 could code either of
1552 \c         call    (seg procedure):procedure
1553 \c         call    weird_seg:(procedure wrt weird_seg)
1555 (The parentheses are included for clarity, to show the intended
1556 parsing of the above instructions. They are not necessary in
1557 practice.)
1559 NASM supports the syntax \I\c{CALL FAR}\c{call far procedure} as a
1560 synonym for the first of the above usages. \c{JMP} works identically
1561 to \c{CALL} in these examples.
1563 To declare a \i{far pointer} to a data item in a data segment, you
1564 must code
1566 \c         dw      symbol, seg symbol
1568 NASM supports no convenient synonym for this, though you can always
1569 invent one using the macro processor.
1572 \H{strict} \i\c{STRICT}: Inhibiting Optimization
1574 When assembling with the optimizer set to level 2 or higher (see
1575 \k{opt-On}), NASM will use size specifiers (\c{BYTE}, \c{WORD},
1576 \c{DWORD}, \c{QWORD}, \c{TWORD} or \c{OWORD}), but will give them the
1577 smallest possible size. The keyword \c{STRICT} can be used to inhibit
1578 optimization and force a particular operand to be emitted in the
1579 specified size. For example, with the optimizer on, and in \c{BITS 16}
1580 mode,
1582 \c         push dword 33
1584 is encoded in three bytes \c{66 6A 21}, whereas
1586 \c         push strict dword 33
1588 is encoded in six bytes, with a full dword immediate operand \c{66 68
1589 21 00 00 00}.
1591 With the optimizer off, the same code (six bytes) is generated whether
1592 the \c{STRICT} keyword was used or not.
1595 \H{crit} \i{Critical Expressions}
1597 A limitation of NASM is that it is a \i{two-pass assembler}; unlike
1598 TASM and others, it will always do exactly two \I{passes}\i{assembly
1599 passes}. Therefore it is unable to cope with source files that are
1600 complex enough to require three or more passes.
1602 The first pass is used to determine the size of all the assembled
1603 code and data, so that the second pass, when generating all the
1604 code, knows all the symbol addresses the code refers to. So one
1605 thing NASM can't handle is code whose size depends on the value of a
1606 symbol declared after the code in question. For example,
1608 \c         times (label-$) db 0
1609 \c label:  db      'Where am I?'
1611 The argument to \i\c{TIMES} in this case could equally legally
1612 evaluate to anything at all; NASM will reject this example because
1613 it cannot tell the size of the \c{TIMES} line when it first sees it.
1614 It will just as firmly reject the slightly \I{paradox}paradoxical
1615 code
1617 \c         times (label-$+1) db 0
1618 \c label:  db      'NOW where am I?'
1620 in which \e{any} value for the \c{TIMES} argument is by definition
1621 wrong!
1623 NASM rejects these examples by means of a concept called a
1624 \e{critical expression}, which is defined to be an expression whose
1625 value is required to be computable in the first pass, and which must
1626 therefore depend only on symbols defined before it. The argument to
1627 the \c{TIMES} prefix is a critical expression; for the same reason,
1628 the arguments to the \i\c{RESB} family of pseudo-instructions are
1629 also critical expressions.
1631 Critical expressions can crop up in other contexts as well: consider
1632 the following code.
1634 \c                 mov     ax,symbol1
1635 \c symbol1         equ     symbol2
1636 \c symbol2:
1638 On the first pass, NASM cannot determine the value of \c{symbol1},
1639 because \c{symbol1} is defined to be equal to \c{symbol2} which NASM
1640 hasn't seen yet. On the second pass, therefore, when it encounters
1641 the line \c{mov ax,symbol1}, it is unable to generate the code for
1642 it because it still doesn't know the value of \c{symbol1}. On the
1643 next line, it would see the \i\c{EQU} again and be able to determine
1644 the value of \c{symbol1}, but by then it would be too late.
1646 NASM avoids this problem by defining the right-hand side of an
1647 \c{EQU} statement to be a critical expression, so the definition of
1648 \c{symbol1} would be rejected in the first pass.
1650 There is a related issue involving \i{forward references}: consider
1651 this code fragment.
1653 \c         mov     eax,[ebx+offset]
1654 \c offset  equ     10
1656 NASM, on pass one, must calculate the size of the instruction \c{mov
1657 eax,[ebx+offset]} without knowing the value of \c{offset}. It has no
1658 way of knowing that \c{offset} is small enough to fit into a
1659 one-byte offset field and that it could therefore get away with
1660 generating a shorter form of the \i{effective-address} encoding; for
1661 all it knows, in pass one, \c{offset} could be a symbol in the code
1662 segment, and it might need the full four-byte form. So it is forced
1663 to compute the size of the instruction to accommodate a four-byte
1664 address part. In pass two, having made this decision, it is now
1665 forced to honour it and keep the instruction large, so the code
1666 generated in this case is not as small as it could have been. This
1667 problem can be solved by defining \c{offset} before using it, or by
1668 forcing byte size in the effective address by coding \c{[byte
1669 ebx+offset]}.
1671 Note that use of the \c{-On} switch (with n>=2) makes some of the above
1672 no longer true (see \k{opt-On}).
1674 \H{locallab} \i{Local Labels}
1676 NASM gives special treatment to symbols beginning with a \i{period}.
1677 A label beginning with a single period is treated as a \e{local}
1678 label, which means that it is associated with the previous non-local
1679 label. So, for example:
1681 \c label1  ; some code
1683 \c .loop
1684 \c         ; some more code
1686 \c         jne     .loop
1687 \c         ret
1689 \c label2  ; some code
1691 \c .loop
1692 \c         ; some more code
1694 \c         jne     .loop
1695 \c         ret
1697 In the above code fragment, each \c{JNE} instruction jumps to the
1698 line immediately before it, because the two definitions of \c{.loop}
1699 are kept separate by virtue of each being associated with the
1700 previous non-local label.
1702 This form of local label handling is borrowed from the old Amiga
1703 assembler \i{DevPac}; however, NASM goes one step further, in
1704 allowing access to local labels from other parts of the code. This
1705 is achieved by means of \e{defining} a local label in terms of the
1706 previous non-local label: the first definition of \c{.loop} above is
1707 really defining a symbol called \c{label1.loop}, and the second
1708 defines a symbol called \c{label2.loop}. So, if you really needed
1709 to, you could write
1711 \c label3  ; some more code
1712 \c         ; and some more
1714 \c         jmp label1.loop
1716 Sometimes it is useful - in a macro, for instance - to be able to
1717 define a label which can be referenced from anywhere but which
1718 doesn't interfere with the normal local-label mechanism. Such a
1719 label can't be non-local because it would interfere with subsequent
1720 definitions of, and references to, local labels; and it can't be
1721 local because the macro that defined it wouldn't know the label's
1722 full name. NASM therefore introduces a third type of label, which is
1723 probably only useful in macro definitions: if a label begins with
1724 the \I{label prefix}special prefix \i\c{..@}, then it does nothing
1725 to the local label mechanism. So you could code
1727 \c label1:                         ; a non-local label
1728 \c .local:                         ; this is really label1.local
1729 \c ..@foo:                         ; this is a special symbol
1730 \c label2:                         ; another non-local label
1731 \c .local:                         ; this is really label2.local
1733 \c         jmp     ..@foo          ; this will jump three lines up
1735 NASM has the capacity to define other special symbols beginning with
1736 a double period: for example, \c{..start} is used to specify the
1737 entry point in the \c{obj} output format (see \k{dotdotstart}).
1740 \C{preproc} The NASM \i{Preprocessor}
1742 NASM contains a powerful \i{macro processor}, which supports
1743 conditional assembly, multi-level file inclusion, two forms of macro
1744 (single-line and multi-line), and a `context stack' mechanism for
1745 extra macro power. Preprocessor directives all begin with a \c{%}
1746 sign.
1748 The preprocessor collapses all lines which end with a backslash (\\)
1749 character into a single line.  Thus:
1751 \c %define THIS_VERY_LONG_MACRO_NAME_IS_DEFINED_TO \\
1752 \c         THIS_VALUE
1754 will work like a single-line macro without the backslash-newline
1755 sequence.
1757 \H{slmacro} \i{Single-Line Macros}
1759 \S{define} The Normal Way: \I\c{%idefine}\i\c{%define}
1761 Single-line macros are defined using the \c{%define} preprocessor
1762 directive. The definitions work in a similar way to C; so you can do
1763 things like
1765 \c %define ctrl    0x1F &
1766 \c %define param(a,b) ((a)+(a)*(b))
1768 \c         mov     byte [param(2,ebx)], ctrl 'D'
1770 which will expand to
1772 \c         mov     byte [(2)+(2)*(ebx)], 0x1F & 'D'
1774 When the expansion of a single-line macro contains tokens which
1775 invoke another macro, the expansion is performed at invocation time,
1776 not at definition time. Thus the code
1778 \c %define a(x)    1+b(x)
1779 \c %define b(x)    2*x
1781 \c         mov     ax,a(8)
1783 will evaluate in the expected way to \c{mov ax,1+2*8}, even though
1784 the macro \c{b} wasn't defined at the time of definition of \c{a}.
1786 Macros defined with \c{%define} are \i{case sensitive}: after
1787 \c{%define foo bar}, only \c{foo} will expand to \c{bar}: \c{Foo} or
1788 \c{FOO} will not. By using \c{%idefine} instead of \c{%define} (the
1789 `i' stands for `insensitive') you can define all the case variants
1790 of a macro at once, so that \c{%idefine foo bar} would cause
1791 \c{foo}, \c{Foo}, \c{FOO}, \c{fOO} and so on all to expand to
1792 \c{bar}.
1794 There is a mechanism which detects when a macro call has occurred as
1795 a result of a previous expansion of the same macro, to guard against
1796 \i{circular references} and infinite loops. If this happens, the
1797 preprocessor will only expand the first occurrence of the macro.
1798 Hence, if you code
1800 \c %define a(x)    1+a(x)
1802 \c         mov     ax,a(3)
1804 the macro \c{a(3)} will expand once, becoming \c{1+a(3)}, and will
1805 then expand no further. This behaviour can be useful: see \k{32c}
1806 for an example of its use.
1808 You can \I{overloading, single-line macros}overload single-line
1809 macros: if you write
1811 \c %define foo(x)   1+x
1812 \c %define foo(x,y) 1+x*y
1814 the preprocessor will be able to handle both types of macro call,
1815 by counting the parameters you pass; so \c{foo(3)} will become
1816 \c{1+3} whereas \c{foo(ebx,2)} will become \c{1+ebx*2}. However, if
1817 you define
1819 \c %define foo bar
1821 then no other definition of \c{foo} will be accepted: a macro with
1822 no parameters prohibits the definition of the same name as a macro
1823 \e{with} parameters, and vice versa.
1825 This doesn't prevent single-line macros being \e{redefined}: you can
1826 perfectly well define a macro with
1828 \c %define foo bar
1830 and then re-define it later in the same source file with
1832 \c %define foo baz
1834 Then everywhere the macro \c{foo} is invoked, it will be expanded
1835 according to the most recent definition. This is particularly useful
1836 when defining single-line macros with \c{%assign} (see \k{assign}).
1838 You can \i{pre-define} single-line macros using the `-d' option on
1839 the NASM command line: see \k{opt-d}.
1842 \S{xdefine} Enhancing %define: \I\c{%xidefine}\i\c{%xdefine}
1844 To have a reference to an embedded single-line macro resolved at the
1845 time that it is embedded, as opposed to when the calling macro is
1846 expanded, you need a different mechanism to the one offered by
1847 \c{%define}. The solution is to use \c{%xdefine}, or it's
1848 \I{case sensitive}case-insensitive counterpart \c{%xidefine}.
1850 Suppose you have the following code:
1852 \c %define  isTrue  1
1853 \c %define  isFalse isTrue
1854 \c %define  isTrue  0
1856 \c val1:    db      isFalse
1858 \c %define  isTrue  1
1860 \c val2:    db      isFalse
1862 In this case, \c{val1} is equal to 0, and \c{val2} is equal to 1.
1863 This is because, when a single-line macro is defined using
1864 \c{%define}, it is expanded only when it is called. As \c{isFalse}
1865 expands to \c{isTrue}, the expansion will be the current value of
1866 \c{isTrue}. The first time it is called that is 0, and the second
1867 time it is 1.
1869 If you wanted \c{isFalse} to expand to the value assigned to the
1870 embedded macro \c{isTrue} at the time that \c{isFalse} was defined,
1871 you need to change the above code to use \c{%xdefine}.
1873 \c %xdefine isTrue  1
1874 \c %xdefine isFalse isTrue
1875 \c %xdefine isTrue  0
1877 \c val1:    db      isFalse
1879 \c %xdefine isTrue  1
1881 \c val2:    db      isFalse
1883 Now, each time that \c{isFalse} is called, it expands to 1,
1884 as that is what the embedded macro \c{isTrue} expanded to at
1885 the time that \c{isFalse} was defined.
1888 \S{concat%+} Concatenating Single Line Macro Tokens: \i\c{%+}
1890 Individual tokens in single line macros can be concatenated, to produce
1891 longer tokens for later processing. This can be useful if there are
1892 several similar macros that perform similar functions.
1894 As an example, consider the following:
1896 \c %define BDASTART 400h                ; Start of BIOS data area
1898 \c struc   tBIOSDA                      ; its structure
1899 \c         .COM1addr       RESW    1
1900 \c         .COM2addr       RESW    1
1901 \c         ; ..and so on
1902 \c endstruc
1904 Now, if we need to access the elements of tBIOSDA in different places,
1905 we can end up with:
1907 \c         mov     ax,BDASTART + tBIOSDA.COM1addr
1908 \c         mov     bx,BDASTART + tBIOSDA.COM2addr
1910 This will become pretty ugly (and tedious) if used in many places, and
1911 can be reduced in size significantly by using the following macro:
1913 \c ; Macro to access BIOS variables by their names (from tBDA):
1915 \c %define BDA(x)  BDASTART + tBIOSDA. %+ x
1917 Now the above code can be written as:
1919 \c         mov     ax,BDA(COM1addr)
1920 \c         mov     bx,BDA(COM2addr)
1922 Using this feature, we can simplify references to a lot of macros (and,
1923 in turn, reduce typing errors).
1926 \S{undef} Undefining macros: \i\c{%undef}
1928 Single-line macros can be removed with the \c{%undef} command.  For
1929 example, the following sequence:
1931 \c %define foo bar
1932 \c %undef  foo
1934 \c         mov     eax, foo
1936 will expand to the instruction \c{mov eax, foo}, since after
1937 \c{%undef} the macro \c{foo} is no longer defined.
1939 Macros that would otherwise be pre-defined can be undefined on the
1940 command-line using the `-u' option on the NASM command line: see
1941 \k{opt-u}.
1944 \S{assign} \i{Preprocessor Variables}: \i\c{%assign}
1946 An alternative way to define single-line macros is by means of the
1947 \c{%assign} command (and its \I{case sensitive}case-insensitive
1948 counterpart \i\c{%iassign}, which differs from \c{%assign} in
1949 exactly the same way that \c{%idefine} differs from \c{%define}).
1951 \c{%assign} is used to define single-line macros which take no
1952 parameters and have a numeric value. This value can be specified in
1953 the form of an expression, and it will be evaluated once, when the
1954 \c{%assign} directive is processed.
1956 Like \c{%define}, macros defined using \c{%assign} can be re-defined
1957 later, so you can do things like
1959 \c %assign i i+1
1961 to increment the numeric value of a macro.
1963 \c{%assign} is useful for controlling the termination of \c{%rep}
1964 preprocessor loops: see \k{rep} for an example of this. Another
1965 use for \c{%assign} is given in \k{16c} and \k{32c}.
1967 The expression passed to \c{%assign} is a \i{critical expression}
1968 (see \k{crit}), and must also evaluate to a pure number (rather than
1969 a relocatable reference such as a code or data address, or anything
1970 involving a register).
1973 \H{strlen} \i{String Handling in Macros}: \i\c{%strlen} and \i\c{%substr}
1975 It's often useful to be able to handle strings in macros. NASM
1976 supports two simple string handling macro operators from which
1977 more complex operations can be constructed.
1980 \S{strlen} \i{String Length}: \i\c{%strlen}
1982 The \c{%strlen} macro is like \c{%assign} macro in that it creates
1983 (or redefines) a numeric value to a macro. The difference is that
1984 with \c{%strlen}, the numeric value is the length of a string. An
1985 example of the use of this would be:
1987 \c %strlen charcnt 'my string'
1989 In this example, \c{charcnt} would receive the value 8, just as
1990 if an \c{%assign} had been used. In this example, \c{'my string'}
1991 was a literal string but it could also have been a single-line
1992 macro that expands to a string, as in the following example:
1994 \c %define sometext 'my string'
1995 \c %strlen charcnt sometext
1997 As in the first case, this would result in \c{charcnt} being
1998 assigned the value of 8.
2001 \S{substr} \i{Sub-strings}: \i\c{%substr}
2003 Individual letters in strings can be extracted using \c{%substr}.
2004 An example of its use is probably more useful than the description:
2006 \c %substr mychar  'xyz' 1         ; equivalent to %define mychar 'x'
2007 \c %substr mychar  'xyz' 2         ; equivalent to %define mychar 'y'
2008 \c %substr mychar  'xyz' 3         ; equivalent to %define mychar 'z'
2010 In this example, mychar gets the value of 'y'. As with \c{%strlen}
2011 (see \k{strlen}), the first parameter is the single-line macro to
2012 be created and the second is the string. The third parameter
2013 specifies which character is to be selected. Note that the first
2014 index is 1, not 0 and the last index is equal to the value that
2015 \c{%strlen} would assign given the same string. Index values out
2016 of range result in an empty string.
2019 \H{mlmacro} \i{Multi-Line Macros}: \I\c{%imacro}\i\c{%macro}
2021 Multi-line macros are much more like the type of macro seen in MASM
2022 and TASM: a multi-line macro definition in NASM looks something like
2023 this.
2025 \c %macro  prologue 1
2027 \c         push    ebp
2028 \c         mov     ebp,esp
2029 \c         sub     esp,%1
2031 \c %endmacro
2033 This defines a C-like function prologue as a macro: so you would
2034 invoke the macro with a call such as
2036 \c myfunc:   prologue 12
2038 which would expand to the three lines of code
2040 \c myfunc: push    ebp
2041 \c         mov     ebp,esp
2042 \c         sub     esp,12
2044 The number \c{1} after the macro name in the \c{%macro} line defines
2045 the number of parameters the macro \c{prologue} expects to receive.
2046 The use of \c{%1} inside the macro definition refers to the first
2047 parameter to the macro call. With a macro taking more than one
2048 parameter, subsequent parameters would be referred to as \c{%2},
2049 \c{%3} and so on.
2051 Multi-line macros, like single-line macros, are \i{case-sensitive},
2052 unless you define them using the alternative directive \c{%imacro}.
2054 If you need to pass a comma as \e{part} of a parameter to a
2055 multi-line macro, you can do that by enclosing the entire parameter
2056 in \I{braces, around macro parameters}braces. So you could code
2057 things like
2059 \c %macro  silly 2
2061 \c     %2: db      %1
2063 \c %endmacro
2065 \c         silly 'a', letter_a             ; letter_a:  db 'a'
2066 \c         silly 'ab', string_ab           ; string_ab: db 'ab'
2067 \c         silly {13,10}, crlf             ; crlf:      db 13,10
2070 \S{mlmacover} Overloading Multi-Line Macros\I{overloading, multi-line macros}
2072 As with single-line macros, multi-line macros can be overloaded by
2073 defining the same macro name several times with different numbers of
2074 parameters. This time, no exception is made for macros with no
2075 parameters at all. So you could define
2077 \c %macro  prologue 0
2079 \c         push    ebp
2080 \c         mov     ebp,esp
2082 \c %endmacro
2084 to define an alternative form of the function prologue which
2085 allocates no local stack space.
2087 Sometimes, however, you might want to `overload' a machine
2088 instruction; for example, you might want to define
2090 \c %macro  push 2
2092 \c         push    %1
2093 \c         push    %2
2095 \c %endmacro
2097 so that you could code
2099 \c         push    ebx             ; this line is not a macro call
2100 \c         push    eax,ecx         ; but this one is
2102 Ordinarily, NASM will give a warning for the first of the above two
2103 lines, since \c{push} is now defined to be a macro, and is being
2104 invoked with a number of parameters for which no definition has been
2105 given. The correct code will still be generated, but the assembler
2106 will give a warning. This warning can be disabled by the use of the
2107 \c{-w-macro-params} command-line option (see \k{opt-w}).
2110 \S{maclocal} \i{Macro-Local Labels}
2112 NASM allows you to define labels within a multi-line macro
2113 definition in such a way as to make them local to the macro call: so
2114 calling the same macro multiple times will use a different label
2115 each time. You do this by prefixing \i\c{%%} to the label name. So
2116 you can invent an instruction which executes a \c{RET} if the \c{Z}
2117 flag is set by doing this:
2119 \c %macro  retz 0
2121 \c         jnz     %%skip
2122 \c         ret
2123 \c     %%skip:
2125 \c %endmacro
2127 You can call this macro as many times as you want, and every time
2128 you call it NASM will make up a different `real' name to substitute
2129 for the label \c{%%skip}. The names NASM invents are of the form
2130 \c{..@2345.skip}, where the number 2345 changes with every macro
2131 call. The \i\c{..@} prefix prevents macro-local labels from
2132 interfering with the local label mechanism, as described in
2133 \k{locallab}. You should avoid defining your own labels in this form
2134 (the \c{..@} prefix, then a number, then another period) in case
2135 they interfere with macro-local labels.
2138 \S{mlmacgre} \i{Greedy Macro Parameters}
2140 Occasionally it is useful to define a macro which lumps its entire
2141 command line into one parameter definition, possibly after
2142 extracting one or two smaller parameters from the front. An example
2143 might be a macro to write a text string to a file in MS-DOS, where
2144 you might want to be able to write
2146 \c         writefile [filehandle],"hello, world",13,10
2148 NASM allows you to define the last parameter of a macro to be
2149 \e{greedy}, meaning that if you invoke the macro with more
2150 parameters than it expects, all the spare parameters get lumped into
2151 the last defined one along with the separating commas. So if you
2152 code:
2154 \c %macro  writefile 2+
2156 \c         jmp     %%endstr
2157 \c   %%str:        db      %2
2158 \c   %%endstr:
2159 \c         mov     dx,%%str
2160 \c         mov     cx,%%endstr-%%str
2161 \c         mov     bx,%1
2162 \c         mov     ah,0x40
2163 \c         int     0x21
2165 \c %endmacro
2167 then the example call to \c{writefile} above will work as expected:
2168 the text before the first comma, \c{[filehandle]}, is used as the
2169 first macro parameter and expanded when \c{%1} is referred to, and
2170 all the subsequent text is lumped into \c{%2} and placed after the
2171 \c{db}.
2173 The greedy nature of the macro is indicated to NASM by the use of
2174 the \I{+ modifier}\c{+} sign after the parameter count on the
2175 \c{%macro} line.
2177 If you define a greedy macro, you are effectively telling NASM how
2178 it should expand the macro given \e{any} number of parameters from
2179 the actual number specified up to infinity; in this case, for
2180 example, NASM now knows what to do when it sees a call to
2181 \c{writefile} with 2, 3, 4 or more parameters. NASM will take this
2182 into account when overloading macros, and will not allow you to
2183 define another form of \c{writefile} taking 4 parameters (for
2184 example).
2186 Of course, the above macro could have been implemented as a
2187 non-greedy macro, in which case the call to it would have had to
2188 look like
2190 \c           writefile [filehandle], {"hello, world",13,10}
2192 NASM provides both mechanisms for putting \i{commas in macro
2193 parameters}, and you choose which one you prefer for each macro
2194 definition.
2196 See \k{sectmac} for a better way to write the above macro.
2199 \S{mlmacdef} \i{Default Macro Parameters}
2201 NASM also allows you to define a multi-line macro with a \e{range}
2202 of allowable parameter counts. If you do this, you can specify
2203 defaults for \i{omitted parameters}. So, for example:
2205 \c %macro  die 0-1 "Painful program death has occurred."
2207 \c         writefile 2,%1
2208 \c         mov     ax,0x4c01
2209 \c         int     0x21
2211 \c %endmacro
2213 This macro (which makes use of the \c{writefile} macro defined in
2214 \k{mlmacgre}) can be called with an explicit error message, which it
2215 will display on the error output stream before exiting, or it can be
2216 called with no parameters, in which case it will use the default
2217 error message supplied in the macro definition.
2219 In general, you supply a minimum and maximum number of parameters
2220 for a macro of this type; the minimum number of parameters are then
2221 required in the macro call, and then you provide defaults for the
2222 optional ones. So if a macro definition began with the line
2224 \c %macro foobar 1-3 eax,[ebx+2]
2226 then it could be called with between one and three parameters, and
2227 \c{%1} would always be taken from the macro call. \c{%2}, if not
2228 specified by the macro call, would default to \c{eax}, and \c{%3} if
2229 not specified would default to \c{[ebx+2]}.
2231 You may omit parameter defaults from the macro definition, in which
2232 case the parameter default is taken to be blank. This can be useful
2233 for macros which can take a variable number of parameters, since the
2234 \i\c{%0} token (see \k{percent0}) allows you to determine how many
2235 parameters were really passed to the macro call.
2237 This defaulting mechanism can be combined with the greedy-parameter
2238 mechanism; so the \c{die} macro above could be made more powerful,
2239 and more useful, by changing the first line of the definition to
2241 \c %macro die 0-1+ "Painful program death has occurred.",13,10
2243 The maximum parameter count can be infinite, denoted by \c{*}. In
2244 this case, of course, it is impossible to provide a \e{full} set of
2245 default parameters. Examples of this usage are shown in \k{rotate}.
2248 \S{percent0} \i\c{%0}: \I{counting macro parameters}Macro Parameter Counter
2250 For a macro which can take a variable number of parameters, the
2251 parameter reference \c{%0} will return a numeric constant giving the
2252 number of parameters passed to the macro. This can be used as an
2253 argument to \c{%rep} (see \k{rep}) in order to iterate through all
2254 the parameters of a macro. Examples are given in \k{rotate}.
2257 \S{rotate} \i\c{%rotate}: \i{Rotating Macro Parameters}
2259 Unix shell programmers will be familiar with the \I{shift
2260 command}\c{shift} shell command, which allows the arguments passed
2261 to a shell script (referenced as \c{$1}, \c{$2} and so on) to be
2262 moved left by one place, so that the argument previously referenced
2263 as \c{$2} becomes available as \c{$1}, and the argument previously
2264 referenced as \c{$1} is no longer available at all.
2266 NASM provides a similar mechanism, in the form of \c{%rotate}. As
2267 its name suggests, it differs from the Unix \c{shift} in that no
2268 parameters are lost: parameters rotated off the left end of the
2269 argument list reappear on the right, and vice versa.
2271 \c{%rotate} is invoked with a single numeric argument (which may be
2272 an expression). The macro parameters are rotated to the left by that
2273 many places. If the argument to \c{%rotate} is negative, the macro
2274 parameters are rotated to the right.
2276 \I{iterating over macro parameters}So a pair of macros to save and
2277 restore a set of registers might work as follows:
2279 \c %macro  multipush 1-*
2281 \c   %rep  %0
2282 \c         push    %1
2283 \c   %rotate 1
2284 \c   %endrep
2286 \c %endmacro
2288 This macro invokes the \c{PUSH} instruction on each of its arguments
2289 in turn, from left to right. It begins by pushing its first
2290 argument, \c{%1}, then invokes \c{%rotate} to move all the arguments
2291 one place to the left, so that the original second argument is now
2292 available as \c{%1}. Repeating this procedure as many times as there
2293 were arguments (achieved by supplying \c{%0} as the argument to
2294 \c{%rep}) causes each argument in turn to be pushed.
2296 Note also the use of \c{*} as the maximum parameter count,
2297 indicating that there is no upper limit on the number of parameters
2298 you may supply to the \i\c{multipush} macro.
2300 It would be convenient, when using this macro, to have a \c{POP}
2301 equivalent, which \e{didn't} require the arguments to be given in
2302 reverse order. Ideally, you would write the \c{multipush} macro
2303 call, then cut-and-paste the line to where the pop needed to be
2304 done, and change the name of the called macro to \c{multipop}, and
2305 the macro would take care of popping the registers in the opposite
2306 order from the one in which they were pushed.
2308 This can be done by the following definition:
2310 \c %macro  multipop 1-*
2312 \c   %rep %0
2313 \c   %rotate -1
2314 \c         pop     %1
2315 \c   %endrep
2317 \c %endmacro
2319 This macro begins by rotating its arguments one place to the
2320 \e{right}, so that the original \e{last} argument appears as \c{%1}.
2321 This is then popped, and the arguments are rotated right again, so
2322 the second-to-last argument becomes \c{%1}. Thus the arguments are
2323 iterated through in reverse order.
2326 \S{concat} \i{Concatenating Macro Parameters}
2328 NASM can concatenate macro parameters on to other text surrounding
2329 them. This allows you to declare a family of symbols, for example,
2330 in a macro definition. If, for example, you wanted to generate a
2331 table of key codes along with offsets into the table, you could code
2332 something like
2334 \c %macro keytab_entry 2
2336 \c     keypos%1    equ     $-keytab
2337 \c                 db      %2
2339 \c %endmacro
2341 \c keytab:
2342 \c           keytab_entry F1,128+1
2343 \c           keytab_entry F2,128+2
2344 \c           keytab_entry Return,13
2346 which would expand to
2348 \c keytab:
2349 \c keyposF1        equ     $-keytab
2350 \c                 db     128+1
2351 \c keyposF2        equ     $-keytab
2352 \c                 db      128+2
2353 \c keyposReturn    equ     $-keytab
2354 \c                 db      13
2356 You can just as easily concatenate text on to the other end of a
2357 macro parameter, by writing \c{%1foo}.
2359 If you need to append a \e{digit} to a macro parameter, for example
2360 defining labels \c{foo1} and \c{foo2} when passed the parameter
2361 \c{foo}, you can't code \c{%11} because that would be taken as the
2362 eleventh macro parameter. Instead, you must code
2363 \I{braces, after % sign}\c{%\{1\}1}, which will separate the first
2364 \c{1} (giving the number of the macro parameter) from the second
2365 (literal text to be concatenated to the parameter).
2367 This concatenation can also be applied to other preprocessor in-line
2368 objects, such as macro-local labels (\k{maclocal}) and context-local
2369 labels (\k{ctxlocal}). In all cases, ambiguities in syntax can be
2370 resolved by enclosing everything after the \c{%} sign and before the
2371 literal text in braces: so \c{%\{%foo\}bar} concatenates the text
2372 \c{bar} to the end of the real name of the macro-local label
2373 \c{%%foo}. (This is unnecessary, since the form NASM uses for the
2374 real names of macro-local labels means that the two usages
2375 \c{%\{%foo\}bar} and \c{%%foobar} would both expand to the same
2376 thing anyway; nevertheless, the capability is there.)
2379 \S{mlmaccc} \i{Condition Codes as Macro Parameters}
2381 NASM can give special treatment to a macro parameter which contains
2382 a condition code. For a start, you can refer to the macro parameter
2383 \c{%1} by means of the alternative syntax \i\c{%+1}, which informs
2384 NASM that this macro parameter is supposed to contain a condition
2385 code, and will cause the preprocessor to report an error message if
2386 the macro is called with a parameter which is \e{not} a valid
2387 condition code.
2389 Far more usefully, though, you can refer to the macro parameter by
2390 means of \i\c{%-1}, which NASM will expand as the \e{inverse}
2391 condition code. So the \c{retz} macro defined in \k{maclocal} can be
2392 replaced by a general \i{conditional-return macro} like this:
2394 \c %macro  retc 1
2396 \c         j%-1    %%skip
2397 \c         ret
2398 \c   %%skip:
2400 \c %endmacro
2402 This macro can now be invoked using calls like \c{retc ne}, which
2403 will cause the conditional-jump instruction in the macro expansion
2404 to come out as \c{JE}, or \c{retc po} which will make the jump a
2405 \c{JPE}.
2407 The \c{%+1} macro-parameter reference is quite happy to interpret
2408 the arguments \c{CXZ} and \c{ECXZ} as valid condition codes;
2409 however, \c{%-1} will report an error if passed either of these,
2410 because no inverse condition code exists.
2413 \S{nolist} \i{Disabling Listing Expansion}\I\c{.nolist}
2415 When NASM is generating a listing file from your program, it will
2416 generally expand multi-line macros by means of writing the macro
2417 call and then listing each line of the expansion. This allows you to
2418 see which instructions in the macro expansion are generating what
2419 code; however, for some macros this clutters the listing up
2420 unnecessarily.
2422 NASM therefore provides the \c{.nolist} qualifier, which you can
2423 include in a macro definition to inhibit the expansion of the macro
2424 in the listing file. The \c{.nolist} qualifier comes directly after
2425 the number of parameters, like this:
2427 \c %macro foo 1.nolist
2429 Or like this:
2431 \c %macro bar 1-5+.nolist a,b,c,d,e,f,g,h
2433 \H{condasm} \i{Conditional Assembly}\I\c{%if}
2435 Similarly to the C preprocessor, NASM allows sections of a source
2436 file to be assembled only if certain conditions are met. The general
2437 syntax of this feature looks like this:
2439 \c %if<condition>
2440 \c     ; some code which only appears if <condition> is met
2441 \c %elif<condition2>
2442 \c     ; only appears if <condition> is not met but <condition2> is
2443 \c %else
2444 \c     ; this appears if neither <condition> nor <condition2> was met
2445 \c %endif
2447 The \i\c{%else} clause is optional, as is the \i\c{%elif} clause.
2448 You can have more than one \c{%elif} clause as well.
2451 \S{ifdef} \i\c{%ifdef}: Testing Single-Line Macro Existence\I{testing,
2452 single-line macro existence}
2454 Beginning a conditional-assembly block with the line \c{%ifdef
2455 MACRO} will assemble the subsequent code if, and only if, a
2456 single-line macro called \c{MACRO} is defined. If not, then the
2457 \c{%elif} and \c{%else} blocks (if any) will be processed instead.
2459 For example, when debugging a program, you might want to write code
2460 such as
2462 \c           ; perform some function
2463 \c %ifdef DEBUG
2464 \c           writefile 2,"Function performed successfully",13,10
2465 \c %endif
2466 \c           ; go and do something else
2468 Then you could use the command-line option \c{-dDEBUG} to create a
2469 version of the program which produced debugging messages, and remove
2470 the option to generate the final release version of the program.
2472 You can test for a macro \e{not} being defined by using
2473 \i\c{%ifndef} instead of \c{%ifdef}. You can also test for macro
2474 definitions in \c{%elif} blocks by using \i\c{%elifdef} and
2475 \i\c{%elifndef}.
2478 \S{ifmacro} \i\c{ifmacro}: Testing Multi-Line Macro
2479 Existence\I{testing, multi-line macro existence}
2481 The \c{%ifmacro} directive operates in the same way as the \c{%ifdef}
2482 directive, except that it checks for the existence of a multi-line macro.
2484 For example, you may be working with a large project and not have control
2485 over the macros in a library. You may want to create a macro with one
2486 name if it doesn't already exist, and another name if one with that name
2487 does exist.
2489 The \c{%ifmacro} is considered true if defining a macro with the given name
2490 and number of arguments would cause a definitions conflict. For example:
2492 \c %ifmacro MyMacro 1-3
2494 \c      %error "MyMacro 1-3" causes a conflict with an existing macro.
2496 \c %else
2498 \c      %macro MyMacro 1-3
2500 \c              ; insert code to define the macro
2502 \c      %endmacro
2504 \c %endif
2506 This will create the macro "MyMacro 1-3" if no macro already exists which
2507 would conflict with it, and emits a warning if there would be a definition
2508 conflict.
2510 You can test for the macro not existing by using the \i\c{%ifnmacro} instead
2511 of \c{%ifmacro}. Additional tests can be performed in \c{%elif} blocks by using
2512 \i\c{%elifmacro} and \i\c{%elifnmacro}.
2515 \S{ifctx} \i\c{%ifctx}: Testing the Context Stack\I{testing, context
2516 stack}
2518 The conditional-assembly construct \c{%ifctx ctxname} will cause the
2519 subsequent code to be assembled if and only if the top context on
2520 the preprocessor's context stack has the name \c{ctxname}. As with
2521 \c{%ifdef}, the inverse and \c{%elif} forms \i\c{%ifnctx},
2522 \i\c{%elifctx} and \i\c{%elifnctx} are also supported.
2524 For more details of the context stack, see \k{ctxstack}. For a
2525 sample use of \c{%ifctx}, see \k{blockif}.
2528 \S{if} \i\c{%if}: Testing Arbitrary Numeric Expressions\I{testing,
2529 arbitrary numeric expressions}
2531 The conditional-assembly construct \c{%if expr} will cause the
2532 subsequent code to be assembled if and only if the value of the
2533 numeric expression \c{expr} is non-zero. An example of the use of
2534 this feature is in deciding when to break out of a \c{%rep}
2535 preprocessor loop: see \k{rep} for a detailed example.
2537 The expression given to \c{%if}, and its counterpart \i\c{%elif}, is
2538 a critical expression (see \k{crit}).
2540 \c{%if} extends the normal NASM expression syntax, by providing a
2541 set of \i{relational operators} which are not normally available in
2542 expressions. The operators \i\c{=}, \i\c{<}, \i\c{>}, \i\c{<=},
2543 \i\c{>=} and \i\c{<>} test equality, less-than, greater-than,
2544 less-or-equal, greater-or-equal and not-equal respectively. The
2545 C-like forms \i\c{==} and \i\c{!=} are supported as alternative
2546 forms of \c{=} and \c{<>}. In addition, low-priority logical
2547 operators \i\c{&&}, \i\c{^^} and \i\c{||} are provided, supplying
2548 \i{logical AND}, \i{logical XOR} and \i{logical OR}. These work like
2549 the C logical operators (although C has no logical XOR), in that
2550 they always return either 0 or 1, and treat any non-zero input as 1
2551 (so that \c{^^}, for example, returns 1 if exactly one of its inputs
2552 is zero, and 0 otherwise). The relational operators also return 1
2553 for true and 0 for false.
2555 Like most other \c{%if} constructs, \c{%if} has a counterpart
2556 \i\c{%elif}, and negative forms \i\c{%ifn} and \i\c{%elifn}.
2558 \S{ifidn} \i\c{%ifidn} and \i\c{%ifidni}: Testing Exact Text
2559 Identity\I{testing, exact text identity}
2561 The construct \c{%ifidn text1,text2} will cause the subsequent code
2562 to be assembled if and only if \c{text1} and \c{text2}, after
2563 expanding single-line macros, are identical pieces of text.
2564 Differences in white space are not counted.
2566 \c{%ifidni} is similar to \c{%ifidn}, but is \i{case-insensitive}.
2568 For example, the following macro pushes a register or number on the
2569 stack, and allows you to treat \c{IP} as a real register:
2571 \c %macro  pushparam 1
2573 \c   %ifidni %1,ip
2574 \c         call    %%label
2575 \c   %%label:
2576 \c   %else
2577 \c         push    %1
2578 \c   %endif
2580 \c %endmacro
2582 Like most other \c{%if} constructs, \c{%ifidn} has a counterpart
2583 \i\c{%elifidn}, and negative forms \i\c{%ifnidn} and \i\c{%elifnidn}.
2584 Similarly, \c{%ifidni} has counterparts \i\c{%elifidni},
2585 \i\c{%ifnidni} and \i\c{%elifnidni}.
2588 \S{iftyp} \i\c{%ifid}, \i\c{%ifnum}, \i\c{%ifstr}: Testing Token
2589 Types\I{testing, token types}
2591 Some macros will want to perform different tasks depending on
2592 whether they are passed a number, a string, or an identifier. For
2593 example, a string output macro might want to be able to cope with
2594 being passed either a string constant or a pointer to an existing
2595 string.
2597 The conditional assembly construct \c{%ifid}, taking one parameter
2598 (which may be blank), assembles the subsequent code if and only if
2599 the first token in the parameter exists and is an identifier.
2600 \c{%ifnum} works similarly, but tests for the token being a numeric
2601 constant; \c{%ifstr} tests for it being a string.
2603 For example, the \c{writefile} macro defined in \k{mlmacgre} can be
2604 extended to take advantage of \c{%ifstr} in the following fashion:
2606 \c %macro writefile 2-3+
2608 \c   %ifstr %2
2609 \c         jmp     %%endstr
2610 \c     %if %0 = 3
2611 \c       %%str:    db      %2,%3
2612 \c     %else
2613 \c       %%str:    db      %2
2614 \c     %endif
2615 \c       %%endstr: mov     dx,%%str
2616 \c                 mov     cx,%%endstr-%%str
2617 \c   %else
2618 \c                 mov     dx,%2
2619 \c                 mov     cx,%3
2620 \c   %endif
2621 \c                 mov     bx,%1
2622 \c                 mov     ah,0x40
2623 \c                 int     0x21
2625 \c %endmacro
2627 Then the \c{writefile} macro can cope with being called in either of
2628 the following two ways:
2630 \c         writefile [file], strpointer, length
2631 \c         writefile [file], "hello", 13, 10
2633 In the first, \c{strpointer} is used as the address of an
2634 already-declared string, and \c{length} is used as its length; in
2635 the second, a string is given to the macro, which therefore declares
2636 it itself and works out the address and length for itself.
2638 Note the use of \c{%if} inside the \c{%ifstr}: this is to detect
2639 whether the macro was passed two arguments (so the string would be a
2640 single string constant, and \c{db %2} would be adequate) or more (in
2641 which case, all but the first two would be lumped together into
2642 \c{%3}, and \c{db %2,%3} would be required).
2644 \I\c{%ifnid}\I\c{%elifid}\I\c{%elifnid}\I\c{%ifnnum}\I\c{%elifnum}
2645 \I\c{%elifnnum}\I\c{%ifnstr}\I\c{%elifstr}\I\c{%elifnstr}
2646 The usual \c{%elifXXX}, \c{%ifnXXX} and \c{%elifnXXX} versions exist
2647 for each of \c{%ifid}, \c{%ifnum} and \c{%ifstr}.
2650 \S{pperror} \i\c{%error}: Reporting \i{User-Defined Errors}
2652 The preprocessor directive \c{%error} will cause NASM to report an
2653 error if it occurs in assembled code. So if other users are going to
2654 try to assemble your source files, you can ensure that they define
2655 the right macros by means of code like this:
2657 \c %ifdef SOME_MACRO
2658 \c     ; do some setup
2659 \c %elifdef SOME_OTHER_MACRO
2660 \c     ; do some different setup
2661 \c %else
2662 \c     %error Neither SOME_MACRO nor SOME_OTHER_MACRO was defined.
2663 \c %endif
2665 Then any user who fails to understand the way your code is supposed
2666 to be assembled will be quickly warned of their mistake, rather than
2667 having to wait until the program crashes on being run and then not
2668 knowing what went wrong.
2671 \H{rep} \i{Preprocessor Loops}\I{repeating code}: \i\c{%rep}
2673 NASM's \c{TIMES} prefix, though useful, cannot be used to invoke a
2674 multi-line macro multiple times, because it is processed by NASM
2675 after macros have already been expanded. Therefore NASM provides
2676 another form of loop, this time at the preprocessor level: \c{%rep}.
2678 The directives \c{%rep} and \i\c{%endrep} (\c{%rep} takes a numeric
2679 argument, which can be an expression; \c{%endrep} takes no
2680 arguments) can be used to enclose a chunk of code, which is then
2681 replicated as many times as specified by the preprocessor:
2683 \c %assign i 0
2684 \c %rep    64
2685 \c         inc     word [table+2*i]
2686 \c %assign i i+1
2687 \c %endrep
2689 This will generate a sequence of 64 \c{INC} instructions,
2690 incrementing every word of memory from \c{[table]} to
2691 \c{[table+126]}.
2693 For more complex termination conditions, or to break out of a repeat
2694 loop part way along, you can use the \i\c{%exitrep} directive to
2695 terminate the loop, like this:
2697 \c fibonacci:
2698 \c %assign i 0
2699 \c %assign j 1
2700 \c %rep 100
2701 \c %if j > 65535
2702 \c     %exitrep
2703 \c %endif
2704 \c         dw j
2705 \c %assign k j+i
2706 \c %assign i j
2707 \c %assign j k
2708 \c %endrep
2710 \c fib_number equ ($-fibonacci)/2
2712 This produces a list of all the Fibonacci numbers that will fit in
2713 16 bits. Note that a maximum repeat count must still be given to
2714 \c{%rep}. This is to prevent the possibility of NASM getting into an
2715 infinite loop in the preprocessor, which (on multitasking or
2716 multi-user systems) would typically cause all the system memory to
2717 be gradually used up and other applications to start crashing.
2720 \H{include} \i{Including Other Files}
2722 Using, once again, a very similar syntax to the C preprocessor,
2723 NASM's preprocessor lets you include other source files into your
2724 code. This is done by the use of the \i\c{%include} directive:
2726 \c %include "macros.mac"
2728 will include the contents of the file \c{macros.mac} into the source
2729 file containing the \c{%include} directive.
2731 Include files are \I{searching for include files}searched for in the
2732 current directory (the directory you're in when you run NASM, as
2733 opposed to the location of the NASM executable or the location of
2734 the source file), plus any directories specified on the NASM command
2735 line using the \c{-i} option.
2737 The standard C idiom for preventing a file being included more than
2738 once is just as applicable in NASM: if the file \c{macros.mac} has
2739 the form
2741 \c %ifndef MACROS_MAC
2742 \c     %define MACROS_MAC
2743 \c     ; now define some macros
2744 \c %endif
2746 then including the file more than once will not cause errors,
2747 because the second time the file is included nothing will happen
2748 because the macro \c{MACROS_MAC} will already be defined.
2750 You can force a file to be included even if there is no \c{%include}
2751 directive that explicitly includes it, by using the \i\c{-p} option
2752 on the NASM command line (see \k{opt-p}).
2755 \H{ctxstack} The \i{Context Stack}
2757 Having labels that are local to a macro definition is sometimes not
2758 quite powerful enough: sometimes you want to be able to share labels
2759 between several macro calls. An example might be a \c{REPEAT} ...
2760 \c{UNTIL} loop, in which the expansion of the \c{REPEAT} macro
2761 would need to be able to refer to a label which the \c{UNTIL} macro
2762 had defined. However, for such a macro you would also want to be
2763 able to nest these loops.
2765 NASM provides this level of power by means of a \e{context stack}.
2766 The preprocessor maintains a stack of \e{contexts}, each of which is
2767 characterized by a name. You add a new context to the stack using
2768 the \i\c{%push} directive, and remove one using \i\c{%pop}. You can
2769 define labels that are local to a particular context on the stack.
2772 \S{pushpop} \i\c{%push} and \i\c{%pop}: \I{creating
2773 contexts}\I{removing contexts}Creating and Removing Contexts
2775 The \c{%push} directive is used to create a new context and place it
2776 on the top of the context stack. \c{%push} requires one argument,
2777 which is the name of the context. For example:
2779 \c %push    foobar
2781 This pushes a new context called \c{foobar} on the stack. You can
2782 have several contexts on the stack with the same name: they can
2783 still be distinguished.
2785 The directive \c{%pop}, requiring no arguments, removes the top
2786 context from the context stack and destroys it, along with any
2787 labels associated with it.
2790 \S{ctxlocal} \i{Context-Local Labels}
2792 Just as the usage \c{%%foo} defines a label which is local to the
2793 particular macro call in which it is used, the usage \I{%$}\c{%$foo}
2794 is used to define a label which is local to the context on the top
2795 of the context stack. So the \c{REPEAT} and \c{UNTIL} example given
2796 above could be implemented by means of:
2798 \c %macro repeat 0
2800 \c     %push   repeat
2801 \c     %$begin:
2803 \c %endmacro
2805 \c %macro until 1
2807 \c         j%-1    %$begin
2808 \c     %pop
2810 \c %endmacro
2812 and invoked by means of, for example,
2814 \c         mov     cx,string
2815 \c         repeat
2816 \c         add     cx,3
2817 \c         scasb
2818 \c         until   e
2820 which would scan every fourth byte of a string in search of the byte
2821 in \c{AL}.
2823 If you need to define, or access, labels local to the context
2824 \e{below} the top one on the stack, you can use \I{%$$}\c{%$$foo}, or
2825 \c{%$$$foo} for the context below that, and so on.
2828 \S{ctxdefine} \i{Context-Local Single-Line Macros}
2830 NASM also allows you to define single-line macros which are local to
2831 a particular context, in just the same way:
2833 \c %define %$localmac 3
2835 will define the single-line macro \c{%$localmac} to be local to the
2836 top context on the stack. Of course, after a subsequent \c{%push},
2837 it can then still be accessed by the name \c{%$$localmac}.
2840 \S{ctxrepl} \i\c{%repl}: \I{renaming contexts}Renaming a Context
2842 If you need to change the name of the top context on the stack (in
2843 order, for example, to have it respond differently to \c{%ifctx}),
2844 you can execute a \c{%pop} followed by a \c{%push}; but this will
2845 have the side effect of destroying all context-local labels and
2846 macros associated with the context that was just popped.
2848 NASM provides the directive \c{%repl}, which \e{replaces} a context
2849 with a different name, without touching the associated macros and
2850 labels. So you could replace the destructive code
2852 \c %pop
2853 \c %push   newname
2855 with the non-destructive version \c{%repl newname}.
2858 \S{blockif} Example Use of the \i{Context Stack}: \i{Block IFs}
2860 This example makes use of almost all the context-stack features,
2861 including the conditional-assembly construct \i\c{%ifctx}, to
2862 implement a block IF statement as a set of macros.
2864 \c %macro if 1
2866 \c     %push if
2867 \c     j%-1  %$ifnot
2869 \c %endmacro
2871 \c %macro else 0
2873 \c   %ifctx if
2874 \c         %repl   else
2875 \c         jmp     %$ifend
2876 \c         %$ifnot:
2877 \c   %else
2878 \c         %error  "expected `if' before `else'"
2879 \c   %endif
2881 \c %endmacro
2883 \c %macro endif 0
2885 \c   %ifctx if
2886 \c         %$ifnot:
2887 \c         %pop
2888 \c   %elifctx      else
2889 \c         %$ifend:
2890 \c         %pop
2891 \c   %else
2892 \c         %error  "expected `if' or `else' before `endif'"
2893 \c   %endif
2895 \c %endmacro
2897 This code is more robust than the \c{REPEAT} and \c{UNTIL} macros
2898 given in \k{ctxlocal}, because it uses conditional assembly to check
2899 that the macros are issued in the right order (for example, not
2900 calling \c{endif} before \c{if}) and issues a \c{%error} if they're
2901 not.
2903 In addition, the \c{endif} macro has to be able to cope with the two
2904 distinct cases of either directly following an \c{if}, or following
2905 an \c{else}. It achieves this, again, by using conditional assembly
2906 to do different things depending on whether the context on top of
2907 the stack is \c{if} or \c{else}.
2909 The \c{else} macro has to preserve the context on the stack, in
2910 order to have the \c{%$ifnot} referred to by the \c{if} macro be the
2911 same as the one defined by the \c{endif} macro, but has to change
2912 the context's name so that \c{endif} will know there was an
2913 intervening \c{else}. It does this by the use of \c{%repl}.
2915 A sample usage of these macros might look like:
2917 \c         cmp     ax,bx
2919 \c         if ae
2920 \c                cmp     bx,cx
2922 \c                if ae
2923 \c                        mov     ax,cx
2924 \c                else
2925 \c                        mov     ax,bx
2926 \c                endif
2928 \c         else
2929 \c                cmp     ax,cx
2931 \c                if ae
2932 \c                        mov     ax,cx
2933 \c                endif
2935 \c         endif
2937 The block-\c{IF} macros handle nesting quite happily, by means of
2938 pushing another context, describing the inner \c{if}, on top of the
2939 one describing the outer \c{if}; thus \c{else} and \c{endif} always
2940 refer to the last unmatched \c{if} or \c{else}.
2943 \H{stdmac} \i{Standard Macros}
2945 NASM defines a set of standard macros, which are already defined
2946 when it starts to process any source file. If you really need a
2947 program to be assembled with no pre-defined macros, you can use the
2948 \i\c{%clear} directive to empty the preprocessor of everything but
2949 context-local preprocessor variables and single-line macros.
2951 Most \i{user-level assembler directives} (see \k{directive}) are
2952 implemented as macros which invoke primitive directives; these are
2953 described in \k{directive}. The rest of the standard macro set is
2954 described here.
2957 \S{stdmacver} \i\c{__NASM_MAJOR__}, \i\c{__NASM_MINOR__},
2958 \i\c{__NASM_SUBMINOR__} and \i\c{___NASM_PATCHLEVEL__}: \i{NASM Version}
2960 The single-line macros \c{__NASM_MAJOR__}, \c{__NASM_MINOR__},
2961 \c{__NASM_SUBMINOR__} and \c{___NASM_PATCHLEVEL__} expand to the
2962 major, minor, subminor and patch level parts of the \i{version
2963 number of NASM} being used. So, under NASM 0.98.32p1 for
2964 example, \c{__NASM_MAJOR__} would be defined to be 0, \c{__NASM_MINOR__}
2965 would be defined as 98, \c{__NASM_SUBMINOR__} would be defined to 32,
2966 and \c{___NASM_PATCHLEVEL__} would be defined as 1.
2969 \S{stdmacverid} \i\c{__NASM_VERSION_ID__}: \i{NASM Version ID}
2971 The single-line macro \c{__NASM_VERSION_ID__} expands to a dword integer
2972 representing the full version number of the version of nasm being used.
2973 The value is the equivalent to \c{__NASM_MAJOR__}, \c{__NASM_MINOR__},
2974 \c{__NASM_SUBMINOR__} and \c{___NASM_PATCHLEVEL__} concatenated to
2975 produce a single doubleword. Hence, for 0.98.32p1, the returned number
2976 would be equivalent to:
2978 \c         dd      0x00622001
2982 \c         db      1,32,98,0
2984 Note that the above lines are generate exactly the same code, the second
2985 line is used just to give an indication of the order that the separate
2986 values will be present in memory.
2989 \S{stdmacverstr} \i\c{__NASM_VER__}: \i{NASM Version string}
2991 The single-line macro \c{__NASM_VER__} expands to a string which defines
2992 the version number of nasm being used. So, under NASM 0.98.32 for example,
2994 \c         db      __NASM_VER__
2996 would expand to
2998 \c         db      "0.98.32"
3001 \S{fileline} \i\c{__FILE__} and \i\c{__LINE__}: File Name and Line Number
3003 Like the C preprocessor, NASM allows the user to find out the file
3004 name and line number containing the current instruction. The macro
3005 \c{__FILE__} expands to a string constant giving the name of the
3006 current input file (which may change through the course of assembly
3007 if \c{%include} directives are used), and \c{__LINE__} expands to a
3008 numeric constant giving the current line number in the input file.
3010 These macros could be used, for example, to communicate debugging
3011 information to a macro, since invoking \c{__LINE__} inside a macro
3012 definition (either single-line or multi-line) will return the line
3013 number of the macro \e{call}, rather than \e{definition}. So to
3014 determine where in a piece of code a crash is occurring, for
3015 example, one could write a routine \c{stillhere}, which is passed a
3016 line number in \c{EAX} and outputs something like `line 155: still
3017 here'. You could then write a macro
3019 \c %macro  notdeadyet 0
3021 \c         push    eax
3022 \c         mov     eax,__LINE__
3023 \c         call    stillhere
3024 \c         pop     eax
3026 \c %endmacro
3028 and then pepper your code with calls to \c{notdeadyet} until you
3029 find the crash point.
3031 \S{bitsm} \i\c{__BITS__}: Current BITS Mode
3033 The \c{__BITS__} standard macro is updated every time that the BITS mode is
3034 set using the \c{BITS XX} or \c{[BITS XX]} directive, where XX is a valid mode
3035 number of 16, 32 or 64. \c{__BITS__} receives the specified mode number and
3036 makes it globally available. This can be very useful for those who utilize
3037 mode-dependent macros.
3040 \S{struc} \i\c{STRUC} and \i\c{ENDSTRUC}: \i{Declaring Structure} Data Types
3042 The core of NASM contains no intrinsic means of defining data
3043 structures; instead, the preprocessor is sufficiently powerful that
3044 data structures can be implemented as a set of macros. The macros
3045 \c{STRUC} and \c{ENDSTRUC} are used to define a structure data type.
3047 \c{STRUC} takes one parameter, which is the name of the data type.
3048 This name is defined as a symbol with the value zero, and also has
3049 the suffix \c{_size} appended to it and is then defined as an
3050 \c{EQU} giving the size of the structure. Once \c{STRUC} has been
3051 issued, you are defining the structure, and should define fields
3052 using the \c{RESB} family of pseudo-instructions, and then invoke
3053 \c{ENDSTRUC} to finish the definition.
3055 For example, to define a structure called \c{mytype} containing a
3056 longword, a word, a byte and a string of bytes, you might code
3058 \c struc   mytype
3060 \c   mt_long:      resd    1
3061 \c   mt_word:      resw    1
3062 \c   mt_byte:      resb    1
3063 \c   mt_str:       resb    32
3065 \c endstruc
3067 The above code defines six symbols: \c{mt_long} as 0 (the offset
3068 from the beginning of a \c{mytype} structure to the longword field),
3069 \c{mt_word} as 4, \c{mt_byte} as 6, \c{mt_str} as 7, \c{mytype_size}
3070 as 39, and \c{mytype} itself as zero.
3072 The reason why the structure type name is defined at zero is a side
3073 effect of allowing structures to work with the local label
3074 mechanism: if your structure members tend to have the same names in
3075 more than one structure, you can define the above structure like this:
3077 \c struc mytype
3079 \c   .long:        resd    1
3080 \c   .word:        resw    1
3081 \c   .byte:        resb    1
3082 \c   .str:         resb    32
3084 \c endstruc
3086 This defines the offsets to the structure fields as \c{mytype.long},
3087 \c{mytype.word}, \c{mytype.byte} and \c{mytype.str}.
3089 NASM, since it has no \e{intrinsic} structure support, does not
3090 support any form of period notation to refer to the elements of a
3091 structure once you have one (except the above local-label notation),
3092 so code such as \c{mov ax,[mystruc.mt_word]} is not valid.
3093 \c{mt_word} is a constant just like any other constant, so the
3094 correct syntax is \c{mov ax,[mystruc+mt_word]} or \c{mov
3095 ax,[mystruc+mytype.word]}.
3098 \S{istruc} \i\c{ISTRUC}, \i\c{AT} and \i\c{IEND}: Declaring
3099 \i{Instances of Structures}
3101 Having defined a structure type, the next thing you typically want
3102 to do is to declare instances of that structure in your data
3103 segment. NASM provides an easy way to do this in the \c{ISTRUC}
3104 mechanism. To declare a structure of type \c{mytype} in a program,
3105 you code something like this:
3107 \c mystruc:
3108 \c     istruc mytype
3110 \c         at mt_long, dd      123456
3111 \c         at mt_word, dw      1024
3112 \c         at mt_byte, db      'x'
3113 \c         at mt_str,  db      'hello, world', 13, 10, 0
3115 \c     iend
3117 The function of the \c{AT} macro is to make use of the \c{TIMES}
3118 prefix to advance the assembly position to the correct point for the
3119 specified structure field, and then to declare the specified data.
3120 Therefore the structure fields must be declared in the same order as
3121 they were specified in the structure definition.
3123 If the data to go in a structure field requires more than one source
3124 line to specify, the remaining source lines can easily come after
3125 the \c{AT} line. For example:
3127 \c         at mt_str,  db      123,134,145,156,167,178,189
3128 \c                     db      190,100,0
3130 Depending on personal taste, you can also omit the code part of the
3131 \c{AT} line completely, and start the structure field on the next
3132 line:
3134 \c         at mt_str
3135 \c                 db      'hello, world'
3136 \c                 db      13,10,0
3139 \S{align} \i\c{ALIGN} and \i\c{ALIGNB}: Data Alignment
3141 The \c{ALIGN} and \c{ALIGNB} macros provides a convenient way to
3142 align code or data on a word, longword, paragraph or other boundary.
3143 (Some assemblers call this directive \i\c{EVEN}.) The syntax of the
3144 \c{ALIGN} and \c{ALIGNB} macros is
3146 \c         align   4               ; align on 4-byte boundary
3147 \c         align   16              ; align on 16-byte boundary
3148 \c         align   8,db 0          ; pad with 0s rather than NOPs
3149 \c         align   4,resb 1        ; align to 4 in the BSS
3150 \c         alignb  4               ; equivalent to previous line
3152 Both macros require their first argument to be a power of two; they
3153 both compute the number of additional bytes required to bring the
3154 length of the current section up to a multiple of that power of two,
3155 and then apply the \c{TIMES} prefix to their second argument to
3156 perform the alignment.
3158 If the second argument is not specified, the default for \c{ALIGN}
3159 is \c{NOP}, and the default for \c{ALIGNB} is \c{RESB 1}. So if the
3160 second argument is specified, the two macros are equivalent.
3161 Normally, you can just use \c{ALIGN} in code and data sections and
3162 \c{ALIGNB} in BSS sections, and never need the second argument
3163 except for special purposes.
3165 \c{ALIGN} and \c{ALIGNB}, being simple macros, perform no error
3166 checking: they cannot warn you if their first argument fails to be a
3167 power of two, or if their second argument generates more than one
3168 byte of code. In each of these cases they will silently do the wrong
3169 thing.
3171 \c{ALIGNB} (or \c{ALIGN} with a second argument of \c{RESB 1}) can
3172 be used within structure definitions:
3174 \c struc mytype2
3176 \c   mt_byte:
3177 \c         resb 1
3178 \c         alignb 2
3179 \c   mt_word:
3180 \c         resw 1
3181 \c         alignb 4
3182 \c   mt_long:
3183 \c         resd 1
3184 \c   mt_str:
3185 \c         resb 32
3187 \c endstruc
3189 This will ensure that the structure members are sensibly aligned
3190 relative to the base of the structure.
3192 A final caveat: \c{ALIGN} and \c{ALIGNB} work relative to the
3193 beginning of the \e{section}, not the beginning of the address space
3194 in the final executable. Aligning to a 16-byte boundary when the
3195 section you're in is only guaranteed to be aligned to a 4-byte
3196 boundary, for example, is a waste of effort. Again, NASM does not
3197 check that the section's alignment characteristics are sensible for
3198 the use of \c{ALIGN} or \c{ALIGNB}.
3201 \H{tasmcompat} \i{TASM Compatible Preprocessor Directives}
3203 The following preprocessor directives may only be used when TASM
3204 compatibility is turned on using the \c{-t} command line switch
3205 (This switch is described in \k{opt-t}.)
3207 \b\c{%arg}  (see \k{arg})
3209 \b\c{%stacksize}  (see \k{stacksize})
3211 \b\c{%local}  (see \k{local})
3214 \S{arg} \i\c{%arg} Directive
3216 The \c{%arg} directive is used to simplify the handling of
3217 parameters passed on the stack. Stack based parameter passing
3218 is used by many high level languages, including C, C++ and Pascal.
3220 While NASM comes with macros which attempt to duplicate this
3221 functionality (see \k{16cmacro}), the syntax is not particularly
3222 convenient to use and is not TASM compatible. Here is an example
3223 which shows the use of \c{%arg} without any external macros:
3225 \c some_function:
3227 \c     %push     mycontext        ; save the current context
3228 \c     %stacksize large           ; tell NASM to use bp
3229 \c     %arg      i:word, j_ptr:word
3231 \c         mov     ax,[i]
3232 \c         mov     bx,[j_ptr]
3233 \c         add     ax,[bx]
3234 \c         ret
3236 \c     %pop                       ; restore original context
3238 This is similar to the procedure defined in \k{16cmacro} and adds
3239 the value in i to the value pointed to by j_ptr and returns the
3240 sum in the ax register. See \k{pushpop} for an explanation of
3241 \c{push} and \c{pop} and the use of context stacks.
3244 \S{stacksize} \i\c{%stacksize} Directive
3246 The \c{%stacksize} directive is used in conjunction with the
3247 \c{%arg} (see \k{arg}) and the \c{%local} (see \k{local}) directives.
3248 It tells NASM the default size to use for subsequent \c{%arg} and
3249 \c{%local} directives. The \c{%stacksize} directive takes one
3250 required argument which is one of \c{flat}, \c{large} or \c{small}.
3252 \c %stacksize flat
3254 This form causes NASM to use stack-based parameter addressing
3255 relative to \c{ebp} and it assumes that a near form of call was used
3256 to get to this label (i.e. that \c{eip} is on the stack).
3258 \c %stacksize large
3260 This form uses \c{bp} to do stack-based parameter addressing and
3261 assumes that a far form of call was used to get to this address
3262 (i.e. that \c{ip} and \c{cs} are on the stack).
3264 \c %stacksize small
3266 This form also uses \c{bp} to address stack parameters, but it is
3267 different from \c{large} because it also assumes that the old value
3268 of bp is pushed onto the stack (i.e. it expects an \c{ENTER}
3269 instruction). In other words, it expects that \c{bp}, \c{ip} and
3270 \c{cs} are on the top of the stack, underneath any local space which
3271 may have been allocated by \c{ENTER}. This form is probably most
3272 useful when used in combination with the \c{%local} directive
3273 (see \k{local}).
3276 \S{local} \i\c{%local} Directive
3278 The \c{%local} directive is used to simplify the use of local
3279 temporary stack variables allocated in a stack frame. Automatic
3280 local variables in C are an example of this kind of variable. The
3281 \c{%local} directive is most useful when used with the \c{%stacksize}
3282 (see \k{stacksize} and is also compatible with the \c{%arg} directive
3283 (see \k{arg}). It allows simplified reference to variables on the
3284 stack which have been allocated typically by using the \c{ENTER}
3285 instruction.
3286 \# (see \k{insENTER} for a description of that instruction).
3287 An example of its use is the following:
3289 \c silly_swap:
3291 \c     %push mycontext             ; save the current context
3292 \c     %stacksize small            ; tell NASM to use bp
3293 \c     %assign %$localsize 0       ; see text for explanation
3294 \c     %local old_ax:word, old_dx:word
3296 \c         enter   %$localsize,0   ; see text for explanation
3297 \c         mov     [old_ax],ax     ; swap ax & bx
3298 \c         mov     [old_dx],dx     ; and swap dx & cx
3299 \c         mov     ax,bx
3300 \c         mov     dx,cx
3301 \c         mov     bx,[old_ax]
3302 \c         mov     cx,[old_dx]
3303 \c         leave                   ; restore old bp
3304 \c         ret                     ;
3306 \c     %pop                        ; restore original context
3308 The \c{%$localsize} variable is used internally by the
3309 \c{%local} directive and \e{must} be defined within the
3310 current context before the \c{%local} directive may be used.
3311 Failure to do so will result in one expression syntax error for
3312 each \c{%local} variable declared. It then may be used in
3313 the construction of an appropriately sized ENTER instruction
3314 as shown in the example.
3316 \H{otherpreproc} \i{Other Preprocessor Directives}
3318 NASM also has preprocessor directives which allow access to
3319 information from external sources. Currently they include:
3321 The following preprocessor directive is supported to allow NASM to
3322 correctly handle output of the cpp C language preprocessor.
3324 \b\c{%line} enables NAsM to correctly handle the output of the cpp
3325 C language preprocessor (see \k{line}).
3327 \b\c{%!} enables NASM to read in the value of an environment variable,
3328 which can then be used in your program (see \k{getenv}).
3330 \S{line} \i\c{%line} Directive
3332 The \c{%line} directive is used to notify NASM that the input line
3333 corresponds to a specific line number in another file.  Typically
3334 this other file would be an original source file, with the current
3335 NASM input being the output of a pre-processor.  The \c{%line}
3336 directive allows NASM to output messages which indicate the line
3337 number of the original source file, instead of the file that is being
3338 read by NASM.
3340 This preprocessor directive is not generally of use to programmers,
3341 by may be of interest to preprocessor authors.  The usage of the
3342 \c{%line} preprocessor directive is as follows:
3344 \c %line nnn[+mmm] [filename]
3346 In this directive, \c{nnn} indentifies the line of the original source
3347 file which this line corresponds to.  \c{mmm} is an optional parameter
3348 which specifies a line increment value; each line of the input file
3349 read in is considered to correspond to \c{mmm} lines of the original
3350 source file.  Finally, \c{filename} is an optional parameter which
3351 specifies the file name of the original source file.
3353 After reading a \c{%line} preprocessor directive, NASM will report
3354 all file name and line numbers relative to the values specified
3355 therein.
3358 \S{getenv} \i\c{%!}\c{<env>}: Read an environment variable.
3360 The \c{%!<env>} directive makes it possible to read the value of an
3361 environment variable at assembly time. This could, for example, be used
3362 to store the contents of an environment variable into a string, which
3363 could be used at some other point in your code.
3365 For example, suppose that you have an environment variable \c{FOO}, and
3366 you want the contents of \c{FOO} to be embedded in your program. You
3367 could do that as follows:
3369 \c %define FOO    %!FOO
3370 \c %define quote   '
3372 \c tmpstr  db      quote FOO quote
3374 At the time of writing, this will generate an "unterminated string"
3375 warning at the time of defining "quote", and it will add a space
3376 before and after the string that is read in. I was unable to find
3377 a simple workaround (although a workaround can be created using a
3378 multi-line macro), so I believe that you will need to either learn how
3379 to create more complex macros, or allow for the extra spaces if you
3380 make use of this feature in that way.
3383 \C{directive} \i{Assembler Directives}
3385 NASM, though it attempts to avoid the bureaucracy of assemblers like
3386 MASM and TASM, is nevertheless forced to support a \e{few}
3387 directives. These are described in this chapter.
3389 NASM's directives come in two types: \I{user-level
3390 directives}\e{user-level} directives and \I{primitive
3391 directives}\e{primitive} directives. Typically, each directive has a
3392 user-level form and a primitive form. In almost all cases, we
3393 recommend that users use the user-level forms of the directives,
3394 which are implemented as macros which call the primitive forms.
3396 Primitive directives are enclosed in square brackets; user-level
3397 directives are not.
3399 In addition to the universal directives described in this chapter,
3400 each object file format can optionally supply extra directives in
3401 order to control particular features of that file format. These
3402 \I{format-specific directives}\e{format-specific} directives are
3403 documented along with the formats that implement them, in \k{outfmt}.
3406 \H{bits} \i\c{BITS}: Specifying Target \i{Processor Mode}
3408 The \c{BITS} directive specifies whether NASM should generate code
3409 \I{16-bit mode, versus 32-bit mode}designed to run on a processor
3410 operating in 16-bit mode, 32-bit mode or 64-bit mode. The syntax is
3411 \c{BITS XX}, where XX is 16, 32 or 64.
3413 In most cases, you should not need to use \c{BITS} explicitly. The
3414 \c{aout}, \c{coff}, \c{elf}, \c{macho}, \c{win32} and \c{win64}
3415 object formats, which are designed for use in 32-bit or 64-bit
3416 operating systems, all cause NASM to select 32-bit or 64-bit mode,
3417 respectively, by default. The \c{obj} object format allows you
3418 to specify each segment you define as either \c{USE16} or \c{USE32},
3419 and NASM will set its operating mode accordingly, so the use of the
3420 \c{BITS} directive is once again unnecessary.
3422 The most likely reason for using the \c{BITS} directive is to write
3423 32-bit or 64-bit code in a flat binary file; this is because the \c{bin}
3424 output format defaults to 16-bit mode in anticipation of it being
3425 used most frequently to write DOS \c{.COM} programs, DOS \c{.SYS}
3426 device drivers and boot loader software.
3428 You do \e{not} need to specify \c{BITS 32} merely in order to use
3429 32-bit instructions in a 16-bit DOS program; if you do, the
3430 assembler will generate incorrect code because it will be writing
3431 code targeted at a 32-bit platform, to be run on a 16-bit one.
3433 When NASM is in \c{BITS 16} mode, instructions which use 32-bit
3434 data are prefixed with an 0x66 byte, and those referring to 32-bit
3435 addresses have an 0x67 prefix. In \c{BITS 32} mode, the reverse is
3436 true: 32-bit instructions require no prefixes, whereas instructions
3437 using 16-bit data need an 0x66 and those working on 16-bit addresses
3438 need an 0x67.
3440 When NASM is in \c{BITS 64} mode, most instructions operate the same
3441 as they do for \c{BITS 32} mode. However, there are 8 more general and
3442 SSE registers, and 16-bit addressing is no longer supported.
3444 The default address size is 64 bits; 32-bit addressing can be selected
3445 with the 0x67 prefix.  The default operand size is still 32 bits,
3446 however, and the 0x66 prefix selects 16-bit operand size.  The \c{REX}
3447 prefix is used both to select 64-bit operand size, and to access the
3448 new registers. NASM automatically inserts REX prefixes when
3449 necessary.
3451 When the \c{REX} prefix is used, the processor does not know how to
3452 address the AH, BH, CH or DH (high 8-bit legacy) registers. Instead,
3453 it is possible to access the the low 8-bits of the SP, BP SI and DI
3454 registers as SPL, BPL, SIL and DIL, respectively; but only when the
3455 REX prefix is used.
3457 The \c{BITS} directive has an exactly equivalent primitive form,
3458 \c{[BITS 16]}, \c{[BITS 32]} and \c{[BITS 64]}. The user-level form is
3459 a macro which has no function other than to call the primitive form.
3461 Note that the space is neccessary, e.g. \c{BITS32} will \e{not} work!
3463 \S{USE16 & USE32} \i\c{USE16} & \i\c{USE32}: Aliases for BITS
3465 The `\c{USE16}' and `\c{USE32}' directives can be used in place of
3466 `\c{BITS 16}' and `\c{BITS 32}', for compatibility with other assemblers.
3469 \H{default} \i\c{DEFAULT}: Change the assembler defaults
3471 The \c{DEFAULT} directive changes the assembler defaults.  Normally,
3472 NASM defaults to a mode where the programmer is expected to explicitly
3473 specify most features directly.  However, this is occationally
3474 obnoxious, as the explicit form is pretty much the only one one wishes
3475 to use.
3477 Currently, the only \c{DEFAULT} that is settable is whether or not
3478 registerless instructions in 64-bit mode are \c{RIP}-relative or not.
3479 By default, they are absolute unless overridden with the \i\c{REL}
3480 specifier (see \k{effaddr}).  However, if \c{DEFAULT REL} is
3481 specified, \c{REL} is default, unless overridden with the \c{ABS}
3482 specifier, \e{except when used with an FS or GS segment override}.
3484 The special handling of \c{FS} and \c{GS} overrides are due to the
3485 fact that these registers are generally used as thread pointers or
3486 other special functions in 64-bit mode, and generating
3487 \c{RIP}-relative addresses would be extremely confusing.
3489 \c{DEFAULT REL} is disabled with \c{DEFAULT ABS}.
3491 \H{section} \i\c{SECTION} or \i\c{SEGMENT}: Changing and \i{Defining
3492 Sections}
3494 \I{changing sections}\I{switching between sections}The \c{SECTION}
3495 directive (\c{SEGMENT} is an exactly equivalent synonym) changes
3496 which section of the output file the code you write will be
3497 assembled into. In some object file formats, the number and names of
3498 sections are fixed; in others, the user may make up as many as they
3499 wish. Hence \c{SECTION} may sometimes give an error message, or may
3500 define a new section, if you try to switch to a section that does
3501 not (yet) exist.
3503 The Unix object formats, and the \c{bin} object format (but see
3504 \k{multisec}, all support
3505 the \i{standardized section names} \c{.text}, \c{.data} and \c{.bss}
3506 for the code, data and uninitialized-data sections. The \c{obj}
3507 format, by contrast, does not recognize these section names as being
3508 special, and indeed will strip off the leading period of any section
3509 name that has one.
3512 \S{sectmac} The \i\c{__SECT__} Macro
3514 The \c{SECTION} directive is unusual in that its user-level form
3515 functions differently from its primitive form. The primitive form,
3516 \c{[SECTION xyz]}, simply switches the current target section to the
3517 one given. The user-level form, \c{SECTION xyz}, however, first
3518 defines the single-line macro \c{__SECT__} to be the primitive
3519 \c{[SECTION]} directive which it is about to issue, and then issues
3520 it. So the user-level directive
3522 \c         SECTION .text
3524 expands to the two lines
3526 \c %define __SECT__        [SECTION .text]
3527 \c         [SECTION .text]
3529 Users may find it useful to make use of this in their own macros.
3530 For example, the \c{writefile} macro defined in \k{mlmacgre} can be
3531 usefully rewritten in the following more sophisticated form:
3533 \c %macro  writefile 2+
3535 \c         [section .data]
3537 \c   %%str:        db      %2
3538 \c   %%endstr:
3540 \c         __SECT__
3542 \c         mov     dx,%%str
3543 \c         mov     cx,%%endstr-%%str
3544 \c         mov     bx,%1
3545 \c         mov     ah,0x40
3546 \c         int     0x21
3548 \c %endmacro
3550 This form of the macro, once passed a string to output, first
3551 switches temporarily to the data section of the file, using the
3552 primitive form of the \c{SECTION} directive so as not to modify
3553 \c{__SECT__}. It then declares its string in the data section, and
3554 then invokes \c{__SECT__} to switch back to \e{whichever} section
3555 the user was previously working in. It thus avoids the need, in the
3556 previous version of the macro, to include a \c{JMP} instruction to
3557 jump over the data, and also does not fail if, in a complicated
3558 \c{OBJ} format module, the user could potentially be assembling the
3559 code in any of several separate code sections.
3562 \H{absolute} \i\c{ABSOLUTE}: Defining Absolute Labels
3564 The \c{ABSOLUTE} directive can be thought of as an alternative form
3565 of \c{SECTION}: it causes the subsequent code to be directed at no
3566 physical section, but at the hypothetical section starting at the
3567 given absolute address. The only instructions you can use in this
3568 mode are the \c{RESB} family.
3570 \c{ABSOLUTE} is used as follows:
3572 \c absolute 0x1A
3574 \c     kbuf_chr    resw    1
3575 \c     kbuf_free   resw    1
3576 \c     kbuf        resw    16
3578 This example describes a section of the PC BIOS data area, at
3579 segment address 0x40: the above code defines \c{kbuf_chr} to be
3580 0x1A, \c{kbuf_free} to be 0x1C, and \c{kbuf} to be 0x1E.
3582 The user-level form of \c{ABSOLUTE}, like that of \c{SECTION},
3583 redefines the \i\c{__SECT__} macro when it is invoked.
3585 \i\c{STRUC} and \i\c{ENDSTRUC} are defined as macros which use
3586 \c{ABSOLUTE} (and also \c{__SECT__}).
3588 \c{ABSOLUTE} doesn't have to take an absolute constant as an
3589 argument: it can take an expression (actually, a \i{critical
3590 expression}: see \k{crit}) and it can be a value in a segment. For
3591 example, a TSR can re-use its setup code as run-time BSS like this:
3593 \c         org     100h               ; it's a .COM program
3595 \c         jmp     setup              ; setup code comes last
3597 \c         ; the resident part of the TSR goes here
3598 \c setup:
3599 \c         ; now write the code that installs the TSR here
3601 \c absolute setup
3603 \c runtimevar1     resw    1
3604 \c runtimevar2     resd    20
3606 \c tsr_end:
3608 This defines some variables `on top of' the setup code, so that
3609 after the setup has finished running, the space it took up can be
3610 re-used as data storage for the running TSR. The symbol `tsr_end'
3611 can be used to calculate the total size of the part of the TSR that
3612 needs to be made resident.
3615 \H{extern} \i\c{EXTERN}: \i{Importing Symbols} from Other Modules
3617 \c{EXTERN} is similar to the MASM directive \c{EXTRN} and the C
3618 keyword \c{extern}: it is used to declare a symbol which is not
3619 defined anywhere in the module being assembled, but is assumed to be
3620 defined in some other module and needs to be referred to by this
3621 one. Not every object-file format can support external variables:
3622 the \c{bin} format cannot.
3624 The \c{EXTERN} directive takes as many arguments as you like. Each
3625 argument is the name of a symbol:
3627 \c extern  _printf
3628 \c extern  _sscanf,_fscanf
3630 Some object-file formats provide extra features to the \c{EXTERN}
3631 directive. In all cases, the extra features are used by suffixing a
3632 colon to the symbol name followed by object-format specific text.
3633 For example, the \c{obj} format allows you to declare that the
3634 default segment base of an external should be the group \c{dgroup}
3635 by means of the directive
3637 \c extern  _variable:wrt dgroup
3639 The primitive form of \c{EXTERN} differs from the user-level form
3640 only in that it can take only one argument at a time: the support
3641 for multiple arguments is implemented at the preprocessor level.
3643 You can declare the same variable as \c{EXTERN} more than once: NASM
3644 will quietly ignore the second and later redeclarations. You can't
3645 declare a variable as \c{EXTERN} as well as something else, though.
3648 \H{global} \i\c{GLOBAL}: \i{Exporting Symbols} to Other Modules
3650 \c{GLOBAL} is the other end of \c{EXTERN}: if one module declares a
3651 symbol as \c{EXTERN} and refers to it, then in order to prevent
3652 linker errors, some other module must actually \e{define} the
3653 symbol and declare it as \c{GLOBAL}. Some assemblers use the name
3654 \i\c{PUBLIC} for this purpose.
3656 The \c{GLOBAL} directive applying to a symbol must appear \e{before}
3657 the definition of the symbol.
3659 \c{GLOBAL} uses the same syntax as \c{EXTERN}, except that it must
3660 refer to symbols which \e{are} defined in the same module as the
3661 \c{GLOBAL} directive. For example:
3663 \c global _main
3664 \c _main:
3665 \c         ; some code
3667 \c{GLOBAL}, like \c{EXTERN}, allows object formats to define private
3668 extensions by means of a colon. The \c{elf} object format, for
3669 example, lets you specify whether global data items are functions or
3670 data:
3672 \c global  hashlookup:function, hashtable:data
3674 Like \c{EXTERN}, the primitive form of \c{GLOBAL} differs from the
3675 user-level form only in that it can take only one argument at a
3676 time.
3679 \H{common} \i\c{COMMON}: Defining Common Data Areas
3681 The \c{COMMON} directive is used to declare \i\e{common variables}.
3682 A common variable is much like a global variable declared in the
3683 uninitialized data section, so that
3685 \c common  intvar  4
3687 is similar in function to
3689 \c global  intvar
3690 \c section .bss
3692 \c intvar  resd    1
3694 The difference is that if more than one module defines the same
3695 common variable, then at link time those variables will be
3696 \e{merged}, and references to \c{intvar} in all modules will point
3697 at the same piece of memory.
3699 Like \c{GLOBAL} and \c{EXTERN}, \c{COMMON} supports object-format
3700 specific extensions. For example, the \c{obj} format allows common
3701 variables to be NEAR or FAR, and the \c{elf} format allows you to
3702 specify the alignment requirements of a common variable:
3704 \c common  commvar  4:near  ; works in OBJ
3705 \c common  intarray 100:4   ; works in ELF: 4 byte aligned
3707 Once again, like \c{EXTERN} and \c{GLOBAL}, the primitive form of
3708 \c{COMMON} differs from the user-level form only in that it can take
3709 only one argument at a time.
3712 \H{CPU} \i\c{CPU}: Defining CPU Dependencies
3714 The \i\c{CPU} directive restricts assembly to those instructions which
3715 are available on the specified CPU.
3717 Options are:
3719 \b\c{CPU 8086}          Assemble only 8086 instruction set
3721 \b\c{CPU 186}           Assemble instructions up to the 80186 instruction set
3723 \b\c{CPU 286}           Assemble instructions up to the 286 instruction set
3725 \b\c{CPU 386}           Assemble instructions up to the 386 instruction set
3727 \b\c{CPU 486}           486 instruction set
3729 \b\c{CPU 586}           Pentium instruction set
3731 \b\c{CPU PENTIUM}       Same as 586
3733 \b\c{CPU 686}           P6 instruction set
3735 \b\c{CPU PPRO}          Same as 686
3737 \b\c{CPU P2}            Same as 686
3739 \b\c{CPU P3}            Pentium III (Katmai) instruction sets
3741 \b\c{CPU KATMAI}        Same as P3
3743 \b\c{CPU P4}            Pentium 4 (Willamette) instruction set
3745 \b\c{CPU WILLAMETTE}    Same as P4
3747 \b\c{CPU PRESCOTT}      Prescott instruction set
3749 \b\c{CPU X64}           x86-64 (x64/AMD64/EM64T) instruction set
3751 \b\c{CPU IA64}          IA64 CPU (in x86 mode) instruction set
3753 All options are case insensitive.  All instructions will be selected
3754 only if they apply to the selected CPU or lower.  By default, all
3755 instructions are available.
3758 \C{outfmt} \i{Output Formats}
3760 NASM is a portable assembler, designed to be able to compile on any
3761 ANSI C-supporting platform and produce output to run on a variety of
3762 Intel x86 operating systems. For this reason, it has a large number
3763 of available output formats, selected using the \i\c{-f} option on
3764 the NASM \i{command line}. Each of these formats, along with its
3765 extensions to the base NASM syntax, is detailed in this chapter.
3767 As stated in \k{opt-o}, NASM chooses a \i{default name} for your
3768 output file based on the input file name and the chosen output
3769 format. This will be generated by removing the \i{extension}
3770 (\c{.asm}, \c{.s}, or whatever you like to use) from the input file
3771 name, and substituting an extension defined by the output format.
3772 The extensions are given with each format below.
3775 \H{binfmt} \i\c{bin}: \i{Flat-Form Binary}\I{pure binary} Output
3777 The \c{bin} format does not produce object files: it generates
3778 nothing in the output file except the code you wrote. Such `pure
3779 binary' files are used by \i{MS-DOS}: \i\c{.COM} executables and
3780 \i\c{.SYS} device drivers are pure binary files. Pure binary output
3781 is also useful for \i{operating system} and \i{boot loader}
3782 development.
3784 The \c{bin} format supports \i{multiple section names}. For details of
3785 how nasm handles sections in the \c{bin} format, see \k{multisec}.
3787 Using the \c{bin} format puts NASM by default into 16-bit mode (see
3788 \k{bits}). In order to use \c{bin} to write 32-bit or 64-bit code,
3789 such as an OS kernel, you need to explicitly issue the \I\c{BITS}\c{BITS 32}
3790 or \I\c{BITS}\c{BITS 64} directive.
3792 \c{bin} has no default output file name extension: instead, it
3793 leaves your file name as it is once the original extension has been
3794 removed. Thus, the default is for NASM to assemble \c{binprog.asm}
3795 into a binary file called \c{binprog}.
3798 \S{org} \i\c{ORG}: Binary File \i{Program Origin}
3800 The \c{bin} format provides an additional directive to the list
3801 given in \k{directive}: \c{ORG}. The function of the \c{ORG}
3802 directive is to specify the origin address which NASM will assume
3803 the program begins at when it is loaded into memory.
3805 For example, the following code will generate the longword
3806 \c{0x00000104}:
3808 \c         org     0x100
3809 \c         dd      label
3810 \c label:
3812 Unlike the \c{ORG} directive provided by MASM-compatible assemblers,
3813 which allows you to jump around in the object file and overwrite
3814 code you have already generated, NASM's \c{ORG} does exactly what
3815 the directive says: \e{origin}. Its sole function is to specify one
3816 offset which is added to all internal address references within the
3817 section; it does not permit any of the trickery that MASM's version
3818 does. See \k{proborg} for further comments.
3821 \S{binseg} \c{bin} Extensions to the \c{SECTION}
3822 Directive\I{SECTION, bin extensions to}
3824 The \c{bin} output format extends the \c{SECTION} (or \c{SEGMENT})
3825 directive to allow you to specify the alignment requirements of
3826 segments. This is done by appending the \i\c{ALIGN} qualifier to the
3827 end of the section-definition line. For example,
3829 \c section .data   align=16
3831 switches to the section \c{.data} and also specifies that it must be
3832 aligned on a 16-byte boundary.
3834 The parameter to \c{ALIGN} specifies how many low bits of the
3835 section start address must be forced to zero. The alignment value
3836 given may be any power of two.\I{section alignment, in
3837 bin}\I{segment alignment, in bin}\I{alignment, in bin sections}
3840 \S{multisec} \i\c{Multisection}\I{bin, multisection} support for the BIN format.
3842 The \c{bin} format allows the use of multiple sections, of arbitrary names, 
3843 besides the "known" \c{.text}, \c{.data}, and \c{.bss} names.
3845 \b Sections may be designated \i\c{progbits} or \i\c{nobits}. Default 
3846 is \c{progbits} (except \c{.bss}, which defaults to \c{nobits}, 
3847 of course).
3849 \b Sections can be aligned at a specified boundary following the previous 
3850 section with \c{align=}, or at an arbitrary byte-granular position with 
3851 \i\c{start=}.
3853 \b Sections can be given a virtual start address, which will be used 
3854 for the calculation of all memory references within that section 
3855 with \i\c{vstart=}.
3857 \b Sections can be ordered using \i\c{follows=}\c{<section>} or 
3858 \i\c{vfollows=}\c{<section>} as an alternative to specifying an explicit 
3859 start address.
3861 \b Arguments to \c{org}, \c{start}, \c{vstart}, and \c{align=} are 
3862 critical expressions. See \k{crit}. E.g. \c{align=(1 << ALIGN_SHIFT)} 
3863 - \c{ALIGN_SHIFT} must be defined before it is used here.
3865 \b Any code which comes before an explicit \c{SECTION} directive
3866 is directed by default into the \c{.text} section.
3868 \b If an \c{ORG} statement is not given, \c{ORG 0} is used 
3869 by default.
3871 \b The \c{.bss} section will be placed after the last \c{progbits} 
3872 section, unless \c{start=}, \c{vstart=}, \c{follows=}, or \c{vfollows=} 
3873 has been specified.
3875 \b All sections are aligned on dword boundaries, unless a different 
3876 alignment has been specified.
3878 \b Sections may not overlap.
3880 \b Nasm creates the \c{section.<secname>.start} for each section, 
3881 which may be used in your code.
3883 \S{map}\i{Map files}
3885 Map files can be generated in \c{-f bin} format by means of the \c{[map]} 
3886 option. Map types of \c{all} (default), \c{brief}, \c{sections}, \c{segments}, 
3887 or \c{symbols} may be specified. Output may be directed to \c{stdout} 
3888 (default), \c{stderr}, or a specified file. E.g.
3889 \c{[map symbols myfile.map]}. No "user form" exists, the square
3890 brackets must be used.
3893 \H{objfmt} \i\c{obj}: \i{Microsoft OMF}\I{OMF} Object Files
3895 The \c{obj} file format (NASM calls it \c{obj} rather than \c{omf}
3896 for historical reasons) is the one produced by \i{MASM} and
3897 \i{TASM}, which is typically fed to 16-bit DOS linkers to produce
3898 \i\c{.EXE} files. It is also the format used by \i{OS/2}.
3900 \c{obj} provides a default output file-name extension of \c{.obj}.
3902 \c{obj} is not exclusively a 16-bit format, though: NASM has full
3903 support for the 32-bit extensions to the format. In particular,
3904 32-bit \c{obj} format files are used by \i{Borland's Win32
3905 compilers}, instead of using Microsoft's newer \i\c{win32} object
3906 file format.
3908 The \c{obj} format does not define any special segment names: you
3909 can call your segments anything you like. Typical names for segments
3910 in \c{obj} format files are \c{CODE}, \c{DATA} and \c{BSS}.
3912 If your source file contains code before specifying an explicit
3913 \c{SEGMENT} directive, then NASM will invent its own segment called
3914 \i\c{__NASMDEFSEG} for you.
3916 When you define a segment in an \c{obj} file, NASM defines the
3917 segment name as a symbol as well, so that you can access the segment
3918 address of the segment. So, for example:
3920 \c segment data
3922 \c dvar:   dw      1234
3924 \c segment code
3926 \c function:
3927 \c         mov     ax,data         ; get segment address of data
3928 \c         mov     ds,ax           ; and move it into DS
3929 \c         inc     word [dvar]     ; now this reference will work
3930 \c         ret
3932 The \c{obj} format also enables the use of the \i\c{SEG} and
3933 \i\c{WRT} operators, so that you can write code which does things
3934 like
3936 \c extern  foo
3938 \c       mov   ax,seg foo            ; get preferred segment of foo
3939 \c       mov   ds,ax
3940 \c       mov   ax,data               ; a different segment
3941 \c       mov   es,ax
3942 \c       mov   ax,[ds:foo]           ; this accesses `foo'
3943 \c       mov   [es:foo wrt data],bx  ; so does this
3946 \S{objseg} \c{obj} Extensions to the \c{SEGMENT}
3947 Directive\I{SEGMENT, obj extensions to}
3949 The \c{obj} output format extends the \c{SEGMENT} (or \c{SECTION})
3950 directive to allow you to specify various properties of the segment
3951 you are defining. This is done by appending extra qualifiers to the
3952 end of the segment-definition line. For example,
3954 \c segment code private align=16
3956 defines the segment \c{code}, but also declares it to be a private
3957 segment, and requires that the portion of it described in this code
3958 module must be aligned on a 16-byte boundary.
3960 The available qualifiers are:
3962 \b \i\c{PRIVATE}, \i\c{PUBLIC}, \i\c{COMMON} and \i\c{STACK} specify
3963 the combination characteristics of the segment. \c{PRIVATE} segments
3964 do not get combined with any others by the linker; \c{PUBLIC} and
3965 \c{STACK} segments get concatenated together at link time; and
3966 \c{COMMON} segments all get overlaid on top of each other rather
3967 than stuck end-to-end.
3969 \b \i\c{ALIGN} is used, as shown above, to specify how many low bits
3970 of the segment start address must be forced to zero. The alignment
3971 value given may be any power of two from 1 to 4096; in reality, the
3972 only values supported are 1, 2, 4, 16, 256 and 4096, so if 8 is
3973 specified it will be rounded up to 16, and 32, 64 and 128 will all
3974 be rounded up to 256, and so on. Note that alignment to 4096-byte
3975 boundaries is a \i{PharLap} extension to the format and may not be
3976 supported by all linkers.\I{section alignment, in OBJ}\I{segment
3977 alignment, in OBJ}\I{alignment, in OBJ sections}
3979 \b \i\c{CLASS} can be used to specify the segment class; this feature
3980 indicates to the linker that segments of the same class should be
3981 placed near each other in the output file. The class name can be any
3982 word, e.g. \c{CLASS=CODE}.
3984 \b \i\c{OVERLAY}, like \c{CLASS}, is specified with an arbitrary word
3985 as an argument, and provides overlay information to an
3986 overlay-capable linker.
3988 \b Segments can be declared as \i\c{USE16} or \i\c{USE32}, which has
3989 the effect of recording the choice in the object file and also
3990 ensuring that NASM's default assembly mode when assembling in that
3991 segment is 16-bit or 32-bit respectively.
3993 \b When writing \i{OS/2} object files, you should declare 32-bit
3994 segments as \i\c{FLAT}, which causes the default segment base for
3995 anything in the segment to be the special group \c{FLAT}, and also
3996 defines the group if it is not already defined.
3998 \b The \c{obj} file format also allows segments to be declared as
3999 having a pre-defined absolute segment address, although no linkers
4000 are currently known to make sensible use of this feature;
4001 nevertheless, NASM allows you to declare a segment such as
4002 \c{SEGMENT SCREEN ABSOLUTE=0xB800} if you need to. The \i\c{ABSOLUTE}
4003 and \c{ALIGN} keywords are mutually exclusive.
4005 NASM's default segment attributes are \c{PUBLIC}, \c{ALIGN=1}, no
4006 class, no overlay, and \c{USE16}.
4009 \S{group} \i\c{GROUP}: Defining Groups of Segments\I{segments, groups of}
4011 The \c{obj} format also allows segments to be grouped, so that a
4012 single segment register can be used to refer to all the segments in
4013 a group. NASM therefore supplies the \c{GROUP} directive, whereby
4014 you can code
4016 \c segment data
4018 \c         ; some data
4020 \c segment bss
4022 \c         ; some uninitialized data
4024 \c group dgroup data bss
4026 which will define a group called \c{dgroup} to contain the segments
4027 \c{data} and \c{bss}. Like \c{SEGMENT}, \c{GROUP} causes the group
4028 name to be defined as a symbol, so that you can refer to a variable
4029 \c{var} in the \c{data} segment as \c{var wrt data} or as \c{var wrt
4030 dgroup}, depending on which segment value is currently in your
4031 segment register.
4033 If you just refer to \c{var}, however, and \c{var} is declared in a
4034 segment which is part of a group, then NASM will default to giving
4035 you the offset of \c{var} from the beginning of the \e{group}, not
4036 the \e{segment}. Therefore \c{SEG var}, also, will return the group
4037 base rather than the segment base.
4039 NASM will allow a segment to be part of more than one group, but
4040 will generate a warning if you do this. Variables declared in a
4041 segment which is part of more than one group will default to being
4042 relative to the first group that was defined to contain the segment.
4044 A group does not have to contain any segments; you can still make
4045 \c{WRT} references to a group which does not contain the variable
4046 you are referring to. OS/2, for example, defines the special group
4047 \c{FLAT} with no segments in it.
4050 \S{uppercase} \i\c{UPPERCASE}: Disabling Case Sensitivity in Output
4052 Although NASM itself is \i{case sensitive}, some OMF linkers are
4053 not; therefore it can be useful for NASM to output single-case
4054 object files. The \c{UPPERCASE} format-specific directive causes all
4055 segment, group and symbol names that are written to the object file
4056 to be forced to upper case just before being written. Within a
4057 source file, NASM is still case-sensitive; but the object file can
4058 be written entirely in upper case if desired.
4060 \c{UPPERCASE} is used alone on a line; it requires no parameters.
4063 \S{import} \i\c{IMPORT}: Importing DLL Symbols\I{DLL symbols,
4064 importing}\I{symbols, importing from DLLs}
4066 The \c{IMPORT} format-specific directive defines a symbol to be
4067 imported from a DLL, for use if you are writing a DLL's \i{import
4068 library} in NASM. You still need to declare the symbol as \c{EXTERN}
4069 as well as using the \c{IMPORT} directive.
4071 The \c{IMPORT} directive takes two required parameters, separated by
4072 white space, which are (respectively) the name of the symbol you
4073 wish to import and the name of the library you wish to import it
4074 from. For example:
4076 \c     import  WSAStartup wsock32.dll
4078 A third optional parameter gives the name by which the symbol is
4079 known in the library you are importing it from, in case this is not
4080 the same as the name you wish the symbol to be known by to your code
4081 once you have imported it. For example:
4083 \c     import  asyncsel wsock32.dll WSAAsyncSelect
4086 \S{export} \i\c{EXPORT}: Exporting DLL Symbols\I{DLL symbols,
4087 exporting}\I{symbols, exporting from DLLs}
4089 The \c{EXPORT} format-specific directive defines a global symbol to
4090 be exported as a DLL symbol, for use if you are writing a DLL in
4091 NASM. You still need to declare the symbol as \c{GLOBAL} as well as
4092 using the \c{EXPORT} directive.
4094 \c{EXPORT} takes one required parameter, which is the name of the
4095 symbol you wish to export, as it was defined in your source file. An
4096 optional second parameter (separated by white space from the first)
4097 gives the \e{external} name of the symbol: the name by which you
4098 wish the symbol to be known to programs using the DLL. If this name
4099 is the same as the internal name, you may leave the second parameter
4100 off.
4102 Further parameters can be given to define attributes of the exported
4103 symbol. These parameters, like the second, are separated by white
4104 space. If further parameters are given, the external name must also
4105 be specified, even if it is the same as the internal name. The
4106 available attributes are:
4108 \b \c{resident} indicates that the exported name is to be kept
4109 resident by the system loader. This is an optimisation for
4110 frequently used symbols imported by name.
4112 \b \c{nodata} indicates that the exported symbol is a function which
4113 does not make use of any initialized data.
4115 \b \c{parm=NNN}, where \c{NNN} is an integer, sets the number of
4116 parameter words for the case in which the symbol is a call gate
4117 between 32-bit and 16-bit segments.
4119 \b An attribute which is just a number indicates that the symbol
4120 should be exported with an identifying number (ordinal), and gives
4121 the desired number.
4123 For example:
4125 \c     export  myfunc
4126 \c     export  myfunc TheRealMoreFormalLookingFunctionName
4127 \c     export  myfunc myfunc 1234  ; export by ordinal
4128 \c     export  myfunc myfunc resident parm=23 nodata
4131 \S{dotdotstart} \i\c{..start}: Defining the \i{Program Entry
4132 Point}
4134 \c{OMF} linkers require exactly one of the object files being linked to
4135 define the program entry point, where execution will begin when the
4136 program is run. If the object file that defines the entry point is
4137 assembled using NASM, you specify the entry point by declaring the
4138 special symbol \c{..start} at the point where you wish execution to
4139 begin.
4142 \S{objextern} \c{obj} Extensions to the \c{EXTERN}
4143 Directive\I{EXTERN, obj extensions to}
4145 If you declare an external symbol with the directive
4147 \c     extern  foo
4149 then references such as \c{mov ax,foo} will give you the offset of
4150 \c{foo} from its preferred segment base (as specified in whichever
4151 module \c{foo} is actually defined in). So to access the contents of
4152 \c{foo} you will usually need to do something like
4154 \c         mov     ax,seg foo      ; get preferred segment base
4155 \c         mov     es,ax           ; move it into ES
4156 \c         mov     ax,[es:foo]     ; and use offset `foo' from it
4158 This is a little unwieldy, particularly if you know that an external
4159 is going to be accessible from a given segment or group, say
4160 \c{dgroup}. So if \c{DS} already contained \c{dgroup}, you could
4161 simply code
4163 \c         mov     ax,[foo wrt dgroup]
4165 However, having to type this every time you want to access \c{foo}
4166 can be a pain; so NASM allows you to declare \c{foo} in the
4167 alternative form
4169 \c     extern  foo:wrt dgroup
4171 This form causes NASM to pretend that the preferred segment base of
4172 \c{foo} is in fact \c{dgroup}; so the expression \c{seg foo} will
4173 now return \c{dgroup}, and the expression \c{foo} is equivalent to
4174 \c{foo wrt dgroup}.
4176 This \I{default-WRT mechanism}default-\c{WRT} mechanism can be used
4177 to make externals appear to be relative to any group or segment in
4178 your program. It can also be applied to common variables: see
4179 \k{objcommon}.
4182 \S{objcommon} \c{obj} Extensions to the \c{COMMON}
4183 Directive\I{COMMON, obj extensions to}
4185 The \c{obj} format allows common variables to be either near\I{near
4186 common variables} or far\I{far common variables}; NASM allows you to
4187 specify which your variables should be by the use of the syntax
4189 \c common  nearvar 2:near   ; `nearvar' is a near common
4190 \c common  farvar  10:far   ; and `farvar' is far
4192 Far common variables may be greater in size than 64Kb, and so the
4193 OMF specification says that they are declared as a number of
4194 \e{elements} of a given size. So a 10-byte far common variable could
4195 be declared as ten one-byte elements, five two-byte elements, two
4196 five-byte elements or one ten-byte element.
4198 Some \c{OMF} linkers require the \I{element size, in common
4199 variables}\I{common variables, element size}element size, as well as
4200 the variable size, to match when resolving common variables declared
4201 in more than one module. Therefore NASM must allow you to specify
4202 the element size on your far common variables. This is done by the
4203 following syntax:
4205 \c common  c_5by2  10:far 5        ; two five-byte elements
4206 \c common  c_2by5  10:far 2        ; five two-byte elements
4208 If no element size is specified, the default is 1. Also, the \c{FAR}
4209 keyword is not required when an element size is specified, since
4210 only far commons may have element sizes at all. So the above
4211 declarations could equivalently be
4213 \c common  c_5by2  10:5            ; two five-byte elements
4214 \c common  c_2by5  10:2            ; five two-byte elements
4216 In addition to these extensions, the \c{COMMON} directive in \c{obj}
4217 also supports default-\c{WRT} specification like \c{EXTERN} does
4218 (explained in \k{objextern}). So you can also declare things like
4220 \c common  foo     10:wrt dgroup
4221 \c common  bar     16:far 2:wrt data
4222 \c common  baz     24:wrt data:6
4225 \H{win32fmt} \i\c{win32}: Microsoft Win32 Object Files
4227 The \c{win32} output format generates Microsoft Win32 object files,
4228 suitable for passing to Microsoft linkers such as \i{Visual C++}.
4229 Note that Borland Win32 compilers do not use this format, but use
4230 \c{obj} instead (see \k{objfmt}).
4232 \c{win32} provides a default output file-name extension of \c{.obj}.
4234 Note that although Microsoft say that Win32 object files follow the
4235 \c{COFF} (Common Object File Format) standard, the object files produced
4236 by Microsoft Win32 compilers are not compatible with COFF linkers
4237 such as DJGPP's, and vice versa. This is due to a difference of
4238 opinion over the precise semantics of PC-relative relocations. To
4239 produce COFF files suitable for DJGPP, use NASM's \c{coff} output
4240 format; conversely, the \c{coff} format does not produce object
4241 files that Win32 linkers can generate correct output from.
4244 \S{win32sect} \c{win32} Extensions to the \c{SECTION}
4245 Directive\I{SECTION, win32 extensions to}
4247 Like the \c{obj} format, \c{win32} allows you to specify additional
4248 information on the \c{SECTION} directive line, to control the type
4249 and properties of sections you declare. Section types and properties
4250 are generated automatically by NASM for the \i{standard section names}
4251 \c{.text}, \c{.data} and \c{.bss}, but may still be overridden by
4252 these qualifiers.
4254 The available qualifiers are:
4256 \b \c{code}, or equivalently \c{text}, defines the section to be a
4257 code section. This marks the section as readable and executable, but
4258 not writable, and also indicates to the linker that the type of the
4259 section is code.
4261 \b \c{data} and \c{bss} define the section to be a data section,
4262 analogously to \c{code}. Data sections are marked as readable and
4263 writable, but not executable. \c{data} declares an initialized data
4264 section, whereas \c{bss} declares an uninitialized data section.
4266 \b \c{rdata} declares an initialized data section that is readable
4267 but not writable. Microsoft compilers use this section to place
4268 constants in it.
4270 \b \c{info} defines the section to be an \i{informational section},
4271 which is not included in the executable file by the linker, but may
4272 (for example) pass information \e{to} the linker. For example,
4273 declaring an \c{info}-type section called \i\c{.drectve} causes the
4274 linker to interpret the contents of the section as command-line
4275 options.
4277 \b \c{align=}, used with a trailing number as in \c{obj}, gives the
4278 \I{section alignment, in win32}\I{alignment, in win32
4279 sections}alignment requirements of the section. The maximum you may
4280 specify is 64: the Win32 object file format contains no means to
4281 request a greater section alignment than this. If alignment is not
4282 explicitly specified, the defaults are 16-byte alignment for code
4283 sections, 8-byte alignment for rdata sections and 4-byte alignment
4284 for data (and BSS) sections.
4285 Informational sections get a default alignment of 1 byte (no
4286 alignment), though the value does not matter.
4288 The defaults assumed by NASM if you do not specify the above
4289 qualifiers are:
4291 \c section .text    code  align=16
4292 \c section .data    data  align=4
4293 \c section .rdata   rdata align=8
4294 \c section .bss     bss   align=4
4296 Any other section name is treated by default like \c{.text}.
4299 \H{win64fmt} \i\c{win64}: Microsoft Win64 Object Files
4301 The \c{win64} output format generates Microsoft Win64 object files, 
4302 which is nearly 100% indentical to the \c{win32} object format (\k{win32fmt})
4303 with the exception that it is meant to target 64-bit code and the x86-64
4304 platform altogether. This object file is used exactly the same as the \c{win32}
4305 object format (\k{win32fmt}), in NASM, with regard to this exception.
4308 \H{cofffmt} \i\c{coff}: \i{Common Object File Format}
4310 The \c{coff} output type produces \c{COFF} object files suitable for
4311 linking with the \i{DJGPP} linker.
4313 \c{coff} provides a default output file-name extension of \c{.o}.
4315 The \c{coff} format supports the same extensions to the \c{SECTION}
4316 directive as \c{win32} does, except that the \c{align} qualifier and
4317 the \c{info} section type are not supported.
4319 \H{machofmt} \i\c{macho}: \i{Mach Object File Format}
4321 The \c{macho} output type produces \c{Mach-O} object files suitable for
4322 linking with the \i{Mac OSX} linker.
4324 \c{macho} provides a default output file-name extension of \c{.o}.
4326 \H{elffmt} \i\c{elf, elf32, and elf64}: \I{ELF}\I{linux, elf}\i{Executable and Linkable
4327 Format} Object Files
4329 The \c{elf32} and \c{elf64} output formats generate \c{ELF32 and ELF64} (Executable and Linkable Format) object files, as used by Linux as well as \i{Unix System V},
4330 including \i{Solaris x86}, \i{UnixWare} and \i{SCO Unix}. \c{elf}
4331 provides a default output file-name extension of \c{.o}. \c{elf} is a synonym for \c{elf32}.
4334 \S{elfsect} \c{elf} Extensions to the \c{SECTION}
4335 Directive\I{SECTION, elf extensions to}
4337 Like the \c{obj} format, \c{elf} allows you to specify additional
4338 information on the \c{SECTION} directive line, to control the type
4339 and properties of sections you declare. Section types and properties
4340 are generated automatically by NASM for the \i{standard section
4341 names} \i\c{.text}, \i\c{.data} and \i\c{.bss}, but may still be
4342 overridden by these qualifiers.
4344 The available qualifiers are:
4346 \b \i\c{alloc} defines the section to be one which is loaded into
4347 memory when the program is run. \i\c{noalloc} defines it to be one
4348 which is not, such as an informational or comment section.
4350 \b \i\c{exec} defines the section to be one which should have execute
4351 permission when the program is run. \i\c{noexec} defines it as one
4352 which should not.
4354 \b \i\c{write} defines the section to be one which should be writable
4355 when the program is run. \i\c{nowrite} defines it as one which should
4356 not.
4358 \b \i\c{progbits} defines the section to be one with explicit contents
4359 stored in the object file: an ordinary code or data section, for
4360 example, \i\c{nobits} defines the section to be one with no explicit
4361 contents given, such as a BSS section.
4363 \b \c{align=}, used with a trailing number as in \c{obj}, gives the
4364 \I{section alignment, in elf}\I{alignment, in elf sections}alignment
4365 requirements of the section.
4367 The defaults assumed by NASM if you do not specify the above
4368 qualifiers are:
4370 \c section .text    progbits  alloc  exec    nowrite  align=16
4371 \c section .rodata  progbits  alloc  noexec  nowrite  align=4
4372 \c section .data    progbits  alloc  noexec  write    align=4
4373 \c section .bss     nobits    alloc  noexec  write    align=4
4374 \c section other    progbits  alloc  noexec  nowrite  align=1
4376 (Any section name other than \c{.text}, \c{.rodata}, \c{.data} and
4377 \c{.bss} is treated by default like \c{other} in the above code.)
4380 \S{elfwrt} \i{Position-Independent Code}\I{PIC}: \c{elf} Special
4381 Symbols and \i\c{WRT}
4383 The \c{ELF} specification contains enough features to allow
4384 position-independent code (PIC) to be written, which makes \i{ELF
4385 shared libraries} very flexible. However, it also means NASM has to
4386 be able to generate a variety of strange relocation types in ELF
4387 object files, if it is to be an assembler which can write PIC.
4389 Since \c{ELF} does not support segment-base references, the \c{WRT}
4390 operator is not used for its normal purpose; therefore NASM's
4391 \c{elf} output format makes use of \c{WRT} for a different purpose,
4392 namely the PIC-specific \I{relocations, PIC-specific}relocation
4393 types.
4395 \c{elf} defines five special symbols which you can use as the
4396 right-hand side of the \c{WRT} operator to obtain PIC relocation
4397 types. They are \i\c{..gotpc}, \i\c{..gotoff}, \i\c{..got},
4398 \i\c{..plt} and \i\c{..sym}. Their functions are summarized here:
4400 \b Referring to the symbol marking the global offset table base
4401 using \c{wrt ..gotpc} will end up giving the distance from the
4402 beginning of the current section to the global offset table.
4403 (\i\c{_GLOBAL_OFFSET_TABLE_} is the standard symbol name used to
4404 refer to the \i{GOT}.) So you would then need to add \i\c{$$} to the
4405 result to get the real address of the GOT.
4407 \b Referring to a location in one of your own sections using \c{wrt
4408 ..gotoff} will give the distance from the beginning of the GOT to
4409 the specified location, so that adding on the address of the GOT
4410 would give the real address of the location you wanted.
4412 \b Referring to an external or global symbol using \c{wrt ..got}
4413 causes the linker to build an entry \e{in} the GOT containing the
4414 address of the symbol, and the reference gives the distance from the
4415 beginning of the GOT to the entry; so you can add on the address of
4416 the GOT, load from the resulting address, and end up with the
4417 address of the symbol.
4419 \b Referring to a procedure name using \c{wrt ..plt} causes the
4420 linker to build a \i{procedure linkage table} entry for the symbol,
4421 and the reference gives the address of the \i{PLT} entry. You can
4422 only use this in contexts which would generate a PC-relative
4423 relocation normally (i.e. as the destination for \c{CALL} or
4424 \c{JMP}), since ELF contains no relocation type to refer to PLT
4425 entries absolutely.
4427 \b Referring to a symbol name using \c{wrt ..sym} causes NASM to
4428 write an ordinary relocation, but instead of making the relocation
4429 relative to the start of the section and then adding on the offset
4430 to the symbol, it will write a relocation record aimed directly at
4431 the symbol in question. The distinction is a necessary one due to a
4432 peculiarity of the dynamic linker.
4434 A fuller explanation of how to use these relocation types to write
4435 shared libraries entirely in NASM is given in \k{picdll}.
4438 \S{elfglob} \c{elf} Extensions to the \c{GLOBAL} Directive\I{GLOBAL,
4439 elf extensions to}\I{GLOBAL, aoutb extensions to}
4441 \c{ELF} object files can contain more information about a global symbol
4442 than just its address: they can contain the \I{symbol sizes,
4443 specifying}\I{size, of symbols}size of the symbol and its \I{symbol
4444 types, specifying}\I{type, of symbols}type as well. These are not
4445 merely debugger conveniences, but are actually necessary when the
4446 program being written is a \i{shared library}. NASM therefore
4447 supports some extensions to the \c{GLOBAL} directive, allowing you
4448 to specify these features.
4450 You can specify whether a global variable is a function or a data
4451 object by suffixing the name with a colon and the word
4452 \i\c{function} or \i\c{data}. (\i\c{object} is a synonym for
4453 \c{data}.) For example:
4455 \c global   hashlookup:function, hashtable:data
4457 exports the global symbol \c{hashlookup} as a function and
4458 \c{hashtable} as a data object.
4460 Optionally, you can control the ELF visibility of the symbol.  Just
4461 add one of the visibility keywords: \i\c{default}, \i\c{internal},
4462 \i\c{hidden}, or \i\c{protected}.  The default is \i\c{default} of
4463 course.  For example, to make \c{hashlookup} hidden:
4465 \c global   hashlookup:function hidden
4467 You can also specify the size of the data associated with the
4468 symbol, as a numeric expression (which may involve labels, and even
4469 forward references) after the type specifier. Like this:
4471 \c global  hashtable:data (hashtable.end - hashtable)
4473 \c hashtable:
4474 \c         db this,that,theother  ; some data here
4475 \c .end:
4477 This makes NASM automatically calculate the length of the table and
4478 place that information into the \c{ELF} symbol table.
4480 Declaring the type and size of global symbols is necessary when
4481 writing shared library code. For more information, see
4482 \k{picglobal}.
4485 \S{elfcomm} \c{elf} Extensions to the \c{COMMON} Directive
4486 \I{COMMON, elf extensions to}
4488 \c{ELF} also allows you to specify alignment requirements \I{common
4489 variables, alignment in elf}\I{alignment, of elf common variables}on
4490 common variables. This is done by putting a number (which must be a
4491 power of two) after the name and size of the common variable,
4492 separated (as usual) by a colon. For example, an array of
4493 doublewords would benefit from 4-byte alignment:
4495 \c common  dwordarray 128:4
4497 This declares the total size of the array to be 128 bytes, and
4498 requires that it be aligned on a 4-byte boundary.
4501 \S{elf16} 16-bit code and ELF
4502 \I{ELF, 16-bit code and}
4504 The \c{ELF32} specification doesn't provide relocations for 8- and
4505 16-bit values, but the GNU \c{ld} linker adds these as an extension.
4506 NASM can generate GNU-compatible relocations, to allow 16-bit code to
4507 be linked as ELF using GNU \c{ld}. If NASM is used with the
4508 \c{-w+gnu-elf-extensions} option, a warning is issued when one of
4509 these relocations is generated.
4511 \H{aoutfmt} \i\c{aout}: Linux \I{a.out, Linux version}\I{linux, a.out}\c{a.out} Object Files
4513 The \c{aout} format generates \c{a.out} object files, in the form used
4514 by early Linux systems (current Linux systems use ELF, see
4515 \k{elffmt}.) These differ from other \c{a.out} object files in that
4516 the magic number in the first four bytes of the file is
4517 different; also, some implementations of \c{a.out}, for example
4518 NetBSD's, support position-independent code, which Linux's
4519 implementation does not.
4521 \c{a.out} provides a default output file-name extension of \c{.o}.
4523 \c{a.out} is a very simple object format. It supports no special
4524 directives, no special symbols, no use of \c{SEG} or \c{WRT}, and no
4525 extensions to any standard directives. It supports only the three
4526 \i{standard section names} \i\c{.text}, \i\c{.data} and \i\c{.bss}.
4529 \H{aoutfmt} \i\c{aoutb}: \i{NetBSD}/\i{FreeBSD}/\i{OpenBSD}
4530 \I{a.out, BSD version}\c{a.out} Object Files
4532 The \c{aoutb} format generates \c{a.out} object files, in the form
4533 used by the various free \c{BSD Unix} clones, \c{NetBSD}, \c{FreeBSD}
4534 and \c{OpenBSD}. For simple object files, this object format is exactly
4535 the same as \c{aout} except for the magic number in the first four bytes
4536 of the file. However, the \c{aoutb} format supports
4537 \I{PIC}\i{position-independent code} in the same way as the \c{elf}
4538 format, so you can use it to write \c{BSD} \i{shared libraries}.
4540 \c{aoutb} provides a default output file-name extension of \c{.o}.
4542 \c{aoutb} supports no special directives, no special symbols, and
4543 only the three \i{standard section names} \i\c{.text}, \i\c{.data}
4544 and \i\c{.bss}. However, it also supports the same use of \i\c{WRT} as
4545 \c{elf} does, to provide position-independent code relocation types.
4546 See \k{elfwrt} for full documentation of this feature.
4548 \c{aoutb} also supports the same extensions to the \c{GLOBAL}
4549 directive as \c{elf} does: see \k{elfglob} for documentation of
4550 this.
4553 \H{as86fmt} \c{as86}: \i{Minix}/Linux\I{linux, as86} \i\c{as86} Object Files
4555 The Minix/Linux 16-bit assembler \c{as86} has its own non-standard
4556 object file format. Although its companion linker \i\c{ld86} produces
4557 something close to ordinary \c{a.out} binaries as output, the object
4558 file format used to communicate between \c{as86} and \c{ld86} is not
4559 itself \c{a.out}.
4561 NASM supports this format, just in case it is useful, as \c{as86}.
4562 \c{as86} provides a default output file-name extension of \c{.o}.
4564 \c{as86} is a very simple object format (from the NASM user's point
4565 of view). It supports no special directives, no special symbols, no
4566 use of \c{SEG} or \c{WRT}, and no extensions to any standard
4567 directives. It supports only the three \i{standard section names}
4568 \i\c{.text}, \i\c{.data} and \i\c{.bss}.
4571 \H{rdffmt} \I{RDOFF}\i\c{rdf}: \i{Relocatable Dynamic Object File
4572 Format}
4574 The \c{rdf} output format produces \c{RDOFF} object files. \c{RDOFF}
4575 (Relocatable Dynamic Object File Format) is a home-grown object-file
4576 format, designed alongside NASM itself and reflecting in its file
4577 format the internal structure of the assembler.
4579 \c{RDOFF} is not used by any well-known operating systems. Those
4580 writing their own systems, however, may well wish to use \c{RDOFF}
4581 as their object format, on the grounds that it is designed primarily
4582 for simplicity and contains very little file-header bureaucracy.
4584 The Unix NASM archive, and the DOS archive which includes sources,
4585 both contain an \I{rdoff subdirectory}\c{rdoff} subdirectory holding
4586 a set of RDOFF utilities: an RDF linker, an \c{RDF} static-library
4587 manager, an RDF file dump utility, and a program which will load and
4588 execute an RDF executable under Linux.
4590 \c{rdf} supports only the \i{standard section names} \i\c{.text},
4591 \i\c{.data} and \i\c{.bss}.
4594 \S{rdflib} Requiring a Library: The \i\c{LIBRARY} Directive
4596 \c{RDOFF} contains a mechanism for an object file to demand a given
4597 library to be linked to the module, either at load time or run time.
4598 This is done by the \c{LIBRARY} directive, which takes one argument
4599 which is the name of the module:
4601 \c     library  mylib.rdl
4604 \S{rdfmod} Specifying a Module Name: The \i\c{MODULE} Directive
4606 Special \c{RDOFF} header record is used to store the name of the module.
4607 It can be used, for example, by run-time loader to perform dynamic
4608 linking. \c{MODULE} directive takes one argument which is the name
4609 of current module:
4611 \c     module  mymodname
4613 Note that when you statically link modules and tell linker to strip
4614 the symbols from output file, all module names will be stripped too.
4615 To avoid it, you should start module names with \I{$, prefix}\c{$}, like:
4617 \c     module  $kernel.core
4620 \S{rdfglob} \c{rdf} Extensions to the \c{GLOBAL} directive\I{GLOBAL,
4621 rdf extensions to}
4623 \c{RDOFF} global symbols can contain additional information needed by
4624 the static linker. You can mark a global symbol as exported, thus
4625 telling the linker do not strip it from target executable or library
4626 file. Like in \c{ELF}, you can also specify whether an exported symbol
4627 is a procedure (function) or data object.
4629 Suffixing the name with a colon and the word \i\c{export} you make the
4630 symbol exported:
4632 \c     global  sys_open:export
4634 To specify that exported symbol is a procedure (function), you add the
4635 word \i\c{proc} or \i\c{function} after declaration:
4637 \c     global  sys_open:export proc
4639 Similarly, to specify exported data object, add the word \i\c{data}
4640 or \i\c{object} to the directive:
4642 \c     global  kernel_ticks:export data
4645 \S{rdfimpt} \c{rdf} Extensions to the \c{EXTERN} directive\I{EXTERN,
4646 rdf extensions to}
4648 By default the \c{EXTERN} directive in \c{RDOFF} declares a "pure external" 
4649 symbol (i.e. the static linker will complain if such a symbol is not resolved).
4650 To declare an "imported" symbol, which must be resolved later during a dynamic
4651 linking phase, \c{RDOFF} offers an additional \c{import} modifier. As in
4652 \c{GLOBAL}, you can also specify whether an imported symbol is a procedure
4653 (function) or data object. For example:
4655 \c     library $libc
4656 \c     extern  _open:import
4657 \c     extern  _printf:import proc
4658 \c     extern  _errno:import data
4660 Here the directive \c{LIBRARY} is also included, which gives the dynamic linker
4661 a hint as to where to find requested symbols.
4664 \H{dbgfmt} \i\c{dbg}: Debugging Format
4666 The \c{dbg} output format is not built into NASM in the default
4667 configuration. If you are building your own NASM executable from the
4668 sources, you can define \i\c{OF_DBG} in \c{outform.h} or on the
4669 compiler command line, and obtain the \c{dbg} output format.
4671 The \c{dbg} format does not output an object file as such; instead,
4672 it outputs a text file which contains a complete list of all the
4673 transactions between the main body of NASM and the output-format
4674 back end module. It is primarily intended to aid people who want to
4675 write their own output drivers, so that they can get a clearer idea
4676 of the various requests the main program makes of the output driver,
4677 and in what order they happen.
4679 For simple files, one can easily use the \c{dbg} format like this:
4681 \c nasm -f dbg filename.asm
4683 which will generate a diagnostic file called \c{filename.dbg}.
4684 However, this will not work well on files which were designed for a
4685 different object format, because each object format defines its own
4686 macros (usually user-level forms of directives), and those macros
4687 will not be defined in the \c{dbg} format. Therefore it can be
4688 useful to run NASM twice, in order to do the preprocessing with the
4689 native object format selected:
4691 \c nasm -e -f rdf -o rdfprog.i rdfprog.asm
4692 \c nasm -a -f dbg rdfprog.i
4694 This preprocesses \c{rdfprog.asm} into \c{rdfprog.i}, keeping the
4695 \c{rdf} object format selected in order to make sure RDF special
4696 directives are converted into primitive form correctly. Then the
4697 preprocessed source is fed through the \c{dbg} format to generate
4698 the final diagnostic output.
4700 This workaround will still typically not work for programs intended
4701 for \c{obj} format, because the \c{obj} \c{SEGMENT} and \c{GROUP}
4702 directives have side effects of defining the segment and group names
4703 as symbols; \c{dbg} will not do this, so the program will not
4704 assemble. You will have to work around that by defining the symbols
4705 yourself (using \c{EXTERN}, for example) if you really need to get a
4706 \c{dbg} trace of an \c{obj}-specific source file.
4708 \c{dbg} accepts any section name and any directives at all, and logs
4709 them all to its output file.
4712 \C{16bit} Writing 16-bit Code (DOS, Windows 3/3.1)
4714 This chapter attempts to cover some of the common issues encountered
4715 when writing 16-bit code to run under \c{MS-DOS} or \c{Windows 3.x}. It
4716 covers how to link programs to produce \c{.EXE} or \c{.COM} files,
4717 how to write \c{.SYS} device drivers, and how to interface assembly
4718 language code with 16-bit C compilers and with Borland Pascal.
4721 \H{exefiles} Producing \i\c{.EXE} Files
4723 Any large program written under DOS needs to be built as a \c{.EXE}
4724 file: only \c{.EXE} files have the necessary internal structure
4725 required to span more than one 64K segment. \i{Windows} programs,
4726 also, have to be built as \c{.EXE} files, since Windows does not
4727 support the \c{.COM} format.
4729 In general, you generate \c{.EXE} files by using the \c{obj} output
4730 format to produce one or more \i\c{.OBJ} files, and then linking
4731 them together using a linker. However, NASM also supports the direct
4732 generation of simple DOS \c{.EXE} files using the \c{bin} output
4733 format (by using \c{DB} and \c{DW} to construct the \c{.EXE} file
4734 header), and a macro package is supplied to do this. Thanks to
4735 Yann Guidon for contributing the code for this.
4737 NASM may also support \c{.EXE} natively as another output format in
4738 future releases.
4741 \S{objexe} Using the \c{obj} Format To Generate \c{.EXE} Files
4743 This section describes the usual method of generating \c{.EXE} files
4744 by linking \c{.OBJ} files together.
4746 Most 16-bit programming language packages come with a suitable
4747 linker; if you have none of these, there is a free linker called
4748 \i{VAL}\I{linker, free}, available in \c{LZH} archive format from
4749 \W{ftp://x2ftp.oulu.fi/pub/msdos/programming/lang/}\i\c{x2ftp.oulu.fi}.
4750 An LZH archiver can be found at
4751 \W{ftp://ftp.simtel.net/pub/simtelnet/msdos/arcers}\i\c{ftp.simtel.net}.
4752 There is another `free' linker (though this one doesn't come with
4753 sources) called \i{FREELINK}, available from
4754 \W{http://www.pcorner.com/tpc/old/3-101.html}\i\c{www.pcorner.com}.
4755 A third, \i\c{djlink}, written by DJ Delorie, is available at
4756 \W{http://www.delorie.com/djgpp/16bit/djlink/}\i\c{www.delorie.com}.
4757 A fourth linker, \i\c{ALINK}, written by Anthony A.J. Williams, is
4758 available at \W{http://alink.sourceforge.net}\i\c{alink.sourceforge.net}.
4760 When linking several \c{.OBJ} files into a \c{.EXE} file, you should
4761 ensure that exactly one of them has a start point defined (using the
4762 \I{program entry point}\i\c{..start} special symbol defined by the
4763 \c{obj} format: see \k{dotdotstart}). If no module defines a start
4764 point, the linker will not know what value to give the entry-point
4765 field in the output file header; if more than one defines a start
4766 point, the linker will not know \e{which} value to use.
4768 An example of a NASM source file which can be assembled to a
4769 \c{.OBJ} file and linked on its own to a \c{.EXE} is given here. It
4770 demonstrates the basic principles of defining a stack, initialising
4771 the segment registers, and declaring a start point. This file is
4772 also provided in the \I{test subdirectory}\c{test} subdirectory of
4773 the NASM archives, under the name \c{objexe.asm}.
4775 \c segment code
4777 \c ..start:
4778 \c         mov     ax,data
4779 \c         mov     ds,ax
4780 \c         mov     ax,stack
4781 \c         mov     ss,ax
4782 \c         mov     sp,stacktop
4784 This initial piece of code sets up \c{DS} to point to the data
4785 segment, and initializes \c{SS} and \c{SP} to point to the top of
4786 the provided stack. Notice that interrupts are implicitly disabled
4787 for one instruction after a move into \c{SS}, precisely for this
4788 situation, so that there's no chance of an interrupt occurring
4789 between the loads of \c{SS} and \c{SP} and not having a stack to
4790 execute on.
4792 Note also that the special symbol \c{..start} is defined at the
4793 beginning of this code, which means that will be the entry point
4794 into the resulting executable file.
4796 \c         mov     dx,hello
4797 \c         mov     ah,9
4798 \c         int     0x21
4800 The above is the main program: load \c{DS:DX} with a pointer to the
4801 greeting message (\c{hello} is implicitly relative to the segment
4802 \c{data}, which was loaded into \c{DS} in the setup code, so the
4803 full pointer is valid), and call the DOS print-string function.
4805 \c         mov     ax,0x4c00
4806 \c         int     0x21
4808 This terminates the program using another DOS system call.
4810 \c segment data
4812 \c hello:  db      'hello, world', 13, 10, '$'
4814 The data segment contains the string we want to display.
4816 \c segment stack stack
4817 \c         resb 64
4818 \c stacktop:
4820 The above code declares a stack segment containing 64 bytes of
4821 uninitialized stack space, and points \c{stacktop} at the top of it.
4822 The directive \c{segment stack stack} defines a segment \e{called}
4823 \c{stack}, and also of \e{type} \c{STACK}. The latter is not
4824 necessary to the correct running of the program, but linkers are
4825 likely to issue warnings or errors if your program has no segment of
4826 type \c{STACK}.
4828 The above file, when assembled into a \c{.OBJ} file, will link on
4829 its own to a valid \c{.EXE} file, which when run will print `hello,
4830 world' and then exit.
4833 \S{binexe} Using the \c{bin} Format To Generate \c{.EXE} Files
4835 The \c{.EXE} file format is simple enough that it's possible to
4836 build a \c{.EXE} file by writing a pure-binary program and sticking
4837 a 32-byte header on the front. This header is simple enough that it
4838 can be generated using \c{DB} and \c{DW} commands by NASM itself, so
4839 that you can use the \c{bin} output format to directly generate
4840 \c{.EXE} files.
4842 Included in the NASM archives, in the \I{misc subdirectory}\c{misc}
4843 subdirectory, is a file \i\c{exebin.mac} of macros. It defines three
4844 macros: \i\c{EXE_begin}, \i\c{EXE_stack} and \i\c{EXE_end}.
4846 To produce a \c{.EXE} file using this method, you should start by
4847 using \c{%include} to load the \c{exebin.mac} macro package into
4848 your source file. You should then issue the \c{EXE_begin} macro call
4849 (which takes no arguments) to generate the file header data. Then
4850 write code as normal for the \c{bin} format - you can use all three
4851 standard sections \c{.text}, \c{.data} and \c{.bss}. At the end of
4852 the file you should call the \c{EXE_end} macro (again, no arguments),
4853 which defines some symbols to mark section sizes, and these symbols
4854 are referred to in the header code generated by \c{EXE_begin}.
4856 In this model, the code you end up writing starts at \c{0x100}, just
4857 like a \c{.COM} file - in fact, if you strip off the 32-byte header
4858 from the resulting \c{.EXE} file, you will have a valid \c{.COM}
4859 program. All the segment bases are the same, so you are limited to a
4860 64K program, again just like a \c{.COM} file. Note that an \c{ORG}
4861 directive is issued by the \c{EXE_begin} macro, so you should not
4862 explicitly issue one of your own.
4864 You can't directly refer to your segment base value, unfortunately,
4865 since this would require a relocation in the header, and things
4866 would get a lot more complicated. So you should get your segment
4867 base by copying it out of \c{CS} instead.
4869 On entry to your \c{.EXE} file, \c{SS:SP} are already set up to
4870 point to the top of a 2Kb stack. You can adjust the default stack
4871 size of 2Kb by calling the \c{EXE_stack} macro. For example, to
4872 change the stack size of your program to 64 bytes, you would call
4873 \c{EXE_stack 64}.
4875 A sample program which generates a \c{.EXE} file in this way is
4876 given in the \c{test} subdirectory of the NASM archive, as
4877 \c{binexe.asm}.
4880 \H{comfiles} Producing \i\c{.COM} Files
4882 While large DOS programs must be written as \c{.EXE} files, small
4883 ones are often better written as \c{.COM} files. \c{.COM} files are
4884 pure binary, and therefore most easily produced using the \c{bin}
4885 output format.
4888 \S{combinfmt} Using the \c{bin} Format To Generate \c{.COM} Files
4890 \c{.COM} files expect to be loaded at offset \c{100h} into their
4891 segment (though the segment may change). Execution then begins at
4892 \I\c{ORG}\c{100h}, i.e. right at the start of the program. So to
4893 write a \c{.COM} program, you would create a source file looking
4894 like
4896 \c         org 100h
4898 \c section .text
4900 \c start:
4901 \c         ; put your code here
4903 \c section .data
4905 \c         ; put data items here
4907 \c section .bss
4909 \c         ; put uninitialized data here
4911 The \c{bin} format puts the \c{.text} section first in the file, so
4912 you can declare data or BSS items before beginning to write code if
4913 you want to and the code will still end up at the front of the file
4914 where it belongs.
4916 The BSS (uninitialized data) section does not take up space in the
4917 \c{.COM} file itself: instead, addresses of BSS items are resolved
4918 to point at space beyond the end of the file, on the grounds that
4919 this will be free memory when the program is run. Therefore you
4920 should not rely on your BSS being initialized to all zeros when you
4921 run.
4923 To assemble the above program, you should use a command line like
4925 \c nasm myprog.asm -fbin -o myprog.com
4927 The \c{bin} format would produce a file called \c{myprog} if no
4928 explicit output file name were specified, so you have to override it
4929 and give the desired file name.
4932 \S{comobjfmt} Using the \c{obj} Format To Generate \c{.COM} Files
4934 If you are writing a \c{.COM} program as more than one module, you
4935 may wish to assemble several \c{.OBJ} files and link them together
4936 into a \c{.COM} program. You can do this, provided you have a linker
4937 capable of outputting \c{.COM} files directly (\i{TLINK} does this),
4938 or alternatively a converter program such as \i\c{EXE2BIN} to
4939 transform the \c{.EXE} file output from the linker into a \c{.COM}
4940 file.
4942 If you do this, you need to take care of several things:
4944 \b The first object file containing code should start its code
4945 segment with a line like \c{RESB 100h}. This is to ensure that the
4946 code begins at offset \c{100h} relative to the beginning of the code
4947 segment, so that the linker or converter program does not have to
4948 adjust address references within the file when generating the
4949 \c{.COM} file. Other assemblers use an \i\c{ORG} directive for this
4950 purpose, but \c{ORG} in NASM is a format-specific directive to the
4951 \c{bin} output format, and does not mean the same thing as it does
4952 in MASM-compatible assemblers.
4954 \b You don't need to define a stack segment.
4956 \b All your segments should be in the same group, so that every time
4957 your code or data references a symbol offset, all offsets are
4958 relative to the same segment base. This is because, when a \c{.COM}
4959 file is loaded, all the segment registers contain the same value.
4962 \H{sysfiles} Producing \i\c{.SYS} Files
4964 \i{MS-DOS device drivers} - \c{.SYS} files - are pure binary files,
4965 similar to \c{.COM} files, except that they start at origin zero
4966 rather than \c{100h}. Therefore, if you are writing a device driver
4967 using the \c{bin} format, you do not need the \c{ORG} directive,
4968 since the default origin for \c{bin} is zero. Similarly, if you are
4969 using \c{obj}, you do not need the \c{RESB 100h} at the start of
4970 your code segment.
4972 \c{.SYS} files start with a header structure, containing pointers to
4973 the various routines inside the driver which do the work. This
4974 structure should be defined at the start of the code segment, even
4975 though it is not actually code.
4977 For more information on the format of \c{.SYS} files, and the data
4978 which has to go in the header structure, a list of books is given in
4979 the Frequently Asked Questions list for the newsgroup
4980 \W{news:comp.os.msdos.programmer}\i\c{comp.os.msdos.programmer}.
4983 \H{16c} Interfacing to 16-bit C Programs
4985 This section covers the basics of writing assembly routines that
4986 call, or are called from, C programs. To do this, you would
4987 typically write an assembly module as a \c{.OBJ} file, and link it
4988 with your C modules to produce a \i{mixed-language program}.
4991 \S{16cunder} External Symbol Names
4993 \I{C symbol names}\I{underscore, in C symbols}C compilers have the
4994 convention that the names of all global symbols (functions or data)
4995 they define are formed by prefixing an underscore to the name as it
4996 appears in the C program. So, for example, the function a C
4997 programmer thinks of as \c{printf} appears to an assembly language
4998 programmer as \c{_printf}. This means that in your assembly
4999 programs, you can define symbols without a leading underscore, and
5000 not have to worry about name clashes with C symbols.
5002 If you find the underscores inconvenient, you can define macros to
5003 replace the \c{GLOBAL} and \c{EXTERN} directives as follows:
5005 \c %macro  cglobal 1
5007 \c   global  _%1
5008 \c   %define %1 _%1
5010 \c %endmacro
5012 \c %macro  cextern 1
5014 \c   extern  _%1
5015 \c   %define %1 _%1
5017 \c %endmacro
5019 (These forms of the macros only take one argument at a time; a
5020 \c{%rep} construct could solve this.)
5022 If you then declare an external like this:
5024 \c cextern printf
5026 then the macro will expand it as
5028 \c extern  _printf
5029 \c %define printf _printf
5031 Thereafter, you can reference \c{printf} as if it was a symbol, and
5032 the preprocessor will put the leading underscore on where necessary.
5034 The \c{cglobal} macro works similarly. You must use \c{cglobal}
5035 before defining the symbol in question, but you would have had to do
5036 that anyway if you used \c{GLOBAL}.
5038 Also see \k{opt-pfix}.
5040 \S{16cmodels} \i{Memory Models}
5042 NASM contains no mechanism to support the various C memory models
5043 directly; you have to keep track yourself of which one you are
5044 writing for. This means you have to keep track of the following
5045 things:
5047 \b In models using a single code segment (tiny, small and compact),
5048 functions are near. This means that function pointers, when stored
5049 in data segments or pushed on the stack as function arguments, are
5050 16 bits long and contain only an offset field (the \c{CS} register
5051 never changes its value, and always gives the segment part of the
5052 full function address), and that functions are called using ordinary
5053 near \c{CALL} instructions and return using \c{RETN} (which, in
5054 NASM, is synonymous with \c{RET} anyway). This means both that you
5055 should write your own routines to return with \c{RETN}, and that you
5056 should call external C routines with near \c{CALL} instructions.
5058 \b In models using more than one code segment (medium, large and
5059 huge), functions are far. This means that function pointers are 32
5060 bits long (consisting of a 16-bit offset followed by a 16-bit
5061 segment), and that functions are called using \c{CALL FAR} (or
5062 \c{CALL seg:offset}) and return using \c{RETF}. Again, you should
5063 therefore write your own routines to return with \c{RETF} and use
5064 \c{CALL FAR} to call external routines.
5066 \b In models using a single data segment (tiny, small and medium),
5067 data pointers are 16 bits long, containing only an offset field (the
5068 \c{DS} register doesn't change its value, and always gives the
5069 segment part of the full data item address).
5071 \b In models using more than one data segment (compact, large and
5072 huge), data pointers are 32 bits long, consisting of a 16-bit offset
5073 followed by a 16-bit segment. You should still be careful not to
5074 modify \c{DS} in your routines without restoring it afterwards, but
5075 \c{ES} is free for you to use to access the contents of 32-bit data
5076 pointers you are passed.
5078 \b The huge memory model allows single data items to exceed 64K in
5079 size. In all other memory models, you can access the whole of a data
5080 item just by doing arithmetic on the offset field of the pointer you
5081 are given, whether a segment field is present or not; in huge model,
5082 you have to be more careful of your pointer arithmetic.
5084 \b In most memory models, there is a \e{default} data segment, whose
5085 segment address is kept in \c{DS} throughout the program. This data
5086 segment is typically the same segment as the stack, kept in \c{SS},
5087 so that functions' local variables (which are stored on the stack)
5088 and global data items can both be accessed easily without changing
5089 \c{DS}. Particularly large data items are typically stored in other
5090 segments. However, some memory models (though not the standard
5091 ones, usually) allow the assumption that \c{SS} and \c{DS} hold the
5092 same value to be removed. Be careful about functions' local
5093 variables in this latter case.
5095 In models with a single code segment, the segment is called
5096 \i\c{_TEXT}, so your code segment must also go by this name in order
5097 to be linked into the same place as the main code segment. In models
5098 with a single data segment, or with a default data segment, it is
5099 called \i\c{_DATA}.
5102 \S{16cfunc} Function Definitions and Function Calls
5104 \I{functions, C calling convention}The \i{C calling convention} in
5105 16-bit programs is as follows. In the following description, the
5106 words \e{caller} and \e{callee} are used to denote the function
5107 doing the calling and the function which gets called.
5109 \b The caller pushes the function's parameters on the stack, one
5110 after another, in reverse order (right to left, so that the first
5111 argument specified to the function is pushed last).
5113 \b The caller then executes a \c{CALL} instruction to pass control
5114 to the callee. This \c{CALL} is either near or far depending on the
5115 memory model.
5117 \b The callee receives control, and typically (although this is not
5118 actually necessary, in functions which do not need to access their
5119 parameters) starts by saving the value of \c{SP} in \c{BP} so as to
5120 be able to use \c{BP} as a base pointer to find its parameters on
5121 the stack. However, the caller was probably doing this too, so part
5122 of the calling convention states that \c{BP} must be preserved by
5123 any C function. Hence the callee, if it is going to set up \c{BP} as
5124 a \i\e{frame pointer}, must push the previous value first.
5126 \b The callee may then access its parameters relative to \c{BP}.
5127 The word at \c{[BP]} holds the previous value of \c{BP} as it was
5128 pushed; the next word, at \c{[BP+2]}, holds the offset part of the
5129 return address, pushed implicitly by \c{CALL}. In a small-model
5130 (near) function, the parameters start after that, at \c{[BP+4]}; in
5131 a large-model (far) function, the segment part of the return address
5132 lives at \c{[BP+4]}, and the parameters begin at \c{[BP+6]}. The
5133 leftmost parameter of the function, since it was pushed last, is
5134 accessible at this offset from \c{BP}; the others follow, at
5135 successively greater offsets. Thus, in a function such as \c{printf}
5136 which takes a variable number of parameters, the pushing of the
5137 parameters in reverse order means that the function knows where to
5138 find its first parameter, which tells it the number and type of the
5139 remaining ones.
5141 \b The callee may also wish to decrease \c{SP} further, so as to
5142 allocate space on the stack for local variables, which will then be
5143 accessible at negative offsets from \c{BP}.
5145 \b The callee, if it wishes to return a value to the caller, should
5146 leave the value in \c{AL}, \c{AX} or \c{DX:AX} depending on the size
5147 of the value. Floating-point results are sometimes (depending on the
5148 compiler) returned in \c{ST0}.
5150 \b Once the callee has finished processing, it restores \c{SP} from
5151 \c{BP} if it had allocated local stack space, then pops the previous
5152 value of \c{BP}, and returns via \c{RETN} or \c{RETF} depending on
5153 memory model.
5155 \b When the caller regains control from the callee, the function
5156 parameters are still on the stack, so it typically adds an immediate
5157 constant to \c{SP} to remove them (instead of executing a number of
5158 slow \c{POP} instructions). Thus, if a function is accidentally
5159 called with the wrong number of parameters due to a prototype
5160 mismatch, the stack will still be returned to a sensible state since
5161 the caller, which \e{knows} how many parameters it pushed, does the
5162 removing.
5164 It is instructive to compare this calling convention with that for
5165 Pascal programs (described in \k{16bpfunc}). Pascal has a simpler
5166 convention, since no functions have variable numbers of parameters.
5167 Therefore the callee knows how many parameters it should have been
5168 passed, and is able to deallocate them from the stack itself by
5169 passing an immediate argument to the \c{RET} or \c{RETF}
5170 instruction, so the caller does not have to do it. Also, the
5171 parameters are pushed in left-to-right order, not right-to-left,
5172 which means that a compiler can give better guarantees about
5173 sequence points without performance suffering.
5175 Thus, you would define a function in C style in the following way.
5176 The following example is for small model:
5178 \c global  _myfunc
5180 \c _myfunc:
5181 \c         push    bp
5182 \c         mov     bp,sp
5183 \c         sub     sp,0x40         ; 64 bytes of local stack space
5184 \c         mov     bx,[bp+4]       ; first parameter to function
5186 \c         ; some more code
5188 \c         mov     sp,bp           ; undo "sub sp,0x40" above
5189 \c         pop     bp
5190 \c         ret
5192 For a large-model function, you would replace \c{RET} by \c{RETF},
5193 and look for the first parameter at \c{[BP+6]} instead of
5194 \c{[BP+4]}. Of course, if one of the parameters is a pointer, then
5195 the offsets of \e{subsequent} parameters will change depending on
5196 the memory model as well: far pointers take up four bytes on the
5197 stack when passed as a parameter, whereas near pointers take up two.
5199 At the other end of the process, to call a C function from your
5200 assembly code, you would do something like this:
5202 \c extern  _printf
5204 \c       ; and then, further down...
5206 \c       push    word [myint]        ; one of my integer variables
5207 \c       push    word mystring       ; pointer into my data segment
5208 \c       call    _printf
5209 \c       add     sp,byte 4           ; `byte' saves space
5211 \c       ; then those data items...
5213 \c segment _DATA
5215 \c myint         dw    1234
5216 \c mystring      db    'This number -> %d <- should be 1234',10,0
5218 This piece of code is the small-model assembly equivalent of the C
5219 code
5221 \c     int myint = 1234;
5222 \c     printf("This number -> %d <- should be 1234\n", myint);
5224 In large model, the function-call code might look more like this. In
5225 this example, it is assumed that \c{DS} already holds the segment
5226 base of the segment \c{_DATA}. If not, you would have to initialize
5227 it first.
5229 \c       push    word [myint]
5230 \c       push    word seg mystring   ; Now push the segment, and...
5231 \c       push    word mystring       ; ... offset of "mystring"
5232 \c       call    far _printf
5233 \c       add    sp,byte 6
5235 The integer value still takes up one word on the stack, since large
5236 model does not affect the size of the \c{int} data type. The first
5237 argument (pushed last) to \c{printf}, however, is a data pointer,
5238 and therefore has to contain a segment and offset part. The segment
5239 should be stored second in memory, and therefore must be pushed
5240 first. (Of course, \c{PUSH DS} would have been a shorter instruction
5241 than \c{PUSH WORD SEG mystring}, if \c{DS} was set up as the above
5242 example assumed.) Then the actual call becomes a far call, since
5243 functions expect far calls in large model; and \c{SP} has to be
5244 increased by 6 rather than 4 afterwards to make up for the extra
5245 word of parameters.
5248 \S{16cdata} Accessing Data Items
5250 To get at the contents of C variables, or to declare variables which
5251 C can access, you need only declare the names as \c{GLOBAL} or
5252 \c{EXTERN}. (Again, the names require leading underscores, as stated
5253 in \k{16cunder}.) Thus, a C variable declared as \c{int i} can be
5254 accessed from assembler as
5256 \c extern _i
5258 \c         mov ax,[_i]
5260 And to declare your own integer variable which C programs can access
5261 as \c{extern int j}, you do this (making sure you are assembling in
5262 the \c{_DATA} segment, if necessary):
5264 \c global  _j
5266 \c _j      dw      0
5268 To access a C array, you need to know the size of the components of
5269 the array. For example, \c{int} variables are two bytes long, so if
5270 a C program declares an array as \c{int a[10]}, you can access
5271 \c{a[3]} by coding \c{mov ax,[_a+6]}. (The byte offset 6 is obtained
5272 by multiplying the desired array index, 3, by the size of the array
5273 element, 2.) The sizes of the C base types in 16-bit compilers are:
5274 1 for \c{char}, 2 for \c{short} and \c{int}, 4 for \c{long} and
5275 \c{float}, and 8 for \c{double}.
5277 To access a C \i{data structure}, you need to know the offset from
5278 the base of the structure to the field you are interested in. You
5279 can either do this by converting the C structure definition into a
5280 NASM structure definition (using \i\c{STRUC}), or by calculating the
5281 one offset and using just that.
5283 To do either of these, you should read your C compiler's manual to
5284 find out how it organizes data structures. NASM gives no special
5285 alignment to structure members in its own \c{STRUC} macro, so you
5286 have to specify alignment yourself if the C compiler generates it.
5287 Typically, you might find that a structure like
5289 \c struct {
5290 \c     char c;
5291 \c     int i;
5292 \c } foo;
5294 might be four bytes long rather than three, since the \c{int} field
5295 would be aligned to a two-byte boundary. However, this sort of
5296 feature tends to be a configurable option in the C compiler, either
5297 using command-line options or \c{#pragma} lines, so you have to find
5298 out how your own compiler does it.
5301 \S{16cmacro} \i\c{c16.mac}: Helper Macros for the 16-bit C Interface
5303 Included in the NASM archives, in the \I{misc subdirectory}\c{misc}
5304 directory, is a file \c{c16.mac} of macros. It defines three macros:
5305 \i\c{proc}, \i\c{arg} and \i\c{endproc}. These are intended to be
5306 used for C-style procedure definitions, and they automate a lot of
5307 the work involved in keeping track of the calling convention.
5309 (An alternative, TASM compatible form of \c{arg} is also now built
5310 into NASM's preprocessor. See \k{tasmcompat} for details.)
5312 An example of an assembly function using the macro set is given
5313 here:
5315 \c proc    _nearproc
5317 \c %$i     arg
5318 \c %$j     arg
5319 \c         mov     ax,[bp + %$i]
5320 \c         mov     bx,[bp + %$j]
5321 \c         add     ax,[bx]
5323 \c endproc
5325 This defines \c{_nearproc} to be a procedure taking two arguments,
5326 the first (\c{i}) an integer and the second (\c{j}) a pointer to an
5327 integer. It returns \c{i + *j}.
5329 Note that the \c{arg} macro has an \c{EQU} as the first line of its
5330 expansion, and since the label before the macro call gets prepended
5331 to the first line of the expanded macro, the \c{EQU} works, defining
5332 \c{%$i} to be an offset from \c{BP}. A context-local variable is
5333 used, local to the context pushed by the \c{proc} macro and popped
5334 by the \c{endproc} macro, so that the same argument name can be used
5335 in later procedures. Of course, you don't \e{have} to do that.
5337 The macro set produces code for near functions (tiny, small and
5338 compact-model code) by default. You can have it generate far
5339 functions (medium, large and huge-model code) by means of coding
5340 \I\c{FARCODE}\c{%define FARCODE}. This changes the kind of return
5341 instruction generated by \c{endproc}, and also changes the starting
5342 point for the argument offsets. The macro set contains no intrinsic
5343 dependency on whether data pointers are far or not.
5345 \c{arg} can take an optional parameter, giving the size of the
5346 argument. If no size is given, 2 is assumed, since it is likely that
5347 many function parameters will be of type \c{int}.
5349 The large-model equivalent of the above function would look like this:
5351 \c %define FARCODE
5353 \c proc    _farproc
5355 \c %$i     arg
5356 \c %$j     arg     4
5357 \c         mov     ax,[bp + %$i]
5358 \c         mov     bx,[bp + %$j]
5359 \c         mov     es,[bp + %$j + 2]
5360 \c         add     ax,[bx]
5362 \c endproc
5364 This makes use of the argument to the \c{arg} macro to define a
5365 parameter of size 4, because \c{j} is now a far pointer. When we
5366 load from \c{j}, we must load a segment and an offset.
5369 \H{16bp} Interfacing to \i{Borland Pascal} Programs
5371 Interfacing to Borland Pascal programs is similar in concept to
5372 interfacing to 16-bit C programs. The differences are:
5374 \b The leading underscore required for interfacing to C programs is
5375 not required for Pascal.
5377 \b The memory model is always large: functions are far, data
5378 pointers are far, and no data item can be more than 64K long.
5379 (Actually, some functions are near, but only those functions that
5380 are local to a Pascal unit and never called from outside it. All
5381 assembly functions that Pascal calls, and all Pascal functions that
5382 assembly routines are able to call, are far.) However, all static
5383 data declared in a Pascal program goes into the default data
5384 segment, which is the one whose segment address will be in \c{DS}
5385 when control is passed to your assembly code. The only things that
5386 do not live in the default data segment are local variables (they
5387 live in the stack segment) and dynamically allocated variables. All
5388 data \e{pointers}, however, are far.
5390 \b The function calling convention is different - described below.
5392 \b Some data types, such as strings, are stored differently.
5394 \b There are restrictions on the segment names you are allowed to
5395 use - Borland Pascal will ignore code or data declared in a segment
5396 it doesn't like the name of. The restrictions are described below.
5399 \S{16bpfunc} The Pascal Calling Convention
5401 \I{functions, Pascal calling convention}\I{Pascal calling
5402 convention}The 16-bit Pascal calling convention is as follows. In
5403 the following description, the words \e{caller} and \e{callee} are
5404 used to denote the function doing the calling and the function which
5405 gets called.
5407 \b The caller pushes the function's parameters on the stack, one
5408 after another, in normal order (left to right, so that the first
5409 argument specified to the function is pushed first).
5411 \b The caller then executes a far \c{CALL} instruction to pass
5412 control to the callee.
5414 \b The callee receives control, and typically (although this is not
5415 actually necessary, in functions which do not need to access their
5416 parameters) starts by saving the value of \c{SP} in \c{BP} so as to
5417 be able to use \c{BP} as a base pointer to find its parameters on
5418 the stack. However, the caller was probably doing this too, so part
5419 of the calling convention states that \c{BP} must be preserved by
5420 any function. Hence the callee, if it is going to set up \c{BP} as a
5421 \i{frame pointer}, must push the previous value first.
5423 \b The callee may then access its parameters relative to \c{BP}.
5424 The word at \c{[BP]} holds the previous value of \c{BP} as it was
5425 pushed. The next word, at \c{[BP+2]}, holds the offset part of the
5426 return address, and the next one at \c{[BP+4]} the segment part. The
5427 parameters begin at \c{[BP+6]}. The rightmost parameter of the
5428 function, since it was pushed last, is accessible at this offset
5429 from \c{BP}; the others follow, at successively greater offsets.
5431 \b The callee may also wish to decrease \c{SP} further, so as to
5432 allocate space on the stack for local variables, which will then be
5433 accessible at negative offsets from \c{BP}.
5435 \b The callee, if it wishes to return a value to the caller, should
5436 leave the value in \c{AL}, \c{AX} or \c{DX:AX} depending on the size
5437 of the value. Floating-point results are returned in \c{ST0}.
5438 Results of type \c{Real} (Borland's own custom floating-point data
5439 type, not handled directly by the FPU) are returned in \c{DX:BX:AX}.
5440 To return a result of type \c{String}, the caller pushes a pointer
5441 to a temporary string before pushing the parameters, and the callee
5442 places the returned string value at that location. The pointer is
5443 not a parameter, and should not be removed from the stack by the
5444 \c{RETF} instruction.
5446 \b Once the callee has finished processing, it restores \c{SP} from
5447 \c{BP} if it had allocated local stack space, then pops the previous
5448 value of \c{BP}, and returns via \c{RETF}. It uses the form of
5449 \c{RETF} with an immediate parameter, giving the number of bytes
5450 taken up by the parameters on the stack. This causes the parameters
5451 to be removed from the stack as a side effect of the return
5452 instruction.
5454 \b When the caller regains control from the callee, the function
5455 parameters have already been removed from the stack, so it needs to
5456 do nothing further.
5458 Thus, you would define a function in Pascal style, taking two
5459 \c{Integer}-type parameters, in the following way:
5461 \c global  myfunc
5463 \c myfunc: push    bp
5464 \c         mov     bp,sp
5465 \c         sub     sp,0x40         ; 64 bytes of local stack space
5466 \c         mov     bx,[bp+8]       ; first parameter to function
5467 \c         mov     bx,[bp+6]       ; second parameter to function
5469 \c         ; some more code
5471 \c         mov     sp,bp           ; undo "sub sp,0x40" above
5472 \c         pop     bp
5473 \c         retf    4               ; total size of params is 4
5475 At the other end of the process, to call a Pascal function from your
5476 assembly code, you would do something like this:
5478 \c extern  SomeFunc
5480 \c        ; and then, further down...
5482 \c        push   word seg mystring   ; Now push the segment, and...
5483 \c        push   word mystring       ; ... offset of "mystring"
5484 \c        push   word [myint]        ; one of my variables
5485 \c        call   far SomeFunc
5487 This is equivalent to the Pascal code
5489 \c procedure SomeFunc(String: PChar; Int: Integer);
5490 \c     SomeFunc(@mystring, myint);
5493 \S{16bpseg} Borland Pascal \I{segment names, Borland Pascal}Segment
5494 Name Restrictions
5496 Since Borland Pascal's internal unit file format is completely
5497 different from \c{OBJ}, it only makes a very sketchy job of actually
5498 reading and understanding the various information contained in a
5499 real \c{OBJ} file when it links that in. Therefore an object file
5500 intended to be linked to a Pascal program must obey a number of
5501 restrictions:
5503 \b Procedures and functions must be in a segment whose name is
5504 either \c{CODE}, \c{CSEG}, or something ending in \c{_TEXT}.
5506 \b initialized data must be in a segment whose name is either
5507 \c{CONST} or something ending in \c{_DATA}.
5509 \b Uninitialized data must be in a segment whose name is either
5510 \c{DATA}, \c{DSEG}, or something ending in \c{_BSS}.
5512 \b Any other segments in the object file are completely ignored.
5513 \c{GROUP} directives and segment attributes are also ignored.
5516 \S{16bpmacro} Using \i\c{c16.mac} With Pascal Programs
5518 The \c{c16.mac} macro package, described in \k{16cmacro}, can also
5519 be used to simplify writing functions to be called from Pascal
5520 programs, if you code \I\c{PASCAL}\c{%define PASCAL}. This
5521 definition ensures that functions are far (it implies
5522 \i\c{FARCODE}), and also causes procedure return instructions to be
5523 generated with an operand.
5525 Defining \c{PASCAL} does not change the code which calculates the
5526 argument offsets; you must declare your function's arguments in
5527 reverse order. For example:
5529 \c %define PASCAL
5531 \c proc    _pascalproc
5533 \c %$j     arg 4
5534 \c %$i     arg
5535 \c         mov     ax,[bp + %$i]
5536 \c         mov     bx,[bp + %$j]
5537 \c         mov     es,[bp + %$j + 2]
5538 \c         add     ax,[bx]
5540 \c endproc
5542 This defines the same routine, conceptually, as the example in
5543 \k{16cmacro}: it defines a function taking two arguments, an integer
5544 and a pointer to an integer, which returns the sum of the integer
5545 and the contents of the pointer. The only difference between this
5546 code and the large-model C version is that \c{PASCAL} is defined
5547 instead of \c{FARCODE}, and that the arguments are declared in
5548 reverse order.
5551 \C{32bit} Writing 32-bit Code (Unix, Win32, DJGPP)
5553 This chapter attempts to cover some of the common issues involved
5554 when writing 32-bit code, to run under \i{Win32} or Unix, or to be
5555 linked with C code generated by a Unix-style C compiler such as
5556 \i{DJGPP}. It covers how to write assembly code to interface with
5557 32-bit C routines, and how to write position-independent code for
5558 shared libraries.
5560 Almost all 32-bit code, and in particular all code running under
5561 \c{Win32}, \c{DJGPP} or any of the PC Unix variants, runs in \I{flat
5562 memory model}\e{flat} memory model. This means that the segment registers
5563 and paging have already been set up to give you the same 32-bit 4Gb
5564 address space no matter what segment you work relative to, and that
5565 you should ignore all segment registers completely. When writing
5566 flat-model application code, you never need to use a segment
5567 override or modify any segment register, and the code-section
5568 addresses you pass to \c{CALL} and \c{JMP} live in the same address
5569 space as the data-section addresses you access your variables by and
5570 the stack-section addresses you access local variables and procedure
5571 parameters by. Every address is 32 bits long and contains only an
5572 offset part.
5575 \H{32c} Interfacing to 32-bit C Programs
5577 A lot of the discussion in \k{16c}, about interfacing to 16-bit C
5578 programs, still applies when working in 32 bits. The absence of
5579 memory models or segmentation worries simplifies things a lot.
5582 \S{32cunder} External Symbol Names
5584 Most 32-bit C compilers share the convention used by 16-bit
5585 compilers, that the names of all global symbols (functions or data)
5586 they define are formed by prefixing an underscore to the name as it
5587 appears in the C program. However, not all of them do: the \c{ELF}
5588 specification states that C symbols do \e{not} have a leading
5589 underscore on their assembly-language names.
5591 The older Linux \c{a.out} C compiler, all \c{Win32} compilers,
5592 \c{DJGPP}, and \c{NetBSD} and \c{FreeBSD}, all use the leading
5593 underscore; for these compilers, the macros \c{cextern} and
5594 \c{cglobal}, as given in \k{16cunder}, will still work. For \c{ELF},
5595 though, the leading underscore should not be used.
5597 See also \k{opt-pfix}.
5599 \S{32cfunc} Function Definitions and Function Calls
5601 \I{functions, C calling convention}The \i{C calling convention}The C
5602 calling convention in 32-bit programs is as follows. In the
5603 following description, the words \e{caller} and \e{callee} are used
5604 to denote the function doing the calling and the function which gets
5605 called.
5607 \b The caller pushes the function's parameters on the stack, one
5608 after another, in reverse order (right to left, so that the first
5609 argument specified to the function is pushed last).
5611 \b The caller then executes a near \c{CALL} instruction to pass
5612 control to the callee.
5614 \b The callee receives control, and typically (although this is not
5615 actually necessary, in functions which do not need to access their
5616 parameters) starts by saving the value of \c{ESP} in \c{EBP} so as
5617 to be able to use \c{EBP} as a base pointer to find its parameters
5618 on the stack. However, the caller was probably doing this too, so
5619 part of the calling convention states that \c{EBP} must be preserved
5620 by any C function. Hence the callee, if it is going to set up
5621 \c{EBP} as a \i{frame pointer}, must push the previous value first.
5623 \b The callee may then access its parameters relative to \c{EBP}.
5624 The doubleword at \c{[EBP]} holds the previous value of \c{EBP} as
5625 it was pushed; the next doubleword, at \c{[EBP+4]}, holds the return
5626 address, pushed implicitly by \c{CALL}. The parameters start after
5627 that, at \c{[EBP+8]}. The leftmost parameter of the function, since
5628 it was pushed last, is accessible at this offset from \c{EBP}; the
5629 others follow, at successively greater offsets. Thus, in a function
5630 such as \c{printf} which takes a variable number of parameters, the
5631 pushing of the parameters in reverse order means that the function
5632 knows where to find its first parameter, which tells it the number
5633 and type of the remaining ones.
5635 \b The callee may also wish to decrease \c{ESP} further, so as to
5636 allocate space on the stack for local variables, which will then be
5637 accessible at negative offsets from \c{EBP}.
5639 \b The callee, if it wishes to return a value to the caller, should
5640 leave the value in \c{AL}, \c{AX} or \c{EAX} depending on the size
5641 of the value. Floating-point results are typically returned in
5642 \c{ST0}.
5644 \b Once the callee has finished processing, it restores \c{ESP} from
5645 \c{EBP} if it had allocated local stack space, then pops the previous
5646 value of \c{EBP}, and returns via \c{RET} (equivalently, \c{RETN}).
5648 \b When the caller regains control from the callee, the function
5649 parameters are still on the stack, so it typically adds an immediate
5650 constant to \c{ESP} to remove them (instead of executing a number of
5651 slow \c{POP} instructions). Thus, if a function is accidentally
5652 called with the wrong number of parameters due to a prototype
5653 mismatch, the stack will still be returned to a sensible state since
5654 the caller, which \e{knows} how many parameters it pushed, does the
5655 removing.
5657 There is an alternative calling convention used by Win32 programs
5658 for Windows API calls, and also for functions called \e{by} the
5659 Windows API such as window procedures: they follow what Microsoft
5660 calls the \c{__stdcall} convention. This is slightly closer to the
5661 Pascal convention, in that the callee clears the stack by passing a
5662 parameter to the \c{RET} instruction. However, the parameters are
5663 still pushed in right-to-left order.
5665 Thus, you would define a function in C style in the following way:
5667 \c global  _myfunc
5669 \c _myfunc:
5670 \c         push    ebp
5671 \c         mov     ebp,esp
5672 \c         sub     esp,0x40        ; 64 bytes of local stack space
5673 \c         mov     ebx,[ebp+8]     ; first parameter to function
5675 \c         ; some more code
5677 \c         leave                   ; mov esp,ebp / pop ebp
5678 \c         ret
5680 At the other end of the process, to call a C function from your
5681 assembly code, you would do something like this:
5683 \c extern  _printf
5685 \c         ; and then, further down...
5687 \c         push    dword [myint]   ; one of my integer variables
5688 \c         push    dword mystring  ; pointer into my data segment
5689 \c         call    _printf
5690 \c         add     esp,byte 8      ; `byte' saves space
5692 \c         ; then those data items...
5694 \c segment _DATA
5696 \c myint       dd   1234
5697 \c mystring    db   'This number -> %d <- should be 1234',10,0
5699 This piece of code is the assembly equivalent of the C code
5701 \c     int myint = 1234;
5702 \c     printf("This number -> %d <- should be 1234\n", myint);
5705 \S{32cdata} Accessing Data Items
5707 To get at the contents of C variables, or to declare variables which
5708 C can access, you need only declare the names as \c{GLOBAL} or
5709 \c{EXTERN}. (Again, the names require leading underscores, as stated
5710 in \k{32cunder}.) Thus, a C variable declared as \c{int i} can be
5711 accessed from assembler as
5713 \c           extern _i
5714 \c           mov eax,[_i]
5716 And to declare your own integer variable which C programs can access
5717 as \c{extern int j}, you do this (making sure you are assembling in
5718 the \c{_DATA} segment, if necessary):
5720 \c           global _j
5721 \c _j        dd 0
5723 To access a C array, you need to know the size of the components of
5724 the array. For example, \c{int} variables are four bytes long, so if
5725 a C program declares an array as \c{int a[10]}, you can access
5726 \c{a[3]} by coding \c{mov ax,[_a+12]}. (The byte offset 12 is obtained
5727 by multiplying the desired array index, 3, by the size of the array
5728 element, 4.) The sizes of the C base types in 32-bit compilers are:
5729 1 for \c{char}, 2 for \c{short}, 4 for \c{int}, \c{long} and
5730 \c{float}, and 8 for \c{double}. Pointers, being 32-bit addresses,
5731 are also 4 bytes long.
5733 To access a C \i{data structure}, you need to know the offset from
5734 the base of the structure to the field you are interested in. You
5735 can either do this by converting the C structure definition into a
5736 NASM structure definition (using \c{STRUC}), or by calculating the
5737 one offset and using just that.
5739 To do either of these, you should read your C compiler's manual to
5740 find out how it organizes data structures. NASM gives no special
5741 alignment to structure members in its own \i\c{STRUC} macro, so you
5742 have to specify alignment yourself if the C compiler generates it.
5743 Typically, you might find that a structure like
5745 \c struct {
5746 \c     char c;
5747 \c     int i;
5748 \c } foo;
5750 might be eight bytes long rather than five, since the \c{int} field
5751 would be aligned to a four-byte boundary. However, this sort of
5752 feature is sometimes a configurable option in the C compiler, either
5753 using command-line options or \c{#pragma} lines, so you have to find
5754 out how your own compiler does it.
5757 \S{32cmacro} \i\c{c32.mac}: Helper Macros for the 32-bit C Interface
5759 Included in the NASM archives, in the \I{misc directory}\c{misc}
5760 directory, is a file \c{c32.mac} of macros. It defines three macros:
5761 \i\c{proc}, \i\c{arg} and \i\c{endproc}. These are intended to be
5762 used for C-style procedure definitions, and they automate a lot of
5763 the work involved in keeping track of the calling convention.
5765 An example of an assembly function using the macro set is given
5766 here:
5768 \c proc    _proc32
5770 \c %$i     arg
5771 \c %$j     arg
5772 \c         mov     eax,[ebp + %$i]
5773 \c         mov     ebx,[ebp + %$j]
5774 \c         add     eax,[ebx]
5776 \c endproc
5778 This defines \c{_proc32} to be a procedure taking two arguments, the
5779 first (\c{i}) an integer and the second (\c{j}) a pointer to an
5780 integer. It returns \c{i + *j}.
5782 Note that the \c{arg} macro has an \c{EQU} as the first line of its
5783 expansion, and since the label before the macro call gets prepended
5784 to the first line of the expanded macro, the \c{EQU} works, defining
5785 \c{%$i} to be an offset from \c{BP}. A context-local variable is
5786 used, local to the context pushed by the \c{proc} macro and popped
5787 by the \c{endproc} macro, so that the same argument name can be used
5788 in later procedures. Of course, you don't \e{have} to do that.
5790 \c{arg} can take an optional parameter, giving the size of the
5791 argument. If no size is given, 4 is assumed, since it is likely that
5792 many function parameters will be of type \c{int} or pointers.
5795 \H{picdll} Writing NetBSD/FreeBSD/OpenBSD and Linux/ELF \i{Shared
5796 Libraries}
5798 \c{ELF} replaced the older \c{a.out} object file format under Linux
5799 because it contains support for \i{position-independent code}
5800 (\i{PIC}), which makes writing shared libraries much easier. NASM
5801 supports the \c{ELF} position-independent code features, so you can
5802 write Linux \c{ELF} shared libraries in NASM.
5804 \i{NetBSD}, and its close cousins \i{FreeBSD} and \i{OpenBSD}, take
5805 a different approach by hacking PIC support into the \c{a.out}
5806 format. NASM supports this as the \i\c{aoutb} output format, so you
5807 can write \i{BSD} shared libraries in NASM too.
5809 The operating system loads a PIC shared library by memory-mapping
5810 the library file at an arbitrarily chosen point in the address space
5811 of the running process. The contents of the library's code section
5812 must therefore not depend on where it is loaded in memory.
5814 Therefore, you cannot get at your variables by writing code like
5815 this:
5817 \c         mov     eax,[myvar]             ; WRONG
5819 Instead, the linker provides an area of memory called the
5820 \i\e{global offset table}, or \i{GOT}; the GOT is situated at a
5821 constant distance from your library's code, so if you can find out
5822 where your library is loaded (which is typically done using a
5823 \c{CALL} and \c{POP} combination), you can obtain the address of the
5824 GOT, and you can then load the addresses of your variables out of
5825 linker-generated entries in the GOT.
5827 The \e{data} section of a PIC shared library does not have these
5828 restrictions: since the data section is writable, it has to be
5829 copied into memory anyway rather than just paged in from the library
5830 file, so as long as it's being copied it can be relocated too. So
5831 you can put ordinary types of relocation in the data section without
5832 too much worry (but see \k{picglobal} for a caveat).
5835 \S{picgot} Obtaining the Address of the GOT
5837 Each code module in your shared library should define the GOT as an
5838 external symbol:
5840 \c extern  _GLOBAL_OFFSET_TABLE_   ; in ELF
5841 \c extern  __GLOBAL_OFFSET_TABLE_  ; in BSD a.out
5843 At the beginning of any function in your shared library which plans
5844 to access your data or BSS sections, you must first calculate the
5845 address of the GOT. This is typically done by writing the function
5846 in this form:
5848 \c func:   push    ebp
5849 \c         mov     ebp,esp
5850 \c         push    ebx
5851 \c         call    .get_GOT
5852 \c .get_GOT:
5853 \c         pop     ebx
5854 \c         add     ebx,_GLOBAL_OFFSET_TABLE_+$$-.get_GOT wrt ..gotpc
5856 \c         ; the function body comes here
5858 \c         mov     ebx,[ebp-4]
5859 \c         mov     esp,ebp
5860 \c         pop     ebp
5861 \c         ret
5863 (For BSD, again, the symbol \c{_GLOBAL_OFFSET_TABLE} requires a
5864 second leading underscore.)
5866 The first two lines of this function are simply the standard C
5867 prologue to set up a stack frame, and the last three lines are
5868 standard C function epilogue. The third line, and the fourth to last
5869 line, save and restore the \c{EBX} register, because PIC shared
5870 libraries use this register to store the address of the GOT.
5872 The interesting bit is the \c{CALL} instruction and the following
5873 two lines. The \c{CALL} and \c{POP} combination obtains the address
5874 of the label \c{.get_GOT}, without having to know in advance where
5875 the program was loaded (since the \c{CALL} instruction is encoded
5876 relative to the current position). The \c{ADD} instruction makes use
5877 of one of the special PIC relocation types: \i{GOTPC relocation}.
5878 With the \i\c{WRT ..gotpc} qualifier specified, the symbol
5879 referenced (here \c{_GLOBAL_OFFSET_TABLE_}, the special symbol
5880 assigned to the GOT) is given as an offset from the beginning of the
5881 section. (Actually, \c{ELF} encodes it as the offset from the operand
5882 field of the \c{ADD} instruction, but NASM simplifies this
5883 deliberately, so you do things the same way for both \c{ELF} and
5884 \c{BSD}.) So the instruction then \e{adds} the beginning of the section,
5885 to get the real address of the GOT, and subtracts the value of
5886 \c{.get_GOT} which it knows is in \c{EBX}. Therefore, by the time
5887 that instruction has finished, \c{EBX} contains the address of the GOT.
5889 If you didn't follow that, don't worry: it's never necessary to
5890 obtain the address of the GOT by any other means, so you can put
5891 those three instructions into a macro and safely ignore them:
5893 \c %macro  get_GOT 0
5895 \c         call    %%getgot
5896 \c   %%getgot:
5897 \c         pop     ebx
5898 \c         add     ebx,_GLOBAL_OFFSET_TABLE_+$$-%%getgot wrt ..gotpc
5900 \c %endmacro
5902 \S{piclocal} Finding Your Local Data Items
5904 Having got the GOT, you can then use it to obtain the addresses of
5905 your data items. Most variables will reside in the sections you have
5906 declared; they can be accessed using the \I{GOTOFF
5907 relocation}\c{..gotoff} special \I\c{WRT ..gotoff}\c{WRT} type. The
5908 way this works is like this:
5910 \c         lea     eax,[ebx+myvar wrt ..gotoff]
5912 The expression \c{myvar wrt ..gotoff} is calculated, when the shared
5913 library is linked, to be the offset to the local variable \c{myvar}
5914 from the beginning of the GOT. Therefore, adding it to \c{EBX} as
5915 above will place the real address of \c{myvar} in \c{EAX}.
5917 If you declare variables as \c{GLOBAL} without specifying a size for
5918 them, they are shared between code modules in the library, but do
5919 not get exported from the library to the program that loaded it.
5920 They will still be in your ordinary data and BSS sections, so you
5921 can access them in the same way as local variables, using the above
5922 \c{..gotoff} mechanism.
5924 Note that due to a peculiarity of the way BSD \c{a.out} format
5925 handles this relocation type, there must be at least one non-local
5926 symbol in the same section as the address you're trying to access.
5929 \S{picextern} Finding External and Common Data Items
5931 If your library needs to get at an external variable (external to
5932 the \e{library}, not just to one of the modules within it), you must
5933 use the \I{GOT relocations}\I\c{WRT ..got}\c{..got} type to get at
5934 it. The \c{..got} type, instead of giving you the offset from the
5935 GOT base to the variable, gives you the offset from the GOT base to
5936 a GOT \e{entry} containing the address of the variable. The linker
5937 will set up this GOT entry when it builds the library, and the
5938 dynamic linker will place the correct address in it at load time. So
5939 to obtain the address of an external variable \c{extvar} in \c{EAX},
5940 you would code
5942 \c         mov     eax,[ebx+extvar wrt ..got]
5944 This loads the address of \c{extvar} out of an entry in the GOT. The
5945 linker, when it builds the shared library, collects together every
5946 relocation of type \c{..got}, and builds the GOT so as to ensure it
5947 has every necessary entry present.
5949 Common variables must also be accessed in this way.
5952 \S{picglobal} Exporting Symbols to the Library User
5954 If you want to export symbols to the user of the library, you have
5955 to declare whether they are functions or data, and if they are data,
5956 you have to give the size of the data item. This is because the
5957 dynamic linker has to build \I{PLT}\i{procedure linkage table}
5958 entries for any exported functions, and also moves exported data
5959 items away from the library's data section in which they were
5960 declared.
5962 So to export a function to users of the library, you must use
5964 \c global  func:function           ; declare it as a function
5966 \c func:   push    ebp
5968 \c         ; etc.
5970 And to export a data item such as an array, you would have to code
5972 \c global  array:data array.end-array      ; give the size too
5974 \c array:  resd    128
5975 \c .end:
5977 Be careful: If you export a variable to the library user, by
5978 declaring it as \c{GLOBAL} and supplying a size, the variable will
5979 end up living in the data section of the main program, rather than
5980 in your library's data section, where you declared it. So you will
5981 have to access your own global variable with the \c{..got} mechanism
5982 rather than \c{..gotoff}, as if it were external (which,
5983 effectively, it has become).
5985 Equally, if you need to store the address of an exported global in
5986 one of your data sections, you can't do it by means of the standard
5987 sort of code:
5989 \c dataptr:        dd      global_data_item        ; WRONG
5991 NASM will interpret this code as an ordinary relocation, in which
5992 \c{global_data_item} is merely an offset from the beginning of the
5993 \c{.data} section (or whatever); so this reference will end up
5994 pointing at your data section instead of at the exported global
5995 which resides elsewhere.
5997 Instead of the above code, then, you must write
5999 \c dataptr:        dd      global_data_item wrt ..sym
6001 which makes use of the special \c{WRT} type \I\c{WRT ..sym}\c{..sym}
6002 to instruct NASM to search the symbol table for a particular symbol
6003 at that address, rather than just relocating by section base.
6005 Either method will work for functions: referring to one of your
6006 functions by means of
6008 \c funcptr:        dd      my_function
6010 will give the user the address of the code you wrote, whereas
6012 \c funcptr:        dd      my_function wrt .sym
6014 will give the address of the procedure linkage table for the
6015 function, which is where the calling program will \e{believe} the
6016 function lives. Either address is a valid way to call the function.
6019 \S{picproc} Calling Procedures Outside the Library
6021 Calling procedures outside your shared library has to be done by
6022 means of a \i\e{procedure linkage table}, or \i{PLT}. The PLT is
6023 placed at a known offset from where the library is loaded, so the
6024 library code can make calls to the PLT in a position-independent
6025 way. Within the PLT there is code to jump to offsets contained in
6026 the GOT, so function calls to other shared libraries or to routines
6027 in the main program can be transparently passed off to their real
6028 destinations.
6030 To call an external routine, you must use another special PIC
6031 relocation type, \I{PLT relocations}\i\c{WRT ..plt}. This is much
6032 easier than the GOT-based ones: you simply replace calls such as
6033 \c{CALL printf} with the PLT-relative version \c{CALL printf WRT
6034 ..plt}.
6037 \S{link} Generating the Library File
6039 Having written some code modules and assembled them to \c{.o} files,
6040 you then generate your shared library with a command such as
6042 \c ld -shared -o library.so module1.o module2.o       # for ELF
6043 \c ld -Bshareable -o library.so module1.o module2.o   # for BSD
6045 For ELF, if your shared library is going to reside in system
6046 directories such as \c{/usr/lib} or \c{/lib}, it is usually worth
6047 using the \i\c{-soname} flag to the linker, to store the final
6048 library file name, with a version number, into the library:
6050 \c ld -shared -soname library.so.1 -o library.so.1.2 *.o
6052 You would then copy \c{library.so.1.2} into the library directory,
6053 and create \c{library.so.1} as a symbolic link to it.
6056 \C{mixsize} Mixing 16 and 32 Bit Code
6058 This chapter tries to cover some of the issues, largely related to
6059 unusual forms of addressing and jump instructions, encountered when
6060 writing operating system code such as protected-mode initialisation
6061 routines, which require code that operates in mixed segment sizes,
6062 such as code in a 16-bit segment trying to modify data in a 32-bit
6063 one, or jumps between different-size segments.
6066 \H{mixjump} Mixed-Size Jumps\I{jumps, mixed-size}
6068 \I{operating system, writing}\I{writing operating systems}The most
6069 common form of \i{mixed-size instruction} is the one used when
6070 writing a 32-bit OS: having done your setup in 16-bit mode, such as
6071 loading the kernel, you then have to boot it by switching into
6072 protected mode and jumping to the 32-bit kernel start address. In a
6073 fully 32-bit OS, this tends to be the \e{only} mixed-size
6074 instruction you need, since everything before it can be done in pure
6075 16-bit code, and everything after it can be pure 32-bit.
6077 This jump must specify a 48-bit far address, since the target
6078 segment is a 32-bit one. However, it must be assembled in a 16-bit
6079 segment, so just coding, for example,
6081 \c         jmp     0x1234:0x56789ABC       ; wrong!
6083 will not work, since the offset part of the address will be
6084 truncated to \c{0x9ABC} and the jump will be an ordinary 16-bit far
6085 one.
6087 The Linux kernel setup code gets round the inability of \c{as86} to
6088 generate the required instruction by coding it manually, using
6089 \c{DB} instructions. NASM can go one better than that, by actually
6090 generating the right instruction itself. Here's how to do it right:
6092 \c         jmp     dword 0x1234:0x56789ABC         ; right
6094 \I\c{JMP DWORD}The \c{DWORD} prefix (strictly speaking, it should
6095 come \e{after} the colon, since it is declaring the \e{offset} field
6096 to be a doubleword; but NASM will accept either form, since both are
6097 unambiguous) forces the offset part to be treated as far, in the
6098 assumption that you are deliberately writing a jump from a 16-bit
6099 segment to a 32-bit one.
6101 You can do the reverse operation, jumping from a 32-bit segment to a
6102 16-bit one, by means of the \c{WORD} prefix:
6104 \c         jmp     word 0x8765:0x4321      ; 32 to 16 bit
6106 If the \c{WORD} prefix is specified in 16-bit mode, or the \c{DWORD}
6107 prefix in 32-bit mode, they will be ignored, since each is
6108 explicitly forcing NASM into a mode it was in anyway.
6111 \H{mixaddr} Addressing Between Different-Size Segments\I{addressing,
6112 mixed-size}\I{mixed-size addressing}
6114 If your OS is mixed 16 and 32-bit, or if you are writing a DOS
6115 extender, you are likely to have to deal with some 16-bit segments
6116 and some 32-bit ones. At some point, you will probably end up
6117 writing code in a 16-bit segment which has to access data in a
6118 32-bit segment, or vice versa.
6120 If the data you are trying to access in a 32-bit segment lies within
6121 the first 64K of the segment, you may be able to get away with using
6122 an ordinary 16-bit addressing operation for the purpose; but sooner
6123 or later, you will want to do 32-bit addressing from 16-bit mode.
6125 The easiest way to do this is to make sure you use a register for
6126 the address, since any effective address containing a 32-bit
6127 register is forced to be a 32-bit address. So you can do
6129 \c         mov     eax,offset_into_32_bit_segment_specified_by_fs
6130 \c         mov     dword [fs:eax],0x11223344
6132 This is fine, but slightly cumbersome (since it wastes an
6133 instruction and a register) if you already know the precise offset
6134 you are aiming at. The x86 architecture does allow 32-bit effective
6135 addresses to specify nothing but a 4-byte offset, so why shouldn't
6136 NASM be able to generate the best instruction for the purpose?
6138 It can. As in \k{mixjump}, you need only prefix the address with the
6139 \c{DWORD} keyword, and it will be forced to be a 32-bit address:
6141 \c         mov     dword [fs:dword my_offset],0x11223344
6143 Also as in \k{mixjump}, NASM is not fussy about whether the
6144 \c{DWORD} prefix comes before or after the segment override, so
6145 arguably a nicer-looking way to code the above instruction is
6147 \c         mov     dword [dword fs:my_offset],0x11223344
6149 Don't confuse the \c{DWORD} prefix \e{outside} the square brackets,
6150 which controls the size of the data stored at the address, with the
6151 one \c{inside} the square brackets which controls the length of the
6152 address itself. The two can quite easily be different:
6154 \c         mov     word [dword 0x12345678],0x9ABC
6156 This moves 16 bits of data to an address specified by a 32-bit
6157 offset.
6159 You can also specify \c{WORD} or \c{DWORD} prefixes along with the
6160 \c{FAR} prefix to indirect far jumps or calls. For example:
6162 \c         call    dword far [fs:word 0x4321]
6164 This instruction contains an address specified by a 16-bit offset;
6165 it loads a 48-bit far pointer from that (16-bit segment and 32-bit
6166 offset), and calls that address.
6169 \H{mixother} Other Mixed-Size Instructions
6171 The other way you might want to access data might be using the
6172 string instructions (\c{LODSx}, \c{STOSx} and so on) or the
6173 \c{XLATB} instruction. These instructions, since they take no
6174 parameters, might seem to have no easy way to make them perform
6175 32-bit addressing when assembled in a 16-bit segment.
6177 This is the purpose of NASM's \i\c{a16} and \i\c{a32} prefixes. If
6178 you are coding \c{LODSB} in a 16-bit segment but it is supposed to
6179 be accessing a string in a 32-bit segment, you should load the
6180 desired address into \c{ESI} and then code
6182 \c         a32     lodsb
6184 The prefix forces the addressing size to 32 bits, meaning that
6185 \c{LODSB} loads from \c{[DS:ESI]} instead of \c{[DS:SI]}. To access
6186 a string in a 16-bit segment when coding in a 32-bit one, the
6187 corresponding \c{a16} prefix can be used.
6189 The \c{a16} and \c{a32} prefixes can be applied to any instruction
6190 in NASM's instruction table, but most of them can generate all the
6191 useful forms without them. The prefixes are necessary only for
6192 instructions with implicit addressing:
6193 \# \c{CMPSx} (\k{insCMPSB}),
6194 \# \c{SCASx} (\k{insSCASB}), \c{LODSx} (\k{insLODSB}), \c{STOSx}
6195 \# (\k{insSTOSB}), \c{MOVSx} (\k{insMOVSB}), \c{INSx} (\k{insINSB}),
6196 \# \c{OUTSx} (\k{insOUTSB}), and \c{XLATB} (\k{insXLATB}).
6197 \c{CMPSx}, \c{SCASx}, \c{LODSx}, \c{STOSx}, \c{MOVSx}, \c{INSx},
6198 \c{OUTSx}, and \c{XLATB}.
6199 Also, the
6200 various push and pop instructions (\c{PUSHA} and \c{POPF} as well as
6201 the more usual \c{PUSH} and \c{POP}) can accept \c{a16} or \c{a32}
6202 prefixes to force a particular one of \c{SP} or \c{ESP} to be used
6203 as a stack pointer, in case the stack segment in use is a different
6204 size from the code segment.
6206 \c{PUSH} and \c{POP}, when applied to segment registers in 32-bit
6207 mode, also have the slightly odd behaviour that they push and pop 4
6208 bytes at a time, of which the top two are ignored and the bottom two
6209 give the value of the segment register being manipulated. To force
6210 the 16-bit behaviour of segment-register push and pop instructions,
6211 you can use the operand-size prefix \i\c{o16}:
6213 \c         o16 push    ss
6214 \c         o16 push    ds
6216 This code saves a doubleword of stack space by fitting two segment
6217 registers into the space which would normally be consumed by pushing
6218 one.
6220 (You can also use the \i\c{o32} prefix to force the 32-bit behaviour
6221 when in 16-bit mode, but this seems less useful.)
6224 \C{64bit} Writing 64-bit Code (Unix, Win64)
6226 This chapter attempts to cover some of the common issues involved when
6227 writing 64-bit code, to run under \i{Win64} or Unix.  It covers how to
6228 write assembly code to interface with 64-bit C routines, and how to
6229 write position-independent code for shared libraries.
6231 All 64-bit code uses a flat memory model, since segmentation is not
6232 available in 64-bit mode.  The one exception is the \c{FS} and \c{GS}
6233 registers, which still add their bases.
6235 Position independence in 64-bit mode is significantly simpler, since
6236 the processor supports \c{RIP}-relative addressing directly; see the
6237 \c{REL} keyword (\k{effaddr}).  On most 64-bit platforms, it is
6238 probably desirable to make that the default, using the directive
6239 \c{DEFAULT REL} (\k{default}).
6241 64-bit programming is relatively similar to 32-bit programming, but
6242 of course pointers are 64 bits long; additionally, all existing
6243 platforms pass arguments in registers rather than on the stack.
6244 Furthermore, 64-bit platforms use SSE2 by default for floating point.
6245 Please see the ABI documentation for your platform.
6247 64-bit platforms differ in the sizes of the fundamental datatypes, not
6248 just from 32-bit platforms but from each other.  If a specific size
6249 data type is desired, it is probably best to use the types defined in
6250 the Standard C header \c{<inttypes.h>}.
6252 \H{unix64} Interfacing to 64-bit C Programs (Unix)
6254 On Unix, the 64-bit ABI is defined by the document:
6256 \W{http://www.x86-64.org/documentation/abi.pdf}\c{http://www.x86-64.org/documentation/abi.pdf}
6258 Although written for AT&T-syntax assembly, the concepts apply equally
6259 well for NASM-style assembly.  What follows is a simplified summary.
6261 The first six integer arguments (from the left) are passed in \c{RDI},
6262 \c{RSI}, \c{RDX}, \c{RCX}, \c{R8}, and \c{R9}, in that order.
6263 Additional integer arguments are passed on the stack.  These
6264 registers, plus \c{RAX}, \c{R10} and \c{R11} are destroyed by function
6265 calls, and thus are available for use by the function without saving.
6267 Integer return values are passed in \c{RAX} and \c{RDX}, in that order.
6269 Floating point is done using SSE registers, except for \c{long
6270 double}.  Floating-point arguments are passed in \c{XMM0} to \c{XMM7};
6271 return is \c{XMM0} and \c{XMM1}.  \c{long double} are passed on the
6272 stack, and returned in \c{ST(0)} and \c{ST(1)}.
6274 All SSE and x87 registers are destroyed by function calls.
6276 On 64-bit Unix, \c{long} is 64 bits.
6278 \H{win64} Interfacing to 64-bit C Programs (Win64)
6280 The Win64 ABI is described at:
6282 \W{http://msdn2.microsoft.com/en-gb/library/ms794533.aspx}\c{http://msdn2.microsoft.com/en-gb/library/ms794533.aspx}
6284 What follows is a simplified summary.
6286 The first four integer arguments are passwd in \c{RCX}, \c{RDX},
6287 \c{R8} and \c{R9}, in that order.  Additional integer arguments are
6288 passed on the stack.  These registers, plus \c{RAX}, \c{R10} and
6289 \c{R11} are destroyed by function calls, and thus are available for
6290 use by the function without saving.
6292 Integer return values are passed in \c{RAX} only.
6294 Floating point is done using SSE registers, except for \c{long
6295 double}.  Floating-point arguments are passed in \c{XMM0} to \c{XMM3};
6296 return is \c{XMM0} only.
6298 On Win64, \c{long} is 32 bits; \c{long long} or \c{_int64} is 64 bits.
6300 \C{trouble} Troubleshooting
6302 This chapter describes some of the common problems that users have
6303 been known to encounter with NASM, and answers them. It also gives
6304 instructions for reporting bugs in NASM if you find a difficulty
6305 that isn't listed here.
6308 \H{problems} Common Problems
6310 \S{inefficient} NASM Generates \i{Inefficient Code}
6312 We sometimes get `bug' reports about NASM generating inefficient, or
6313 even `wrong', code on instructions such as \c{ADD ESP,8}. This is a
6314 deliberate design feature, connected to predictability of output:
6315 NASM, on seeing \c{ADD ESP,8}, will generate the form of the
6316 instruction which leaves room for a 32-bit offset. You need to code
6317 \I\c{BYTE}\c{ADD ESP,BYTE 8} if you want the space-efficient form of
6318 the instruction. This isn't a bug, it's user error: if you prefer to
6319 have NASM produce the more efficient code automatically enable
6320 optimization with the \c{-On} option (see \k{opt-On}).
6323 \S{jmprange} My Jumps are Out of Range\I{out of range, jumps}
6325 Similarly, people complain that when they issue \i{conditional
6326 jumps} (which are \c{SHORT} by default) that try to jump too far,
6327 NASM reports `short jump out of range' instead of making the jumps
6328 longer.
6330 This, again, is partly a predictability issue, but in fact has a
6331 more practical reason as well. NASM has no means of being told what
6332 type of processor the code it is generating will be run on; so it
6333 cannot decide for itself that it should generate \i\c{Jcc NEAR} type
6334 instructions, because it doesn't know that it's working for a 386 or
6335 above. Alternatively, it could replace the out-of-range short
6336 \c{JNE} instruction with a very short \c{JE} instruction that jumps
6337 over a \c{JMP NEAR}; this is a sensible solution for processors
6338 below a 386, but hardly efficient on processors which have good
6339 branch prediction \e{and} could have used \c{JNE NEAR} instead. So,
6340 once again, it's up to the user, not the assembler, to decide what
6341 instructions should be generated. See \k{opt-On}.
6344 \S{proborg} \i\c{ORG} Doesn't Work
6346 People writing \i{boot sector} programs in the \c{bin} format often
6347 complain that \c{ORG} doesn't work the way they'd like: in order to
6348 place the \c{0xAA55} signature word at the end of a 512-byte boot
6349 sector, people who are used to MASM tend to code
6351 \c         ORG 0
6353 \c         ; some boot sector code
6355 \c         ORG 510
6356 \c         DW 0xAA55
6358 This is not the intended use of the \c{ORG} directive in NASM, and
6359 will not work. The correct way to solve this problem in NASM is to
6360 use the \i\c{TIMES} directive, like this:
6362 \c         ORG 0
6364 \c         ; some boot sector code
6366 \c         TIMES 510-($-$$) DB 0
6367 \c         DW 0xAA55
6369 The \c{TIMES} directive will insert exactly enough zero bytes into
6370 the output to move the assembly point up to 510. This method also
6371 has the advantage that if you accidentally fill your boot sector too
6372 full, NASM will catch the problem at assembly time and report it, so
6373 you won't end up with a boot sector that you have to disassemble to
6374 find out what's wrong with it.
6377 \S{probtimes} \i\c{TIMES} Doesn't Work
6379 The other common problem with the above code is people who write the
6380 \c{TIMES} line as
6382 \c         TIMES 510-$ DB 0
6384 by reasoning that \c{$} should be a pure number, just like 510, so
6385 the difference between them is also a pure number and can happily be
6386 fed to \c{TIMES}.
6388 NASM is a \e{modular} assembler: the various component parts are
6389 designed to be easily separable for re-use, so they don't exchange
6390 information unnecessarily. In consequence, the \c{bin} output
6391 format, even though it has been told by the \c{ORG} directive that
6392 the \c{.text} section should start at 0, does not pass that
6393 information back to the expression evaluator. So from the
6394 evaluator's point of view, \c{$} isn't a pure number: it's an offset
6395 from a section base. Therefore the difference between \c{$} and 510
6396 is also not a pure number, but involves a section base. Values
6397 involving section bases cannot be passed as arguments to \c{TIMES}.
6399 The solution, as in the previous section, is to code the \c{TIMES}
6400 line in the form
6402 \c         TIMES 510-($-$$) DB 0
6404 in which \c{$} and \c{$$} are offsets from the same section base,
6405 and so their difference is a pure number. This will solve the
6406 problem and generate sensible code.
6409 \H{bugs} \i{Bugs}\I{reporting bugs}
6411 We have never yet released a version of NASM with any \e{known}
6412 bugs. That doesn't usually stop there being plenty we didn't know
6413 about, though. Any that you find should be reported firstly via the
6414 \i\c{bugtracker} at
6415 \W{https://sourceforge.net/projects/nasm/}\c{https://sourceforge.net/projects/nasm/}
6416 (click on "Bugs"), or if that fails then through one of the
6417 contacts in \k{contact}.
6419 Please read \k{qstart} first, and don't report the bug if it's
6420 listed in there as a deliberate feature. (If you think the feature
6421 is badly thought out, feel free to send us reasons why you think it
6422 should be changed, but don't just send us mail saying `This is a
6423 bug' if the documentation says we did it on purpose.) Then read
6424 \k{problems}, and don't bother reporting the bug if it's listed
6425 there.
6427 If you do report a bug, \e{please} give us all of the following
6428 information:
6430 \b What operating system you're running NASM under. DOS, Linux,
6431 NetBSD, Win16, Win32, VMS (I'd be impressed), whatever.
6433 \b If you're running NASM under DOS or Win32, tell us whether you've
6434 compiled your own executable from the DOS source archive, or whether
6435 you were using the standard distribution binaries out of the
6436 archive. If you were using a locally built executable, try to
6437 reproduce the problem using one of the standard binaries, as this
6438 will make it easier for us to reproduce your problem prior to fixing
6441 \b Which version of NASM you're using, and exactly how you invoked
6442 it. Give us the precise command line, and the contents of the
6443 \c{NASMENV} environment variable if any.
6445 \b Which versions of any supplementary programs you're using, and
6446 how you invoked them. If the problem only becomes visible at link
6447 time, tell us what linker you're using, what version of it you've
6448 got, and the exact linker command line. If the problem involves
6449 linking against object files generated by a compiler, tell us what
6450 compiler, what version, and what command line or options you used.
6451 (If you're compiling in an IDE, please try to reproduce the problem
6452 with the command-line version of the compiler.)
6454 \b If at all possible, send us a NASM source file which exhibits the
6455 problem. If this causes copyright problems (e.g. you can only
6456 reproduce the bug in restricted-distribution code) then bear in mind
6457 the following two points: firstly, we guarantee that any source code
6458 sent to us for the purposes of debugging NASM will be used \e{only}
6459 for the purposes of debugging NASM, and that we will delete all our
6460 copies of it as soon as we have found and fixed the bug or bugs in
6461 question; and secondly, we would prefer \e{not} to be mailed large
6462 chunks of code anyway. The smaller the file, the better. A
6463 three-line sample file that does nothing useful \e{except}
6464 demonstrate the problem is much easier to work with than a
6465 fully fledged ten-thousand-line program. (Of course, some errors
6466 \e{do} only crop up in large files, so this may not be possible.)
6468 \b A description of what the problem actually \e{is}. `It doesn't
6469 work' is \e{not} a helpful description! Please describe exactly what
6470 is happening that shouldn't be, or what isn't happening that should.
6471 Examples might be: `NASM generates an error message saying Line 3
6472 for an error that's actually on Line 5'; `NASM generates an error
6473 message that I believe it shouldn't be generating at all'; `NASM
6474 fails to generate an error message that I believe it \e{should} be
6475 generating'; `the object file produced from this source code crashes
6476 my linker'; `the ninth byte of the output file is 66 and I think it
6477 should be 77 instead'.
6479 \b If you believe the output file from NASM to be faulty, send it to
6480 us. That allows us to determine whether our own copy of NASM
6481 generates the same file, or whether the problem is related to
6482 portability issues between our development platforms and yours. We
6483 can handle binary files mailed to us as MIME attachments, uuencoded,
6484 and even BinHex. Alternatively, we may be able to provide an FTP
6485 site you can upload the suspect files to; but mailing them is easier
6486 for us.
6488 \b Any other information or data files that might be helpful. If,
6489 for example, the problem involves NASM failing to generate an object
6490 file while TASM can generate an equivalent file without trouble,
6491 then send us \e{both} object files, so we can see what TASM is doing
6492 differently from us.
6495 \A{ndisasm} \i{Ndisasm}
6497                   The Netwide Disassembler, NDISASM
6499 \H{ndisintro} Introduction
6502 The Netwide Disassembler is a small companion program to the Netwide
6503 Assembler, NASM. It seemed a shame to have an x86 assembler,
6504 complete with a full instruction table, and not make as much use of
6505 it as possible, so here's a disassembler which shares the
6506 instruction table (and some other bits of code) with NASM.
6508 The Netwide Disassembler does nothing except to produce
6509 disassemblies of \e{binary} source files. NDISASM does not have any
6510 understanding of object file formats, like \c{objdump}, and it will
6511 not understand \c{DOS .EXE} files like \c{debug} will. It just
6512 disassembles.
6515 \H{ndisstart} Getting Started: Installation
6517 See \k{install} for installation instructions. NDISASM, like NASM,
6518 has a \c{man page} which you may want to put somewhere useful, if you
6519 are on a Unix system.
6522 \H{ndisrun} Running NDISASM
6524 To disassemble a file, you will typically use a command of the form
6526 \c        ndisasm -b {16|32|64} filename
6528 NDISASM can disassemble 16-, 32- or 64-bit code equally easily,
6529 provided of course that you remember to specify which it is to work
6530 with. If no \i\c{-b} switch is present, NDISASM works in 16-bit mode
6531 by default. The \i\c{-u} switch (for USE32) also invokes 32-bit mode.
6533 Two more command line options are \i\c{-r} which reports the version
6534 number of NDISASM you are running, and \i\c{-h} which gives a short
6535 summary of command line options.
6538 \S{ndiscom} COM Files: Specifying an Origin
6540 To disassemble a \c{DOS .COM} file correctly, a disassembler must assume
6541 that the first instruction in the file is loaded at address \c{0x100},
6542 rather than at zero. NDISASM, which assumes by default that any file
6543 you give it is loaded at zero, will therefore need to be informed of
6544 this.
6546 The \i\c{-o} option allows you to declare a different origin for the
6547 file you are disassembling. Its argument may be expressed in any of
6548 the NASM numeric formats: decimal by default, if it begins with `\c{$}'
6549 or `\c{0x}' or ends in `\c{H}' it's \c{hex}, if it ends in `\c{Q}' it's
6550 \c{octal}, and if it ends in `\c{B}' it's \c{binary}.
6552 Hence, to disassemble a \c{.COM} file:
6554 \c        ndisasm -o100h filename.com
6556 will do the trick.
6559 \S{ndissync} Code Following Data: Synchronisation
6561 Suppose you are disassembling a file which contains some data which
6562 isn't machine code, and \e{then} contains some machine code. NDISASM
6563 will faithfully plough through the data section, producing machine
6564 instructions wherever it can (although most of them will look
6565 bizarre, and some may have unusual prefixes, e.g. `\c{FS OR AX,0x240A}'),
6566 and generating `DB' instructions ever so often if it's totally stumped.
6567 Then it will reach the code section.
6569 Supposing NDISASM has just finished generating a strange machine
6570 instruction from part of the data section, and its file position is
6571 now one byte \e{before} the beginning of the code section. It's
6572 entirely possible that another spurious instruction will get
6573 generated, starting with the final byte of the data section, and
6574 then the correct first instruction in the code section will not be
6575 seen because the starting point skipped over it. This isn't really
6576 ideal.
6578 To avoid this, you can specify a `\i\c{synchronisation}' point, or indeed
6579 as many synchronisation points as you like (although NDISASM can
6580 only handle 8192 sync points internally). The definition of a sync
6581 point is this: NDISASM guarantees to hit sync points exactly during
6582 disassembly. If it is thinking about generating an instruction which
6583 would cause it to jump over a sync point, it will discard that
6584 instruction and output a `\c{db}' instead. So it \e{will} start
6585 disassembly exactly from the sync point, and so you \e{will} see all
6586 the instructions in your code section.
6588 Sync points are specified using the \i\c{-s} option: they are measured
6589 in terms of the program origin, not the file position. So if you
6590 want to synchronize after 32 bytes of a \c{.COM} file, you would have to
6593 \c        ndisasm -o100h -s120h file.com
6595 rather than
6597 \c        ndisasm -o100h -s20h file.com
6599 As stated above, you can specify multiple sync markers if you need
6600 to, just by repeating the \c{-s} option.
6603 \S{ndisisync} Mixed Code and Data: Automatic (Intelligent) Synchronisation
6604 \I\c{auto-sync}
6606 Suppose you are disassembling the boot sector of a \c{DOS} floppy (maybe
6607 it has a virus, and you need to understand the virus so that you
6608 know what kinds of damage it might have done you). Typically, this
6609 will contain a \c{JMP} instruction, then some data, then the rest of the
6610 code. So there is a very good chance of NDISASM being \e{misaligned}
6611 when the data ends and the code begins. Hence a sync point is
6612 needed.
6614 On the other hand, why should you have to specify the sync point
6615 manually? What you'd do in order to find where the sync point would
6616 be, surely, would be to read the \c{JMP} instruction, and then to use
6617 its target address as a sync point. So can NDISASM do that for you?
6619 The answer, of course, is yes: using either of the synonymous
6620 switches \i\c{-a} (for automatic sync) or \i\c{-i} (for intelligent
6621 sync) will enable \c{auto-sync} mode. Auto-sync mode automatically
6622 generates a sync point for any forward-referring PC-relative jump or
6623 call instruction that NDISASM encounters. (Since NDISASM is one-pass,
6624 if it encounters a PC-relative jump whose target has already been
6625 processed, there isn't much it can do about it...)
6627 Only PC-relative jumps are processed, since an absolute jump is
6628 either through a register (in which case NDISASM doesn't know what
6629 the register contains) or involves a segment address (in which case
6630 the target code isn't in the same segment that NDISASM is working
6631 in, and so the sync point can't be placed anywhere useful).
6633 For some kinds of file, this mechanism will automatically put sync
6634 points in all the right places, and save you from having to place
6635 any sync points manually. However, it should be stressed that
6636 auto-sync mode is \e{not} guaranteed to catch all the sync points, and
6637 you may still have to place some manually.
6639 Auto-sync mode doesn't prevent you from declaring manual sync
6640 points: it just adds automatically generated ones to the ones you
6641 provide. It's perfectly feasible to specify \c{-i} \e{and} some \c{-s}
6642 options.
6644 Another caveat with auto-sync mode is that if, by some unpleasant
6645 fluke, something in your data section should disassemble to a
6646 PC-relative call or jump instruction, NDISASM may obediently place a
6647 sync point in a totally random place, for example in the middle of
6648 one of the instructions in your code section. So you may end up with
6649 a wrong disassembly even if you use auto-sync. Again, there isn't
6650 much I can do about this. If you have problems, you'll have to use
6651 manual sync points, or use the \c{-k} option (documented below) to
6652 suppress disassembly of the data area.
6655 \S{ndisother} Other Options
6657 The \i\c{-e} option skips a header on the file, by ignoring the first N
6658 bytes. This means that the header is \e{not} counted towards the
6659 disassembly offset: if you give \c{-e10 -o10}, disassembly will start
6660 at byte 10 in the file, and this will be given offset 10, not 20.
6662 The \i\c{-k} option is provided with two comma-separated numeric
6663 arguments, the first of which is an assembly offset and the second
6664 is a number of bytes to skip. This \e{will} count the skipped bytes
6665 towards the assembly offset: its use is to suppress disassembly of a
6666 data section which wouldn't contain anything you wanted to see
6667 anyway.
6670 \H{ndisbugs} Bugs and Improvements
6672 There are no known bugs. However, any you find, with patches if
6673 possible, should be sent to
6674 \W{mailto:nasm-bugs@lists.sourceforge.net}\c{nasm-bugs@lists.sourceforge.net}, or to the
6675 developer's site at
6676 \W{https://sourceforge.net/projects/nasm/}\c{https://sourceforge.net/projects/nasm/}
6677 and we'll try to fix them. Feel free to send contributions and
6678 new features as well.
6680 Future plans include awareness of which processors certain
6681 instructions will run on, and marking of instructions that are too
6682 advanced for some processor (or are \c{FPU} instructions, or are
6683 undocumented opcodes, or are privileged protected-mode instructions,
6684 or whatever).
6686 That's All Folks!
6688 I hope NDISASM is of some use to somebody. Including me. :-)
6690 I don't recommend taking NDISASM apart to see how an efficient
6691 disassembler works, because as far as I know, it isn't an efficient
6692 one anyway. You have been warned.