doc: add some cross-references
[platform/upstream/nasm.git] / doc / nasmdoc.src
1 \# $Id$
2 \#
3 \# Source code to NASM documentation
4 \#
5 \M{category}{Programming}
6 \M{title}{NASM - The Netwide Assembler}
7 \M{year}{2007}
8 \M{author}{The NASM Development Team}
9 \M{license}{All rights reserved. This document is redistributable under the license given in the file "COPYING" distributed in the NASM archive.}
10 \M{summary}{This file documents NASM, the Netwide Assembler: an assembler targetting the Intel x86 series of processors, with portable source.}
11 \M{infoname}{NASM}
12 \M{infofile}{nasm}
13 \M{infotitle}{The Netwide Assembler for x86}
14 \M{epslogo}{nasmlogo.eps}
15 \IR{-D} \c{-D} option
16 \IR{-E} \c{-E} option
17 \IR{-F} \c{-F} option
18 \IR{-I} \c{-I} option
19 \IR{-M} \c{-M} option
20 \IR{-On} \c{-On} option
21 \IR{-P} \c{-P} option
22 \IR{-U} \c{-U} option
23 \IR{-X} \c{-X} option
24 \IR{-a} \c{-a} option
25 \IR{-d} \c{-d} option
26 \IR{-e} \c{-e} option
27 \IR{-f} \c{-f} option
28 \IR{-g} \c{-g} option
29 \IR{-i} \c{-i} option
30 \IR{-l} \c{-l} option
31 \IR{-o} \c{-o} option
32 \IR{-p} \c{-p} option
33 \IR{-s} \c{-s} option
34 \IR{-u} \c{-u} option
35 \IR{-v} \c{-v} option
36 \IR{-w} \c{-w} option
37 \IR{-y} \c{-y} option
38 \IR{!=} \c{!=} operator
39 \IR{$, here} \c{$}, Here token
40 \IR{$, prefix} \c{$}, prefix
41 \IR{$$} \c{$$} token
42 \IR{%} \c{%} operator
43 \IR{%%} \c{%%} operator
44 \IR{%+1} \c{%+1} and \c{%-1} syntax
45 \IA{%-1}{%+1}
46 \IR{%0} \c{%0} parameter count
47 \IR{&} \c{&} operator
48 \IR{&&} \c{&&} operator
49 \IR{*} \c{*} operator
50 \IR{..@} \c{..@} symbol prefix
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{>>} operator
62 \IR{?} \c{?} MASM syntax
63 \IR{^} \c{^} operator
64 \IR{^^} \c{^^} operator
65 \IR{|} \c{|} operator
66 \IR{||} \c{||} operator
67 \IR{~} \c{~} operator
68 \IR{%$} \c{%$} and \c{%$$} prefixes
69 \IA{%$$}{%$}
70 \IR{+ opaddition} \c{+} operator, binary
71 \IR{+ opunary} \c{+} operator, unary
72 \IR{+ modifier} \c{+} modifier
73 \IR{- opsubtraction} \c{-} operator, binary
74 \IR{- opunary} \c{-} operator, unary
75 \IR{! opunary} \c{!} operator, unary
76 \IR{alignment, in bin sections} alignment, in \c{bin} sections
77 \IR{alignment, in elf sections} alignment, in \c{elf} sections
78 \IR{alignment, in win32 sections} alignment, in \c{win32} sections
79 \IR{alignment, of elf common variables} alignment, of \c{elf} common
80 variables
81 \IR{alignment, in obj sections} alignment, in \c{obj} sections
82 \IR{a.out, bsd version} \c{a.out}, BSD version
83 \IR{a.out, linux version} \c{a.out}, Linux version
84 \IR{autoconf} Autoconf
85 \IR{bin} bin
86 \IR{bitwise and} bitwise AND
87 \IR{bitwise or} bitwise OR
88 \IR{bitwise xor} bitwise XOR
89 \IR{block ifs} block IFs
90 \IR{borland pascal} Borland, Pascal
91 \IR{borland's win32 compilers} Borland, Win32 compilers
92 \IR{braces, after % sign} braces, after \c{%} sign
93 \IR{bsd} BSD
94 \IR{c calling convention} C calling convention
95 \IR{c symbol names} C symbol names
96 \IA{critical expressions}{critical expression}
97 \IA{command line}{command-line}
98 \IA{case sensitivity}{case sensitive}
99 \IA{case-sensitive}{case sensitive}
100 \IA{case-insensitive}{case sensitive}
101 \IA{character constants}{character constant}
102 \IR{common object file format} Common Object File Format
103 \IR{common variables, alignment in elf} common variables, alignment
104 in \c{elf}
105 \IR{common, elf extensions to} \c{COMMON}, \c{elf} extensions to
106 \IR{common, obj extensions to} \c{COMMON}, \c{obj} extensions to
107 \IR{declaring structure} declaring structures
108 \IR{default-wrt mechanism} default-\c{WRT} mechanism
109 \IR{devpac} DevPac
110 \IR{djgpp} DJGPP
111 \IR{dll symbols, exporting} DLL symbols, exporting
112 \IR{dll symbols, importing} DLL symbols, importing
113 \IR{dos} DOS
114 \IR{dos archive} DOS archive
115 \IR{dos source archive} DOS source archive
116 \IA{effective address}{effective addresses}
117 \IA{effective-address}{effective addresses}
118 \IR{elf} ELF
119 \IR{elf, 16-bit code and} ELF, 16-bit code and
120 \IR{elf shared libraries} ELF, shared libraries
121 \IR{executable and linkable format} Executable and Linkable Format
122 \IR{extern, obj extensions to} \c{EXTERN}, \c{obj} extensions to
123 \IR{extern, rdf extensions to} \c{EXTERN}, \c{rdf} extensions to
124 \IR{freebsd} FreeBSD
125 \IR{freelink} FreeLink
126 \IR{functions, c calling convention} functions, C calling convention
127 \IR{functions, pascal calling convention} functions, Pascal calling
128 convention
129 \IR{global, aoutb extensions to} \c{GLOBAL}, \c{aoutb} extensions to
130 \IR{global, elf extensions to} \c{GLOBAL}, \c{elf} extensions to
131 \IR{global, rdf extensions to} \c{GLOBAL}, \c{rdf} extensions to
132 \IR{got} GOT
133 \IR{got relocations} \c{GOT} relocations
134 \IR{gotoff relocation} \c{GOTOFF} relocations
135 \IR{gotpc relocation} \c{GOTPC} relocations
136 \IR{intel number formats} Intel number formats
137 \IR{linux, elf} Linux, ELF
138 \IR{linux, a.out} Linux, \c{a.out}
139 \IR{linux, as86} Linux, \c{as86}
140 \IR{logical and} logical AND
141 \IR{logical or} logical OR
142 \IR{logical xor} logical XOR
143 \IR{masm} MASM
144 \IA{memory reference}{memory references}
145 \IR{minix} Minix
146 \IA{misc directory}{misc subdirectory}
147 \IR{misc subdirectory} \c{misc} subdirectory
148 \IR{microsoft omf} Microsoft OMF
149 \IR{mmx registers} MMX registers
150 \IA{modr/m}{modr/m byte}
151 \IR{modr/m byte} ModR/M byte
152 \IR{ms-dos} MS-DOS
153 \IR{ms-dos device drivers} MS-DOS device drivers
154 \IR{multipush} \c{multipush} macro
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}
220
221
222 \C{intro} Introduction
223
224 \H{whatsnasm} What Is NASM?
225
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.
234
235
236 \S{yaasm} Why Yet Another Assembler?
237
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.
242
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.
245
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.)
252
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.
255
256 \b \i\c{MASM} isn't very good, and it's (was) expensive, and it runs only under
257 DOS.
258
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.
264
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.
272
273
274 \S{legal} License Conditions
275
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.
280
281
282 \H{contact} Contact Information
283
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.
288
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!
292
293
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.
298
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}
303 and
304 \W{ftp://ibiblio.org/pub/Linux/devel/lang/assemblers/}\i\c{ibiblio.org}.
305
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}
310
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}.
315
316
317 \H{install} Installation
318
319 \S{instdos} \i{Installing} NASM under MS-\i{DOS} or Windows
320
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}).
324
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.
332
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}.)
338
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.
343
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.
348
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}.
360
361
362 \S{instdos} Installing NASM under \i{Unix}
363
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}.
369
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.
375
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.
383
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.
388
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.
393
394
395 \C{running} Running NASM
396
397 \H{syntax} NASM \i{Command-Line} Syntax
398
399 To assemble a file, you issue a command of the form
400
401 \c nasm -f <format> <filename> [-o <output>]
402
403 For example,
404
405 \c nasm -f elf myfile.asm
406
407 will assemble \c{myfile.asm} into an \c{ELF} object file \c{myfile.o}. And
408
409 \c nasm -f bin myfile.asm -o myfile.com
410
411 will assemble \c{myfile.asm} into a raw binary file \c{myfile.com}.
412
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:
416
417 \c nasm -f coff myfile.asm -l myfile.lst
418
419 To get further usage instructions from NASM, try typing
420
421 \c nasm -h
422
423 As \c{-hf}, this will also list the available output file formats, and what they
424 are.
425
426 If you use Linux but aren't sure whether your system is \c{a.out}
427 or \c{ELF}, type
428
429 \c file nasm
430
431 (in the directory in which you put the NASM binary when you
432 installed it). If it says something like
433
434 \c nasm: ELF 32-bit LSB executable i386 (386 and up) Version 1
435
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
438
439 \c nasm: Linux/i386 demand-paged executable (QMAGIC)
440
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.)
444
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.
448
449
450 \S{opt-o} The \i\c{-o} Option: Specifying the Output File Name
451
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}.
462
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.
466
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:
472
473 \c nasm -f bin program.asm -o program.com
474 \c nasm -f bin driver.asm -odriver.sys
475
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}.
478
479
480 \S{opt-f} The \i\c{-f} Option: Specifying the \i{Output File Format}
481
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.
487
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.
490
491 A complete list of the available output file formats can be given by
492 issuing the command \i\c{nasm -hf}.
493
494
495 \S{opt-l} The \i\c{-l} Option: Generating a \i{Listing File}
496
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:
504
505 \c nasm -f elf myfile.asm -l myfile.lst
506
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.
512
513
514 \S{opt-M} The \i\c{-M} Option: Generate \i{Makefile Dependencies}.
515
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:
518
519 \c NASM -M myfile.asm > myfile.dep
520
521
522 \S{opt-F} The \i\c{-F} Option: Selecting a \i{Debug Information Format}
523
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.
528
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}.
533
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}
537
538
539 \S{opt-g} The \i\c{-g} Option: Enabling \i{Debug Information}.
540
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}.
546
547
548 \S{opt-X} The \i\c{-X} Option: Selecting an \i{Error Reporting Format}
549
550 This option can be used to select an error reporting format for any 
551 error messages that might be produced by NASM.
552
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:
556
557 \c filename.asm:65: error: specific error message 
558
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.
564
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:
567
568 \c filename.asm(65) : error: specific error message
569
570 where the only difference is that the line number is in parentheses
571 instead of being delimited by colons.  
572
573 See also the \c{Visual C++} output format, \k{win32fmt}.
574
575 \S{opt-E} The \i\c{-E} Option: Send Errors to a File
576
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.
582
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
587
588 \c nasm -E myfile.err -f obj myfile.asm
589
590
591 \S{opt-s} The \i\c{-s} Option: Send Errors to \i\c{stdout}
592
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:
597
598 \c nasm -s -f obj myfile.asm | more
599
600 See also the \c{-E} option, \k{opt-E}.
601
602
603 \S{opt-i} The \i\c{-i}\I\c{-I} Option: Include File Search Directories
604
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
611
612 \c nasm -ic:\macrolib\ -f obj myfile.asm
613
614 (As usual, a space between \c{-i} and the path name is allowed, and
615 optional).
616
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.
623
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}...)
627
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}).
632
633 For Makefile compatibility with many C compilers, this option can also
634 be specified as \c{-I}.
635
636
637 \S{opt-p} The \i\c{-p}\I\c{-P} Option: \I{pre-including files}Pre-Include a File
638
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
642
643 \c nasm myfile.asm -p myinc.inc
644
645 is equivalent to running \c{nasm myfile.asm} and placing the
646 directive \c{%include "myinc.inc"} at the start of the file.
647
648 For consistency with the \c{-I}, \c{-D} and \c{-U} options, this
649 option can also be specified as \c{-P}.
650
651
652 \S{opt-d} The \i\c{-d}\I\c{-D} Option: \I{pre-defining macros}Pre-Define a Macro
653
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
658
659 \c nasm myfile.asm -dFOO=100
660
661 as an alternative to placing the directive
662
663 \c %define FOO 100
664
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}.
670
671 For Makefile compatibility with many C compilers, this option can also
672 be specified as \c{-D}.
673
674
675 \S{opt-u} The \i\c{-u}\I\c{-U} Option: \I{Undefining macros}Undefine a Macro
676
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.
680
681 For example, the following command line:
682
683 \c nasm myfile.asm -dFOO=100 -uFOO
684
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.
688
689 For Makefile compatibility with many C compilers, this option can also
690 be specified as \c{-U}.
691
692
693 \S{opt-e} The \i\c{-e} Option: Preprocess Only
694
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).
701
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
705
706 \c %assign tablesize ($-tablestart)
707
708 will cause an error in \i{preprocess-only mode}.
709
710
711 \S{opt-a} The \i\c{-a} Option: Don't Preprocess At All
712
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.
719
720
721 \S{opt-On} The \i\c{-On} Option: Specifying \i{Multipass Optimization}.
722
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.
726
727 Using the \c{-O} option, you can tell NASM to carry out multiple passes.
728 The syntax is:
729
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.
734
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.
741
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.
747
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}.
750
751
752 \S{opt-t} The \i\c{-t} option: Enable TASM Compatibility Mode
753
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:
756
757 \b local labels may be prefixed with \c{@@} instead of \c{.}
758
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.
762
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.
769
770 \b \c{%arg} preprocessor directive is supported which is similar to
771 TASM's \c{ARG} directive.
772
773 \b \c{%local} preprocessor directive
774
775 \b \c{%stacksize} preprocessor directive
776
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})
780
781 \b more...
782
783 For more information on the directives, see the section on TASM
784 Compatiblity preprocessor directives in \k{tasmcompat}.
785
786
787 \S{opt-w} The \i\c{-w} Option: Enable or Disable Assembly \i{Warnings}
788
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.
796
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}.
804
805 The \i{suppressible warning} classes are:
806
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.
811
812 \b \i\c{macro-selfref} warns if a macro references itself. This 
813 warning class is enabled by default.
814
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.
819
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.
824
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.
828
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. 
833
834
835 \S{opt-v} The \i\c{-v} Option: Display \i{Version} Info
836
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}.
840
841 You will need the version number if you report a bug.
842
843 \S{opt-y} The \i\c{-y} Option: Display Available Debug Info Formats
844
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).
849
850
851 \S{opt-pfix} The \i\c{--prefix} and \i\c{--postfix} Options.
852
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.
858
859
860 \S{nasmenv} The \c{NASMENV} \i{Environment} Variable
861
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.
867
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"}.
874
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.
881
882 This environment variable was previously called \c{NASM}. This was
883 changed with version 0.98.31.
884
885
886 \H{qstart} \i{Quick Start} for \i{MASM} Users
887
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.
893
894
895 \S{qscs} NASM Is \I{case sensitivity}Case-Sensitive
896
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.
904
905
906 \S{qsbrackets} NASM Requires \i{Square Brackets} For \i{Memory References}
907
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,
913
914 \c foo     equ     1
915 \c bar     dw      2
916
917 then the two lines of code
918
919 \c         mov     ax,foo
920 \c         mov     ax,bar
921
922 generate completely different opcodes, despite having
923 identical-looking syntaxes.
924
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]}.
933
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.
940
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.
948
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.
955
956
957 \S{qstypes} NASM Doesn't Store \i{Variable Types}
958
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}.
966
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.
972
973
974 \S{qsassume} NASM Doesn't \i\c{ASSUME}
975
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.
980
981
982 \S{qsmodel} NASM Doesn't Support \i{Memory Models}
983
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.
994
995
996 \S{qsfpu} \i{Floating-Point} Differences
997
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.
1002
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.
1007
1008
1009 \S{qsother} Other Differences
1010
1011 For historical reasons, NASM uses the keyword \i\c{TWORD} where MASM
1012 and compatible assemblers use \i\c{TBYTE}.
1013
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.
1021
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.
1025
1026
1027 \C{lang} The NASM Language
1028
1029 \H{syntax} Layout of a NASM Source Line
1030
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
1034
1035 \c label:    instruction operands        ; comment
1036
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.
1041
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.
1045
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}.)
1055
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.
1066
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}.
1082
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.
1086
1087 In addition to actual machine instructions, NASM also supports a
1088 number of pseudo-instructions, described in \k{pseudop}.
1089
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}).
1096
1097 For \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:
1104
1105 \c         fadd    st1             ; this sets st0 := st0 + st1
1106 \c         fadd    st0,st1         ; so does this
1107 \c
1108 \c         fadd    st1,st0         ; this sets st1 := st1 + st0
1109 \c         fadd    to st1          ; so does this
1110
1111 Almost any 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.
1114
1115
1116 \H{pseudop} \i{Pseudo-Instructions}
1117
1118 Pseudo-instructions are things which, though not real x86 machine
1119 instructions, are used in the instruction field anyway because
1120 that's the most convenient place to put them. The current
1121 pseudo-instructions are \i\c{DB}, \i\c{DW}, \i\c{DD}, \i\c{DQ} and
1122 \i\c{DT}, their \i{uninitialized} counterparts \i\c{RESB},
1123 \i\c{RESW}, \i\c{RESD}, \i\c{RESQ} and \i\c{REST}, the \i\c{INCBIN}
1124 command, the \i\c{EQU} command, and the \i\c{TIMES} prefix.
1125
1126
1127 \S{db} \c{DB} and friends: Declaring initialized Data
1128
1129 \i\c{DB}, \i\c{DW}, \i\c{DD}, \i\c{DQ} and \i\c{DT} are used, much
1130 as in MASM, to declare initialized data in the output file. They can
1131 be invoked in a wide range of ways:
1132 \I{floating-point}\I{character constant}\I{string constant}
1133
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
1147
1148 \c{DT} does not accept \i{numeric constants} as operands.
1149
1150
1151 \S{resb} \c{RESB} and friends: Declaring \i{Uninitialized} Data
1152
1153 \i\c{RESB}, \i\c{RESW}, \i\c{RESD}, \i\c{RESQ} and \i\c{REST} are
1154 designed to be used in the BSS section of a module: they declare
1155 \e{uninitialized} storage space. Each takes a single operand, which
1156 is the number of bytes, words, doublewords or whatever to reserve.
1157 As stated in \k{qsother}, NASM does not support the MASM/TASM syntax
1158 of reserving uninitialized space by writing \I\c{?}\c{DW ?} or
1159 similar things: this is what it does instead. The operand to a
1160 \c{RESB}-type pseudo-instruction is a \i\e{critical expression}: see
1161 \k{crit}.
1162
1163 For example:
1164
1165 \c buffer:         resb    64              ; reserve 64 bytes
1166 \c wordvar:        resw    1               ; reserve a word
1167 \c realarray       resq    10              ; array of ten reals
1168
1169
1170 \S{incbin} \i\c{INCBIN}: Including External \i{Binary Files}
1171
1172 \c{INCBIN} is borrowed from the old Amiga assembler \i{DevPac}: it
1173 includes a binary file verbatim into the output file. This can be
1174 handy for (for example) including \i{graphics} and \i{sound} data
1175 directly into a game executable file. It can be called in one of
1176 these three ways:
1177
1178 \c     incbin  "file.dat"             ; include the whole file
1179 \c     incbin  "file.dat",1024        ; skip the first 1024 bytes
1180 \c     incbin  "file.dat",1024,512    ; skip the first 1024, and
1181 \c                                    ; actually include at most 512
1182
1183
1184 \S{equ} \i\c{EQU}: Defining Constants
1185
1186 \c{EQU} defines a symbol to a given constant value: when \c{EQU} is
1187 used, the source line must contain a label. The action of \c{EQU} is
1188 to define the given label name to the value of its (only) operand.
1189 This definition is absolute, and cannot change later. So, for
1190 example,
1191
1192 \c message         db      'hello, world'
1193 \c msglen          equ     $-message
1194
1195 defines \c{msglen} to be the constant 12. \c{msglen} may not then be
1196 redefined later. This is not a \i{preprocessor} definition either:
1197 the value of \c{msglen} is evaluated \e{once}, using the value of
1198 \c{$} (see \k{expr} for an explanation of \c{$}) at the point of
1199 definition, rather than being evaluated wherever it is referenced
1200 and using the value of \c{$} at the point of reference. Note that
1201 the operand to an \c{EQU} is also a \i{critical expression}
1202 (\k{crit}).
1203
1204
1205 \S{times} \i\c{TIMES}: \i{Repeating} Instructions or Data
1206
1207 The \c{TIMES} prefix causes the instruction to be assembled multiple
1208 times. This is partly present as NASM's equivalent of the \i\c{DUP}
1209 syntax supported by \i{MASM}-compatible assemblers, in that you can
1210 code
1211
1212 \c zerobuf:        times 64 db 0
1213
1214 or similar things; but \c{TIMES} is more versatile than that. The
1215 argument to \c{TIMES} is not just a numeric constant, but a numeric
1216 \e{expression}, so you can do things like
1217
1218 \c buffer: db      'hello, world'
1219 \c         times 64-$+buffer db ' '
1220
1221 which will store exactly enough spaces to make the total length of
1222 \c{buffer} up to 64. Finally, \c{TIMES} can be applied to ordinary
1223 instructions, so you can code trivial \i{unrolled loops} in it:
1224
1225 \c         times 100 movsb
1226
1227 Note that there is no effective difference between \c{times 100 resb
1228 1} and \c{resb 100}, except that the latter will be assembled about
1229 100 times faster due to the internal structure of the assembler.
1230
1231 The operand to \c{TIMES}, like that of \c{EQU} and those of \c{RESB}
1232 and friends, is a critical expression (\k{crit}).
1233
1234 Note also that \c{TIMES} can't be applied to \i{macros}: the reason
1235 for this is that \c{TIMES} is processed after the macro phase, which
1236 allows the argument to \c{TIMES} to contain expressions such as
1237 \c{64-$+buffer} as above. To repeat more than one line of code, or a
1238 complex macro, use the preprocessor \i\c{%rep} directive.
1239
1240
1241 \H{effaddr} Effective Addresses
1242
1243 An \i{effective address} is any operand to an instruction which
1244 \I{memory reference}references memory. Effective addresses, in NASM,
1245 have a very simple syntax: they consist of an expression evaluating
1246 to the desired address, enclosed in \i{square brackets}. For
1247 example:
1248
1249 \c wordvar dw      123
1250 \c         mov     ax,[wordvar]
1251 \c         mov     ax,[wordvar+1]
1252 \c         mov     ax,[es:wordvar+bx]
1253
1254 Anything not conforming to this simple system is not a valid memory
1255 reference in NASM, for example \c{es:wordvar[bx]}.
1256
1257 More complicated effective addresses, such as those involving more
1258 than one register, work in exactly the same way:
1259
1260 \c         mov     eax,[ebx*2+ecx+offset]
1261 \c         mov     ax,[bp+di+8]
1262
1263 NASM is capable of doing \i{algebra} on these effective addresses,
1264 so that things which don't necessarily \e{look} legal are perfectly
1265 all right:
1266
1267 \c     mov     eax,[ebx*5]             ; assembles as [ebx*4+ebx]
1268 \c     mov     eax,[label1*2-label2]   ; ie [label1+(label1-label2)]
1269
1270 Some forms of effective address have more than one assembled form;
1271 in most such cases NASM will generate the smallest form it can. For
1272 example, there are distinct assembled forms for the 32-bit effective
1273 addresses \c{[eax*2+0]} and \c{[eax+eax]}, and NASM will generally
1274 generate the latter on the grounds that the former requires four
1275 bytes to store a zero offset.
1276
1277 NASM has a hinting mechanism which will cause \c{[eax+ebx]} and
1278 \c{[ebx+eax]} to generate different opcodes; this is occasionally
1279 useful because \c{[esi+ebp]} and \c{[ebp+esi]} have different
1280 default segment registers.
1281
1282 However, you can force NASM to generate an effective address in a
1283 particular form by the use of the keywords \c{BYTE}, \c{WORD},
1284 \c{DWORD} and \c{NOSPLIT}. If you need \c{[eax+3]} to be assembled
1285 using a double-word offset field instead of the one byte NASM will
1286 normally generate, you can code \c{[dword eax+3]}. Similarly, you
1287 can force NASM to use a byte offset for a small value which it
1288 hasn't seen on the first pass (see \k{crit} for an example of such a
1289 code fragment) by using \c{[byte eax+offset]}. As special cases,
1290 \c{[byte eax]} will code \c{[eax+0]} with a byte offset of zero, and
1291 \c{[dword eax]} will code it with a double-word offset of zero. The
1292 normal form, \c{[eax]}, will be coded with no offset field.
1293
1294 The form described in the previous paragraph is also useful if you
1295 are trying to access data in a 32-bit segment from within 16 bit code.
1296 For more information on this see the section on mixed-size addressing
1297 (\k{mixaddr}). In particular, if you need to access data with a known
1298 offset that is larger than will fit in a 16-bit value, if you don't
1299 specify that it is a dword offset, nasm will cause the high word of
1300 the offset to be lost.
1301
1302 Similarly, NASM will split \c{[eax*2]} into \c{[eax+eax]} because
1303 that allows the offset field to be absent and space to be saved; in
1304 fact, it will also split \c{[eax*2+offset]} into
1305 \c{[eax+eax+offset]}. You can combat this behaviour by the use of
1306 the \c{NOSPLIT} keyword: \c{[nosplit eax*2]} will force
1307 \c{[eax*2+0]} to be generated literally.
1308
1309 In 64-bit mode, NASM will by default generate absolute addresses.  The
1310 \i\c{REL} keyword makes it produce \c{RIP}-relative addresses. Since
1311 this is frequently the normally desired behaviour, see the \c{DEFAULT}
1312 directive (\k{default}). The keyword \i\c{ABS} overrides \i\c{REL}.
1313
1314
1315 \H{const} \i{Constants}
1316
1317 NASM understands four different types of constant: numeric,
1318 character, string and floating-point.
1319
1320
1321 \S{numconst} \i{Numeric Constants}
1322
1323 A numeric constant is simply a number. NASM allows you to specify
1324 numbers in a variety of number bases, in a variety of ways: you can
1325 suffix \c{H}, \c{Q} or \c{O}, and \c{B} for \i{hex}, \i{octal} and \i{binary},
1326 or you can prefix \c{0x} for hex in the style of C, or you can
1327 prefix \c{$} for hex in the style of Borland Pascal. Note, though,
1328 that the \I{$, prefix}\c{$} prefix does double duty as a prefix on
1329 identifiers (see \k{syntax}), so a hex number prefixed with a \c{$}
1330 sign must have a digit after the \c{$} rather than a letter.
1331
1332 Some examples:
1333
1334 \c         mov     ax,100          ; decimal
1335 \c         mov     ax,0a2h         ; hex
1336 \c         mov     ax,$0a2         ; hex again: the 0 is required
1337 \c         mov     ax,0xa2         ; hex yet again
1338 \c         mov     ax,777q         ; octal
1339 \c         mov     ax,777o         ; octal again
1340 \c         mov     ax,10010011b    ; binary
1341
1342
1343 \S{chrconst} \i{Character Constants}
1344
1345 A character constant consists of up to four characters enclosed in
1346 either single or double quotes. The type of quote makes no
1347 difference to NASM, except of course that surrounding the constant
1348 with single quotes allows double quotes to appear within it and vice
1349 versa.
1350
1351 A character constant with more than one character will be arranged
1352 with \i{little-endian} order in mind: if you code
1353
1354 \c           mov eax,'abcd'
1355
1356 then the constant generated is not \c{0x61626364}, but
1357 \c{0x64636261}, so that if you were then to store the value into
1358 memory, it would read \c{abcd} rather than \c{dcba}. This is also
1359 the sense of character constants understood by the Pentium's
1360 \i\c{CPUID} instruction.
1361 \# (see \k{insCPUID})
1362
1363
1364 \S{strconst} String Constants
1365
1366 String constants are only acceptable to some pseudo-instructions,
1367 namely the \I\c{DW}\I\c{DD}\I\c{DQ}\I\c{DT}\i\c{DB} family and
1368 \i\c{INCBIN}.
1369
1370 A string constant looks like a character constant, only longer. It
1371 is treated as a concatenation of maximum-size character constants
1372 for the conditions. So the following are equivalent:
1373
1374 \c       db    'hello'               ; string constant
1375 \c       db    'h','e','l','l','o'   ; equivalent character constants
1376
1377 And the following are also equivalent:
1378
1379 \c       dd    'ninechars'           ; doubleword string constant
1380 \c       dd    'nine','char','s'     ; becomes three doublewords
1381 \c       db    'ninechars',0,0,0     ; and really looks like this
1382
1383 Note that when used as an operand to \c{db}, a constant like
1384 \c{'ab'} is treated as a string constant despite being short enough
1385 to be a character constant, because otherwise \c{db 'ab'} would have
1386 the same effect as \c{db 'a'}, which would be silly. Similarly,
1387 three-character or four-character constants are treated as strings
1388 when they are operands to \c{dw}.
1389
1390
1391 \S{fltconst} \I{floating-point, constants}Floating-Point Constants
1392
1393 \i{Floating-point} constants are acceptable only as arguments to
1394 \i\c{DD}, \i\c{DQ} and \i\c{DT}. They are expressed in the
1395 traditional form: digits, then a period, then optionally more
1396 digits, then optionally an \c{E} followed by an exponent. The period
1397 is mandatory, so that NASM can distinguish between \c{dd 1}, which
1398 declares an integer constant, and \c{dd 1.0} which declares a
1399 floating-point constant.
1400
1401 Some examples:
1402
1403 \c       dd    1.2                     ; an easy one
1404 \c       dq    1.e10                   ; 10,000,000,000
1405 \c       dq    1.e+10                  ; synonymous with 1.e10
1406 \c       dq    1.e-10                  ; 0.000 000 000 1
1407 \c       dt    3.141592653589793238462 ; pi
1408
1409 NASM cannot do compile-time arithmetic on floating-point constants.
1410 This is because NASM is designed to be portable - although it always
1411 generates code to run on x86 processors, the assembler itself can
1412 run on any system with an ANSI C compiler. Therefore, the assembler
1413 cannot guarantee the presence of a floating-point unit capable of
1414 handling the \i{Intel number formats}, and so for NASM to be able to
1415 do floating arithmetic it would have to include its own complete set
1416 of floating-point routines, which would significantly increase the
1417 size of the assembler for very little benefit.
1418
1419
1420 \H{expr} \i{Expressions}
1421
1422 Expressions in NASM are similar in syntax to those in C.
1423
1424 NASM does not guarantee the size of the integers used to evaluate
1425 expressions at compile time: since NASM can compile and run on
1426 64-bit systems quite happily, don't assume that expressions are
1427 evaluated in 32-bit registers and so try to make deliberate use of
1428 \i{integer overflow}. It might not always work. The only thing NASM
1429 will guarantee is what's guaranteed by ANSI C: you always have \e{at
1430 least} 32 bits to work in.
1431
1432 NASM supports two special tokens in expressions, allowing
1433 calculations to involve the current assembly position: the
1434 \I{$, here}\c{$} and \i\c{$$} tokens. \c{$} evaluates to the assembly
1435 position at the beginning of the line containing the expression; so
1436 you can code an \i{infinite loop} using \c{JMP $}. \c{$$} evaluates
1437 to the beginning of the current section; so you can tell how far
1438 into the section you are by using \c{($-$$)}.
1439
1440 The arithmetic \i{operators} provided by NASM are listed here, in
1441 increasing order of \i{precedence}.
1442
1443
1444 \S{expor} \i\c{|}: \i{Bitwise OR} Operator
1445
1446 The \c{|} operator gives a bitwise OR, exactly as performed by the
1447 \c{OR} machine instruction. Bitwise OR is the lowest-priority
1448 arithmetic operator supported by NASM.
1449
1450
1451 \S{expxor} \i\c{^}: \i{Bitwise XOR} Operator
1452
1453 \c{^} provides the bitwise XOR operation.
1454
1455
1456 \S{expand} \i\c{&}: \i{Bitwise AND} Operator
1457
1458 \c{&} provides the bitwise AND operation.
1459
1460
1461 \S{expshift} \i\c{<<} and \i\c{>>}: \i{Bit Shift} Operators
1462
1463 \c{<<} gives a bit-shift to the left, just as it does in C. So \c{5<<3}
1464 evaluates to 5 times 8, or 40. \c{>>} gives a bit-shift to the
1465 right; in NASM, such a shift is \e{always} unsigned, so that
1466 the bits shifted in from the left-hand end are filled with zero
1467 rather than a sign-extension of the previous highest bit.
1468
1469
1470 \S{expplmi} \I{+ opaddition}\c{+} and \I{- opsubtraction}\c{-}:
1471 \i{Addition} and \i{Subtraction} Operators
1472
1473 The \c{+} and \c{-} operators do perfectly ordinary addition and
1474 subtraction.
1475
1476
1477 \S{expmul} \i\c{*}, \i\c{/}, \i\c{//}, \i\c{%} and \i\c{%%}:
1478 \i{Multiplication} and \i{Division}
1479
1480 \c{*} is the multiplication operator. \c{/} and \c{//} are both
1481 division operators: \c{/} is \i{unsigned division} and \c{//} is
1482 \i{signed division}. Similarly, \c{%} and \c{%%} provide \I{unsigned
1483 modulo}\I{modulo operators}unsigned and
1484 \i{signed modulo} operators respectively.
1485
1486 NASM, like ANSI C, provides no guarantees about the sensible
1487 operation of the signed modulo operator.
1488
1489 Since the \c{%} character is used extensively by the macro
1490 \i{preprocessor}, you should ensure that both the signed and unsigned
1491 modulo operators are followed by white space wherever they appear.
1492
1493
1494 \S{expmul} \i{Unary Operators}: \I{+ opunary}\c{+}, \I{- opunary}\c{-},
1495 \i\c{~}, \I{! opunary}\c{!} and \i\c{SEG}
1496
1497 The highest-priority operators in NASM's expression grammar are
1498 those which only apply to one argument. \c{-} negates its operand,
1499 \c{+} does nothing (it's provided for symmetry with \c{-}), \c{~}
1500 computes the \i{one's complement} of its operand, \c{!} is the
1501 \i{logical negation} operator, and \c{SEG} provides the \i{segment address}
1502 of its operand (explained in more detail in \k{segwrt}).
1503
1504
1505 \H{segwrt} \i\c{SEG} and \i\c{WRT}
1506
1507 When writing large 16-bit programs, which must be split into
1508 multiple \i{segments}, it is often necessary to be able to refer to
1509 the \I{segment address}segment part of the address of a symbol. NASM
1510 supports the \c{SEG} operator to perform this function.
1511
1512 The \c{SEG} operator returns the \i\e{preferred} segment base of a
1513 symbol, defined as the segment base relative to which the offset of
1514 the symbol makes sense. So the code
1515
1516 \c         mov     ax,seg symbol
1517 \c         mov     es,ax
1518 \c         mov     bx,symbol
1519
1520 will load \c{ES:BX} with a valid pointer to the symbol \c{symbol}.
1521
1522 Things can be more complex than this: since 16-bit segments and
1523 \i{groups} may \I{overlapping segments}overlap, you might occasionally
1524 want to refer to some symbol using a different segment base from the
1525 preferred one. NASM lets you do this, by the use of the \c{WRT}
1526 (With Reference To) keyword. So you can do things like
1527
1528 \c         mov     ax,weird_seg        ; weird_seg is a segment base
1529 \c         mov     es,ax
1530 \c         mov     bx,symbol wrt weird_seg
1531
1532 to load \c{ES:BX} with a different, but functionally equivalent,
1533 pointer to the symbol \c{symbol}.
1534
1535 NASM supports far (inter-segment) calls and jumps by means of the
1536 syntax \c{call segment:offset}, where \c{segment} and \c{offset}
1537 both represent immediate values. So to call a far procedure, you
1538 could code either of
1539
1540 \c         call    (seg procedure):procedure
1541 \c         call    weird_seg:(procedure wrt weird_seg)
1542
1543 (The parentheses are included for clarity, to show the intended
1544 parsing of the above instructions. They are not necessary in
1545 practice.)
1546
1547 NASM supports the syntax \I\c{CALL FAR}\c{call far procedure} as a
1548 synonym for the first of the above usages. \c{JMP} works identically
1549 to \c{CALL} in these examples.
1550
1551 To declare a \i{far pointer} to a data item in a data segment, you
1552 must code
1553
1554 \c         dw      symbol, seg symbol
1555
1556 NASM supports no convenient synonym for this, though you can always
1557 invent one using the macro processor.
1558
1559
1560 \H{strict} \i\c{STRICT}: Inhibiting Optimization
1561
1562 When assembling with the optimizer set to level 2 or higher (see
1563 \k{opt-On}), NASM will use size specifiers (\c{BYTE}, \c{WORD},
1564 \c{DWORD}, \c{QWORD}, or \c{TWORD}), but will give them the smallest
1565 possible size. The keyword \c{STRICT} can be used to inhibit
1566 optimization and force a particular operand to be emitted in the
1567 specified size. For example, with the optimizer on, and in
1568 \c{BITS 16} mode,
1569
1570 \c         push dword 33
1571
1572 is encoded in three bytes \c{66 6A 21}, whereas
1573
1574 \c         push strict dword 33
1575
1576 is encoded in six bytes, with a full dword immediate operand \c{66 68
1577 21 00 00 00}.
1578
1579 With the optimizer off, the same code (six bytes) is generated whether
1580 the \c{STRICT} keyword was used or not.
1581
1582
1583 \H{crit} \i{Critical Expressions}
1584
1585 A limitation of NASM is that it is a \i{two-pass assembler}; unlike
1586 TASM and others, it will always do exactly two \I{passes}\i{assembly
1587 passes}. Therefore it is unable to cope with source files that are
1588 complex enough to require three or more passes.
1589
1590 The first pass is used to determine the size of all the assembled
1591 code and data, so that the second pass, when generating all the
1592 code, knows all the symbol addresses the code refers to. So one
1593 thing NASM can't handle is code whose size depends on the value of a
1594 symbol declared after the code in question. For example,
1595
1596 \c         times (label-$) db 0
1597 \c label:  db      'Where am I?'
1598
1599 The argument to \i\c{TIMES} in this case could equally legally
1600 evaluate to anything at all; NASM will reject this example because
1601 it cannot tell the size of the \c{TIMES} line when it first sees it.
1602 It will just as firmly reject the slightly \I{paradox}paradoxical
1603 code
1604
1605 \c         times (label-$+1) db 0
1606 \c label:  db      'NOW where am I?'
1607
1608 in which \e{any} value for the \c{TIMES} argument is by definition
1609 wrong!
1610
1611 NASM rejects these examples by means of a concept called a
1612 \e{critical expression}, which is defined to be an expression whose
1613 value is required to be computable in the first pass, and which must
1614 therefore depend only on symbols defined before it. The argument to
1615 the \c{TIMES} prefix is a critical expression; for the same reason,
1616 the arguments to the \i\c{RESB} family of pseudo-instructions are
1617 also critical expressions.
1618
1619 Critical expressions can crop up in other contexts as well: consider
1620 the following code.
1621
1622 \c                 mov     ax,symbol1
1623 \c symbol1         equ     symbol2
1624 \c symbol2:
1625
1626 On the first pass, NASM cannot determine the value of \c{symbol1},
1627 because \c{symbol1} is defined to be equal to \c{symbol2} which NASM
1628 hasn't seen yet. On the second pass, therefore, when it encounters
1629 the line \c{mov ax,symbol1}, it is unable to generate the code for
1630 it because it still doesn't know the value of \c{symbol1}. On the
1631 next line, it would see the \i\c{EQU} again and be able to determine
1632 the value of \c{symbol1}, but by then it would be too late.
1633
1634 NASM avoids this problem by defining the right-hand side of an
1635 \c{EQU} statement to be a critical expression, so the definition of
1636 \c{symbol1} would be rejected in the first pass.
1637
1638 There is a related issue involving \i{forward references}: consider
1639 this code fragment.
1640
1641 \c         mov     eax,[ebx+offset]
1642 \c offset  equ     10
1643
1644 NASM, on pass one, must calculate the size of the instruction \c{mov
1645 eax,[ebx+offset]} without knowing the value of \c{offset}. It has no
1646 way of knowing that \c{offset} is small enough to fit into a
1647 one-byte offset field and that it could therefore get away with
1648 generating a shorter form of the \i{effective-address} encoding; for
1649 all it knows, in pass one, \c{offset} could be a symbol in the code
1650 segment, and it might need the full four-byte form. So it is forced
1651 to compute the size of the instruction to accommodate a four-byte
1652 address part. In pass two, having made this decision, it is now
1653 forced to honour it and keep the instruction large, so the code
1654 generated in this case is not as small as it could have been. This
1655 problem can be solved by defining \c{offset} before using it, or by
1656 forcing byte size in the effective address by coding \c{[byte
1657 ebx+offset]}.
1658
1659 Note that use of the \c{-On} switch (with n>=2) makes some of the above
1660 no longer true (see \k{opt-On}).
1661
1662 \H{locallab} \i{Local Labels}
1663
1664 NASM gives special treatment to symbols beginning with a \i{period}.
1665 A label beginning with a single period is treated as a \e{local}
1666 label, which means that it is associated with the previous non-local
1667 label. So, for example:
1668
1669 \c label1  ; some code
1670 \c
1671 \c .loop
1672 \c         ; some more code
1673 \c
1674 \c         jne     .loop
1675 \c         ret
1676 \c
1677 \c label2  ; some code
1678 \c
1679 \c .loop
1680 \c         ; some more code
1681 \c
1682 \c         jne     .loop
1683 \c         ret
1684
1685 In the above code fragment, each \c{JNE} instruction jumps to the
1686 line immediately before it, because the two definitions of \c{.loop}
1687 are kept separate by virtue of each being associated with the
1688 previous non-local label.
1689
1690 This form of local label handling is borrowed from the old Amiga
1691 assembler \i{DevPac}; however, NASM goes one step further, in
1692 allowing access to local labels from other parts of the code. This
1693 is achieved by means of \e{defining} a local label in terms of the
1694 previous non-local label: the first definition of \c{.loop} above is
1695 really defining a symbol called \c{label1.loop}, and the second
1696 defines a symbol called \c{label2.loop}. So, if you really needed
1697 to, you could write
1698
1699 \c label3  ; some more code
1700 \c         ; and some more
1701 \c
1702 \c         jmp label1.loop
1703
1704 Sometimes it is useful - in a macro, for instance - to be able to
1705 define a label which can be referenced from anywhere but which
1706 doesn't interfere with the normal local-label mechanism. Such a
1707 label can't be non-local because it would interfere with subsequent
1708 definitions of, and references to, local labels; and it can't be
1709 local because the macro that defined it wouldn't know the label's
1710 full name. NASM therefore introduces a third type of label, which is
1711 probably only useful in macro definitions: if a label begins with
1712 the \I{label prefix}special prefix \i\c{..@}, then it does nothing
1713 to the local label mechanism. So you could code
1714
1715 \c label1:                         ; a non-local label
1716 \c .local:                         ; this is really label1.local
1717 \c ..@foo:                         ; this is a special symbol
1718 \c label2:                         ; another non-local label
1719 \c .local:                         ; this is really label2.local
1720 \c
1721 \c         jmp     ..@foo          ; this will jump three lines up
1722
1723 NASM has the capacity to define other special symbols beginning with
1724 a double period: for example, \c{..start} is used to specify the
1725 entry point in the \c{obj} output format (see \k{dotdotstart}).
1726
1727
1728 \C{preproc} The NASM \i{Preprocessor}
1729
1730 NASM contains a powerful \i{macro processor}, which supports
1731 conditional assembly, multi-level file inclusion, two forms of macro
1732 (single-line and multi-line), and a `context stack' mechanism for
1733 extra macro power. Preprocessor directives all begin with a \c{%}
1734 sign.
1735
1736 The preprocessor collapses all lines which end with a backslash (\\)
1737 character into a single line.  Thus:
1738
1739 \c %define THIS_VERY_LONG_MACRO_NAME_IS_DEFINED_TO \\
1740 \c         THIS_VALUE
1741
1742 will work like a single-line macro without the backslash-newline
1743 sequence.
1744
1745 \H{slmacro} \i{Single-Line Macros}
1746
1747 \S{define} The Normal Way: \I\c{%idefine}\i\c{%define}
1748
1749 Single-line macros are defined using the \c{%define} preprocessor
1750 directive. The definitions work in a similar way to C; so you can do
1751 things like
1752
1753 \c %define ctrl    0x1F &
1754 \c %define param(a,b) ((a)+(a)*(b))
1755 \c
1756 \c         mov     byte [param(2,ebx)], ctrl 'D'
1757
1758 which will expand to
1759
1760 \c         mov     byte [(2)+(2)*(ebx)], 0x1F & 'D'
1761
1762 When the expansion of a single-line macro contains tokens which
1763 invoke another macro, the expansion is performed at invocation time,
1764 not at definition time. Thus the code
1765
1766 \c %define a(x)    1+b(x)
1767 \c %define b(x)    2*x
1768 \c
1769 \c         mov     ax,a(8)
1770
1771 will evaluate in the expected way to \c{mov ax,1+2*8}, even though
1772 the macro \c{b} wasn't defined at the time of definition of \c{a}.
1773
1774 Macros defined with \c{%define} are \i{case sensitive}: after
1775 \c{%define foo bar}, only \c{foo} will expand to \c{bar}: \c{Foo} or
1776 \c{FOO} will not. By using \c{%idefine} instead of \c{%define} (the
1777 `i' stands for `insensitive') you can define all the case variants
1778 of a macro at once, so that \c{%idefine foo bar} would cause
1779 \c{foo}, \c{Foo}, \c{FOO}, \c{fOO} and so on all to expand to
1780 \c{bar}.
1781
1782 There is a mechanism which detects when a macro call has occurred as
1783 a result of a previous expansion of the same macro, to guard against
1784 \i{circular references} and infinite loops. If this happens, the
1785 preprocessor will only expand the first occurrence of the macro.
1786 Hence, if you code
1787
1788 \c %define a(x)    1+a(x)
1789 \c
1790 \c         mov     ax,a(3)
1791
1792 the macro \c{a(3)} will expand once, becoming \c{1+a(3)}, and will
1793 then expand no further. This behaviour can be useful: see \k{32c}
1794 for an example of its use.
1795
1796 You can \I{overloading, single-line macros}overload single-line
1797 macros: if you write
1798
1799 \c %define foo(x)   1+x
1800 \c %define foo(x,y) 1+x*y
1801
1802 the preprocessor will be able to handle both types of macro call,
1803 by counting the parameters you pass; so \c{foo(3)} will become
1804 \c{1+3} whereas \c{foo(ebx,2)} will become \c{1+ebx*2}. However, if
1805 you define
1806
1807 \c %define foo bar
1808
1809 then no other definition of \c{foo} will be accepted: a macro with
1810 no parameters prohibits the definition of the same name as a macro
1811 \e{with} parameters, and vice versa.
1812
1813 This doesn't prevent single-line macros being \e{redefined}: you can
1814 perfectly well define a macro with
1815
1816 \c %define foo bar
1817
1818 and then re-define it later in the same source file with
1819
1820 \c %define foo baz
1821
1822 Then everywhere the macro \c{foo} is invoked, it will be expanded
1823 according to the most recent definition. This is particularly useful
1824 when defining single-line macros with \c{%assign} (see \k{assign}).
1825
1826 You can \i{pre-define} single-line macros using the `-d' option on
1827 the NASM command line: see \k{opt-d}.
1828
1829
1830 \S{xdefine} Enhancing %define: \I\c{%xidefine}\i\c{%xdefine}
1831
1832 To have a reference to an embedded single-line macro resolved at the
1833 time that it is embedded, as opposed to when the calling macro is
1834 expanded, you need a different mechanism to the one offered by
1835 \c{%define}. The solution is to use \c{%xdefine}, or it's
1836 \I{case sensitive}case-insensitive counterpart \c{%xidefine}.
1837
1838 Suppose you have the following code:
1839
1840 \c %define  isTrue  1
1841 \c %define  isFalse isTrue
1842 \c %define  isTrue  0
1843 \c
1844 \c val1:    db      isFalse
1845 \c
1846 \c %define  isTrue  1
1847 \c
1848 \c val2:    db      isFalse
1849
1850 In this case, \c{val1} is equal to 0, and \c{val2} is equal to 1.
1851 This is because, when a single-line macro is defined using
1852 \c{%define}, it is expanded only when it is called. As \c{isFalse}
1853 expands to \c{isTrue}, the expansion will be the current value of
1854 \c{isTrue}. The first time it is called that is 0, and the second
1855 time it is 1.
1856
1857 If you wanted \c{isFalse} to expand to the value assigned to the
1858 embedded macro \c{isTrue} at the time that \c{isFalse} was defined,
1859 you need to change the above code to use \c{%xdefine}.
1860
1861 \c %xdefine isTrue  1
1862 \c %xdefine isFalse isTrue
1863 \c %xdefine isTrue  0
1864 \c
1865 \c val1:    db      isFalse
1866 \c
1867 \c %xdefine isTrue  1
1868 \c
1869 \c val2:    db      isFalse
1870
1871 Now, each time that \c{isFalse} is called, it expands to 1,
1872 as that is what the embedded macro \c{isTrue} expanded to at
1873 the time that \c{isFalse} was defined.
1874
1875
1876 \S{concat%+} Concatenating Single Line Macro Tokens: \i\c{%+}
1877
1878 Individual tokens in single line macros can be concatenated, to produce
1879 longer tokens for later processing. This can be useful if there are
1880 several similar macros that perform similar functions.
1881
1882 As an example, consider the following:
1883
1884 \c %define BDASTART 400h                ; Start of BIOS data area
1885
1886 \c struc   tBIOSDA                      ; its structure
1887 \c         .COM1addr       RESW    1
1888 \c         .COM2addr       RESW    1
1889 \c         ; ..and so on
1890 \c endstruc
1891
1892 Now, if we need to access the elements of tBIOSDA in different places,
1893 we can end up with:
1894
1895 \c         mov     ax,BDASTART + tBIOSDA.COM1addr
1896 \c         mov     bx,BDASTART + tBIOSDA.COM2addr
1897
1898 This will become pretty ugly (and tedious) if used in many places, and
1899 can be reduced in size significantly by using the following macro:
1900
1901 \c ; Macro to access BIOS variables by their names (from tBDA):
1902
1903 \c %define BDA(x)  BDASTART + tBIOSDA. %+ x
1904
1905 Now the above code can be written as:
1906
1907 \c         mov     ax,BDA(COM1addr)
1908 \c         mov     bx,BDA(COM2addr)
1909
1910 Using this feature, we can simplify references to a lot of macros (and,
1911 in turn, reduce typing errors).
1912
1913
1914 \S{undef} Undefining macros: \i\c{%undef}
1915
1916 Single-line macros can be removed with the \c{%undef} command.  For
1917 example, the following sequence:
1918
1919 \c %define foo bar
1920 \c %undef  foo
1921 \c
1922 \c         mov     eax, foo
1923
1924 will expand to the instruction \c{mov eax, foo}, since after
1925 \c{%undef} the macro \c{foo} is no longer defined.
1926
1927 Macros that would otherwise be pre-defined can be undefined on the
1928 command-line using the `-u' option on the NASM command line: see
1929 \k{opt-u}.
1930
1931
1932 \S{assign} \i{Preprocessor Variables}: \i\c{%assign}
1933
1934 An alternative way to define single-line macros is by means of the
1935 \c{%assign} command (and its \I{case sensitive}case-insensitive
1936 counterpart \i\c{%iassign}, which differs from \c{%assign} in
1937 exactly the same way that \c{%idefine} differs from \c{%define}).
1938
1939 \c{%assign} is used to define single-line macros which take no
1940 parameters and have a numeric value. This value can be specified in
1941 the form of an expression, and it will be evaluated once, when the
1942 \c{%assign} directive is processed.
1943
1944 Like \c{%define}, macros defined using \c{%assign} can be re-defined
1945 later, so you can do things like
1946
1947 \c %assign i i+1
1948
1949 to increment the numeric value of a macro.
1950
1951 \c{%assign} is useful for controlling the termination of \c{%rep}
1952 preprocessor loops: see \k{rep} for an example of this. Another
1953 use for \c{%assign} is given in \k{16c} and \k{32c}.
1954
1955 The expression passed to \c{%assign} is a \i{critical expression}
1956 (see \k{crit}), and must also evaluate to a pure number (rather than
1957 a relocatable reference such as a code or data address, or anything
1958 involving a register).
1959
1960
1961 \H{strlen} \i{String Handling in Macros}: \i\c{%strlen} and \i\c{%substr}
1962
1963 It's often useful to be able to handle strings in macros. NASM
1964 supports two simple string handling macro operators from which
1965 more complex operations can be constructed.
1966
1967
1968 \S{strlen} \i{String Length}: \i\c{%strlen}
1969
1970 The \c{%strlen} macro is like \c{%assign} macro in that it creates
1971 (or redefines) a numeric value to a macro. The difference is that
1972 with \c{%strlen}, the numeric value is the length of a string. An
1973 example of the use of this would be:
1974
1975 \c %strlen charcnt 'my string'
1976
1977 In this example, \c{charcnt} would receive the value 8, just as
1978 if an \c{%assign} had been used. In this example, \c{'my string'}
1979 was a literal string but it could also have been a single-line
1980 macro that expands to a string, as in the following example:
1981
1982 \c %define sometext 'my string'
1983 \c %strlen charcnt sometext
1984
1985 As in the first case, this would result in \c{charcnt} being
1986 assigned the value of 8.
1987
1988
1989 \S{substr} \i{Sub-strings}: \i\c{%substr}
1990
1991 Individual letters in strings can be extracted using \c{%substr}.
1992 An example of its use is probably more useful than the description:
1993
1994 \c %substr mychar  'xyz' 1         ; equivalent to %define mychar 'x'
1995 \c %substr mychar  'xyz' 2         ; equivalent to %define mychar 'y'
1996 \c %substr mychar  'xyz' 3         ; equivalent to %define mychar 'z'
1997
1998 In this example, mychar gets the value of 'y'. As with \c{%strlen}
1999 (see \k{strlen}), the first parameter is the single-line macro to
2000 be created and the second is the string. The third parameter
2001 specifies which character is to be selected. Note that the first
2002 index is 1, not 0 and the last index is equal to the value that
2003 \c{%strlen} would assign given the same string. Index values out
2004 of range result in an empty string.
2005
2006
2007 \H{mlmacro} \i{Multi-Line Macros}: \I\c{%imacro}\i\c{%macro}
2008
2009 Multi-line macros are much more like the type of macro seen in MASM
2010 and TASM: a multi-line macro definition in NASM looks something like
2011 this.
2012
2013 \c %macro  prologue 1
2014 \c
2015 \c         push    ebp
2016 \c         mov     ebp,esp
2017 \c         sub     esp,%1
2018 \c
2019 \c %endmacro
2020
2021 This defines a C-like function prologue as a macro: so you would
2022 invoke the macro with a call such as
2023
2024 \c myfunc:   prologue 12
2025
2026 which would expand to the three lines of code
2027
2028 \c myfunc: push    ebp
2029 \c         mov     ebp,esp
2030 \c         sub     esp,12
2031
2032 The number \c{1} after the macro name in the \c{%macro} line defines
2033 the number of parameters the macro \c{prologue} expects to receive.
2034 The use of \c{%1} inside the macro definition refers to the first
2035 parameter to the macro call. With a macro taking more than one
2036 parameter, subsequent parameters would be referred to as \c{%2},
2037 \c{%3} and so on.
2038
2039 Multi-line macros, like single-line macros, are \i{case-sensitive},
2040 unless you define them using the alternative directive \c{%imacro}.
2041
2042 If you need to pass a comma as \e{part} of a parameter to a
2043 multi-line macro, you can do that by enclosing the entire parameter
2044 in \I{braces, around macro parameters}braces. So you could code
2045 things like
2046
2047 \c %macro  silly 2
2048 \c
2049 \c     %2: db      %1
2050 \c
2051 \c %endmacro
2052 \c
2053 \c         silly 'a', letter_a             ; letter_a:  db 'a'
2054 \c         silly 'ab', string_ab           ; string_ab: db 'ab'
2055 \c         silly {13,10}, crlf             ; crlf:      db 13,10
2056
2057
2058 \S{mlmacover} Overloading Multi-Line Macros\I{overloading, multi-line macros}
2059
2060 As with single-line macros, multi-line macros can be overloaded by
2061 defining the same macro name several times with different numbers of
2062 parameters. This time, no exception is made for macros with no
2063 parameters at all. So you could define
2064
2065 \c %macro  prologue 0
2066 \c
2067 \c         push    ebp
2068 \c         mov     ebp,esp
2069 \c
2070 \c %endmacro
2071
2072 to define an alternative form of the function prologue which
2073 allocates no local stack space.
2074
2075 Sometimes, however, you might want to `overload' a machine
2076 instruction; for example, you might want to define
2077
2078 \c %macro  push 2
2079 \c
2080 \c         push    %1
2081 \c         push    %2
2082 \c
2083 \c %endmacro
2084
2085 so that you could code
2086
2087 \c         push    ebx             ; this line is not a macro call
2088 \c         push    eax,ecx         ; but this one is
2089
2090 Ordinarily, NASM will give a warning for the first of the above two
2091 lines, since \c{push} is now defined to be a macro, and is being
2092 invoked with a number of parameters for which no definition has been
2093 given. The correct code will still be generated, but the assembler
2094 will give a warning. This warning can be disabled by the use of the
2095 \c{-w-macro-params} command-line option (see \k{opt-w}).
2096
2097
2098 \S{maclocal} \i{Macro-Local Labels}
2099
2100 NASM allows you to define labels within a multi-line macro
2101 definition in such a way as to make them local to the macro call: so
2102 calling the same macro multiple times will use a different label
2103 each time. You do this by prefixing \i\c{%%} to the label name. So
2104 you can invent an instruction which executes a \c{RET} if the \c{Z}
2105 flag is set by doing this:
2106
2107 \c %macro  retz 0
2108 \c
2109 \c         jnz     %%skip
2110 \c         ret
2111 \c     %%skip:
2112 \c
2113 \c %endmacro
2114
2115 You can call this macro as many times as you want, and every time
2116 you call it NASM will make up a different `real' name to substitute
2117 for the label \c{%%skip}. The names NASM invents are of the form
2118 \c{..@2345.skip}, where the number 2345 changes with every macro
2119 call. The \i\c{..@} prefix prevents macro-local labels from
2120 interfering with the local label mechanism, as described in
2121 \k{locallab}. You should avoid defining your own labels in this form
2122 (the \c{..@} prefix, then a number, then another period) in case
2123 they interfere with macro-local labels.
2124
2125
2126 \S{mlmacgre} \i{Greedy Macro Parameters}
2127
2128 Occasionally it is useful to define a macro which lumps its entire
2129 command line into one parameter definition, possibly after
2130 extracting one or two smaller parameters from the front. An example
2131 might be a macro to write a text string to a file in MS-DOS, where
2132 you might want to be able to write
2133
2134 \c         writefile [filehandle],"hello, world",13,10
2135
2136 NASM allows you to define the last parameter of a macro to be
2137 \e{greedy}, meaning that if you invoke the macro with more
2138 parameters than it expects, all the spare parameters get lumped into
2139 the last defined one along with the separating commas. So if you
2140 code:
2141
2142 \c %macro  writefile 2+
2143 \c
2144 \c         jmp     %%endstr
2145 \c   %%str:        db      %2
2146 \c   %%endstr:
2147 \c         mov     dx,%%str
2148 \c         mov     cx,%%endstr-%%str
2149 \c         mov     bx,%1
2150 \c         mov     ah,0x40
2151 \c         int     0x21
2152 \c
2153 \c %endmacro
2154
2155 then the example call to \c{writefile} above will work as expected:
2156 the text before the first comma, \c{[filehandle]}, is used as the
2157 first macro parameter and expanded when \c{%1} is referred to, and
2158 all the subsequent text is lumped into \c{%2} and placed after the
2159 \c{db}.
2160
2161 The greedy nature of the macro is indicated to NASM by the use of
2162 the \I{+ modifier}\c{+} sign after the parameter count on the
2163 \c{%macro} line.
2164
2165 If you define a greedy macro, you are effectively telling NASM how
2166 it should expand the macro given \e{any} number of parameters from
2167 the actual number specified up to infinity; in this case, for
2168 example, NASM now knows what to do when it sees a call to
2169 \c{writefile} with 2, 3, 4 or more parameters. NASM will take this
2170 into account when overloading macros, and will not allow you to
2171 define another form of \c{writefile} taking 4 parameters (for
2172 example).
2173
2174 Of course, the above macro could have been implemented as a
2175 non-greedy macro, in which case the call to it would have had to
2176 look like
2177
2178 \c           writefile [filehandle], {"hello, world",13,10}
2179
2180 NASM provides both mechanisms for putting \i{commas in macro
2181 parameters}, and you choose which one you prefer for each macro
2182 definition.
2183
2184 See \k{sectmac} for a better way to write the above macro.
2185
2186
2187 \S{mlmacdef} \i{Default Macro Parameters}
2188
2189 NASM also allows you to define a multi-line macro with a \e{range}
2190 of allowable parameter counts. If you do this, you can specify
2191 defaults for \i{omitted parameters}. So, for example:
2192
2193 \c %macro  die 0-1 "Painful program death has occurred."
2194 \c
2195 \c         writefile 2,%1
2196 \c         mov     ax,0x4c01
2197 \c         int     0x21
2198 \c
2199 \c %endmacro
2200
2201 This macro (which makes use of the \c{writefile} macro defined in
2202 \k{mlmacgre}) can be called with an explicit error message, which it
2203 will display on the error output stream before exiting, or it can be
2204 called with no parameters, in which case it will use the default
2205 error message supplied in the macro definition.
2206
2207 In general, you supply a minimum and maximum number of parameters
2208 for a macro of this type; the minimum number of parameters are then
2209 required in the macro call, and then you provide defaults for the
2210 optional ones. So if a macro definition began with the line
2211
2212 \c %macro foobar 1-3 eax,[ebx+2]
2213
2214 then it could be called with between one and three parameters, and
2215 \c{%1} would always be taken from the macro call. \c{%2}, if not
2216 specified by the macro call, would default to \c{eax}, and \c{%3} if
2217 not specified would default to \c{[ebx+2]}.
2218
2219 You may omit parameter defaults from the macro definition, in which
2220 case the parameter default is taken to be blank. This can be useful
2221 for macros which can take a variable number of parameters, since the
2222 \i\c{%0} token (see \k{percent0}) allows you to determine how many
2223 parameters were really passed to the macro call.
2224
2225 This defaulting mechanism can be combined with the greedy-parameter
2226 mechanism; so the \c{die} macro above could be made more powerful,
2227 and more useful, by changing the first line of the definition to
2228
2229 \c %macro die 0-1+ "Painful program death has occurred.",13,10
2230
2231 The maximum parameter count can be infinite, denoted by \c{*}. In
2232 this case, of course, it is impossible to provide a \e{full} set of
2233 default parameters. Examples of this usage are shown in \k{rotate}.
2234
2235
2236 \S{percent0} \i\c{%0}: \I{counting macro parameters}Macro Parameter Counter
2237
2238 For a macro which can take a variable number of parameters, the
2239 parameter reference \c{%0} will return a numeric constant giving the
2240 number of parameters passed to the macro. This can be used as an
2241 argument to \c{%rep} (see \k{rep}) in order to iterate through all
2242 the parameters of a macro. Examples are given in \k{rotate}.
2243
2244
2245 \S{rotate} \i\c{%rotate}: \i{Rotating Macro Parameters}
2246
2247 Unix shell programmers will be familiar with the \I{shift
2248 command}\c{shift} shell command, which allows the arguments passed
2249 to a shell script (referenced as \c{$1}, \c{$2} and so on) to be
2250 moved left by one place, so that the argument previously referenced
2251 as \c{$2} becomes available as \c{$1}, and the argument previously
2252 referenced as \c{$1} is no longer available at all.
2253
2254 NASM provides a similar mechanism, in the form of \c{%rotate}. As
2255 its name suggests, it differs from the Unix \c{shift} in that no
2256 parameters are lost: parameters rotated off the left end of the
2257 argument list reappear on the right, and vice versa.
2258
2259 \c{%rotate} is invoked with a single numeric argument (which may be
2260 an expression). The macro parameters are rotated to the left by that
2261 many places. If the argument to \c{%rotate} is negative, the macro
2262 parameters are rotated to the right.
2263
2264 \I{iterating over macro parameters}So a pair of macros to save and
2265 restore a set of registers might work as follows:
2266
2267 \c %macro  multipush 1-*
2268 \c
2269 \c   %rep  %0
2270 \c         push    %1
2271 \c   %rotate 1
2272 \c   %endrep
2273 \c
2274 \c %endmacro
2275
2276 This macro invokes the \c{PUSH} instruction on each of its arguments
2277 in turn, from left to right. It begins by pushing its first
2278 argument, \c{%1}, then invokes \c{%rotate} to move all the arguments
2279 one place to the left, so that the original second argument is now
2280 available as \c{%1}. Repeating this procedure as many times as there
2281 were arguments (achieved by supplying \c{%0} as the argument to
2282 \c{%rep}) causes each argument in turn to be pushed.
2283
2284 Note also the use of \c{*} as the maximum parameter count,
2285 indicating that there is no upper limit on the number of parameters
2286 you may supply to the \i\c{multipush} macro.
2287
2288 It would be convenient, when using this macro, to have a \c{POP}
2289 equivalent, which \e{didn't} require the arguments to be given in
2290 reverse order. Ideally, you would write the \c{multipush} macro
2291 call, then cut-and-paste the line to where the pop needed to be
2292 done, and change the name of the called macro to \c{multipop}, and
2293 the macro would take care of popping the registers in the opposite
2294 order from the one in which they were pushed.
2295
2296 This can be done by the following definition:
2297
2298 \c %macro  multipop 1-*
2299 \c
2300 \c   %rep %0
2301 \c   %rotate -1
2302 \c         pop     %1
2303 \c   %endrep
2304 \c
2305 \c %endmacro
2306
2307 This macro begins by rotating its arguments one place to the
2308 \e{right}, so that the original \e{last} argument appears as \c{%1}.
2309 This is then popped, and the arguments are rotated right again, so
2310 the second-to-last argument becomes \c{%1}. Thus the arguments are
2311 iterated through in reverse order.
2312
2313
2314 \S{concat} \i{Concatenating Macro Parameters}
2315
2316 NASM can concatenate macro parameters on to other text surrounding
2317 them. This allows you to declare a family of symbols, for example,
2318 in a macro definition. If, for example, you wanted to generate a
2319 table of key codes along with offsets into the table, you could code
2320 something like
2321
2322 \c %macro keytab_entry 2
2323 \c
2324 \c     keypos%1    equ     $-keytab
2325 \c                 db      %2
2326 \c
2327 \c %endmacro
2328 \c
2329 \c keytab:
2330 \c           keytab_entry F1,128+1
2331 \c           keytab_entry F2,128+2
2332 \c           keytab_entry Return,13
2333
2334 which would expand to
2335
2336 \c keytab:
2337 \c keyposF1        equ     $-keytab
2338 \c                 db     128+1
2339 \c keyposF2        equ     $-keytab
2340 \c                 db      128+2
2341 \c keyposReturn    equ     $-keytab
2342 \c                 db      13
2343
2344 You can just as easily concatenate text on to the other end of a
2345 macro parameter, by writing \c{%1foo}.
2346
2347 If you need to append a \e{digit} to a macro parameter, for example
2348 defining labels \c{foo1} and \c{foo2} when passed the parameter
2349 \c{foo}, you can't code \c{%11} because that would be taken as the
2350 eleventh macro parameter. Instead, you must code
2351 \I{braces, after % sign}\c{%\{1\}1}, which will separate the first
2352 \c{1} (giving the number of the macro parameter) from the second
2353 (literal text to be concatenated to the parameter).
2354
2355 This concatenation can also be applied to other preprocessor in-line
2356 objects, such as macro-local labels (\k{maclocal}) and context-local
2357 labels (\k{ctxlocal}). In all cases, ambiguities in syntax can be
2358 resolved by enclosing everything after the \c{%} sign and before the
2359 literal text in braces: so \c{%\{%foo\}bar} concatenates the text
2360 \c{bar} to the end of the real name of the macro-local label
2361 \c{%%foo}. (This is unnecessary, since the form NASM uses for the
2362 real names of macro-local labels means that the two usages
2363 \c{%\{%foo\}bar} and \c{%%foobar} would both expand to the same
2364 thing anyway; nevertheless, the capability is there.)
2365
2366
2367 \S{mlmaccc} \i{Condition Codes as Macro Parameters}
2368
2369 NASM can give special treatment to a macro parameter which contains
2370 a condition code. For a start, you can refer to the macro parameter
2371 \c{%1} by means of the alternative syntax \i\c{%+1}, which informs
2372 NASM that this macro parameter is supposed to contain a condition
2373 code, and will cause the preprocessor to report an error message if
2374 the macro is called with a parameter which is \e{not} a valid
2375 condition code.
2376
2377 Far more usefully, though, you can refer to the macro parameter by
2378 means of \i\c{%-1}, which NASM will expand as the \e{inverse}
2379 condition code. So the \c{retz} macro defined in \k{maclocal} can be
2380 replaced by a general \i{conditional-return macro} like this:
2381
2382 \c %macro  retc 1
2383 \c
2384 \c         j%-1    %%skip
2385 \c         ret
2386 \c   %%skip:
2387 \c
2388 \c %endmacro
2389
2390 This macro can now be invoked using calls like \c{retc ne}, which
2391 will cause the conditional-jump instruction in the macro expansion
2392 to come out as \c{JE}, or \c{retc po} which will make the jump a
2393 \c{JPE}.
2394
2395 The \c{%+1} macro-parameter reference is quite happy to interpret
2396 the arguments \c{CXZ} and \c{ECXZ} as valid condition codes;
2397 however, \c{%-1} will report an error if passed either of these,
2398 because no inverse condition code exists.
2399
2400
2401 \S{nolist} \i{Disabling Listing Expansion}\I\c{.nolist}
2402
2403 When NASM is generating a listing file from your program, it will
2404 generally expand multi-line macros by means of writing the macro
2405 call and then listing each line of the expansion. This allows you to
2406 see which instructions in the macro expansion are generating what
2407 code; however, for some macros this clutters the listing up
2408 unnecessarily.
2409
2410 NASM therefore provides the \c{.nolist} qualifier, which you can
2411 include in a macro definition to inhibit the expansion of the macro
2412 in the listing file. The \c{.nolist} qualifier comes directly after
2413 the number of parameters, like this:
2414
2415 \c %macro foo 1.nolist
2416
2417 Or like this:
2418
2419 \c %macro bar 1-5+.nolist a,b,c,d,e,f,g,h
2420
2421 \H{condasm} \i{Conditional Assembly}\I\c{%if}
2422
2423 Similarly to the C preprocessor, NASM allows sections of a source
2424 file to be assembled only if certain conditions are met. The general
2425 syntax of this feature looks like this:
2426
2427 \c %if<condition>
2428 \c     ; some code which only appears if <condition> is met
2429 \c %elif<condition2>
2430 \c     ; only appears if <condition> is not met but <condition2> is
2431 \c %else
2432 \c     ; this appears if neither <condition> nor <condition2> was met
2433 \c %endif
2434
2435 The \i\c{%else} clause is optional, as is the \i\c{%elif} clause.
2436 You can have more than one \c{%elif} clause as well.
2437
2438
2439 \S{ifdef} \i\c{%ifdef}: Testing Single-Line Macro Existence\I{testing,
2440 single-line macro existence}
2441
2442 Beginning a conditional-assembly block with the line \c{%ifdef
2443 MACRO} will assemble the subsequent code if, and only if, a
2444 single-line macro called \c{MACRO} is defined. If not, then the
2445 \c{%elif} and \c{%else} blocks (if any) will be processed instead.
2446
2447 For example, when debugging a program, you might want to write code
2448 such as
2449
2450 \c           ; perform some function
2451 \c %ifdef DEBUG
2452 \c           writefile 2,"Function performed successfully",13,10
2453 \c %endif
2454 \c           ; go and do something else
2455
2456 Then you could use the command-line option \c{-dDEBUG} to create a
2457 version of the program which produced debugging messages, and remove
2458 the option to generate the final release version of the program.
2459
2460 You can test for a macro \e{not} being defined by using
2461 \i\c{%ifndef} instead of \c{%ifdef}. You can also test for macro
2462 definitions in \c{%elif} blocks by using \i\c{%elifdef} and
2463 \i\c{%elifndef}.
2464
2465
2466 \S{ifmacro} \i\c{ifmacro}: Testing Multi-Line Macro
2467 Existence\I{testing, multi-line macro existence}
2468
2469 The \c{%ifmacro} directive operates in the same way as the \c{%ifdef}
2470 directive, except that it checks for the existence of a multi-line macro.
2471
2472 For example, you may be working with a large project and not have control
2473 over the macros in a library. You may want to create a macro with one
2474 name if it doesn't already exist, and another name if one with that name
2475 does exist.
2476
2477 The \c{%ifmacro} is considered true if defining a macro with the given name
2478 and number of arguments would cause a definitions conflict. For example:
2479
2480 \c %ifmacro MyMacro 1-3
2481 \c
2482 \c      %error "MyMacro 1-3" causes a conflict with an existing macro.
2483 \c
2484 \c %else
2485 \c
2486 \c      %macro MyMacro 1-3
2487 \c
2488 \c              ; insert code to define the macro
2489 \c
2490 \c      %endmacro
2491 \c
2492 \c %endif
2493
2494 This will create the macro "MyMacro 1-3" if no macro already exists which
2495 would conflict with it, and emits a warning if there would be a definition
2496 conflict.
2497
2498 You can test for the macro not existing by using the \i\c{%ifnmacro} instead
2499 of \c{%ifmacro}. Additional tests can be performed in \c{%elif} blocks by using
2500 \i\c{%elifmacro} and \i\c{%elifnmacro}.
2501
2502
2503 \S{ifctx} \i\c{%ifctx}: Testing the Context Stack\I{testing, context
2504 stack}
2505
2506 The conditional-assembly construct \c{%ifctx ctxname} will cause the
2507 subsequent code to be assembled if and only if the top context on
2508 the preprocessor's context stack has the name \c{ctxname}. As with
2509 \c{%ifdef}, the inverse and \c{%elif} forms \i\c{%ifnctx},
2510 \i\c{%elifctx} and \i\c{%elifnctx} are also supported.
2511
2512 For more details of the context stack, see \k{ctxstack}. For a
2513 sample use of \c{%ifctx}, see \k{blockif}.
2514
2515
2516 \S{if} \i\c{%if}: Testing Arbitrary Numeric Expressions\I{testing,
2517 arbitrary numeric expressions}
2518
2519 The conditional-assembly construct \c{%if expr} will cause the
2520 subsequent code to be assembled if and only if the value of the
2521 numeric expression \c{expr} is non-zero. An example of the use of
2522 this feature is in deciding when to break out of a \c{%rep}
2523 preprocessor loop: see \k{rep} for a detailed example.
2524
2525 The expression given to \c{%if}, and its counterpart \i\c{%elif}, is
2526 a critical expression (see \k{crit}).
2527
2528 \c{%if} extends the normal NASM expression syntax, by providing a
2529 set of \i{relational operators} which are not normally available in
2530 expressions. The operators \i\c{=}, \i\c{<}, \i\c{>}, \i\c{<=},
2531 \i\c{>=} and \i\c{<>} test equality, less-than, greater-than,
2532 less-or-equal, greater-or-equal and not-equal respectively. The
2533 C-like forms \i\c{==} and \i\c{!=} are supported as alternative
2534 forms of \c{=} and \c{<>}. In addition, low-priority logical
2535 operators \i\c{&&}, \i\c{^^} and \i\c{||} are provided, supplying
2536 \i{logical AND}, \i{logical XOR} and \i{logical OR}. These work like
2537 the C logical operators (although C has no logical XOR), in that
2538 they always return either 0 or 1, and treat any non-zero input as 1
2539 (so that \c{^^}, for example, returns 1 if exactly one of its inputs
2540 is zero, and 0 otherwise). The relational operators also return 1
2541 for true and 0 for false.
2542
2543 Like most other \c{%if} constructs, \c{%if} has a counterpart
2544 \i\c{%elif}, and negative forms \i\c{%ifn} and \i\c{%elifn}.
2545
2546 \S{ifidn} \i\c{%ifidn} and \i\c{%ifidni}: Testing Exact Text
2547 Identity\I{testing, exact text identity}
2548
2549 The construct \c{%ifidn text1,text2} will cause the subsequent code
2550 to be assembled if and only if \c{text1} and \c{text2}, after
2551 expanding single-line macros, are identical pieces of text.
2552 Differences in white space are not counted.
2553
2554 \c{%ifidni} is similar to \c{%ifidn}, but is \i{case-insensitive}.
2555
2556 For example, the following macro pushes a register or number on the
2557 stack, and allows you to treat \c{IP} as a real register:
2558
2559 \c %macro  pushparam 1
2560 \c
2561 \c   %ifidni %1,ip
2562 \c         call    %%label
2563 \c   %%label:
2564 \c   %else
2565 \c         push    %1
2566 \c   %endif
2567 \c
2568 \c %endmacro
2569
2570 Like most other \c{%if} constructs, \c{%ifidn} has a counterpart
2571 \i\c{%elifidn}, and negative forms \i\c{%ifnidn} and \i\c{%elifnidn}.
2572 Similarly, \c{%ifidni} has counterparts \i\c{%elifidni},
2573 \i\c{%ifnidni} and \i\c{%elifnidni}.
2574
2575
2576 \S{iftyp} \i\c{%ifid}, \i\c{%ifnum}, \i\c{%ifstr}: Testing Token
2577 Types\I{testing, token types}
2578
2579 Some macros will want to perform different tasks depending on
2580 whether they are passed a number, a string, or an identifier. For
2581 example, a string output macro might want to be able to cope with
2582 being passed either a string constant or a pointer to an existing
2583 string.
2584
2585 The conditional assembly construct \c{%ifid}, taking one parameter
2586 (which may be blank), assembles the subsequent code if and only if
2587 the first token in the parameter exists and is an identifier.
2588 \c{%ifnum} works similarly, but tests for the token being a numeric
2589 constant; \c{%ifstr} tests for it being a string.
2590
2591 For example, the \c{writefile} macro defined in \k{mlmacgre} can be
2592 extended to take advantage of \c{%ifstr} in the following fashion:
2593
2594 \c %macro writefile 2-3+
2595 \c
2596 \c   %ifstr %2
2597 \c         jmp     %%endstr
2598 \c     %if %0 = 3
2599 \c       %%str:    db      %2,%3
2600 \c     %else
2601 \c       %%str:    db      %2
2602 \c     %endif
2603 \c       %%endstr: mov     dx,%%str
2604 \c                 mov     cx,%%endstr-%%str
2605 \c   %else
2606 \c                 mov     dx,%2
2607 \c                 mov     cx,%3
2608 \c   %endif
2609 \c                 mov     bx,%1
2610 \c                 mov     ah,0x40
2611 \c                 int     0x21
2612 \c
2613 \c %endmacro
2614
2615 Then the \c{writefile} macro can cope with being called in either of
2616 the following two ways:
2617
2618 \c         writefile [file], strpointer, length
2619 \c         writefile [file], "hello", 13, 10
2620
2621 In the first, \c{strpointer} is used as the address of an
2622 already-declared string, and \c{length} is used as its length; in
2623 the second, a string is given to the macro, which therefore declares
2624 it itself and works out the address and length for itself.
2625
2626 Note the use of \c{%if} inside the \c{%ifstr}: this is to detect
2627 whether the macro was passed two arguments (so the string would be a
2628 single string constant, and \c{db %2} would be adequate) or more (in
2629 which case, all but the first two would be lumped together into
2630 \c{%3}, and \c{db %2,%3} would be required).
2631
2632 \I\c{%ifnid}\I\c{%elifid}\I\c{%elifnid}\I\c{%ifnnum}\I\c{%elifnum}
2633 \I\c{%elifnnum}\I\c{%ifnstr}\I\c{%elifstr}\I\c{%elifnstr}
2634 The usual \c{%elifXXX}, \c{%ifnXXX} and \c{%elifnXXX} versions exist
2635 for each of \c{%ifid}, \c{%ifnum} and \c{%ifstr}.
2636
2637
2638 \S{pperror} \i\c{%error}: Reporting \i{User-Defined Errors}
2639
2640 The preprocessor directive \c{%error} will cause NASM to report an
2641 error if it occurs in assembled code. So if other users are going to
2642 try to assemble your source files, you can ensure that they define
2643 the right macros by means of code like this:
2644
2645 \c %ifdef SOME_MACRO
2646 \c     ; do some setup
2647 \c %elifdef SOME_OTHER_MACRO
2648 \c     ; do some different setup
2649 \c %else
2650 \c     %error Neither SOME_MACRO nor SOME_OTHER_MACRO was defined.
2651 \c %endif
2652
2653 Then any user who fails to understand the way your code is supposed
2654 to be assembled will be quickly warned of their mistake, rather than
2655 having to wait until the program crashes on being run and then not
2656 knowing what went wrong.
2657
2658
2659 \H{rep} \i{Preprocessor Loops}\I{repeating code}: \i\c{%rep}
2660
2661 NASM's \c{TIMES} prefix, though useful, cannot be used to invoke a
2662 multi-line macro multiple times, because it is processed by NASM
2663 after macros have already been expanded. Therefore NASM provides
2664 another form of loop, this time at the preprocessor level: \c{%rep}.
2665
2666 The directives \c{%rep} and \i\c{%endrep} (\c{%rep} takes a numeric
2667 argument, which can be an expression; \c{%endrep} takes no
2668 arguments) can be used to enclose a chunk of code, which is then
2669 replicated as many times as specified by the preprocessor:
2670
2671 \c %assign i 0
2672 \c %rep    64
2673 \c         inc     word [table+2*i]
2674 \c %assign i i+1
2675 \c %endrep
2676
2677 This will generate a sequence of 64 \c{INC} instructions,
2678 incrementing every word of memory from \c{[table]} to
2679 \c{[table+126]}.
2680
2681 For more complex termination conditions, or to break out of a repeat
2682 loop part way along, you can use the \i\c{%exitrep} directive to
2683 terminate the loop, like this:
2684
2685 \c fibonacci:
2686 \c %assign i 0
2687 \c %assign j 1
2688 \c %rep 100
2689 \c %if j > 65535
2690 \c     %exitrep
2691 \c %endif
2692 \c         dw j
2693 \c %assign k j+i
2694 \c %assign i j
2695 \c %assign j k
2696 \c %endrep
2697 \c
2698 \c fib_number equ ($-fibonacci)/2
2699
2700 This produces a list of all the Fibonacci numbers that will fit in
2701 16 bits. Note that a maximum repeat count must still be given to
2702 \c{%rep}. This is to prevent the possibility of NASM getting into an
2703 infinite loop in the preprocessor, which (on multitasking or
2704 multi-user systems) would typically cause all the system memory to
2705 be gradually used up and other applications to start crashing.
2706
2707
2708 \H{include} \i{Including Other Files}
2709
2710 Using, once again, a very similar syntax to the C preprocessor,
2711 NASM's preprocessor lets you include other source files into your
2712 code. This is done by the use of the \i\c{%include} directive:
2713
2714 \c %include "macros.mac"
2715
2716 will include the contents of the file \c{macros.mac} into the source
2717 file containing the \c{%include} directive.
2718
2719 Include files are \I{searching for include files}searched for in the
2720 current directory (the directory you're in when you run NASM, as
2721 opposed to the location of the NASM executable or the location of
2722 the source file), plus any directories specified on the NASM command
2723 line using the \c{-i} option.
2724
2725 The standard C idiom for preventing a file being included more than
2726 once is just as applicable in NASM: if the file \c{macros.mac} has
2727 the form
2728
2729 \c %ifndef MACROS_MAC
2730 \c     %define MACROS_MAC
2731 \c     ; now define some macros
2732 \c %endif
2733
2734 then including the file more than once will not cause errors,
2735 because the second time the file is included nothing will happen
2736 because the macro \c{MACROS_MAC} will already be defined.
2737
2738 You can force a file to be included even if there is no \c{%include}
2739 directive that explicitly includes it, by using the \i\c{-p} option
2740 on the NASM command line (see \k{opt-p}).
2741
2742
2743 \H{ctxstack} The \i{Context Stack}
2744
2745 Having labels that are local to a macro definition is sometimes not
2746 quite powerful enough: sometimes you want to be able to share labels
2747 between several macro calls. An example might be a \c{REPEAT} ...
2748 \c{UNTIL} loop, in which the expansion of the \c{REPEAT} macro
2749 would need to be able to refer to a label which the \c{UNTIL} macro
2750 had defined. However, for such a macro you would also want to be
2751 able to nest these loops.
2752
2753 NASM provides this level of power by means of a \e{context stack}.
2754 The preprocessor maintains a stack of \e{contexts}, each of which is
2755 characterized by a name. You add a new context to the stack using
2756 the \i\c{%push} directive, and remove one using \i\c{%pop}. You can
2757 define labels that are local to a particular context on the stack.
2758
2759
2760 \S{pushpop} \i\c{%push} and \i\c{%pop}: \I{creating
2761 contexts}\I{removing contexts}Creating and Removing Contexts
2762
2763 The \c{%push} directive is used to create a new context and place it
2764 on the top of the context stack. \c{%push} requires one argument,
2765 which is the name of the context. For example:
2766
2767 \c %push    foobar
2768
2769 This pushes a new context called \c{foobar} on the stack. You can
2770 have several contexts on the stack with the same name: they can
2771 still be distinguished.
2772
2773 The directive \c{%pop}, requiring no arguments, removes the top
2774 context from the context stack and destroys it, along with any
2775 labels associated with it.
2776
2777
2778 \S{ctxlocal} \i{Context-Local Labels}
2779
2780 Just as the usage \c{%%foo} defines a label which is local to the
2781 particular macro call in which it is used, the usage \I{%$}\c{%$foo}
2782 is used to define a label which is local to the context on the top
2783 of the context stack. So the \c{REPEAT} and \c{UNTIL} example given
2784 above could be implemented by means of:
2785
2786 \c %macro repeat 0
2787 \c
2788 \c     %push   repeat
2789 \c     %$begin:
2790 \c
2791 \c %endmacro
2792 \c
2793 \c %macro until 1
2794 \c
2795 \c         j%-1    %$begin
2796 \c     %pop
2797 \c
2798 \c %endmacro
2799
2800 and invoked by means of, for example,
2801
2802 \c         mov     cx,string
2803 \c         repeat
2804 \c         add     cx,3
2805 \c         scasb
2806 \c         until   e
2807
2808 which would scan every fourth byte of a string in search of the byte
2809 in \c{AL}.
2810
2811 If you need to define, or access, labels local to the context
2812 \e{below} the top one on the stack, you can use \I{%$$}\c{%$$foo}, or
2813 \c{%$$$foo} for the context below that, and so on.
2814
2815
2816 \S{ctxdefine} \i{Context-Local Single-Line Macros}
2817
2818 NASM also allows you to define single-line macros which are local to
2819 a particular context, in just the same way:
2820
2821 \c %define %$localmac 3
2822
2823 will define the single-line macro \c{%$localmac} to be local to the
2824 top context on the stack. Of course, after a subsequent \c{%push},
2825 it can then still be accessed by the name \c{%$$localmac}.
2826
2827
2828 \S{ctxrepl} \i\c{%repl}: \I{renaming contexts}Renaming a Context
2829
2830 If you need to change the name of the top context on the stack (in
2831 order, for example, to have it respond differently to \c{%ifctx}),
2832 you can execute a \c{%pop} followed by a \c{%push}; but this will
2833 have the side effect of destroying all context-local labels and
2834 macros associated with the context that was just popped.
2835
2836 NASM provides the directive \c{%repl}, which \e{replaces} a context
2837 with a different name, without touching the associated macros and
2838 labels. So you could replace the destructive code
2839
2840 \c %pop
2841 \c %push   newname
2842
2843 with the non-destructive version \c{%repl newname}.
2844
2845
2846 \S{blockif} Example Use of the \i{Context Stack}: \i{Block IFs}
2847
2848 This example makes use of almost all the context-stack features,
2849 including the conditional-assembly construct \i\c{%ifctx}, to
2850 implement a block IF statement as a set of macros.
2851
2852 \c %macro if 1
2853 \c
2854 \c     %push if
2855 \c     j%-1  %$ifnot
2856 \c
2857 \c %endmacro
2858 \c
2859 \c %macro else 0
2860 \c
2861 \c   %ifctx if
2862 \c         %repl   else
2863 \c         jmp     %$ifend
2864 \c         %$ifnot:
2865 \c   %else
2866 \c         %error  "expected `if' before `else'"
2867 \c   %endif
2868 \c
2869 \c %endmacro
2870 \c
2871 \c %macro endif 0
2872 \c
2873 \c   %ifctx if
2874 \c         %$ifnot:
2875 \c         %pop
2876 \c   %elifctx      else
2877 \c         %$ifend:
2878 \c         %pop
2879 \c   %else
2880 \c         %error  "expected `if' or `else' before `endif'"
2881 \c   %endif
2882 \c
2883 \c %endmacro
2884
2885 This code is more robust than the \c{REPEAT} and \c{UNTIL} macros
2886 given in \k{ctxlocal}, because it uses conditional assembly to check
2887 that the macros are issued in the right order (for example, not
2888 calling \c{endif} before \c{if}) and issues a \c{%error} if they're
2889 not.
2890
2891 In addition, the \c{endif} macro has to be able to cope with the two
2892 distinct cases of either directly following an \c{if}, or following
2893 an \c{else}. It achieves this, again, by using conditional assembly
2894 to do different things depending on whether the context on top of
2895 the stack is \c{if} or \c{else}.
2896
2897 The \c{else} macro has to preserve the context on the stack, in
2898 order to have the \c{%$ifnot} referred to by the \c{if} macro be the
2899 same as the one defined by the \c{endif} macro, but has to change
2900 the context's name so that \c{endif} will know there was an
2901 intervening \c{else}. It does this by the use of \c{%repl}.
2902
2903 A sample usage of these macros might look like:
2904
2905 \c         cmp     ax,bx
2906 \c
2907 \c         if ae
2908 \c                cmp     bx,cx
2909 \c
2910 \c                if ae
2911 \c                        mov     ax,cx
2912 \c                else
2913 \c                        mov     ax,bx
2914 \c                endif
2915 \c
2916 \c         else
2917 \c                cmp     ax,cx
2918 \c
2919 \c                if ae
2920 \c                        mov     ax,cx
2921 \c                endif
2922 \c
2923 \c         endif
2924
2925 The block-\c{IF} macros handle nesting quite happily, by means of
2926 pushing another context, describing the inner \c{if}, on top of the
2927 one describing the outer \c{if}; thus \c{else} and \c{endif} always
2928 refer to the last unmatched \c{if} or \c{else}.
2929
2930
2931 \H{stdmac} \i{Standard Macros}
2932
2933 NASM defines a set of standard macros, which are already defined
2934 when it starts to process any source file. If you really need a
2935 program to be assembled with no pre-defined macros, you can use the
2936 \i\c{%clear} directive to empty the preprocessor of everything but
2937 context-local preprocessor variables and single-line macros.
2938
2939 Most \i{user-level assembler directives} (see \k{directive}) are
2940 implemented as macros which invoke primitive directives; these are
2941 described in \k{directive}. The rest of the standard macro set is
2942 described here.
2943
2944
2945 \S{stdmacver} \i\c{__NASM_MAJOR__}, \i\c{__NASM_MINOR__},
2946 \i\c{__NASM_SUBMINOR__} and \i\c{___NASM_PATCHLEVEL__}: \i{NASM Version}
2947
2948 The single-line macros \c{__NASM_MAJOR__}, \c{__NASM_MINOR__},
2949 \c{__NASM_SUBMINOR__} and \c{___NASM_PATCHLEVEL__} expand to the
2950 major, minor, subminor and patch level parts of the \i{version
2951 number of NASM} being used. So, under NASM 0.98.32p1 for
2952 example, \c{__NASM_MAJOR__} would be defined to be 0, \c{__NASM_MINOR__}
2953 would be defined as 98, \c{__NASM_SUBMINOR__} would be defined to 32,
2954 and \c{___NASM_PATCHLEVEL__} would be defined as 1.
2955
2956
2957 \S{stdmacverid} \i\c{__NASM_VERSION_ID__}: \i{NASM Version ID}
2958
2959 The single-line macro \c{__NASM_VERSION_ID__} expands to a dword integer
2960 representing the full version number of the version of nasm being used.
2961 The value is the equivalent to \c{__NASM_MAJOR__}, \c{__NASM_MINOR__},
2962 \c{__NASM_SUBMINOR__} and \c{___NASM_PATCHLEVEL__} concatenated to
2963 produce a single doubleword. Hence, for 0.98.32p1, the returned number
2964 would be equivalent to:
2965
2966 \c         dd      0x00622001
2967
2968 or
2969
2970 \c         db      1,32,98,0
2971
2972 Note that the above lines are generate exactly the same code, the second
2973 line is used just to give an indication of the order that the separate
2974 values will be present in memory.
2975
2976
2977 \S{stdmacverstr} \i\c{__NASM_VER__}: \i{NASM Version string}
2978
2979 The single-line macro \c{__NASM_VER__} expands to a string which defines
2980 the version number of nasm being used. So, under NASM 0.98.32 for example,
2981
2982 \c         db      __NASM_VER__
2983
2984 would expand to
2985
2986 \c         db      "0.98.32"
2987
2988
2989 \S{fileline} \i\c{__FILE__} and \i\c{__LINE__}: File Name and Line Number
2990
2991 Like the C preprocessor, NASM allows the user to find out the file
2992 name and line number containing the current instruction. The macro
2993 \c{__FILE__} expands to a string constant giving the name of the
2994 current input file (which may change through the course of assembly
2995 if \c{%include} directives are used), and \c{__LINE__} expands to a
2996 numeric constant giving the current line number in the input file.
2997
2998 These macros could be used, for example, to communicate debugging
2999 information to a macro, since invoking \c{__LINE__} inside a macro
3000 definition (either single-line or multi-line) will return the line
3001 number of the macro \e{call}, rather than \e{definition}. So to
3002 determine where in a piece of code a crash is occurring, for
3003 example, one could write a routine \c{stillhere}, which is passed a
3004 line number in \c{EAX} and outputs something like `line 155: still
3005 here'. You could then write a macro
3006
3007 \c %macro  notdeadyet 0
3008 \c
3009 \c         push    eax
3010 \c         mov     eax,__LINE__
3011 \c         call    stillhere
3012 \c         pop     eax
3013 \c
3014 \c %endmacro
3015
3016 and then pepper your code with calls to \c{notdeadyet} until you
3017 find the crash point.
3018
3019 \S{bitsm} \i\c{__BITS__}: Current BITS Mode
3020
3021 The \c{__BITS__} standard macro is updated every time that the BITS mode is
3022 set using the \c{BITS XX} or \c{[BITS XX]} directive, where XX is a valid mode
3023 number of 16, 32 or 64. \c{__BITS__} receives the specified mode number and
3024 makes it globally available. This can be very useful for those who utilize
3025 mode-dependent macros.
3026
3027
3028 \S{struc} \i\c{STRUC} and \i\c{ENDSTRUC}: \i{Declaring Structure} Data Types
3029
3030 The core of NASM contains no intrinsic means of defining data
3031 structures; instead, the preprocessor is sufficiently powerful that
3032 data structures can be implemented as a set of macros. The macros
3033 \c{STRUC} and \c{ENDSTRUC} are used to define a structure data type.
3034
3035 \c{STRUC} takes one parameter, which is the name of the data type.
3036 This name is defined as a symbol with the value zero, and also has
3037 the suffix \c{_size} appended to it and is then defined as an
3038 \c{EQU} giving the size of the structure. Once \c{STRUC} has been
3039 issued, you are defining the structure, and should define fields
3040 using the \c{RESB} family of pseudo-instructions, and then invoke
3041 \c{ENDSTRUC} to finish the definition.
3042
3043 For example, to define a structure called \c{mytype} containing a
3044 longword, a word, a byte and a string of bytes, you might code
3045
3046 \c struc   mytype
3047 \c
3048 \c   mt_long:      resd    1
3049 \c   mt_word:      resw    1
3050 \c   mt_byte:      resb    1
3051 \c   mt_str:       resb    32
3052 \c
3053 \c endstruc
3054
3055 The above code defines six symbols: \c{mt_long} as 0 (the offset
3056 from the beginning of a \c{mytype} structure to the longword field),
3057 \c{mt_word} as 4, \c{mt_byte} as 6, \c{mt_str} as 7, \c{mytype_size}
3058 as 39, and \c{mytype} itself as zero.
3059
3060 The reason why the structure type name is defined at zero is a side
3061 effect of allowing structures to work with the local label
3062 mechanism: if your structure members tend to have the same names in
3063 more than one structure, you can define the above structure like this:
3064
3065 \c struc mytype
3066 \c
3067 \c   .long:        resd    1
3068 \c   .word:        resw    1
3069 \c   .byte:        resb    1
3070 \c   .str:         resb    32
3071 \c
3072 \c endstruc
3073
3074 This defines the offsets to the structure fields as \c{mytype.long},
3075 \c{mytype.word}, \c{mytype.byte} and \c{mytype.str}.
3076
3077 NASM, since it has no \e{intrinsic} structure support, does not
3078 support any form of period notation to refer to the elements of a
3079 structure once you have one (except the above local-label notation),
3080 so code such as \c{mov ax,[mystruc.mt_word]} is not valid.
3081 \c{mt_word} is a constant just like any other constant, so the
3082 correct syntax is \c{mov ax,[mystruc+mt_word]} or \c{mov
3083 ax,[mystruc+mytype.word]}.
3084
3085
3086 \S{istruc} \i\c{ISTRUC}, \i\c{AT} and \i\c{IEND}: Declaring
3087 \i{Instances of Structures}
3088
3089 Having defined a structure type, the next thing you typically want
3090 to do is to declare instances of that structure in your data
3091 segment. NASM provides an easy way to do this in the \c{ISTRUC}
3092 mechanism. To declare a structure of type \c{mytype} in a program,
3093 you code something like this:
3094
3095 \c mystruc:
3096 \c     istruc mytype
3097 \c
3098 \c         at mt_long, dd      123456
3099 \c         at mt_word, dw      1024
3100 \c         at mt_byte, db      'x'
3101 \c         at mt_str,  db      'hello, world', 13, 10, 0
3102 \c
3103 \c     iend
3104
3105 The function of the \c{AT} macro is to make use of the \c{TIMES}
3106 prefix to advance the assembly position to the correct point for the
3107 specified structure field, and then to declare the specified data.
3108 Therefore the structure fields must be declared in the same order as
3109 they were specified in the structure definition.
3110
3111 If the data to go in a structure field requires more than one source
3112 line to specify, the remaining source lines can easily come after
3113 the \c{AT} line. For example:
3114
3115 \c         at mt_str,  db      123,134,145,156,167,178,189
3116 \c                     db      190,100,0
3117
3118 Depending on personal taste, you can also omit the code part of the
3119 \c{AT} line completely, and start the structure field on the next
3120 line:
3121
3122 \c         at mt_str
3123 \c                 db      'hello, world'
3124 \c                 db      13,10,0
3125
3126
3127 \S{align} \i\c{ALIGN} and \i\c{ALIGNB}: Data Alignment
3128
3129 The \c{ALIGN} and \c{ALIGNB} macros provides a convenient way to
3130 align code or data on a word, longword, paragraph or other boundary.
3131 (Some assemblers call this directive \i\c{EVEN}.) The syntax of the
3132 \c{ALIGN} and \c{ALIGNB} macros is
3133
3134 \c         align   4               ; align on 4-byte boundary
3135 \c         align   16              ; align on 16-byte boundary
3136 \c         align   8,db 0          ; pad with 0s rather than NOPs
3137 \c         align   4,resb 1        ; align to 4 in the BSS
3138 \c         alignb  4               ; equivalent to previous line
3139
3140 Both macros require their first argument to be a power of two; they
3141 both compute the number of additional bytes required to bring the
3142 length of the current section up to a multiple of that power of two,
3143 and then apply the \c{TIMES} prefix to their second argument to
3144 perform the alignment.
3145
3146 If the second argument is not specified, the default for \c{ALIGN}
3147 is \c{NOP}, and the default for \c{ALIGNB} is \c{RESB 1}. So if the
3148 second argument is specified, the two macros are equivalent.
3149 Normally, you can just use \c{ALIGN} in code and data sections and
3150 \c{ALIGNB} in BSS sections, and never need the second argument
3151 except for special purposes.
3152
3153 \c{ALIGN} and \c{ALIGNB}, being simple macros, perform no error
3154 checking: they cannot warn you if their first argument fails to be a
3155 power of two, or if their second argument generates more than one
3156 byte of code. In each of these cases they will silently do the wrong
3157 thing.
3158
3159 \c{ALIGNB} (or \c{ALIGN} with a second argument of \c{RESB 1}) can
3160 be used within structure definitions:
3161
3162 \c struc mytype2
3163 \c
3164 \c   mt_byte:
3165 \c         resb 1
3166 \c         alignb 2
3167 \c   mt_word:
3168 \c         resw 1
3169 \c         alignb 4
3170 \c   mt_long:
3171 \c         resd 1
3172 \c   mt_str:
3173 \c         resb 32
3174 \c
3175 \c endstruc
3176
3177 This will ensure that the structure members are sensibly aligned
3178 relative to the base of the structure.
3179
3180 A final caveat: \c{ALIGN} and \c{ALIGNB} work relative to the
3181 beginning of the \e{section}, not the beginning of the address space
3182 in the final executable. Aligning to a 16-byte boundary when the
3183 section you're in is only guaranteed to be aligned to a 4-byte
3184 boundary, for example, is a waste of effort. Again, NASM does not
3185 check that the section's alignment characteristics are sensible for
3186 the use of \c{ALIGN} or \c{ALIGNB}.
3187
3188
3189 \H{tasmcompat} \i{TASM Compatible Preprocessor Directives}
3190
3191 The following preprocessor directives may only be used when TASM
3192 compatibility is turned on using the \c{-t} command line switch
3193 (This switch is described in \k{opt-t}.)
3194
3195 \b\c{%arg}  (see \k{arg})
3196
3197 \b\c{%stacksize}  (see \k{stacksize})
3198
3199 \b\c{%local}  (see \k{local})
3200
3201
3202 \S{arg} \i\c{%arg} Directive
3203
3204 The \c{%arg} directive is used to simplify the handling of
3205 parameters passed on the stack. Stack based parameter passing
3206 is used by many high level languages, including C, C++ and Pascal.
3207
3208 While NASM comes with macros which attempt to duplicate this
3209 functionality (see \k{16cmacro}), the syntax is not particularly
3210 convenient to use and is not TASM compatible. Here is an example
3211 which shows the use of \c{%arg} without any external macros:
3212
3213 \c some_function:
3214 \c
3215 \c     %push     mycontext        ; save the current context
3216 \c     %stacksize large           ; tell NASM to use bp
3217 \c     %arg      i:word, j_ptr:word
3218 \c
3219 \c         mov     ax,[i]
3220 \c         mov     bx,[j_ptr]
3221 \c         add     ax,[bx]
3222 \c         ret
3223 \c
3224 \c     %pop                       ; restore original context
3225
3226 This is similar to the procedure defined in \k{16cmacro} and adds
3227 the value in i to the value pointed to by j_ptr and returns the
3228 sum in the ax register. See \k{pushpop} for an explanation of
3229 \c{push} and \c{pop} and the use of context stacks.
3230
3231
3232 \S{stacksize} \i\c{%stacksize} Directive
3233
3234 The \c{%stacksize} directive is used in conjunction with the
3235 \c{%arg} (see \k{arg}) and the \c{%local} (see \k{local}) directives.
3236 It tells NASM the default size to use for subsequent \c{%arg} and
3237 \c{%local} directives. The \c{%stacksize} directive takes one
3238 required argument which is one of \c{flat}, \c{large} or \c{small}.
3239
3240 \c %stacksize flat
3241
3242 This form causes NASM to use stack-based parameter addressing
3243 relative to \c{ebp} and it assumes that a near form of call was used
3244 to get to this label (i.e. that \c{eip} is on the stack).
3245
3246 \c %stacksize large
3247
3248 This form uses \c{bp} to do stack-based parameter addressing and
3249 assumes that a far form of call was used to get to this address
3250 (i.e. that \c{ip} and \c{cs} are on the stack).
3251
3252 \c %stacksize small
3253
3254 This form also uses \c{bp} to address stack parameters, but it is
3255 different from \c{large} because it also assumes that the old value
3256 of bp is pushed onto the stack (i.e. it expects an \c{ENTER}
3257 instruction). In other words, it expects that \c{bp}, \c{ip} and
3258 \c{cs} are on the top of the stack, underneath any local space which
3259 may have been allocated by \c{ENTER}. This form is probably most
3260 useful when used in combination with the \c{%local} directive
3261 (see \k{local}).
3262
3263
3264 \S{local} \i\c{%local} Directive
3265
3266 The \c{%local} directive is used to simplify the use of local
3267 temporary stack variables allocated in a stack frame. Automatic
3268 local variables in C are an example of this kind of variable. The
3269 \c{%local} directive is most useful when used with the \c{%stacksize}
3270 (see \k{stacksize} and is also compatible with the \c{%arg} directive
3271 (see \k{arg}). It allows simplified reference to variables on the
3272 stack which have been allocated typically by using the \c{ENTER}
3273 instruction.
3274 \# (see \k{insENTER} for a description of that instruction).
3275 An example of its use is the following:
3276
3277 \c silly_swap:
3278 \c
3279 \c     %push mycontext             ; save the current context
3280 \c     %stacksize small            ; tell NASM to use bp
3281 \c     %assign %$localsize 0       ; see text for explanation
3282 \c     %local old_ax:word, old_dx:word
3283 \c
3284 \c         enter   %$localsize,0   ; see text for explanation
3285 \c         mov     [old_ax],ax     ; swap ax & bx
3286 \c         mov     [old_dx],dx     ; and swap dx & cx
3287 \c         mov     ax,bx
3288 \c         mov     dx,cx
3289 \c         mov     bx,[old_ax]
3290 \c         mov     cx,[old_dx]
3291 \c         leave                   ; restore old bp
3292 \c         ret                     ;
3293 \c
3294 \c     %pop                        ; restore original context
3295
3296 The \c{%$localsize} variable is used internally by the
3297 \c{%local} directive and \e{must} be defined within the
3298 current context before the \c{%local} directive may be used.
3299 Failure to do so will result in one expression syntax error for
3300 each \c{%local} variable declared. It then may be used in
3301 the construction of an appropriately sized ENTER instruction
3302 as shown in the example.
3303
3304 \H{otherpreproc} \i{Other Preprocessor Directives}
3305
3306 NASM also has preprocessor directives which allow access to
3307 information from external sources. Currently they include:
3308
3309 The following preprocessor directive is supported to allow NASM to
3310 correctly handle output of the cpp C language preprocessor.
3311
3312 \b\c{%line} enables NAsM to correctly handle the output of the cpp
3313 C language preprocessor (see \k{line}).
3314
3315 \b\c{%!} enables NASM to read in the value of an environment variable,
3316 which can then be used in your program (see \k{getenv}).
3317
3318 \S{line} \i\c{%line} Directive
3319
3320 The \c{%line} directive is used to notify NASM that the input line
3321 corresponds to a specific line number in another file.  Typically
3322 this other file would be an original source file, with the current
3323 NASM input being the output of a pre-processor.  The \c{%line}
3324 directive allows NASM to output messages which indicate the line
3325 number of the original source file, instead of the file that is being
3326 read by NASM.
3327
3328 This preprocessor directive is not generally of use to programmers,
3329 by may be of interest to preprocessor authors.  The usage of the
3330 \c{%line} preprocessor directive is as follows:
3331
3332 \c %line nnn[+mmm] [filename]
3333
3334 In this directive, \c{nnn} indentifies the line of the original source
3335 file which this line corresponds to.  \c{mmm} is an optional parameter
3336 which specifies a line increment value; each line of the input file
3337 read in is considered to correspond to \c{mmm} lines of the original
3338 source file.  Finally, \c{filename} is an optional parameter which
3339 specifies the file name of the original source file.
3340
3341 After reading a \c{%line} preprocessor directive, NASM will report
3342 all file name and line numbers relative to the values specified
3343 therein.
3344
3345
3346 \S{getenv} \i\c{%!}\c{<env>}: Read an environment variable.
3347
3348 The \c{%!<env>} directive makes it possible to read the value of an
3349 environment variable at assembly time. This could, for example, be used
3350 to store the contents of an environment variable into a string, which
3351 could be used at some other point in your code.
3352
3353 For example, suppose that you have an environment variable \c{FOO}, and
3354 you want the contents of \c{FOO} to be embedded in your program. You
3355 could do that as follows:
3356
3357 \c %define FOO    %!FOO
3358 \c %define quote   '
3359 \c
3360 \c tmpstr  db      quote FOO quote
3361
3362 At the time of writing, this will generate an "unterminated string"
3363 warning at the time of defining "quote", and it will add a space
3364 before and after the string that is read in. I was unable to find
3365 a simple workaround (although a workaround can be created using a
3366 multi-line macro), so I believe that you will need to either learn how
3367 to create more complex macros, or allow for the extra spaces if you
3368 make use of this feature in that way.
3369
3370
3371 \C{directive} \i{Assembler Directives}
3372
3373 NASM, though it attempts to avoid the bureaucracy of assemblers like
3374 MASM and TASM, is nevertheless forced to support a \e{few}
3375 directives. These are described in this chapter.
3376
3377 NASM's directives come in two types: \I{user-level
3378 directives}\e{user-level} directives and \I{primitive
3379 directives}\e{primitive} directives. Typically, each directive has a
3380 user-level form and a primitive form. In almost all cases, we
3381 recommend that users use the user-level forms of the directives,
3382 which are implemented as macros which call the primitive forms.
3383
3384 Primitive directives are enclosed in square brackets; user-level
3385 directives are not.
3386
3387 In addition to the universal directives described in this chapter,
3388 each object file format can optionally supply extra directives in
3389 order to control particular features of that file format. These
3390 \I{format-specific directives}\e{format-specific} directives are
3391 documented along with the formats that implement them, in \k{outfmt}.
3392
3393
3394 \H{bits} \i\c{BITS}: Specifying Target \i{Processor Mode}
3395
3396 The \c{BITS} directive specifies whether NASM should generate code
3397 \I{16-bit mode, versus 32-bit mode}designed to run on a processor
3398 operating in 16-bit mode, 32-bit mode or 64-bit mode. The syntax is
3399 \c{BITS XX}, where XX is 16, 32 or 64.
3400
3401 In most cases, you should not need to use \c{BITS} explicitly. The
3402 \c{aout}, \c{coff}, \c{elf}, \c{macho}, \c{win32} and \c{win64}
3403 object formats, which are designed for use in 32-bit or 64-bit
3404 operating systems, all cause NASM to select 32-bit or 64-bit mode,
3405 respectively, by default. The \c{obj} object format allows you
3406 to specify each segment you define as either \c{USE16} or \c{USE32},
3407 and NASM will set its operating mode accordingly, so the use of the
3408 \c{BITS} directive is once again unnecessary.
3409
3410 The most likely reason for using the \c{BITS} directive is to write
3411 32-bit or 64-bit code in a flat binary file; this is because the \c{bin}
3412 output format defaults to 16-bit mode in anticipation of it being
3413 used most frequently to write DOS \c{.COM} programs, DOS \c{.SYS}
3414 device drivers and boot loader software.
3415
3416 You do \e{not} need to specify \c{BITS 32} merely in order to use
3417 32-bit instructions in a 16-bit DOS program; if you do, the
3418 assembler will generate incorrect code because it will be writing
3419 code targeted at a 32-bit platform, to be run on a 16-bit one.
3420
3421 When NASM is in \c{BITS 16} mode, instructions which use 32-bit
3422 data are prefixed with an 0x66 byte, and those referring to 32-bit
3423 addresses have an 0x67 prefix. In \c{BITS 32} mode, the reverse is
3424 true: 32-bit instructions require no prefixes, whereas instructions
3425 using 16-bit data need an 0x66 and those working on 16-bit addresses
3426 need an 0x67.
3427
3428 When NASM is in \c{BITS 64} mode, most instructions operate the same
3429 as they do for \c{BITS 32} mode. However, 16-bit addresses are depreciated
3430 in the x86-64 architecture extension and the 0x67 prefix is used for 32-bit
3431 addressing. This is due to the default of 64-bit addressing. When the \c{REX}
3432 prefix is used, the processor does not know how to address the AH, BH, CH or
3433 DH (high 8-bit legacy) registers. This because the x86-64 has added a new
3434 set of registers and the capability to address the low 8-bits of the SP, BP
3435 SI and DI registers as SPL, BPL, SIL and DIL, respectively; but only when
3436 the REX prefix is used. In summary, the \c{REX} prefix causes the addressing
3437 of AH, BH, CH and DH to be replaced by SPL, BPL, SIL and DIL.
3438
3439 The \c{BITS} directive has an exactly equivalent primitive form,
3440 \c{[BITS 16]}, \c{[BITS 32]} and \c{[BITS 64]}. The user-level form is
3441 a macro which has no function other than to call the primitive form.
3442
3443 Note that the space is neccessary, e.g. \c{BITS32} will \e{not} work!
3444
3445 \S{USE16 & USE32} \i\c{USE16} & \i\c{USE32}: Aliases for BITS
3446
3447 The `\c{USE16}' and `\c{USE32}' directives can be used in place of
3448 `\c{BITS 16}' and `\c{BITS 32}', for compatibility with other assemblers.
3449
3450
3451 \H{default} \i\c{DEFAULT}: Change the assembler defaults
3452
3453 The \c{DEFAULT} directive changes the assembler defaults.  Normally,
3454 NASM defaults to a mode where the programmer is expected to explicitly
3455 specify most features directly.  However, this is occationally
3456 obnoxious, as the explicit form is pretty much the only one one wishes
3457 to use.
3458
3459 Currently, the only \c{DEFAULT} that is settable is whether or not
3460 registerless instructions in 64-bit mode are \c{RIP}-relative or not.
3461 By default, they are absolute unless overridden with the \i\c{REL}
3462 specifier (see \k{effaddr}).  However, if \c{DEFAULT REL} is
3463 specified, \c{REL} is default, unless overridden with the \c{ABS}
3464 specifier, \e{except when used with an FS or GS segment override}.
3465
3466 The special handling of \c{FS} and \c{GS} overrides are due to the
3467 fact that these registers are generally used as thread pointers or
3468 other special functions in 64-bit mode, and generating
3469 \c{RIP}-relative addresses would be extremely confusing.
3470
3471 \c{DEFAULT REL} is disabled with \c{DEFAULT ABS}.
3472
3473 \H{section} \i\c{SECTION} or \i\c{SEGMENT}: Changing and \i{Defining
3474 Sections}
3475
3476 \I{changing sections}\I{switching between sections}The \c{SECTION}
3477 directive (\c{SEGMENT} is an exactly equivalent synonym) changes
3478 which section of the output file the code you write will be
3479 assembled into. In some object file formats, the number and names of
3480 sections are fixed; in others, the user may make up as many as they
3481 wish. Hence \c{SECTION} may sometimes give an error message, or may
3482 define a new section, if you try to switch to a section that does
3483 not (yet) exist.
3484
3485 The Unix object formats, and the \c{bin} object format (but see
3486 \k{multisec}, all support
3487 the \i{standardized section names} \c{.text}, \c{.data} and \c{.bss}
3488 for the code, data and uninitialized-data sections. The \c{obj}
3489 format, by contrast, does not recognize these section names as being
3490 special, and indeed will strip off the leading period of any section
3491 name that has one.
3492
3493
3494 \S{sectmac} The \i\c{__SECT__} Macro
3495
3496 The \c{SECTION} directive is unusual in that its user-level form
3497 functions differently from its primitive form. The primitive form,
3498 \c{[SECTION xyz]}, simply switches the current target section to the
3499 one given. The user-level form, \c{SECTION xyz}, however, first
3500 defines the single-line macro \c{__SECT__} to be the primitive
3501 \c{[SECTION]} directive which it is about to issue, and then issues
3502 it. So the user-level directive
3503
3504 \c         SECTION .text
3505
3506 expands to the two lines
3507
3508 \c %define __SECT__        [SECTION .text]
3509 \c         [SECTION .text]
3510
3511 Users may find it useful to make use of this in their own macros.
3512 For example, the \c{writefile} macro defined in \k{mlmacgre} can be
3513 usefully rewritten in the following more sophisticated form:
3514
3515 \c %macro  writefile 2+
3516 \c
3517 \c         [section .data]
3518 \c
3519 \c   %%str:        db      %2
3520 \c   %%endstr:
3521 \c
3522 \c         __SECT__
3523 \c
3524 \c         mov     dx,%%str
3525 \c         mov     cx,%%endstr-%%str
3526 \c         mov     bx,%1
3527 \c         mov     ah,0x40
3528 \c         int     0x21
3529 \c
3530 \c %endmacro
3531
3532 This form of the macro, once passed a string to output, first
3533 switches temporarily to the data section of the file, using the
3534 primitive form of the \c{SECTION} directive so as not to modify
3535 \c{__SECT__}. It then declares its string in the data section, and
3536 then invokes \c{__SECT__} to switch back to \e{whichever} section
3537 the user was previously working in. It thus avoids the need, in the
3538 previous version of the macro, to include a \c{JMP} instruction to
3539 jump over the data, and also does not fail if, in a complicated
3540 \c{OBJ} format module, the user could potentially be assembling the
3541 code in any of several separate code sections.
3542
3543
3544 \H{absolute} \i\c{ABSOLUTE}: Defining Absolute Labels
3545
3546 The \c{ABSOLUTE} directive can be thought of as an alternative form
3547 of \c{SECTION}: it causes the subsequent code to be directed at no
3548 physical section, but at the hypothetical section starting at the
3549 given absolute address. The only instructions you can use in this
3550 mode are the \c{RESB} family.
3551
3552 \c{ABSOLUTE} is used as follows:
3553
3554 \c absolute 0x1A
3555 \c
3556 \c     kbuf_chr    resw    1
3557 \c     kbuf_free   resw    1
3558 \c     kbuf        resw    16
3559
3560 This example describes a section of the PC BIOS data area, at
3561 segment address 0x40: the above code defines \c{kbuf_chr} to be
3562 0x1A, \c{kbuf_free} to be 0x1C, and \c{kbuf} to be 0x1E.
3563
3564 The user-level form of \c{ABSOLUTE}, like that of \c{SECTION},
3565 redefines the \i\c{__SECT__} macro when it is invoked.
3566
3567 \i\c{STRUC} and \i\c{ENDSTRUC} are defined as macros which use
3568 \c{ABSOLUTE} (and also \c{__SECT__}).
3569
3570 \c{ABSOLUTE} doesn't have to take an absolute constant as an
3571 argument: it can take an expression (actually, a \i{critical
3572 expression}: see \k{crit}) and it can be a value in a segment. For
3573 example, a TSR can re-use its setup code as run-time BSS like this:
3574
3575 \c         org     100h               ; it's a .COM program
3576 \c
3577 \c         jmp     setup              ; setup code comes last
3578 \c
3579 \c         ; the resident part of the TSR goes here
3580 \c setup:
3581 \c         ; now write the code that installs the TSR here
3582 \c
3583 \c absolute setup
3584 \c
3585 \c runtimevar1     resw    1
3586 \c runtimevar2     resd    20
3587 \c
3588 \c tsr_end:
3589
3590 This defines some variables `on top of' the setup code, so that
3591 after the setup has finished running, the space it took up can be
3592 re-used as data storage for the running TSR. The symbol `tsr_end'
3593 can be used to calculate the total size of the part of the TSR that
3594 needs to be made resident.
3595
3596
3597 \H{extern} \i\c{EXTERN}: \i{Importing Symbols} from Other Modules
3598
3599 \c{EXTERN} is similar to the MASM directive \c{EXTRN} and the C
3600 keyword \c{extern}: it is used to declare a symbol which is not
3601 defined anywhere in the module being assembled, but is assumed to be
3602 defined in some other module and needs to be referred to by this
3603 one. Not every object-file format can support external variables:
3604 the \c{bin} format cannot.
3605
3606 The \c{EXTERN} directive takes as many arguments as you like. Each
3607 argument is the name of a symbol:
3608
3609 \c extern  _printf
3610 \c extern  _sscanf,_fscanf
3611
3612 Some object-file formats provide extra features to the \c{EXTERN}
3613 directive. In all cases, the extra features are used by suffixing a
3614 colon to the symbol name followed by object-format specific text.
3615 For example, the \c{obj} format allows you to declare that the
3616 default segment base of an external should be the group \c{dgroup}
3617 by means of the directive
3618
3619 \c extern  _variable:wrt dgroup
3620
3621 The primitive form of \c{EXTERN} differs from the user-level form
3622 only in that it can take only one argument at a time: the support
3623 for multiple arguments is implemented at the preprocessor level.
3624
3625 You can declare the same variable as \c{EXTERN} more than once: NASM
3626 will quietly ignore the second and later redeclarations. You can't
3627 declare a variable as \c{EXTERN} as well as something else, though.
3628
3629
3630 \H{global} \i\c{GLOBAL}: \i{Exporting Symbols} to Other Modules
3631
3632 \c{GLOBAL} is the other end of \c{EXTERN}: if one module declares a
3633 symbol as \c{EXTERN} and refers to it, then in order to prevent
3634 linker errors, some other module must actually \e{define} the
3635 symbol and declare it as \c{GLOBAL}. Some assemblers use the name
3636 \i\c{PUBLIC} for this purpose.
3637
3638 The \c{GLOBAL} directive applying to a symbol must appear \e{before}
3639 the definition of the symbol.
3640
3641 \c{GLOBAL} uses the same syntax as \c{EXTERN}, except that it must
3642 refer to symbols which \e{are} defined in the same module as the
3643 \c{GLOBAL} directive. For example:
3644
3645 \c global _main
3646 \c _main:
3647 \c         ; some code
3648
3649 \c{GLOBAL}, like \c{EXTERN}, allows object formats to define private
3650 extensions by means of a colon. The \c{elf} object format, for
3651 example, lets you specify whether global data items are functions or
3652 data:
3653
3654 \c global  hashlookup:function, hashtable:data
3655
3656 Like \c{EXTERN}, the primitive form of \c{GLOBAL} differs from the
3657 user-level form only in that it can take only one argument at a
3658 time.
3659
3660
3661 \H{common} \i\c{COMMON}: Defining Common Data Areas
3662
3663 The \c{COMMON} directive is used to declare \i\e{common variables}.
3664 A common variable is much like a global variable declared in the
3665 uninitialized data section, so that
3666
3667 \c common  intvar  4
3668
3669 is similar in function to
3670
3671 \c global  intvar
3672 \c section .bss
3673 \c
3674 \c intvar  resd    1
3675
3676 The difference is that if more than one module defines the same
3677 common variable, then at link time those variables will be
3678 \e{merged}, and references to \c{intvar} in all modules will point
3679 at the same piece of memory.
3680
3681 Like \c{GLOBAL} and \c{EXTERN}, \c{COMMON} supports object-format
3682 specific extensions. For example, the \c{obj} format allows common
3683 variables to be NEAR or FAR, and the \c{elf} format allows you to
3684 specify the alignment requirements of a common variable:
3685
3686 \c common  commvar  4:near  ; works in OBJ
3687 \c common  intarray 100:4   ; works in ELF: 4 byte aligned
3688
3689 Once again, like \c{EXTERN} and \c{GLOBAL}, the primitive form of
3690 \c{COMMON} differs from the user-level form only in that it can take
3691 only one argument at a time.
3692
3693
3694 \H{CPU} \i\c{CPU}: Defining CPU Dependencies
3695
3696 The \i\c{CPU} directive restricts assembly to those instructions which
3697 are available on the specified CPU.
3698
3699 Options are:
3700
3701 \b\c{CPU 8086}          Assemble only 8086 instruction set
3702
3703 \b\c{CPU 186}           Assemble instructions up to the 80186 instruction set
3704
3705 \b\c{CPU 286}           Assemble instructions up to the 286 instruction set
3706
3707 \b\c{CPU 386}           Assemble instructions up to the 386 instruction set
3708
3709 \b\c{CPU 486}           486 instruction set
3710
3711 \b\c{CPU 586}           Pentium instruction set
3712
3713 \b\c{CPU PENTIUM}       Same as 586
3714
3715 \b\c{CPU 686}           P6 instruction set
3716
3717 \b\c{CPU PPRO}          Same as 686
3718
3719 \b\c{CPU P2}            Same as 686
3720
3721 \b\c{CPU P3}            Pentium III (Katmai) instruction sets
3722
3723 \b\c{CPU KATMAI}        Same as P3
3724
3725 \b\c{CPU P4}            Pentium 4 (Willamette) instruction set
3726
3727 \b\c{CPU WILLAMETTE}    Same as P4
3728
3729 \b\c{CPU PRESCOTT}      Prescott instruction set
3730
3731 \b\c{CPU X64}           x86-64 (x64/AMD64/EM64T) instruction set
3732
3733 \b\c{CPU IA64}          IA64 CPU (in x86 mode) instruction set
3734
3735 All options are case insensitive.  All instructions will be selected
3736 only if they apply to the selected CPU or lower.  By default, all
3737 instructions are available.
3738
3739
3740 \C{outfmt} \i{Output Formats}
3741
3742 NASM is a portable assembler, designed to be able to compile on any
3743 ANSI C-supporting platform and produce output to run on a variety of
3744 Intel x86 operating systems. For this reason, it has a large number
3745 of available output formats, selected using the \i\c{-f} option on
3746 the NASM \i{command line}. Each of these formats, along with its
3747 extensions to the base NASM syntax, is detailed in this chapter.
3748
3749 As stated in \k{opt-o}, NASM chooses a \i{default name} for your
3750 output file based on the input file name and the chosen output
3751 format. This will be generated by removing the \i{extension}
3752 (\c{.asm}, \c{.s}, or whatever you like to use) from the input file
3753 name, and substituting an extension defined by the output format.
3754 The extensions are given with each format below.
3755
3756
3757 \H{binfmt} \i\c{bin}: \i{Flat-Form Binary}\I{pure binary} Output
3758
3759 The \c{bin} format does not produce object files: it generates
3760 nothing in the output file except the code you wrote. Such `pure
3761 binary' files are used by \i{MS-DOS}: \i\c{.COM} executables and
3762 \i\c{.SYS} device drivers are pure binary files. Pure binary output
3763 is also useful for \i{operating system} and \i{boot loader}
3764 development.
3765
3766 The \c{bin} format supports \i{multiple section names}. For details of
3767 how nasm handles sections in the \c{bin} format, see \k{multisec}.
3768
3769 Using the \c{bin} format puts NASM by default into 16-bit mode (see
3770 \k{bits}). In order to use \c{bin} to write 32-bit or 64-bit code,
3771 such as an OS kernel, you need to explicitly issue the \I\c{BITS}\c{BITS 32}
3772 or \I\c{BITS}\c{BITS 64} directive.
3773
3774 \c{bin} has no default output file name extension: instead, it
3775 leaves your file name as it is once the original extension has been
3776 removed. Thus, the default is for NASM to assemble \c{binprog.asm}
3777 into a binary file called \c{binprog}.
3778
3779
3780 \S{org} \i\c{ORG}: Binary File \i{Program Origin}
3781
3782 The \c{bin} format provides an additional directive to the list
3783 given in \k{directive}: \c{ORG}. The function of the \c{ORG}
3784 directive is to specify the origin address which NASM will assume
3785 the program begins at when it is loaded into memory.
3786
3787 For example, the following code will generate the longword
3788 \c{0x00000104}:
3789
3790 \c         org     0x100
3791 \c         dd      label
3792 \c label:
3793
3794 Unlike the \c{ORG} directive provided by MASM-compatible assemblers,
3795 which allows you to jump around in the object file and overwrite
3796 code you have already generated, NASM's \c{ORG} does exactly what
3797 the directive says: \e{origin}. Its sole function is to specify one
3798 offset which is added to all internal address references within the
3799 section; it does not permit any of the trickery that MASM's version
3800 does. See \k{proborg} for further comments.
3801
3802
3803 \S{binseg} \c{bin} Extensions to the \c{SECTION}
3804 Directive\I{SECTION, bin extensions to}
3805
3806 The \c{bin} output format extends the \c{SECTION} (or \c{SEGMENT})
3807 directive to allow you to specify the alignment requirements of
3808 segments. This is done by appending the \i\c{ALIGN} qualifier to the
3809 end of the section-definition line. For example,
3810
3811 \c section .data   align=16
3812
3813 switches to the section \c{.data} and also specifies that it must be
3814 aligned on a 16-byte boundary.
3815
3816 The parameter to \c{ALIGN} specifies how many low bits of the
3817 section start address must be forced to zero. The alignment value
3818 given may be any power of two.\I{section alignment, in
3819 bin}\I{segment alignment, in bin}\I{alignment, in bin sections}
3820
3821
3822 \S{multisec} \i\c{Multisection}\I{bin, multisection} support for the BIN format.
3823
3824 The \c{bin} format allows the use of multiple sections, of arbitrary names, 
3825 besides the "known" \c{.text}, \c{.data}, and \c{.bss} names.
3826
3827 \b Sections may be designated \i\c{progbits} or \i\c{nobits}. Default 
3828 is \c{progbits} (except \c{.bss}, which defaults to \c{nobits}, 
3829 of course).
3830
3831 \b Sections can be aligned at a specified boundary following the previous 
3832 section with \c{align=}, or at an arbitrary byte-granular position with 
3833 \i\c{start=}.
3834
3835 \b Sections can be given a virtual start address, which will be used 
3836 for the calculation of all memory references within that section 
3837 with \i\c{vstart=}.
3838
3839 \b Sections can be ordered using \i\c{follows=}\c{<section>} or 
3840 \i\c{vfollows=}\c{<section>} as an alternative to specifying an explicit 
3841 start address.
3842
3843 \b Arguments to \c{org}, \c{start}, \c{vstart}, and \c{align=} are 
3844 critical expressions. See \k{crit}. E.g. \c{align=(1 << ALIGN_SHIFT)} 
3845 - \c{ALIGN_SHIFT} must be defined before it is used here.
3846
3847 \b Any code which comes before an explicit \c{SECTION} directive
3848 is directed by default into the \c{.text} section.
3849
3850 \b If an \c{ORG} statement is not given, \c{ORG 0} is used 
3851 by default.
3852
3853 \b The \c{.bss} section will be placed after the last \c{progbits} 
3854 section, unless \c{start=}, \c{vstart=}, \c{follows=}, or \c{vfollows=} 
3855 has been specified.
3856
3857 \b All sections are aligned on dword boundaries, unless a different 
3858 alignment has been specified.
3859
3860 \b Sections may not overlap.
3861
3862 \b Nasm creates the \c{section.<secname>.start} for each section, 
3863 which may be used in your code.
3864
3865 \S{map}\i{Map files}
3866
3867 Map files can be generated in \c{-f bin} format by means of the \c{[map]} 
3868 option. Map types of \c{all} (default), \c{brief}, \c{sections}, \c{segments}, 
3869 or \c{symbols} may be specified. Output may be directed to \c{stdout} 
3870 (default), \c{stderr}, or a specified file. E.g.
3871 \c{[map symbols myfile.map]}. No "user form" exists, the square
3872 brackets must be used.
3873
3874
3875 \H{objfmt} \i\c{obj}: \i{Microsoft OMF}\I{OMF} Object Files
3876
3877 The \c{obj} file format (NASM calls it \c{obj} rather than \c{omf}
3878 for historical reasons) is the one produced by \i{MASM} and
3879 \i{TASM}, which is typically fed to 16-bit DOS linkers to produce
3880 \i\c{.EXE} files. It is also the format used by \i{OS/2}.
3881
3882 \c{obj} provides a default output file-name extension of \c{.obj}.
3883
3884 \c{obj} is not exclusively a 16-bit format, though: NASM has full
3885 support for the 32-bit extensions to the format. In particular,
3886 32-bit \c{obj} format files are used by \i{Borland's Win32
3887 compilers}, instead of using Microsoft's newer \i\c{win32} object
3888 file format.
3889
3890 The \c{obj} format does not define any special segment names: you
3891 can call your segments anything you like. Typical names for segments
3892 in \c{obj} format files are \c{CODE}, \c{DATA} and \c{BSS}.
3893
3894 If your source file contains code before specifying an explicit
3895 \c{SEGMENT} directive, then NASM will invent its own segment called
3896 \i\c{__NASMDEFSEG} for you.
3897
3898 When you define a segment in an \c{obj} file, NASM defines the
3899 segment name as a symbol as well, so that you can access the segment
3900 address of the segment. So, for example:
3901
3902 \c segment data
3903 \c
3904 \c dvar:   dw      1234
3905 \c
3906 \c segment code
3907 \c
3908 \c function:
3909 \c         mov     ax,data         ; get segment address of data
3910 \c         mov     ds,ax           ; and move it into DS
3911 \c         inc     word [dvar]     ; now this reference will work
3912 \c         ret
3913
3914 The \c{obj} format also enables the use of the \i\c{SEG} and
3915 \i\c{WRT} operators, so that you can write code which does things
3916 like
3917
3918 \c extern  foo
3919 \c
3920 \c       mov   ax,seg foo            ; get preferred segment of foo
3921 \c       mov   ds,ax
3922 \c       mov   ax,data               ; a different segment
3923 \c       mov   es,ax
3924 \c       mov   ax,[ds:foo]           ; this accesses `foo'
3925 \c       mov   [es:foo wrt data],bx  ; so does this
3926
3927
3928 \S{objseg} \c{obj} Extensions to the \c{SEGMENT}
3929 Directive\I{SEGMENT, obj extensions to}
3930
3931 The \c{obj} output format extends the \c{SEGMENT} (or \c{SECTION})
3932 directive to allow you to specify various properties of the segment
3933 you are defining. This is done by appending extra qualifiers to the
3934 end of the segment-definition line. For example,
3935
3936 \c segment code private align=16
3937
3938 defines the segment \c{code}, but also declares it to be a private
3939 segment, and requires that the portion of it described in this code
3940 module must be aligned on a 16-byte boundary.
3941
3942 The available qualifiers are:
3943
3944 \b \i\c{PRIVATE}, \i\c{PUBLIC}, \i\c{COMMON} and \i\c{STACK} specify
3945 the combination characteristics of the segment. \c{PRIVATE} segments
3946 do not get combined with any others by the linker; \c{PUBLIC} and
3947 \c{STACK} segments get concatenated together at link time; and
3948 \c{COMMON} segments all get overlaid on top of each other rather
3949 than stuck end-to-end.
3950
3951 \b \i\c{ALIGN} is used, as shown above, to specify how many low bits
3952 of the segment start address must be forced to zero. The alignment
3953 value given may be any power of two from 1 to 4096; in reality, the
3954 only values supported are 1, 2, 4, 16, 256 and 4096, so if 8 is
3955 specified it will be rounded up to 16, and 32, 64 and 128 will all
3956 be rounded up to 256, and so on. Note that alignment to 4096-byte
3957 boundaries is a \i{PharLap} extension to the format and may not be
3958 supported by all linkers.\I{section alignment, in OBJ}\I{segment
3959 alignment, in OBJ}\I{alignment, in OBJ sections}
3960
3961 \b \i\c{CLASS} can be used to specify the segment class; this feature
3962 indicates to the linker that segments of the same class should be
3963 placed near each other in the output file. The class name can be any
3964 word, e.g. \c{CLASS=CODE}.
3965
3966 \b \i\c{OVERLAY}, like \c{CLASS}, is specified with an arbitrary word
3967 as an argument, and provides overlay information to an
3968 overlay-capable linker.
3969
3970 \b Segments can be declared as \i\c{USE16} or \i\c{USE32}, which has
3971 the effect of recording the choice in the object file and also
3972 ensuring that NASM's default assembly mode when assembling in that
3973 segment is 16-bit or 32-bit respectively.
3974
3975 \b When writing \i{OS/2} object files, you should declare 32-bit
3976 segments as \i\c{FLAT}, which causes the default segment base for
3977 anything in the segment to be the special group \c{FLAT}, and also
3978 defines the group if it is not already defined.
3979
3980 \b The \c{obj} file format also allows segments to be declared as
3981 having a pre-defined absolute segment address, although no linkers
3982 are currently known to make sensible use of this feature;
3983 nevertheless, NASM allows you to declare a segment such as
3984 \c{SEGMENT SCREEN ABSOLUTE=0xB800} if you need to. The \i\c{ABSOLUTE}
3985 and \c{ALIGN} keywords are mutually exclusive.
3986
3987 NASM's default segment attributes are \c{PUBLIC}, \c{ALIGN=1}, no
3988 class, no overlay, and \c{USE16}.
3989
3990
3991 \S{group} \i\c{GROUP}: Defining Groups of Segments\I{segments, groups of}
3992
3993 The \c{obj} format also allows segments to be grouped, so that a
3994 single segment register can be used to refer to all the segments in
3995 a group. NASM therefore supplies the \c{GROUP} directive, whereby
3996 you can code
3997
3998 \c segment data
3999 \c
4000 \c         ; some data
4001 \c
4002 \c segment bss
4003 \c
4004 \c         ; some uninitialized data
4005 \c
4006 \c group dgroup data bss
4007
4008 which will define a group called \c{dgroup} to contain the segments
4009 \c{data} and \c{bss}. Like \c{SEGMENT}, \c{GROUP} causes the group
4010 name to be defined as a symbol, so that you can refer to a variable
4011 \c{var} in the \c{data} segment as \c{var wrt data} or as \c{var wrt
4012 dgroup}, depending on which segment value is currently in your
4013 segment register.
4014
4015 If you just refer to \c{var}, however, and \c{var} is declared in a
4016 segment which is part of a group, then NASM will default to giving
4017 you the offset of \c{var} from the beginning of the \e{group}, not
4018 the \e{segment}. Therefore \c{SEG var}, also, will return the group
4019 base rather than the segment base.
4020
4021 NASM will allow a segment to be part of more than one group, but
4022 will generate a warning if you do this. Variables declared in a
4023 segment which is part of more than one group will default to being
4024 relative to the first group that was defined to contain the segment.
4025
4026 A group does not have to contain any segments; you can still make
4027 \c{WRT} references to a group which does not contain the variable
4028 you are referring to. OS/2, for example, defines the special group
4029 \c{FLAT} with no segments in it.
4030
4031
4032 \S{uppercase} \i\c{UPPERCASE}: Disabling Case Sensitivity in Output
4033
4034 Although NASM itself is \i{case sensitive}, some OMF linkers are
4035 not; therefore it can be useful for NASM to output single-case
4036 object files. The \c{UPPERCASE} format-specific directive causes all
4037 segment, group and symbol names that are written to the object file
4038 to be forced to upper case just before being written. Within a
4039 source file, NASM is still case-sensitive; but the object file can
4040 be written entirely in upper case if desired.
4041
4042 \c{UPPERCASE} is used alone on a line; it requires no parameters.
4043
4044
4045 \S{import} \i\c{IMPORT}: Importing DLL Symbols\I{DLL symbols,
4046 importing}\I{symbols, importing from DLLs}
4047
4048 The \c{IMPORT} format-specific directive defines a symbol to be
4049 imported from a DLL, for use if you are writing a DLL's \i{import
4050 library} in NASM. You still need to declare the symbol as \c{EXTERN}
4051 as well as using the \c{IMPORT} directive.
4052
4053 The \c{IMPORT} directive takes two required parameters, separated by
4054 white space, which are (respectively) the name of the symbol you
4055 wish to import and the name of the library you wish to import it
4056 from. For example:
4057
4058 \c     import  WSAStartup wsock32.dll
4059
4060 A third optional parameter gives the name by which the symbol is
4061 known in the library you are importing it from, in case this is not
4062 the same as the name you wish the symbol to be known by to your code
4063 once you have imported it. For example:
4064
4065 \c     import  asyncsel wsock32.dll WSAAsyncSelect
4066
4067
4068 \S{export} \i\c{EXPORT}: Exporting DLL Symbols\I{DLL symbols,
4069 exporting}\I{symbols, exporting from DLLs}
4070
4071 The \c{EXPORT} format-specific directive defines a global symbol to
4072 be exported as a DLL symbol, for use if you are writing a DLL in
4073 NASM. You still need to declare the symbol as \c{GLOBAL} as well as
4074 using the \c{EXPORT} directive.
4075
4076 \c{EXPORT} takes one required parameter, which is the name of the
4077 symbol you wish to export, as it was defined in your source file. An
4078 optional second parameter (separated by white space from the first)
4079 gives the \e{external} name of the symbol: the name by which you
4080 wish the symbol to be known to programs using the DLL. If this name
4081 is the same as the internal name, you may leave the second parameter
4082 off.
4083
4084 Further parameters can be given to define attributes of the exported
4085 symbol. These parameters, like the second, are separated by white
4086 space. If further parameters are given, the external name must also
4087 be specified, even if it is the same as the internal name. The
4088 available attributes are:
4089
4090 \b \c{resident} indicates that the exported name is to be kept
4091 resident by the system loader. This is an optimisation for
4092 frequently used symbols imported by name.
4093
4094 \b \c{nodata} indicates that the exported symbol is a function which
4095 does not make use of any initialized data.
4096
4097 \b \c{parm=NNN}, where \c{NNN} is an integer, sets the number of
4098 parameter words for the case in which the symbol is a call gate
4099 between 32-bit and 16-bit segments.
4100
4101 \b An attribute which is just a number indicates that the symbol
4102 should be exported with an identifying number (ordinal), and gives
4103 the desired number.
4104
4105 For example:
4106
4107 \c     export  myfunc
4108 \c     export  myfunc TheRealMoreFormalLookingFunctionName
4109 \c     export  myfunc myfunc 1234  ; export by ordinal
4110 \c     export  myfunc myfunc resident parm=23 nodata
4111
4112
4113 \S{dotdotstart} \i\c{..start}: Defining the \i{Program Entry
4114 Point}
4115
4116 \c{OMF} linkers require exactly one of the object files being linked to
4117 define the program entry point, where execution will begin when the
4118 program is run. If the object file that defines the entry point is
4119 assembled using NASM, you specify the entry point by declaring the
4120 special symbol \c{..start} at the point where you wish execution to
4121 begin.
4122
4123
4124 \S{objextern} \c{obj} Extensions to the \c{EXTERN}
4125 Directive\I{EXTERN, obj extensions to}
4126
4127 If you declare an external symbol with the directive
4128
4129 \c     extern  foo
4130
4131 then references such as \c{mov ax,foo} will give you the offset of
4132 \c{foo} from its preferred segment base (as specified in whichever
4133 module \c{foo} is actually defined in). So to access the contents of
4134 \c{foo} you will usually need to do something like
4135
4136 \c         mov     ax,seg foo      ; get preferred segment base
4137 \c         mov     es,ax           ; move it into ES
4138 \c         mov     ax,[es:foo]     ; and use offset `foo' from it
4139
4140 This is a little unwieldy, particularly if you know that an external
4141 is going to be accessible from a given segment or group, say
4142 \c{dgroup}. So if \c{DS} already contained \c{dgroup}, you could
4143 simply code
4144
4145 \c         mov     ax,[foo wrt dgroup]
4146
4147 However, having to type this every time you want to access \c{foo}
4148 can be a pain; so NASM allows you to declare \c{foo} in the
4149 alternative form
4150
4151 \c     extern  foo:wrt dgroup
4152
4153 This form causes NASM to pretend that the preferred segment base of
4154 \c{foo} is in fact \c{dgroup}; so the expression \c{seg foo} will
4155 now return \c{dgroup}, and the expression \c{foo} is equivalent to
4156 \c{foo wrt dgroup}.
4157
4158 This \I{default-WRT mechanism}default-\c{WRT} mechanism can be used
4159 to make externals appear to be relative to any group or segment in
4160 your program. It can also be applied to common variables: see
4161 \k{objcommon}.
4162
4163
4164 \S{objcommon} \c{obj} Extensions to the \c{COMMON}
4165 Directive\I{COMMON, obj extensions to}
4166
4167 The \c{obj} format allows common variables to be either near\I{near
4168 common variables} or far\I{far common variables}; NASM allows you to
4169 specify which your variables should be by the use of the syntax
4170
4171 \c common  nearvar 2:near   ; `nearvar' is a near common
4172 \c common  farvar  10:far   ; and `farvar' is far
4173
4174 Far common variables may be greater in size than 64Kb, and so the
4175 OMF specification says that they are declared as a number of
4176 \e{elements} of a given size. So a 10-byte far common variable could
4177 be declared as ten one-byte elements, five two-byte elements, two
4178 five-byte elements or one ten-byte element.
4179
4180 Some \c{OMF} linkers require the \I{element size, in common
4181 variables}\I{common variables, element size}element size, as well as
4182 the variable size, to match when resolving common variables declared
4183 in more than one module. Therefore NASM must allow you to specify
4184 the element size on your far common variables. This is done by the
4185 following syntax:
4186
4187 \c common  c_5by2  10:far 5        ; two five-byte elements
4188 \c common  c_2by5  10:far 2        ; five two-byte elements
4189
4190 If no element size is specified, the default is 1. Also, the \c{FAR}
4191 keyword is not required when an element size is specified, since
4192 only far commons may have element sizes at all. So the above
4193 declarations could equivalently be
4194
4195 \c common  c_5by2  10:5            ; two five-byte elements
4196 \c common  c_2by5  10:2            ; five two-byte elements
4197
4198 In addition to these extensions, the \c{COMMON} directive in \c{obj}
4199 also supports default-\c{WRT} specification like \c{EXTERN} does
4200 (explained in \k{objextern}). So you can also declare things like
4201
4202 \c common  foo     10:wrt dgroup
4203 \c common  bar     16:far 2:wrt data
4204 \c common  baz     24:wrt data:6
4205
4206
4207 \H{win32fmt} \i\c{win32}: Microsoft Win32 Object Files
4208
4209 The \c{win32} output format generates Microsoft Win32 object files,
4210 suitable for passing to Microsoft linkers such as \i{Visual C++}.
4211 Note that Borland Win32 compilers do not use this format, but use
4212 \c{obj} instead (see \k{objfmt}).
4213
4214 \c{win32} provides a default output file-name extension of \c{.obj}.
4215
4216 Note that although Microsoft say that Win32 object files follow the
4217 \c{COFF} (Common Object File Format) standard, the object files produced
4218 by Microsoft Win32 compilers are not compatible with COFF linkers
4219 such as DJGPP's, and vice versa. This is due to a difference of
4220 opinion over the precise semantics of PC-relative relocations. To
4221 produce COFF files suitable for DJGPP, use NASM's \c{coff} output
4222 format; conversely, the \c{coff} format does not produce object
4223 files that Win32 linkers can generate correct output from.
4224
4225
4226 \S{win32sect} \c{win32} Extensions to the \c{SECTION}
4227 Directive\I{SECTION, win32 extensions to}
4228
4229 Like the \c{obj} format, \c{win32} allows you to specify additional
4230 information on the \c{SECTION} directive line, to control the type
4231 and properties of sections you declare. Section types and properties
4232 are generated automatically by NASM for the \i{standard section names}
4233 \c{.text}, \c{.data} and \c{.bss}, but may still be overridden by
4234 these qualifiers.
4235
4236 The available qualifiers are:
4237
4238 \b \c{code}, or equivalently \c{text}, defines the section to be a
4239 code section. This marks the section as readable and executable, but
4240 not writable, and also indicates to the linker that the type of the
4241 section is code.
4242
4243 \b \c{data} and \c{bss} define the section to be a data section,
4244 analogously to \c{code}. Data sections are marked as readable and
4245 writable, but not executable. \c{data} declares an initialized data
4246 section, whereas \c{bss} declares an uninitialized data section.
4247
4248 \b \c{rdata} declares an initialized data section that is readable
4249 but not writable. Microsoft compilers use this section to place
4250 constants in it.
4251
4252 \b \c{info} defines the section to be an \i{informational section},
4253 which is not included in the executable file by the linker, but may
4254 (for example) pass information \e{to} the linker. For example,
4255 declaring an \c{info}-type section called \i\c{.drectve} causes the
4256 linker to interpret the contents of the section as command-line
4257 options.
4258
4259 \b \c{align=}, used with a trailing number as in \c{obj}, gives the
4260 \I{section alignment, in win32}\I{alignment, in win32
4261 sections}alignment requirements of the section. The maximum you may
4262 specify is 64: the Win32 object file format contains no means to
4263 request a greater section alignment than this. If alignment is not
4264 explicitly specified, the defaults are 16-byte alignment for code
4265 sections, 8-byte alignment for rdata sections and 4-byte alignment
4266 for data (and BSS) sections.
4267 Informational sections get a default alignment of 1 byte (no
4268 alignment), though the value does not matter.
4269
4270 The defaults assumed by NASM if you do not specify the above
4271 qualifiers are:
4272
4273 \c section .text    code  align=16
4274 \c section .data    data  align=4
4275 \c section .rdata   rdata align=8
4276 \c section .bss     bss   align=4
4277
4278 Any other section name is treated by default like \c{.text}.
4279
4280
4281 \H{win64fmt} \i\c{win64}: Microsoft Win64 Object Files
4282
4283 The \c{win64} output format generates Microsoft Win64 object files, 
4284 which is nearly 100% indentical to the \c{win32} object format (\k{win32fmt})
4285 with the exception that it is meant to target 64-bit code and the x86-64
4286 platform altogether. This object file is used exactly the same as the \c{win32}
4287 object format (\k{win32fmt}), in NASM, with regard to this exception.
4288
4289
4290 \H{cofffmt} \i\c{coff}: \i{Common Object File Format}
4291
4292 The \c{coff} output type produces \c{COFF} object files suitable for
4293 linking with the \i{DJGPP} linker.
4294
4295 \c{coff} provides a default output file-name extension of \c{.o}.
4296
4297 The \c{coff} format supports the same extensions to the \c{SECTION}
4298 directive as \c{win32} does, except that the \c{align} qualifier and
4299 the \c{info} section type are not supported.
4300
4301 \H{machofmt} \i\c{macho}: \i{Mach Object File Format}
4302
4303 The \c{macho} output type produces \c{Mach-O} object files suitable for
4304 linking with the \i{Mac OSX} linker.
4305
4306 \c{macho} provides a default output file-name extension of \c{.o}.
4307
4308 \H{elffmt} \i\c{elf, elf32, and elf64}: \I{ELF}\I{linux, elf}\i{Executable and Linkable
4309 Format} Object Files
4310
4311 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},
4312 including \i{Solaris x86}, \i{UnixWare} and \i{SCO Unix}. \c{elf}
4313 provides a default output file-name extension of \c{.o}. \c{elf} is a synonym for \c{elf32}.
4314
4315
4316 \S{elfsect} \c{elf} Extensions to the \c{SECTION}
4317 Directive\I{SECTION, elf extensions to}
4318
4319 Like the \c{obj} format, \c{elf} allows you to specify additional
4320 information on the \c{SECTION} directive line, to control the type
4321 and properties of sections you declare. Section types and properties
4322 are generated automatically by NASM for the \i{standard section
4323 names} \i\c{.text}, \i\c{.data} and \i\c{.bss}, but may still be
4324 overridden by these qualifiers.
4325
4326 The available qualifiers are:
4327
4328 \b \i\c{alloc} defines the section to be one which is loaded into
4329 memory when the program is run. \i\c{noalloc} defines it to be one
4330 which is not, such as an informational or comment section.
4331
4332 \b \i\c{exec} defines the section to be one which should have execute
4333 permission when the program is run. \i\c{noexec} defines it as one
4334 which should not.
4335
4336 \b \i\c{write} defines the section to be one which should be writable
4337 when the program is run. \i\c{nowrite} defines it as one which should
4338 not.
4339
4340 \b \i\c{progbits} defines the section to be one with explicit contents
4341 stored in the object file: an ordinary code or data section, for
4342 example, \i\c{nobits} defines the section to be one with no explicit
4343 contents given, such as a BSS section.
4344
4345 \b \c{align=}, used with a trailing number as in \c{obj}, gives the
4346 \I{section alignment, in elf}\I{alignment, in elf sections}alignment
4347 requirements of the section.
4348
4349 The defaults assumed by NASM if you do not specify the above
4350 qualifiers are:
4351
4352 \c section .text    progbits  alloc  exec    nowrite  align=16
4353 \c section .rodata  progbits  alloc  noexec  nowrite  align=4
4354 \c section .data    progbits  alloc  noexec  write    align=4
4355 \c section .bss     nobits    alloc  noexec  write    align=4
4356 \c section other    progbits  alloc  noexec  nowrite  align=1
4357
4358 (Any section name other than \c{.text}, \c{.rodata}, \c{.data} and
4359 \c{.bss} is treated by default like \c{other} in the above code.)
4360
4361
4362 \S{elfwrt} \i{Position-Independent Code}\I{PIC}: \c{elf} Special
4363 Symbols and \i\c{WRT}
4364
4365 The \c{ELF} specification contains enough features to allow
4366 position-independent code (PIC) to be written, which makes \i{ELF
4367 shared libraries} very flexible. However, it also means NASM has to
4368 be able to generate a variety of strange relocation types in ELF
4369 object files, if it is to be an assembler which can write PIC.
4370
4371 Since \c{ELF} does not support segment-base references, the \c{WRT}
4372 operator is not used for its normal purpose; therefore NASM's
4373 \c{elf} output format makes use of \c{WRT} for a different purpose,
4374 namely the PIC-specific \I{relocations, PIC-specific}relocation
4375 types.
4376
4377 \c{elf} defines five special symbols which you can use as the
4378 right-hand side of the \c{WRT} operator to obtain PIC relocation
4379 types. They are \i\c{..gotpc}, \i\c{..gotoff}, \i\c{..got},
4380 \i\c{..plt} and \i\c{..sym}. Their functions are summarized here:
4381
4382 \b Referring to the symbol marking the global offset table base
4383 using \c{wrt ..gotpc} will end up giving the distance from the
4384 beginning of the current section to the global offset table.
4385 (\i\c{_GLOBAL_OFFSET_TABLE_} is the standard symbol name used to
4386 refer to the \i{GOT}.) So you would then need to add \i\c{$$} to the
4387 result to get the real address of the GOT.
4388
4389 \b Referring to a location in one of your own sections using \c{wrt
4390 ..gotoff} will give the distance from the beginning of the GOT to
4391 the specified location, so that adding on the address of the GOT
4392 would give the real address of the location you wanted.
4393
4394 \b Referring to an external or global symbol using \c{wrt ..got}
4395 causes the linker to build an entry \e{in} the GOT containing the
4396 address of the symbol, and the reference gives the distance from the
4397 beginning of the GOT to the entry; so you can add on the address of
4398 the GOT, load from the resulting address, and end up with the
4399 address of the symbol.
4400
4401 \b Referring to a procedure name using \c{wrt ..plt} causes the
4402 linker to build a \i{procedure linkage table} entry for the symbol,
4403 and the reference gives the address of the \i{PLT} entry. You can
4404 only use this in contexts which would generate a PC-relative
4405 relocation normally (i.e. as the destination for \c{CALL} or
4406 \c{JMP}), since ELF contains no relocation type to refer to PLT
4407 entries absolutely.
4408
4409 \b Referring to a symbol name using \c{wrt ..sym} causes NASM to
4410 write an ordinary relocation, but instead of making the relocation
4411 relative to the start of the section and then adding on the offset
4412 to the symbol, it will write a relocation record aimed directly at
4413 the symbol in question. The distinction is a necessary one due to a
4414 peculiarity of the dynamic linker.
4415
4416 A fuller explanation of how to use these relocation types to write
4417 shared libraries entirely in NASM is given in \k{picdll}.
4418
4419
4420 \S{elfglob} \c{elf} Extensions to the \c{GLOBAL} Directive\I{GLOBAL,
4421 elf extensions to}\I{GLOBAL, aoutb extensions to}
4422
4423 \c{ELF} object files can contain more information about a global symbol
4424 than just its address: they can contain the \I{symbol sizes,
4425 specifying}\I{size, of symbols}size of the symbol and its \I{symbol
4426 types, specifying}\I{type, of symbols}type as well. These are not
4427 merely debugger conveniences, but are actually necessary when the
4428 program being written is a \i{shared library}. NASM therefore
4429 supports some extensions to the \c{GLOBAL} directive, allowing you
4430 to specify these features.
4431
4432 You can specify whether a global variable is a function or a data
4433 object by suffixing the name with a colon and the word
4434 \i\c{function} or \i\c{data}. (\i\c{object} is a synonym for
4435 \c{data}.) For example:
4436
4437 \c global   hashlookup:function, hashtable:data
4438
4439 exports the global symbol \c{hashlookup} as a function and
4440 \c{hashtable} as a data object.
4441
4442 Optionally, you can control the ELF visibility of the symbol.  Just
4443 add one of the visibility keywords: \i\c{default}, \i\c{internal},
4444 \i\c{hidden}, or \i\c{protected}.  The default is \i\c{default} of
4445 course.  For example, to make \c{hashlookup} hidden:
4446
4447 \c global   hashlookup:function hidden
4448
4449 You can also specify the size of the data associated with the
4450 symbol, as a numeric expression (which may involve labels, and even
4451 forward references) after the type specifier. Like this:
4452
4453 \c global  hashtable:data (hashtable.end - hashtable)
4454 \c
4455 \c hashtable:
4456 \c         db this,that,theother  ; some data here
4457 \c .end:
4458
4459 This makes NASM automatically calculate the length of the table and
4460 place that information into the \c{ELF} symbol table.
4461
4462 Declaring the type and size of global symbols is necessary when
4463 writing shared library code. For more information, see
4464 \k{picglobal}.
4465
4466
4467 \S{elfcomm} \c{elf} Extensions to the \c{COMMON} Directive
4468 \I{COMMON, elf extensions to}
4469
4470 \c{ELF} also allows you to specify alignment requirements \I{common
4471 variables, alignment in elf}\I{alignment, of elf common variables}on
4472 common variables. This is done by putting a number (which must be a
4473 power of two) after the name and size of the common variable,
4474 separated (as usual) by a colon. For example, an array of
4475 doublewords would benefit from 4-byte alignment:
4476
4477 \c common  dwordarray 128:4
4478
4479 This declares the total size of the array to be 128 bytes, and
4480 requires that it be aligned on a 4-byte boundary.
4481
4482
4483 \S{elf16} 16-bit code and ELF
4484 \I{ELF, 16-bit code and}
4485
4486 The \c{ELF32} specification doesn't provide relocations for 8- and
4487 16-bit values, but the GNU \c{ld} linker adds these as an extension.
4488 NASM can generate GNU-compatible relocations, to allow 16-bit code to
4489 be linked as ELF using GNU \c{ld}. If NASM is used with the
4490 \c{-w+gnu-elf-extensions} option, a warning is issued when one of
4491 these relocations is generated.
4492
4493 \H{aoutfmt} \i\c{aout}: Linux \I{a.out, Linux version}\I{linux, a.out}\c{a.out} Object Files
4494
4495 The \c{aout} format generates \c{a.out} object files, in the form used
4496 by early Linux systems (current Linux systems use ELF, see
4497 \k{elffmt}.) These differ from other \c{a.out} object files in that
4498 the magic number in the first four bytes of the file is
4499 different; also, some implementations of \c{a.out}, for example
4500 NetBSD's, support position-independent code, which Linux's
4501 implementation does not.
4502
4503 \c{a.out} provides a default output file-name extension of \c{.o}.
4504
4505 \c{a.out} is a very simple object format. It supports no special
4506 directives, no special symbols, no use of \c{SEG} or \c{WRT}, and no
4507 extensions to any standard directives. It supports only the three
4508 \i{standard section names} \i\c{.text}, \i\c{.data} and \i\c{.bss}.
4509
4510
4511 \H{aoutfmt} \i\c{aoutb}: \i{NetBSD}/\i{FreeBSD}/\i{OpenBSD}
4512 \I{a.out, BSD version}\c{a.out} Object Files
4513
4514 The \c{aoutb} format generates \c{a.out} object files, in the form
4515 used by the various free \c{BSD Unix} clones, \c{NetBSD}, \c{FreeBSD}
4516 and \c{OpenBSD}. For simple object files, this object format is exactly
4517 the same as \c{aout} except for the magic number in the first four bytes
4518 of the file. However, the \c{aoutb} format supports
4519 \I{PIC}\i{position-independent code} in the same way as the \c{elf}
4520 format, so you can use it to write \c{BSD} \i{shared libraries}.
4521
4522 \c{aoutb} provides a default output file-name extension of \c{.o}.
4523
4524 \c{aoutb} supports no special directives, no special symbols, and
4525 only the three \i{standard section names} \i\c{.text}, \i\c{.data}
4526 and \i\c{.bss}. However, it also supports the same use of \i\c{WRT} as
4527 \c{elf} does, to provide position-independent code relocation types.
4528 See \k{elfwrt} for full documentation of this feature.
4529
4530 \c{aoutb} also supports the same extensions to the \c{GLOBAL}
4531 directive as \c{elf} does: see \k{elfglob} for documentation of
4532 this.
4533
4534
4535 \H{as86fmt} \c{as86}: \i{Minix}/Linux\I{linux, as86} \i\c{as86} Object Files
4536
4537 The Minix/Linux 16-bit assembler \c{as86} has its own non-standard
4538 object file format. Although its companion linker \i\c{ld86} produces
4539 something close to ordinary \c{a.out} binaries as output, the object
4540 file format used to communicate between \c{as86} and \c{ld86} is not
4541 itself \c{a.out}.
4542
4543 NASM supports this format, just in case it is useful, as \c{as86}.
4544 \c{as86} provides a default output file-name extension of \c{.o}.
4545
4546 \c{as86} is a very simple object format (from the NASM user's point
4547 of view). It supports no special directives, no special symbols, no
4548 use of \c{SEG} or \c{WRT}, and no extensions to any standard
4549 directives. It supports only the three \i{standard section names}
4550 \i\c{.text}, \i\c{.data} and \i\c{.bss}.
4551
4552
4553 \H{rdffmt} \I{RDOFF}\i\c{rdf}: \i{Relocatable Dynamic Object File
4554 Format}
4555
4556 The \c{rdf} output format produces \c{RDOFF} object files. \c{RDOFF}
4557 (Relocatable Dynamic Object File Format) is a home-grown object-file
4558 format, designed alongside NASM itself and reflecting in its file
4559 format the internal structure of the assembler.
4560
4561 \c{RDOFF} is not used by any well-known operating systems. Those
4562 writing their own systems, however, may well wish to use \c{RDOFF}
4563 as their object format, on the grounds that it is designed primarily
4564 for simplicity and contains very little file-header bureaucracy.
4565
4566 The Unix NASM archive, and the DOS archive which includes sources,
4567 both contain an \I{rdoff subdirectory}\c{rdoff} subdirectory holding
4568 a set of RDOFF utilities: an RDF linker, an \c{RDF} static-library
4569 manager, an RDF file dump utility, and a program which will load and
4570 execute an RDF executable under Linux.
4571
4572 \c{rdf} supports only the \i{standard section names} \i\c{.text},
4573 \i\c{.data} and \i\c{.bss}.
4574
4575
4576 \S{rdflib} Requiring a Library: The \i\c{LIBRARY} Directive
4577
4578 \c{RDOFF} contains a mechanism for an object file to demand a given
4579 library to be linked to the module, either at load time or run time.
4580 This is done by the \c{LIBRARY} directive, which takes one argument
4581 which is the name of the module:
4582
4583 \c     library  mylib.rdl
4584
4585
4586 \S{rdfmod} Specifying a Module Name: The \i\c{MODULE} Directive
4587
4588 Special \c{RDOFF} header record is used to store the name of the module.
4589 It can be used, for example, by run-time loader to perform dynamic
4590 linking. \c{MODULE} directive takes one argument which is the name
4591 of current module:
4592
4593 \c     module  mymodname
4594
4595 Note that when you statically link modules and tell linker to strip
4596 the symbols from output file, all module names will be stripped too.
4597 To avoid it, you should start module names with \I{$, prefix}\c{$}, like:
4598
4599 \c     module  $kernel.core
4600
4601
4602 \S{rdfglob} \c{rdf} Extensions to the \c{GLOBAL} directive\I{GLOBAL,
4603 rdf extensions to}
4604
4605 \c{RDOFF} global symbols can contain additional information needed by
4606 the static linker. You can mark a global symbol as exported, thus
4607 telling the linker do not strip it from target executable or library
4608 file. Like in \c{ELF}, you can also specify whether an exported symbol
4609 is a procedure (function) or data object.
4610
4611 Suffixing the name with a colon and the word \i\c{export} you make the
4612 symbol exported:
4613
4614 \c     global  sys_open:export
4615
4616 To specify that exported symbol is a procedure (function), you add the
4617 word \i\c{proc} or \i\c{function} after declaration:
4618
4619 \c     global  sys_open:export proc
4620
4621 Similarly, to specify exported data object, add the word \i\c{data}
4622 or \i\c{object} to the directive:
4623
4624 \c     global  kernel_ticks:export data
4625
4626
4627 \S{rdfimpt} \c{rdf} Extensions to the \c{EXTERN} directive\I{EXTERN,
4628 rdf extensions to}
4629
4630 By default the \c{EXTERN} directive in \c{RDOFF} declares a "pure external" 
4631 symbol (i.e. the static linker will complain if such a symbol is not resolved).
4632 To declare an "imported" symbol, which must be resolved later during a dynamic
4633 linking phase, \c{RDOFF} offers an additional \c{import} modifier. As in
4634 \c{GLOBAL}, you can also specify whether an imported symbol is a procedure
4635 (function) or data object. For example:
4636
4637 \c     library $libc
4638 \c     extern  _open:import
4639 \c     extern  _printf:import proc
4640 \c     extern  _errno:import data
4641
4642 Here the directive \c{LIBRARY} is also included, which gives the dynamic linker
4643 a hint as to where to find requested symbols.
4644
4645
4646 \H{dbgfmt} \i\c{dbg}: Debugging Format
4647
4648 The \c{dbg} output format is not built into NASM in the default
4649 configuration. If you are building your own NASM executable from the
4650 sources, you can define \i\c{OF_DBG} in \c{outform.h} or on the
4651 compiler command line, and obtain the \c{dbg} output format.
4652
4653 The \c{dbg} format does not output an object file as such; instead,
4654 it outputs a text file which contains a complete list of all the
4655 transactions between the main body of NASM and the output-format
4656 back end module. It is primarily intended to aid people who want to
4657 write their own output drivers, so that they can get a clearer idea
4658 of the various requests the main program makes of the output driver,
4659 and in what order they happen.
4660
4661 For simple files, one can easily use the \c{dbg} format like this:
4662
4663 \c nasm -f dbg filename.asm
4664
4665 which will generate a diagnostic file called \c{filename.dbg}.
4666 However, this will not work well on files which were designed for a
4667 different object format, because each object format defines its own
4668 macros (usually user-level forms of directives), and those macros
4669 will not be defined in the \c{dbg} format. Therefore it can be
4670 useful to run NASM twice, in order to do the preprocessing with the
4671 native object format selected:
4672
4673 \c nasm -e -f rdf -o rdfprog.i rdfprog.asm
4674 \c nasm -a -f dbg rdfprog.i
4675
4676 This preprocesses \c{rdfprog.asm} into \c{rdfprog.i}, keeping the
4677 \c{rdf} object format selected in order to make sure RDF special
4678 directives are converted into primitive form correctly. Then the
4679 preprocessed source is fed through the \c{dbg} format to generate
4680 the final diagnostic output.
4681
4682 This workaround will still typically not work for programs intended
4683 for \c{obj} format, because the \c{obj} \c{SEGMENT} and \c{GROUP}
4684 directives have side effects of defining the segment and group names
4685 as symbols; \c{dbg} will not do this, so the program will not
4686 assemble. You will have to work around that by defining the symbols
4687 yourself (using \c{EXTERN}, for example) if you really need to get a
4688 \c{dbg} trace of an \c{obj}-specific source file.
4689
4690 \c{dbg} accepts any section name and any directives at all, and logs
4691 them all to its output file.
4692
4693
4694 \C{16bit} Writing 16-bit Code (DOS, Windows 3/3.1)
4695
4696 This chapter attempts to cover some of the common issues encountered
4697 when writing 16-bit code to run under \c{MS-DOS} or \c{Windows 3.x}. It
4698 covers how to link programs to produce \c{.EXE} or \c{.COM} files,
4699 how to write \c{.SYS} device drivers, and how to interface assembly
4700 language code with 16-bit C compilers and with Borland Pascal.
4701
4702
4703 \H{exefiles} Producing \i\c{.EXE} Files
4704
4705 Any large program written under DOS needs to be built as a \c{.EXE}
4706 file: only \c{.EXE} files have the necessary internal structure
4707 required to span more than one 64K segment. \i{Windows} programs,
4708 also, have to be built as \c{.EXE} files, since Windows does not
4709 support the \c{.COM} format.
4710
4711 In general, you generate \c{.EXE} files by using the \c{obj} output
4712 format to produce one or more \i\c{.OBJ} files, and then linking
4713 them together using a linker. However, NASM also supports the direct
4714 generation of simple DOS \c{.EXE} files using the \c{bin} output
4715 format (by using \c{DB} and \c{DW} to construct the \c{.EXE} file
4716 header), and a macro package is supplied to do this. Thanks to
4717 Yann Guidon for contributing the code for this.
4718
4719 NASM may also support \c{.EXE} natively as another output format in
4720 future releases.
4721
4722
4723 \S{objexe} Using the \c{obj} Format To Generate \c{.EXE} Files
4724
4725 This section describes the usual method of generating \c{.EXE} files
4726 by linking \c{.OBJ} files together.
4727
4728 Most 16-bit programming language packages come with a suitable
4729 linker; if you have none of these, there is a free linker called
4730 \i{VAL}\I{linker, free}, available in \c{LZH} archive format from
4731 \W{ftp://x2ftp.oulu.fi/pub/msdos/programming/lang/}\i\c{x2ftp.oulu.fi}.
4732 An LZH archiver can be found at
4733 \W{ftp://ftp.simtel.net/pub/simtelnet/msdos/arcers}\i\c{ftp.simtel.net}.
4734 There is another `free' linker (though this one doesn't come with
4735 sources) called \i{FREELINK}, available from
4736 \W{http://www.pcorner.com/tpc/old/3-101.html}\i\c{www.pcorner.com}.
4737 A third, \i\c{djlink}, written by DJ Delorie, is available at
4738 \W{http://www.delorie.com/djgpp/16bit/djlink/}\i\c{www.delorie.com}.
4739 A fourth linker, \i\c{ALINK}, written by Anthony A.J. Williams, is
4740 available at \W{http://alink.sourceforge.net}\i\c{alink.sourceforge.net}.
4741
4742 When linking several \c{.OBJ} files into a \c{.EXE} file, you should
4743 ensure that exactly one of them has a start point defined (using the
4744 \I{program entry point}\i\c{..start} special symbol defined by the
4745 \c{obj} format: see \k{dotdotstart}). If no module defines a start
4746 point, the linker will not know what value to give the entry-point
4747 field in the output file header; if more than one defines a start
4748 point, the linker will not know \e{which} value to use.
4749
4750 An example of a NASM source file which can be assembled to a
4751 \c{.OBJ} file and linked on its own to a \c{.EXE} is given here. It
4752 demonstrates the basic principles of defining a stack, initialising
4753 the segment registers, and declaring a start point. This file is
4754 also provided in the \I{test subdirectory}\c{test} subdirectory of
4755 the NASM archives, under the name \c{objexe.asm}.
4756
4757 \c segment code
4758 \c
4759 \c ..start:
4760 \c         mov     ax,data
4761 \c         mov     ds,ax
4762 \c         mov     ax,stack
4763 \c         mov     ss,ax
4764 \c         mov     sp,stacktop
4765
4766 This initial piece of code sets up \c{DS} to point to the data
4767 segment, and initializes \c{SS} and \c{SP} to point to the top of
4768 the provided stack. Notice that interrupts are implicitly disabled
4769 for one instruction after a move into \c{SS}, precisely for this
4770 situation, so that there's no chance of an interrupt occurring
4771 between the loads of \c{SS} and \c{SP} and not having a stack to
4772 execute on.
4773
4774 Note also that the special symbol \c{..start} is defined at the
4775 beginning of this code, which means that will be the entry point
4776 into the resulting executable file.
4777
4778 \c         mov     dx,hello
4779 \c         mov     ah,9
4780 \c         int     0x21
4781
4782 The above is the main program: load \c{DS:DX} with a pointer to the
4783 greeting message (\c{hello} is implicitly relative to the segment
4784 \c{data}, which was loaded into \c{DS} in the setup code, so the
4785 full pointer is valid), and call the DOS print-string function.
4786
4787 \c         mov     ax,0x4c00
4788 \c         int     0x21
4789
4790 This terminates the program using another DOS system call.
4791
4792 \c segment data
4793 \c
4794 \c hello:  db      'hello, world', 13, 10, '$'
4795
4796 The data segment contains the string we want to display.
4797
4798 \c segment stack stack
4799 \c         resb 64
4800 \c stacktop:
4801
4802 The above code declares a stack segment containing 64 bytes of
4803 uninitialized stack space, and points \c{stacktop} at the top of it.
4804 The directive \c{segment stack stack} defines a segment \e{called}
4805 \c{stack}, and also of \e{type} \c{STACK}. The latter is not
4806 necessary to the correct running of the program, but linkers are
4807 likely to issue warnings or errors if your program has no segment of
4808 type \c{STACK}.
4809
4810 The above file, when assembled into a \c{.OBJ} file, will link on
4811 its own to a valid \c{.EXE} file, which when run will print `hello,
4812 world' and then exit.
4813
4814
4815 \S{binexe} Using the \c{bin} Format To Generate \c{.EXE} Files
4816
4817 The \c{.EXE} file format is simple enough that it's possible to
4818 build a \c{.EXE} file by writing a pure-binary program and sticking
4819 a 32-byte header on the front. This header is simple enough that it
4820 can be generated using \c{DB} and \c{DW} commands by NASM itself, so
4821 that you can use the \c{bin} output format to directly generate
4822 \c{.EXE} files.
4823
4824 Included in the NASM archives, in the \I{misc subdirectory}\c{misc}
4825 subdirectory, is a file \i\c{exebin.mac} of macros. It defines three
4826 macros: \i\c{EXE_begin}, \i\c{EXE_stack} and \i\c{EXE_end}.
4827
4828 To produce a \c{.EXE} file using this method, you should start by
4829 using \c{%include} to load the \c{exebin.mac} macro package into
4830 your source file. You should then issue the \c{EXE_begin} macro call
4831 (which takes no arguments) to generate the file header data. Then
4832 write code as normal for the \c{bin} format - you can use all three
4833 standard sections \c{.text}, \c{.data} and \c{.bss}. At the end of
4834 the file you should call the \c{EXE_end} macro (again, no arguments),
4835 which defines some symbols to mark section sizes, and these symbols
4836 are referred to in the header code generated by \c{EXE_begin}.
4837
4838 In this model, the code you end up writing starts at \c{0x100}, just
4839 like a \c{.COM} file - in fact, if you strip off the 32-byte header
4840 from the resulting \c{.EXE} file, you will have a valid \c{.COM}
4841 program. All the segment bases are the same, so you are limited to a
4842 64K program, again just like a \c{.COM} file. Note that an \c{ORG}
4843 directive is issued by the \c{EXE_begin} macro, so you should not
4844 explicitly issue one of your own.
4845
4846 You can't directly refer to your segment base value, unfortunately,
4847 since this would require a relocation in the header, and things
4848 would get a lot more complicated. So you should get your segment
4849 base by copying it out of \c{CS} instead.
4850
4851 On entry to your \c{.EXE} file, \c{SS:SP} are already set up to
4852 point to the top of a 2Kb stack. You can adjust the default stack
4853 size of 2Kb by calling the \c{EXE_stack} macro. For example, to
4854 change the stack size of your program to 64 bytes, you would call
4855 \c{EXE_stack 64}.
4856
4857 A sample program which generates a \c{.EXE} file in this way is
4858 given in the \c{test} subdirectory of the NASM archive, as
4859 \c{binexe.asm}.
4860
4861
4862 \H{comfiles} Producing \i\c{.COM} Files
4863
4864 While large DOS programs must be written as \c{.EXE} files, small
4865 ones are often better written as \c{.COM} files. \c{.COM} files are
4866 pure binary, and therefore most easily produced using the \c{bin}
4867 output format.
4868
4869
4870 \S{combinfmt} Using the \c{bin} Format To Generate \c{.COM} Files
4871
4872 \c{.COM} files expect to be loaded at offset \c{100h} into their
4873 segment (though the segment may change). Execution then begins at
4874 \I\c{ORG}\c{100h}, i.e. right at the start of the program. So to
4875 write a \c{.COM} program, you would create a source file looking
4876 like
4877
4878 \c         org 100h
4879 \c
4880 \c section .text
4881 \c
4882 \c start:
4883 \c         ; put your code here
4884 \c
4885 \c section .data
4886 \c
4887 \c         ; put data items here
4888 \c
4889 \c section .bss
4890 \c
4891 \c         ; put uninitialized data here
4892
4893 The \c{bin} format puts the \c{.text} section first in the file, so
4894 you can declare data or BSS items before beginning to write code if
4895 you want to and the code will still end up at the front of the file
4896 where it belongs.
4897
4898 The BSS (uninitialized data) section does not take up space in the
4899 \c{.COM} file itself: instead, addresses of BSS items are resolved
4900 to point at space beyond the end of the file, on the grounds that
4901 this will be free memory when the program is run. Therefore you
4902 should not rely on your BSS being initialized to all zeros when you
4903 run.
4904
4905 To assemble the above program, you should use a command line like
4906
4907 \c nasm myprog.asm -fbin -o myprog.com
4908
4909 The \c{bin} format would produce a file called \c{myprog} if no
4910 explicit output file name were specified, so you have to override it
4911 and give the desired file name.
4912
4913
4914 \S{comobjfmt} Using the \c{obj} Format To Generate \c{.COM} Files
4915
4916 If you are writing a \c{.COM} program as more than one module, you
4917 may wish to assemble several \c{.OBJ} files and link them together
4918 into a \c{.COM} program. You can do this, provided you have a linker
4919 capable of outputting \c{.COM} files directly (\i{TLINK} does this),
4920 or alternatively a converter program such as \i\c{EXE2BIN} to
4921 transform the \c{.EXE} file output from the linker into a \c{.COM}
4922 file.
4923
4924 If you do this, you need to take care of several things:
4925
4926 \b The first object file containing code should start its code
4927 segment with a line like \c{RESB 100h}. This is to ensure that the
4928 code begins at offset \c{100h} relative to the beginning of the code
4929 segment, so that the linker or converter program does not have to
4930 adjust address references within the file when generating the
4931 \c{.COM} file. Other assemblers use an \i\c{ORG} directive for this
4932 purpose, but \c{ORG} in NASM is a format-specific directive to the
4933 \c{bin} output format, and does not mean the same thing as it does
4934 in MASM-compatible assemblers.
4935
4936 \b You don't need to define a stack segment.
4937
4938 \b All your segments should be in the same group, so that every time
4939 your code or data references a symbol offset, all offsets are
4940 relative to the same segment base. This is because, when a \c{.COM}
4941 file is loaded, all the segment registers contain the same value.
4942
4943
4944 \H{sysfiles} Producing \i\c{.SYS} Files
4945
4946 \i{MS-DOS device drivers} - \c{.SYS} files - are pure binary files,
4947 similar to \c{.COM} files, except that they start at origin zero
4948 rather than \c{100h}. Therefore, if you are writing a device driver
4949 using the \c{bin} format, you do not need the \c{ORG} directive,
4950 since the default origin for \c{bin} is zero. Similarly, if you are
4951 using \c{obj}, you do not need the \c{RESB 100h} at the start of
4952 your code segment.
4953
4954 \c{.SYS} files start with a header structure, containing pointers to
4955 the various routines inside the driver which do the work. This
4956 structure should be defined at the start of the code segment, even
4957 though it is not actually code.
4958
4959 For more information on the format of \c{.SYS} files, and the data
4960 which has to go in the header structure, a list of books is given in
4961 the Frequently Asked Questions list for the newsgroup
4962 \W{news:comp.os.msdos.programmer}\i\c{comp.os.msdos.programmer}.
4963
4964
4965 \H{16c} Interfacing to 16-bit C Programs
4966
4967 This section covers the basics of writing assembly routines that
4968 call, or are called from, C programs. To do this, you would
4969 typically write an assembly module as a \c{.OBJ} file, and link it
4970 with your C modules to produce a \i{mixed-language program}.
4971
4972
4973 \S{16cunder} External Symbol Names
4974
4975 \I{C symbol names}\I{underscore, in C symbols}C compilers have the
4976 convention that the names of all global symbols (functions or data)
4977 they define are formed by prefixing an underscore to the name as it
4978 appears in the C program. So, for example, the function a C
4979 programmer thinks of as \c{printf} appears to an assembly language
4980 programmer as \c{_printf}. This means that in your assembly
4981 programs, you can define symbols without a leading underscore, and
4982 not have to worry about name clashes with C symbols.
4983
4984 If you find the underscores inconvenient, you can define macros to
4985 replace the \c{GLOBAL} and \c{EXTERN} directives as follows:
4986
4987 \c %macro  cglobal 1
4988 \c
4989 \c   global  _%1
4990 \c   %define %1 _%1
4991 \c
4992 \c %endmacro
4993 \c
4994 \c %macro  cextern 1
4995 \c
4996 \c   extern  _%1
4997 \c   %define %1 _%1
4998 \c
4999 \c %endmacro
5000
5001 (These forms of the macros only take one argument at a time; a
5002 \c{%rep} construct could solve this.)
5003
5004 If you then declare an external like this:
5005
5006 \c cextern printf
5007
5008 then the macro will expand it as
5009
5010 \c extern  _printf
5011 \c %define printf _printf
5012
5013 Thereafter, you can reference \c{printf} as if it was a symbol, and
5014 the preprocessor will put the leading underscore on where necessary.
5015
5016 The \c{cglobal} macro works similarly. You must use \c{cglobal}
5017 before defining the symbol in question, but you would have had to do
5018 that anyway if you used \c{GLOBAL}.
5019
5020 Also see \k{opt-pfix}.
5021
5022 \S{16cmodels} \i{Memory Models}
5023
5024 NASM contains no mechanism to support the various C memory models
5025 directly; you have to keep track yourself of which one you are
5026 writing for. This means you have to keep track of the following
5027 things:
5028
5029 \b In models using a single code segment (tiny, small and compact),
5030 functions are near. This means that function pointers, when stored
5031 in data segments or pushed on the stack as function arguments, are
5032 16 bits long and contain only an offset field (the \c{CS} register
5033 never changes its value, and always gives the segment part of the
5034 full function address), and that functions are called using ordinary
5035 near \c{CALL} instructions and return using \c{RETN} (which, in
5036 NASM, is synonymous with \c{RET} anyway). This means both that you
5037 should write your own routines to return with \c{RETN}, and that you
5038 should call external C routines with near \c{CALL} instructions.
5039
5040 \b In models using more than one code segment (medium, large and
5041 huge), functions are far. This means that function pointers are 32
5042 bits long (consisting of a 16-bit offset followed by a 16-bit
5043 segment), and that functions are called using \c{CALL FAR} (or
5044 \c{CALL seg:offset}) and return using \c{RETF}. Again, you should
5045 therefore write your own routines to return with \c{RETF} and use
5046 \c{CALL FAR} to call external routines.
5047
5048 \b In models using a single data segment (tiny, small and medium),
5049 data pointers are 16 bits long, containing only an offset field (the
5050 \c{DS} register doesn't change its value, and always gives the
5051 segment part of the full data item address).
5052
5053 \b In models using more than one data segment (compact, large and
5054 huge), data pointers are 32 bits long, consisting of a 16-bit offset
5055 followed by a 16-bit segment. You should still be careful not to
5056 modify \c{DS} in your routines without restoring it afterwards, but
5057 \c{ES} is free for you to use to access the contents of 32-bit data
5058 pointers you are passed.
5059
5060 \b The huge memory model allows single data items to exceed 64K in
5061 size. In all other memory models, you can access the whole of a data
5062 item just by doing arithmetic on the offset field of the pointer you
5063 are given, whether a segment field is present or not; in huge model,
5064 you have to be more careful of your pointer arithmetic.
5065
5066 \b In most memory models, there is a \e{default} data segment, whose
5067 segment address is kept in \c{DS} throughout the program. This data
5068 segment is typically the same segment as the stack, kept in \c{SS},
5069 so that functions' local variables (which are stored on the stack)
5070 and global data items can both be accessed easily without changing
5071 \c{DS}. Particularly large data items are typically stored in other
5072 segments. However, some memory models (though not the standard
5073 ones, usually) allow the assumption that \c{SS} and \c{DS} hold the
5074 same value to be removed. Be careful about functions' local
5075 variables in this latter case.
5076
5077 In models with a single code segment, the segment is called
5078 \i\c{_TEXT}, so your code segment must also go by this name in order
5079 to be linked into the same place as the main code segment. In models
5080 with a single data segment, or with a default data segment, it is
5081 called \i\c{_DATA}.
5082
5083
5084 \S{16cfunc} Function Definitions and Function Calls
5085
5086 \I{functions, C calling convention}The \i{C calling convention} in
5087 16-bit programs is as follows. In the following description, the
5088 words \e{caller} and \e{callee} are used to denote the function
5089 doing the calling and the function which gets called.
5090
5091 \b The caller pushes the function's parameters on the stack, one
5092 after another, in reverse order (right to left, so that the first
5093 argument specified to the function is pushed last).
5094
5095 \b The caller then executes a \c{CALL} instruction to pass control
5096 to the callee. This \c{CALL} is either near or far depending on the
5097 memory model.
5098
5099 \b The callee receives control, and typically (although this is not
5100 actually necessary, in functions which do not need to access their
5101 parameters) starts by saving the value of \c{SP} in \c{BP} so as to
5102 be able to use \c{BP} as a base pointer to find its parameters on
5103 the stack. However, the caller was probably doing this too, so part
5104 of the calling convention states that \c{BP} must be preserved by
5105 any C function. Hence the callee, if it is going to set up \c{BP} as
5106 a \i\e{frame pointer}, must push the previous value first.
5107
5108 \b The callee may then access its parameters relative to \c{BP}.
5109 The word at \c{[BP]} holds the previous value of \c{BP} as it was
5110 pushed; the next word, at \c{[BP+2]}, holds the offset part of the
5111 return address, pushed implicitly by \c{CALL}. In a small-model
5112 (near) function, the parameters start after that, at \c{[BP+4]}; in
5113 a large-model (far) function, the segment part of the return address
5114 lives at \c{[BP+4]}, and the parameters begin at \c{[BP+6]}. The
5115 leftmost parameter of the function, since it was pushed last, is
5116 accessible at this offset from \c{BP}; the others follow, at
5117 successively greater offsets. Thus, in a function such as \c{printf}
5118 which takes a variable number of parameters, the pushing of the
5119 parameters in reverse order means that the function knows where to
5120 find its first parameter, which tells it the number and type of the
5121 remaining ones.
5122
5123 \b The callee may also wish to decrease \c{SP} further, so as to
5124 allocate space on the stack for local variables, which will then be
5125 accessible at negative offsets from \c{BP}.
5126
5127 \b The callee, if it wishes to return a value to the caller, should
5128 leave the value in \c{AL}, \c{AX} or \c{DX:AX} depending on the size
5129 of the value. Floating-point results are sometimes (depending on the
5130 compiler) returned in \c{ST0}.
5131
5132 \b Once the callee has finished processing, it restores \c{SP} from
5133 \c{BP} if it had allocated local stack space, then pops the previous
5134 value of \c{BP}, and returns via \c{RETN} or \c{RETF} depending on
5135 memory model.
5136
5137 \b When the caller regains control from the callee, the function
5138 parameters are still on the stack, so it typically adds an immediate
5139 constant to \c{SP} to remove them (instead of executing a number of
5140 slow \c{POP} instructions). Thus, if a function is accidentally
5141 called with the wrong number of parameters due to a prototype
5142 mismatch, the stack will still be returned to a sensible state since
5143 the caller, which \e{knows} how many parameters it pushed, does the
5144 removing.
5145
5146 It is instructive to compare this calling convention with that for
5147 Pascal programs (described in \k{16bpfunc}). Pascal has a simpler
5148 convention, since no functions have variable numbers of parameters.
5149 Therefore the callee knows how many parameters it should have been
5150 passed, and is able to deallocate them from the stack itself by
5151 passing an immediate argument to the \c{RET} or \c{RETF}
5152 instruction, so the caller does not have to do it. Also, the
5153 parameters are pushed in left-to-right order, not right-to-left,
5154 which means that a compiler can give better guarantees about
5155 sequence points without performance suffering.
5156
5157 Thus, you would define a function in C style in the following way.
5158 The following example is for small model:
5159
5160 \c global  _myfunc
5161 \c
5162 \c _myfunc:
5163 \c         push    bp
5164 \c         mov     bp,sp
5165 \c         sub     sp,0x40         ; 64 bytes of local stack space
5166 \c         mov     bx,[bp+4]       ; first parameter to function
5167 \c
5168 \c         ; some more code
5169 \c
5170 \c         mov     sp,bp           ; undo "sub sp,0x40" above
5171 \c         pop     bp
5172 \c         ret
5173
5174 For a large-model function, you would replace \c{RET} by \c{RETF},
5175 and look for the first parameter at \c{[BP+6]} instead of
5176 \c{[BP+4]}. Of course, if one of the parameters is a pointer, then
5177 the offsets of \e{subsequent} parameters will change depending on
5178 the memory model as well: far pointers take up four bytes on the
5179 stack when passed as a parameter, whereas near pointers take up two.
5180
5181 At the other end of the process, to call a C function from your
5182 assembly code, you would do something like this:
5183
5184 \c extern  _printf
5185 \c
5186 \c       ; and then, further down...
5187 \c
5188 \c       push    word [myint]        ; one of my integer variables
5189 \c       push    word mystring       ; pointer into my data segment
5190 \c       call    _printf
5191 \c       add     sp,byte 4           ; `byte' saves space
5192 \c
5193 \c       ; then those data items...
5194 \c
5195 \c segment _DATA
5196 \c
5197 \c myint         dw    1234
5198 \c mystring      db    'This number -> %d <- should be 1234',10,0
5199
5200 This piece of code is the small-model assembly equivalent of the C
5201 code
5202
5203 \c     int myint = 1234;
5204 \c     printf("This number -> %d <- should be 1234\n", myint);
5205
5206 In large model, the function-call code might look more like this. In
5207 this example, it is assumed that \c{DS} already holds the segment
5208 base of the segment \c{_DATA}. If not, you would have to initialize
5209 it first.
5210
5211 \c       push    word [myint]
5212 \c       push    word seg mystring   ; Now push the segment, and...
5213 \c       push    word mystring       ; ... offset of "mystring"
5214 \c       call    far _printf
5215 \c       add    sp,byte 6
5216
5217 The integer value still takes up one word on the stack, since large
5218 model does not affect the size of the \c{int} data type. The first
5219 argument (pushed last) to \c{printf}, however, is a data pointer,
5220 and therefore has to contain a segment and offset part. The segment
5221 should be stored second in memory, and therefore must be pushed
5222 first. (Of course, \c{PUSH DS} would have been a shorter instruction
5223 than \c{PUSH WORD SEG mystring}, if \c{DS} was set up as the above
5224 example assumed.) Then the actual call becomes a far call, since
5225 functions expect far calls in large model; and \c{SP} has to be
5226 increased by 6 rather than 4 afterwards to make up for the extra
5227 word of parameters.
5228
5229
5230 \S{16cdata} Accessing Data Items
5231
5232 To get at the contents of C variables, or to declare variables which
5233 C can access, you need only declare the names as \c{GLOBAL} or
5234 \c{EXTERN}. (Again, the names require leading underscores, as stated
5235 in \k{16cunder}.) Thus, a C variable declared as \c{int i} can be
5236 accessed from assembler as
5237
5238 \c extern _i
5239 \c
5240 \c         mov ax,[_i]
5241
5242 And to declare your own integer variable which C programs can access
5243 as \c{extern int j}, you do this (making sure you are assembling in
5244 the \c{_DATA} segment, if necessary):
5245
5246 \c global  _j
5247 \c
5248 \c _j      dw      0
5249
5250 To access a C array, you need to know the size of the components of
5251 the array. For example, \c{int} variables are two bytes long, so if
5252 a C program declares an array as \c{int a[10]}, you can access
5253 \c{a[3]} by coding \c{mov ax,[_a+6]}. (The byte offset 6 is obtained
5254 by multiplying the desired array index, 3, by the size of the array
5255 element, 2.) The sizes of the C base types in 16-bit compilers are:
5256 1 for \c{char}, 2 for \c{short} and \c{int}, 4 for \c{long} and
5257 \c{float}, and 8 for \c{double}.
5258
5259 To access a C \i{data structure}, you need to know the offset from
5260 the base of the structure to the field you are interested in. You
5261 can either do this by converting the C structure definition into a
5262 NASM structure definition (using \i\c{STRUC}), or by calculating the
5263 one offset and using just that.
5264
5265 To do either of these, you should read your C compiler's manual to
5266 find out how it organizes data structures. NASM gives no special
5267 alignment to structure members in its own \c{STRUC} macro, so you
5268 have to specify alignment yourself if the C compiler generates it.
5269 Typically, you might find that a structure like
5270
5271 \c struct {
5272 \c     char c;
5273 \c     int i;
5274 \c } foo;
5275
5276 might be four bytes long rather than three, since the \c{int} field
5277 would be aligned to a two-byte boundary. However, this sort of
5278 feature tends to be a configurable option in the C compiler, either
5279 using command-line options or \c{#pragma} lines, so you have to find
5280 out how your own compiler does it.
5281
5282
5283 \S{16cmacro} \i\c{c16.mac}: Helper Macros for the 16-bit C Interface
5284
5285 Included in the NASM archives, in the \I{misc subdirectory}\c{misc}
5286 directory, is a file \c{c16.mac} of macros. It defines three macros:
5287 \i\c{proc}, \i\c{arg} and \i\c{endproc}. These are intended to be
5288 used for C-style procedure definitions, and they automate a lot of
5289 the work involved in keeping track of the calling convention.
5290
5291 (An alternative, TASM compatible form of \c{arg} is also now built
5292 into NASM's preprocessor. See \k{tasmcompat} for details.)
5293
5294 An example of an assembly function using the macro set is given
5295 here:
5296
5297 \c proc    _nearproc
5298 \c
5299 \c %$i     arg
5300 \c %$j     arg
5301 \c         mov     ax,[bp + %$i]
5302 \c         mov     bx,[bp + %$j]
5303 \c         add     ax,[bx]
5304 \c
5305 \c endproc
5306
5307 This defines \c{_nearproc} to be a procedure taking two arguments,
5308 the first (\c{i}) an integer and the second (\c{j}) a pointer to an
5309 integer. It returns \c{i + *j}.
5310
5311 Note that the \c{arg} macro has an \c{EQU} as the first line of its
5312 expansion, and since the label before the macro call gets prepended
5313 to the first line of the expanded macro, the \c{EQU} works, defining
5314 \c{%$i} to be an offset from \c{BP}. A context-local variable is
5315 used, local to the context pushed by the \c{proc} macro and popped
5316 by the \c{endproc} macro, so that the same argument name can be used
5317 in later procedures. Of course, you don't \e{have} to do that.
5318
5319 The macro set produces code for near functions (tiny, small and
5320 compact-model code) by default. You can have it generate far
5321 functions (medium, large and huge-model code) by means of coding
5322 \I\c{FARCODE}\c{%define FARCODE}. This changes the kind of return
5323 instruction generated by \c{endproc}, and also changes the starting
5324 point for the argument offsets. The macro set contains no intrinsic
5325 dependency on whether data pointers are far or not.
5326
5327 \c{arg} can take an optional parameter, giving the size of the
5328 argument. If no size is given, 2 is assumed, since it is likely that
5329 many function parameters will be of type \c{int}.
5330
5331 The large-model equivalent of the above function would look like this:
5332
5333 \c %define FARCODE
5334 \c
5335 \c proc    _farproc
5336 \c
5337 \c %$i     arg
5338 \c %$j     arg     4
5339 \c         mov     ax,[bp + %$i]
5340 \c         mov     bx,[bp + %$j]
5341 \c         mov     es,[bp + %$j + 2]
5342 \c         add     ax,[bx]
5343 \c
5344 \c endproc
5345
5346 This makes use of the argument to the \c{arg} macro to define a
5347 parameter of size 4, because \c{j} is now a far pointer. When we
5348 load from \c{j}, we must load a segment and an offset.
5349
5350
5351 \H{16bp} Interfacing to \i{Borland Pascal} Programs
5352
5353 Interfacing to Borland Pascal programs is similar in concept to
5354 interfacing to 16-bit C programs. The differences are:
5355
5356 \b The leading underscore required for interfacing to C programs is
5357 not required for Pascal.
5358
5359 \b The memory model is always large: functions are far, data
5360 pointers are far, and no data item can be more than 64K long.
5361 (Actually, some functions are near, but only those functions that
5362 are local to a Pascal unit and never called from outside it. All
5363 assembly functions that Pascal calls, and all Pascal functions that
5364 assembly routines are able to call, are far.) However, all static
5365 data declared in a Pascal program goes into the default data
5366 segment, which is the one whose segment address will be in \c{DS}
5367 when control is passed to your assembly code. The only things that
5368 do not live in the default data segment are local variables (they
5369 live in the stack segment) and dynamically allocated variables. All
5370 data \e{pointers}, however, are far.
5371
5372 \b The function calling convention is different - described below.
5373
5374 \b Some data types, such as strings, are stored differently.
5375
5376 \b There are restrictions on the segment names you are allowed to
5377 use - Borland Pascal will ignore code or data declared in a segment
5378 it doesn't like the name of. The restrictions are described below.
5379
5380
5381 \S{16bpfunc} The Pascal Calling Convention
5382
5383 \I{functions, Pascal calling convention}\I{Pascal calling
5384 convention}The 16-bit Pascal calling convention is as follows. In
5385 the following description, the words \e{caller} and \e{callee} are
5386 used to denote the function doing the calling and the function which
5387 gets called.
5388
5389 \b The caller pushes the function's parameters on the stack, one
5390 after another, in normal order (left to right, so that the first
5391 argument specified to the function is pushed first).
5392
5393 \b The caller then executes a far \c{CALL} instruction to pass
5394 control to the callee.
5395
5396 \b The callee receives control, and typically (although this is not
5397 actually necessary, in functions which do not need to access their
5398 parameters) starts by saving the value of \c{SP} in \c{BP} so as to
5399 be able to use \c{BP} as a base pointer to find its parameters on
5400 the stack. However, the caller was probably doing this too, so part
5401 of the calling convention states that \c{BP} must be preserved by
5402 any function. Hence the callee, if it is going to set up \c{BP} as a
5403 \i{frame pointer}, must push the previous value first.
5404
5405 \b The callee may then access its parameters relative to \c{BP}.
5406 The word at \c{[BP]} holds the previous value of \c{BP} as it was
5407 pushed. The next word, at \c{[BP+2]}, holds the offset part of the
5408 return address, and the next one at \c{[BP+4]} the segment part. The
5409 parameters begin at \c{[BP+6]}. The rightmost parameter of the
5410 function, since it was pushed last, is accessible at this offset
5411 from \c{BP}; the others follow, at successively greater offsets.
5412
5413 \b The callee may also wish to decrease \c{SP} further, so as to
5414 allocate space on the stack for local variables, which will then be
5415 accessible at negative offsets from \c{BP}.
5416
5417 \b The callee, if it wishes to return a value to the caller, should
5418 leave the value in \c{AL}, \c{AX} or \c{DX:AX} depending on the size
5419 of the value. Floating-point results are returned in \c{ST0}.
5420 Results of type \c{Real} (Borland's own custom floating-point data
5421 type, not handled directly by the FPU) are returned in \c{DX:BX:AX}.
5422 To return a result of type \c{String}, the caller pushes a pointer
5423 to a temporary string before pushing the parameters, and the callee
5424 places the returned string value at that location. The pointer is
5425 not a parameter, and should not be removed from the stack by the
5426 \c{RETF} instruction.
5427
5428 \b Once the callee has finished processing, it restores \c{SP} from
5429 \c{BP} if it had allocated local stack space, then pops the previous
5430 value of \c{BP}, and returns via \c{RETF}. It uses the form of
5431 \c{RETF} with an immediate parameter, giving the number of bytes
5432 taken up by the parameters on the stack. This causes the parameters
5433 to be removed from the stack as a side effect of the return
5434 instruction.
5435
5436 \b When the caller regains control from the callee, the function
5437 parameters have already been removed from the stack, so it needs to
5438 do nothing further.
5439
5440 Thus, you would define a function in Pascal style, taking two
5441 \c{Integer}-type parameters, in the following way:
5442
5443 \c global  myfunc
5444 \c
5445 \c myfunc: push    bp
5446 \c         mov     bp,sp
5447 \c         sub     sp,0x40         ; 64 bytes of local stack space
5448 \c         mov     bx,[bp+8]       ; first parameter to function
5449 \c         mov     bx,[bp+6]       ; second parameter to function
5450 \c
5451 \c         ; some more code
5452 \c
5453 \c         mov     sp,bp           ; undo "sub sp,0x40" above
5454 \c         pop     bp
5455 \c         retf    4               ; total size of params is 4
5456
5457 At the other end of the process, to call a Pascal function from your
5458 assembly code, you would do something like this:
5459
5460 \c extern  SomeFunc
5461 \c
5462 \c        ; and then, further down...
5463 \c
5464 \c        push   word seg mystring   ; Now push the segment, and...
5465 \c        push   word mystring       ; ... offset of "mystring"
5466 \c        push   word [myint]        ; one of my variables
5467 \c        call   far SomeFunc
5468
5469 This is equivalent to the Pascal code
5470
5471 \c procedure SomeFunc(String: PChar; Int: Integer);
5472 \c     SomeFunc(@mystring, myint);
5473
5474
5475 \S{16bpseg} Borland Pascal \I{segment names, Borland Pascal}Segment
5476 Name Restrictions
5477
5478 Since Borland Pascal's internal unit file format is completely
5479 different from \c{OBJ}, it only makes a very sketchy job of actually
5480 reading and understanding the various information contained in a
5481 real \c{OBJ} file when it links that in. Therefore an object file
5482 intended to be linked to a Pascal program must obey a number of
5483 restrictions:
5484
5485 \b Procedures and functions must be in a segment whose name is
5486 either \c{CODE}, \c{CSEG}, or something ending in \c{_TEXT}.
5487
5488 \b initialized data must be in a segment whose name is either
5489 \c{CONST} or something ending in \c{_DATA}.
5490
5491 \b Uninitialized data must be in a segment whose name is either
5492 \c{DATA}, \c{DSEG}, or something ending in \c{_BSS}.
5493
5494 \b Any other segments in the object file are completely ignored.
5495 \c{GROUP} directives and segment attributes are also ignored.
5496
5497
5498 \S{16bpmacro} Using \i\c{c16.mac} With Pascal Programs
5499
5500 The \c{c16.mac} macro package, described in \k{16cmacro}, can also
5501 be used to simplify writing functions to be called from Pascal
5502 programs, if you code \I\c{PASCAL}\c{%define PASCAL}. This
5503 definition ensures that functions are far (it implies
5504 \i\c{FARCODE}), and also causes procedure return instructions to be
5505 generated with an operand.
5506
5507 Defining \c{PASCAL} does not change the code which calculates the
5508 argument offsets; you must declare your function's arguments in
5509 reverse order. For example:
5510
5511 \c %define PASCAL
5512 \c
5513 \c proc    _pascalproc
5514 \c
5515 \c %$j     arg 4
5516 \c %$i     arg
5517 \c         mov     ax,[bp + %$i]
5518 \c         mov     bx,[bp + %$j]
5519 \c         mov     es,[bp + %$j + 2]
5520 \c         add     ax,[bx]
5521 \c
5522 \c endproc
5523
5524 This defines the same routine, conceptually, as the example in
5525 \k{16cmacro}: it defines a function taking two arguments, an integer
5526 and a pointer to an integer, which returns the sum of the integer
5527 and the contents of the pointer. The only difference between this
5528 code and the large-model C version is that \c{PASCAL} is defined
5529 instead of \c{FARCODE}, and that the arguments are declared in
5530 reverse order.
5531
5532
5533 \C{32bit} Writing 32-bit Code (Unix, Win32, DJGPP)
5534
5535 This chapter attempts to cover some of the common issues involved
5536 when writing 32-bit code, to run under \i{Win32} or Unix, or to be
5537 linked with C code generated by a Unix-style C compiler such as
5538 \i{DJGPP}. It covers how to write assembly code to interface with
5539 32-bit C routines, and how to write position-independent code for
5540 shared libraries.
5541
5542 Almost all 32-bit code, and in particular all code running under
5543 \c{Win32}, \c{DJGPP} or any of the PC Unix variants, runs in \I{flat
5544 memory model}\e{flat} memory model. This means that the segment registers
5545 and paging have already been set up to give you the same 32-bit 4Gb
5546 address space no matter what segment you work relative to, and that
5547 you should ignore all segment registers completely. When writing
5548 flat-model application code, you never need to use a segment
5549 override or modify any segment register, and the code-section
5550 addresses you pass to \c{CALL} and \c{JMP} live in the same address
5551 space as the data-section addresses you access your variables by and
5552 the stack-section addresses you access local variables and procedure
5553 parameters by. Every address is 32 bits long and contains only an
5554 offset part.
5555
5556
5557 \H{32c} Interfacing to 32-bit C Programs
5558
5559 A lot of the discussion in \k{16c}, about interfacing to 16-bit C
5560 programs, still applies when working in 32 bits. The absence of
5561 memory models or segmentation worries simplifies things a lot.
5562
5563
5564 \S{32cunder} External Symbol Names
5565
5566 Most 32-bit C compilers share the convention used by 16-bit
5567 compilers, that the names of all global symbols (functions or data)
5568 they define are formed by prefixing an underscore to the name as it
5569 appears in the C program. However, not all of them do: the \c{ELF}
5570 specification states that C symbols do \e{not} have a leading
5571 underscore on their assembly-language names.
5572
5573 The older Linux \c{a.out} C compiler, all \c{Win32} compilers,
5574 \c{DJGPP}, and \c{NetBSD} and \c{FreeBSD}, all use the leading
5575 underscore; for these compilers, the macros \c{cextern} and
5576 \c{cglobal}, as given in \k{16cunder}, will still work. For \c{ELF},
5577 though, the leading underscore should not be used.
5578
5579 See also \k{opt-pfix}.
5580
5581 \S{32cfunc} Function Definitions and Function Calls
5582
5583 \I{functions, C calling convention}The \i{C calling convention}The C
5584 calling convention in 32-bit programs is as follows. In the
5585 following description, the words \e{caller} and \e{callee} are used
5586 to denote the function doing the calling and the function which gets
5587 called.
5588
5589 \b The caller pushes the function's parameters on the stack, one
5590 after another, in reverse order (right to left, so that the first
5591 argument specified to the function is pushed last).
5592
5593 \b The caller then executes a near \c{CALL} instruction to pass
5594 control to the callee.
5595
5596 \b The callee receives control, and typically (although this is not
5597 actually necessary, in functions which do not need to access their
5598 parameters) starts by saving the value of \c{ESP} in \c{EBP} so as
5599 to be able to use \c{EBP} as a base pointer to find its parameters
5600 on the stack. However, the caller was probably doing this too, so
5601 part of the calling convention states that \c{EBP} must be preserved
5602 by any C function. Hence the callee, if it is going to set up
5603 \c{EBP} as a \i{frame pointer}, must push the previous value first.
5604
5605 \b The callee may then access its parameters relative to \c{EBP}.
5606 The doubleword at \c{[EBP]} holds the previous value of \c{EBP} as
5607 it was pushed; the next doubleword, at \c{[EBP+4]}, holds the return
5608 address, pushed implicitly by \c{CALL}. The parameters start after
5609 that, at \c{[EBP+8]}. The leftmost parameter of the function, since
5610 it was pushed last, is accessible at this offset from \c{EBP}; the
5611 others follow, at successively greater offsets. Thus, in a function
5612 such as \c{printf} which takes a variable number of parameters, the
5613 pushing of the parameters in reverse order means that the function
5614 knows where to find its first parameter, which tells it the number
5615 and type of the remaining ones.
5616
5617 \b The callee may also wish to decrease \c{ESP} further, so as to
5618 allocate space on the stack for local variables, which will then be
5619 accessible at negative offsets from \c{EBP}.
5620
5621 \b The callee, if it wishes to return a value to the caller, should
5622 leave the value in \c{AL}, \c{AX} or \c{EAX} depending on the size
5623 of the value. Floating-point results are typically returned in
5624 \c{ST0}.
5625
5626 \b Once the callee has finished processing, it restores \c{ESP} from
5627 \c{EBP} if it had allocated local stack space, then pops the previous
5628 value of \c{EBP}, and returns via \c{RET} (equivalently, \c{RETN}).
5629
5630 \b When the caller regains control from the callee, the function
5631 parameters are still on the stack, so it typically adds an immediate
5632 constant to \c{ESP} to remove them (instead of executing a number of
5633 slow \c{POP} instructions). Thus, if a function is accidentally
5634 called with the wrong number of parameters due to a prototype
5635 mismatch, the stack will still be returned to a sensible state since
5636 the caller, which \e{knows} how many parameters it pushed, does the
5637 removing.
5638
5639 There is an alternative calling convention used by Win32 programs
5640 for Windows API calls, and also for functions called \e{by} the
5641 Windows API such as window procedures: they follow what Microsoft
5642 calls the \c{__stdcall} convention. This is slightly closer to the
5643 Pascal convention, in that the callee clears the stack by passing a
5644 parameter to the \c{RET} instruction. However, the parameters are
5645 still pushed in right-to-left order.
5646
5647 Thus, you would define a function in C style in the following way:
5648
5649 \c global  _myfunc
5650 \c
5651 \c _myfunc:
5652 \c         push    ebp
5653 \c         mov     ebp,esp
5654 \c         sub     esp,0x40        ; 64 bytes of local stack space
5655 \c         mov     ebx,[ebp+8]     ; first parameter to function
5656 \c
5657 \c         ; some more code
5658 \c
5659 \c         leave                   ; mov esp,ebp / pop ebp
5660 \c         ret
5661
5662 At the other end of the process, to call a C function from your
5663 assembly code, you would do something like this:
5664
5665 \c extern  _printf
5666 \c
5667 \c         ; and then, further down...
5668 \c
5669 \c         push    dword [myint]   ; one of my integer variables
5670 \c         push    dword mystring  ; pointer into my data segment
5671 \c         call    _printf
5672 \c         add     esp,byte 8      ; `byte' saves space
5673 \c
5674 \c         ; then those data items...
5675 \c
5676 \c segment _DATA
5677 \c
5678 \c myint       dd   1234
5679 \c mystring    db   'This number -> %d <- should be 1234',10,0
5680
5681 This piece of code is the assembly equivalent of the C code
5682
5683 \c     int myint = 1234;
5684 \c     printf("This number -> %d <- should be 1234\n", myint);
5685
5686
5687 \S{32cdata} Accessing Data Items
5688
5689 To get at the contents of C variables, or to declare variables which
5690 C can access, you need only declare the names as \c{GLOBAL} or
5691 \c{EXTERN}. (Again, the names require leading underscores, as stated
5692 in \k{32cunder}.) Thus, a C variable declared as \c{int i} can be
5693 accessed from assembler as
5694
5695 \c           extern _i
5696 \c           mov eax,[_i]
5697
5698 And to declare your own integer variable which C programs can access
5699 as \c{extern int j}, you do this (making sure you are assembling in
5700 the \c{_DATA} segment, if necessary):
5701
5702 \c           global _j
5703 \c _j        dd 0
5704
5705 To access a C array, you need to know the size of the components of
5706 the array. For example, \c{int} variables are four bytes long, so if
5707 a C program declares an array as \c{int a[10]}, you can access
5708 \c{a[3]} by coding \c{mov ax,[_a+12]}. (The byte offset 12 is obtained
5709 by multiplying the desired array index, 3, by the size of the array
5710 element, 4.) The sizes of the C base types in 32-bit compilers are:
5711 1 for \c{char}, 2 for \c{short}, 4 for \c{int}, \c{long} and
5712 \c{float}, and 8 for \c{double}. Pointers, being 32-bit addresses,
5713 are also 4 bytes long.
5714
5715 To access a C \i{data structure}, you need to know the offset from
5716 the base of the structure to the field you are interested in. You
5717 can either do this by converting the C structure definition into a
5718 NASM structure definition (using \c{STRUC}), or by calculating the
5719 one offset and using just that.
5720
5721 To do either of these, you should read your C compiler's manual to
5722 find out how it organizes data structures. NASM gives no special
5723 alignment to structure members in its own \i\c{STRUC} macro, so you
5724 have to specify alignment yourself if the C compiler generates it.
5725 Typically, you might find that a structure like
5726
5727 \c struct {
5728 \c     char c;
5729 \c     int i;
5730 \c } foo;
5731
5732 might be eight bytes long rather than five, since the \c{int} field
5733 would be aligned to a four-byte boundary. However, this sort of
5734 feature is sometimes a configurable option in the C compiler, either
5735 using command-line options or \c{#pragma} lines, so you have to find
5736 out how your own compiler does it.
5737
5738
5739 \S{32cmacro} \i\c{c32.mac}: Helper Macros for the 32-bit C Interface
5740
5741 Included in the NASM archives, in the \I{misc directory}\c{misc}
5742 directory, is a file \c{c32.mac} of macros. It defines three macros:
5743 \i\c{proc}, \i\c{arg} and \i\c{endproc}. These are intended to be
5744 used for C-style procedure definitions, and they automate a lot of
5745 the work involved in keeping track of the calling convention.
5746
5747 An example of an assembly function using the macro set is given
5748 here:
5749
5750 \c proc    _proc32
5751 \c
5752 \c %$i     arg
5753 \c %$j     arg
5754 \c         mov     eax,[ebp + %$i]
5755 \c         mov     ebx,[ebp + %$j]
5756 \c         add     eax,[ebx]
5757 \c
5758 \c endproc
5759
5760 This defines \c{_proc32} to be a procedure taking two arguments, the
5761 first (\c{i}) an integer and the second (\c{j}) a pointer to an
5762 integer. It returns \c{i + *j}.
5763
5764 Note that the \c{arg} macro has an \c{EQU} as the first line of its
5765 expansion, and since the label before the macro call gets prepended
5766 to the first line of the expanded macro, the \c{EQU} works, defining
5767 \c{%$i} to be an offset from \c{BP}. A context-local variable is
5768 used, local to the context pushed by the \c{proc} macro and popped
5769 by the \c{endproc} macro, so that the same argument name can be used
5770 in later procedures. Of course, you don't \e{have} to do that.
5771
5772 \c{arg} can take an optional parameter, giving the size of the
5773 argument. If no size is given, 4 is assumed, since it is likely that
5774 many function parameters will be of type \c{int} or pointers.
5775
5776
5777 \H{picdll} Writing NetBSD/FreeBSD/OpenBSD and Linux/ELF \i{Shared
5778 Libraries}
5779
5780 \c{ELF} replaced the older \c{a.out} object file format under Linux
5781 because it contains support for \i{position-independent code}
5782 (\i{PIC}), which makes writing shared libraries much easier. NASM
5783 supports the \c{ELF} position-independent code features, so you can
5784 write Linux \c{ELF} shared libraries in NASM.
5785
5786 \i{NetBSD}, and its close cousins \i{FreeBSD} and \i{OpenBSD}, take
5787 a different approach by hacking PIC support into the \c{a.out}
5788 format. NASM supports this as the \i\c{aoutb} output format, so you
5789 can write \i{BSD} shared libraries in NASM too.
5790
5791 The operating system loads a PIC shared library by memory-mapping
5792 the library file at an arbitrarily chosen point in the address space
5793 of the running process. The contents of the library's code section
5794 must therefore not depend on where it is loaded in memory.
5795
5796 Therefore, you cannot get at your variables by writing code like
5797 this:
5798
5799 \c         mov     eax,[myvar]             ; WRONG
5800
5801 Instead, the linker provides an area of memory called the
5802 \i\e{global offset table}, or \i{GOT}; the GOT is situated at a
5803 constant distance from your library's code, so if you can find out
5804 where your library is loaded (which is typically done using a
5805 \c{CALL} and \c{POP} combination), you can obtain the address of the
5806 GOT, and you can then load the addresses of your variables out of
5807 linker-generated entries in the GOT.
5808
5809 The \e{data} section of a PIC shared library does not have these
5810 restrictions: since the data section is writable, it has to be
5811 copied into memory anyway rather than just paged in from the library
5812 file, so as long as it's being copied it can be relocated too. So
5813 you can put ordinary types of relocation in the data section without
5814 too much worry (but see \k{picglobal} for a caveat).
5815
5816
5817 \S{picgot} Obtaining the Address of the GOT
5818
5819 Each code module in your shared library should define the GOT as an
5820 external symbol:
5821
5822 \c extern  _GLOBAL_OFFSET_TABLE_   ; in ELF
5823 \c extern  __GLOBAL_OFFSET_TABLE_  ; in BSD a.out
5824
5825 At the beginning of any function in your shared library which plans
5826 to access your data or BSS sections, you must first calculate the
5827 address of the GOT. This is typically done by writing the function
5828 in this form:
5829
5830 \c func:   push    ebp
5831 \c         mov     ebp,esp
5832 \c         push    ebx
5833 \c         call    .get_GOT
5834 \c .get_GOT:
5835 \c         pop     ebx
5836 \c         add     ebx,_GLOBAL_OFFSET_TABLE_+$$-.get_GOT wrt ..gotpc
5837 \c
5838 \c         ; the function body comes here
5839 \c
5840 \c         mov     ebx,[ebp-4]
5841 \c         mov     esp,ebp
5842 \c         pop     ebp
5843 \c         ret
5844
5845 (For BSD, again, the symbol \c{_GLOBAL_OFFSET_TABLE} requires a
5846 second leading underscore.)
5847
5848 The first two lines of this function are simply the standard C
5849 prologue to set up a stack frame, and the last three lines are
5850 standard C function epilogue. The third line, and the fourth to last
5851 line, save and restore the \c{EBX} register, because PIC shared
5852 libraries use this register to store the address of the GOT.
5853
5854 The interesting bit is the \c{CALL} instruction and the following
5855 two lines. The \c{CALL} and \c{POP} combination obtains the address
5856 of the label \c{.get_GOT}, without having to know in advance where
5857 the program was loaded (since the \c{CALL} instruction is encoded
5858 relative to the current position). The \c{ADD} instruction makes use
5859 of one of the special PIC relocation types: \i{GOTPC relocation}.
5860 With the \i\c{WRT ..gotpc} qualifier specified, the symbol
5861 referenced (here \c{_GLOBAL_OFFSET_TABLE_}, the special symbol
5862 assigned to the GOT) is given as an offset from the beginning of the
5863 section. (Actually, \c{ELF} encodes it as the offset from the operand
5864 field of the \c{ADD} instruction, but NASM simplifies this
5865 deliberately, so you do things the same way for both \c{ELF} and
5866 \c{BSD}.) So the instruction then \e{adds} the beginning of the section,
5867 to get the real address of the GOT, and subtracts the value of
5868 \c{.get_GOT} which it knows is in \c{EBX}. Therefore, by the time
5869 that instruction has finished, \c{EBX} contains the address of the GOT.
5870
5871 If you didn't follow that, don't worry: it's never necessary to
5872 obtain the address of the GOT by any other means, so you can put
5873 those three instructions into a macro and safely ignore them:
5874
5875 \c %macro  get_GOT 0
5876 \c
5877 \c         call    %%getgot
5878 \c   %%getgot:
5879 \c         pop     ebx
5880 \c         add     ebx,_GLOBAL_OFFSET_TABLE_+$$-%%getgot wrt ..gotpc
5881 \c
5882 \c %endmacro
5883
5884 \S{piclocal} Finding Your Local Data Items
5885
5886 Having got the GOT, you can then use it to obtain the addresses of
5887 your data items. Most variables will reside in the sections you have
5888 declared; they can be accessed using the \I{GOTOFF
5889 relocation}\c{..gotoff} special \I\c{WRT ..gotoff}\c{WRT} type. The
5890 way this works is like this:
5891
5892 \c         lea     eax,[ebx+myvar wrt ..gotoff]
5893
5894 The expression \c{myvar wrt ..gotoff} is calculated, when the shared
5895 library is linked, to be the offset to the local variable \c{myvar}
5896 from the beginning of the GOT. Therefore, adding it to \c{EBX} as
5897 above will place the real address of \c{myvar} in \c{EAX}.
5898
5899 If you declare variables as \c{GLOBAL} without specifying a size for
5900 them, they are shared between code modules in the library, but do
5901 not get exported from the library to the program that loaded it.
5902 They will still be in your ordinary data and BSS sections, so you
5903 can access them in the same way as local variables, using the above
5904 \c{..gotoff} mechanism.
5905
5906 Note that due to a peculiarity of the way BSD \c{a.out} format
5907 handles this relocation type, there must be at least one non-local
5908 symbol in the same section as the address you're trying to access.
5909
5910
5911 \S{picextern} Finding External and Common Data Items
5912
5913 If your library needs to get at an external variable (external to
5914 the \e{library}, not just to one of the modules within it), you must
5915 use the \I{GOT relocations}\I\c{WRT ..got}\c{..got} type to get at
5916 it. The \c{..got} type, instead of giving you the offset from the
5917 GOT base to the variable, gives you the offset from the GOT base to
5918 a GOT \e{entry} containing the address of the variable. The linker
5919 will set up this GOT entry when it builds the library, and the
5920 dynamic linker will place the correct address in it at load time. So
5921 to obtain the address of an external variable \c{extvar} in \c{EAX},
5922 you would code
5923
5924 \c         mov     eax,[ebx+extvar wrt ..got]
5925
5926 This loads the address of \c{extvar} out of an entry in the GOT. The
5927 linker, when it builds the shared library, collects together every
5928 relocation of type \c{..got}, and builds the GOT so as to ensure it
5929 has every necessary entry present.
5930
5931 Common variables must also be accessed in this way.
5932
5933
5934 \S{picglobal} Exporting Symbols to the Library User
5935
5936 If you want to export symbols to the user of the library, you have
5937 to declare whether they are functions or data, and if they are data,
5938 you have to give the size of the data item. This is because the
5939 dynamic linker has to build \I{PLT}\i{procedure linkage table}
5940 entries for any exported functions, and also moves exported data
5941 items away from the library's data section in which they were
5942 declared.
5943
5944 So to export a function to users of the library, you must use
5945
5946 \c global  func:function           ; declare it as a function
5947 \c
5948 \c func:   push    ebp
5949 \c
5950 \c         ; etc.
5951
5952 And to export a data item such as an array, you would have to code
5953
5954 \c global  array:data array.end-array      ; give the size too
5955 \c
5956 \c array:  resd    128
5957 \c .end:
5958
5959 Be careful: If you export a variable to the library user, by
5960 declaring it as \c{GLOBAL} and supplying a size, the variable will
5961 end up living in the data section of the main program, rather than
5962 in your library's data section, where you declared it. So you will
5963 have to access your own global variable with the \c{..got} mechanism
5964 rather than \c{..gotoff}, as if it were external (which,
5965 effectively, it has become).
5966
5967 Equally, if you need to store the address of an exported global in
5968 one of your data sections, you can't do it by means of the standard
5969 sort of code:
5970
5971 \c dataptr:        dd      global_data_item        ; WRONG
5972
5973 NASM will interpret this code as an ordinary relocation, in which
5974 \c{global_data_item} is merely an offset from the beginning of the
5975 \c{.data} section (or whatever); so this reference will end up
5976 pointing at your data section instead of at the exported global
5977 which resides elsewhere.
5978
5979 Instead of the above code, then, you must write
5980
5981 \c dataptr:        dd      global_data_item wrt ..sym
5982
5983 which makes use of the special \c{WRT} type \I\c{WRT ..sym}\c{..sym}
5984 to instruct NASM to search the symbol table for a particular symbol
5985 at that address, rather than just relocating by section base.
5986
5987 Either method will work for functions: referring to one of your
5988 functions by means of
5989
5990 \c funcptr:        dd      my_function
5991
5992 will give the user the address of the code you wrote, whereas
5993
5994 \c funcptr:        dd      my_function wrt .sym
5995
5996 will give the address of the procedure linkage table for the
5997 function, which is where the calling program will \e{believe} the
5998 function lives. Either address is a valid way to call the function.
5999
6000
6001 \S{picproc} Calling Procedures Outside the Library
6002
6003 Calling procedures outside your shared library has to be done by
6004 means of a \i\e{procedure linkage table}, or \i{PLT}. The PLT is
6005 placed at a known offset from where the library is loaded, so the
6006 library code can make calls to the PLT in a position-independent
6007 way. Within the PLT there is code to jump to offsets contained in
6008 the GOT, so function calls to other shared libraries or to routines
6009 in the main program can be transparently passed off to their real
6010 destinations.
6011
6012 To call an external routine, you must use another special PIC
6013 relocation type, \I{PLT relocations}\i\c{WRT ..plt}. This is much
6014 easier than the GOT-based ones: you simply replace calls such as
6015 \c{CALL printf} with the PLT-relative version \c{CALL printf WRT
6016 ..plt}.
6017
6018
6019 \S{link} Generating the Library File
6020
6021 Having written some code modules and assembled them to \c{.o} files,
6022 you then generate your shared library with a command such as
6023
6024 \c ld -shared -o library.so module1.o module2.o       # for ELF
6025 \c ld -Bshareable -o library.so module1.o module2.o   # for BSD
6026
6027 For ELF, if your shared library is going to reside in system
6028 directories such as \c{/usr/lib} or \c{/lib}, it is usually worth
6029 using the \i\c{-soname} flag to the linker, to store the final
6030 library file name, with a version number, into the library:
6031
6032 \c ld -shared -soname library.so.1 -o library.so.1.2 *.o
6033
6034 You would then copy \c{library.so.1.2} into the library directory,
6035 and create \c{library.so.1} as a symbolic link to it.
6036
6037
6038 \C{mixsize} Mixing 16 and 32 Bit Code
6039
6040 This chapter tries to cover some of the issues, largely related to
6041 unusual forms of addressing and jump instructions, encountered when
6042 writing operating system code such as protected-mode initialisation
6043 routines, which require code that operates in mixed segment sizes,
6044 such as code in a 16-bit segment trying to modify data in a 32-bit
6045 one, or jumps between different-size segments.
6046
6047
6048 \H{mixjump} Mixed-Size Jumps\I{jumps, mixed-size}
6049
6050 \I{operating system, writing}\I{writing operating systems}The most
6051 common form of \i{mixed-size instruction} is the one used when
6052 writing a 32-bit OS: having done your setup in 16-bit mode, such as
6053 loading the kernel, you then have to boot it by switching into
6054 protected mode and jumping to the 32-bit kernel start address. In a
6055 fully 32-bit OS, this tends to be the \e{only} mixed-size
6056 instruction you need, since everything before it can be done in pure
6057 16-bit code, and everything after it can be pure 32-bit.
6058
6059 This jump must specify a 48-bit far address, since the target
6060 segment is a 32-bit one. However, it must be assembled in a 16-bit
6061 segment, so just coding, for example,
6062
6063 \c         jmp     0x1234:0x56789ABC       ; wrong!
6064
6065 will not work, since the offset part of the address will be
6066 truncated to \c{0x9ABC} and the jump will be an ordinary 16-bit far
6067 one.
6068
6069 The Linux kernel setup code gets round the inability of \c{as86} to
6070 generate the required instruction by coding it manually, using
6071 \c{DB} instructions. NASM can go one better than that, by actually
6072 generating the right instruction itself. Here's how to do it right:
6073
6074 \c         jmp     dword 0x1234:0x56789ABC         ; right
6075
6076 \I\c{JMP DWORD}The \c{DWORD} prefix (strictly speaking, it should
6077 come \e{after} the colon, since it is declaring the \e{offset} field
6078 to be a doubleword; but NASM will accept either form, since both are
6079 unambiguous) forces the offset part to be treated as far, in the
6080 assumption that you are deliberately writing a jump from a 16-bit
6081 segment to a 32-bit one.
6082
6083 You can do the reverse operation, jumping from a 32-bit segment to a
6084 16-bit one, by means of the \c{WORD} prefix:
6085
6086 \c         jmp     word 0x8765:0x4321      ; 32 to 16 bit
6087
6088 If the \c{WORD} prefix is specified in 16-bit mode, or the \c{DWORD}
6089 prefix in 32-bit mode, they will be ignored, since each is
6090 explicitly forcing NASM into a mode it was in anyway.
6091
6092
6093 \H{mixaddr} Addressing Between Different-Size Segments\I{addressing,
6094 mixed-size}\I{mixed-size addressing}
6095
6096 If your OS is mixed 16 and 32-bit, or if you are writing a DOS
6097 extender, you are likely to have to deal with some 16-bit segments
6098 and some 32-bit ones. At some point, you will probably end up
6099 writing code in a 16-bit segment which has to access data in a
6100 32-bit segment, or vice versa.
6101
6102 If the data you are trying to access in a 32-bit segment lies within
6103 the first 64K of the segment, you may be able to get away with using
6104 an ordinary 16-bit addressing operation for the purpose; but sooner
6105 or later, you will want to do 32-bit addressing from 16-bit mode.
6106
6107 The easiest way to do this is to make sure you use a register for
6108 the address, since any effective address containing a 32-bit
6109 register is forced to be a 32-bit address. So you can do
6110
6111 \c         mov     eax,offset_into_32_bit_segment_specified_by_fs
6112 \c         mov     dword [fs:eax],0x11223344
6113
6114 This is fine, but slightly cumbersome (since it wastes an
6115 instruction and a register) if you already know the precise offset
6116 you are aiming at. The x86 architecture does allow 32-bit effective
6117 addresses to specify nothing but a 4-byte offset, so why shouldn't
6118 NASM be able to generate the best instruction for the purpose?
6119
6120 It can. As in \k{mixjump}, you need only prefix the address with the
6121 \c{DWORD} keyword, and it will be forced to be a 32-bit address:
6122
6123 \c         mov     dword [fs:dword my_offset],0x11223344
6124
6125 Also as in \k{mixjump}, NASM is not fussy about whether the
6126 \c{DWORD} prefix comes before or after the segment override, so
6127 arguably a nicer-looking way to code the above instruction is
6128
6129 \c         mov     dword [dword fs:my_offset],0x11223344
6130
6131 Don't confuse the \c{DWORD} prefix \e{outside} the square brackets,
6132 which controls the size of the data stored at the address, with the
6133 one \c{inside} the square brackets which controls the length of the
6134 address itself. The two can quite easily be different:
6135
6136 \c         mov     word [dword 0x12345678],0x9ABC
6137
6138 This moves 16 bits of data to an address specified by a 32-bit
6139 offset.
6140
6141 You can also specify \c{WORD} or \c{DWORD} prefixes along with the
6142 \c{FAR} prefix to indirect far jumps or calls. For example:
6143
6144 \c         call    dword far [fs:word 0x4321]
6145
6146 This instruction contains an address specified by a 16-bit offset;
6147 it loads a 48-bit far pointer from that (16-bit segment and 32-bit
6148 offset), and calls that address.
6149
6150
6151 \H{mixother} Other Mixed-Size Instructions
6152
6153 The other way you might want to access data might be using the
6154 string instructions (\c{LODSx}, \c{STOSx} and so on) or the
6155 \c{XLATB} instruction. These instructions, since they take no
6156 parameters, might seem to have no easy way to make them perform
6157 32-bit addressing when assembled in a 16-bit segment.
6158
6159 This is the purpose of NASM's \i\c{a16} and \i\c{a32} prefixes. If
6160 you are coding \c{LODSB} in a 16-bit segment but it is supposed to
6161 be accessing a string in a 32-bit segment, you should load the
6162 desired address into \c{ESI} and then code
6163
6164 \c         a32     lodsb
6165
6166 The prefix forces the addressing size to 32 bits, meaning that
6167 \c{LODSB} loads from \c{[DS:ESI]} instead of \c{[DS:SI]}. To access
6168 a string in a 16-bit segment when coding in a 32-bit one, the
6169 corresponding \c{a16} prefix can be used.
6170
6171 The \c{a16} and \c{a32} prefixes can be applied to any instruction
6172 in NASM's instruction table, but most of them can generate all the
6173 useful forms without them. The prefixes are necessary only for
6174 instructions with implicit addressing:
6175 \# \c{CMPSx} (\k{insCMPSB}),
6176 \# \c{SCASx} (\k{insSCASB}), \c{LODSx} (\k{insLODSB}), \c{STOSx}
6177 \# (\k{insSTOSB}), \c{MOVSx} (\k{insMOVSB}), \c{INSx} (\k{insINSB}),
6178 \# \c{OUTSx} (\k{insOUTSB}), and \c{XLATB} (\k{insXLATB}).
6179 \c{CMPSx}, \c{SCASx}, \c{LODSx}, \c{STOSx}, \c{MOVSx}, \c{INSx},
6180 \c{OUTSx}, and \c{XLATB}.
6181 Also, the
6182 various push and pop instructions (\c{PUSHA} and \c{POPF} as well as
6183 the more usual \c{PUSH} and \c{POP}) can accept \c{a16} or \c{a32}
6184 prefixes to force a particular one of \c{SP} or \c{ESP} to be used
6185 as a stack pointer, in case the stack segment in use is a different
6186 size from the code segment.
6187
6188 \c{PUSH} and \c{POP}, when applied to segment registers in 32-bit
6189 mode, also have the slightly odd behaviour that they push and pop 4
6190 bytes at a time, of which the top two are ignored and the bottom two
6191 give the value of the segment register being manipulated. To force
6192 the 16-bit behaviour of segment-register push and pop instructions,
6193 you can use the operand-size prefix \i\c{o16}:
6194
6195 \c         o16 push    ss
6196 \c         o16 push    ds
6197
6198 This code saves a doubleword of stack space by fitting two segment
6199 registers into the space which would normally be consumed by pushing
6200 one.
6201
6202 (You can also use the \i\c{o32} prefix to force the 32-bit behaviour
6203 when in 16-bit mode, but this seems less useful.)
6204
6205
6206 \C{64bit} Writing 64-bit Code (Unix, Win64)
6207
6208 This chapter attempts to cover some of the common issues involved when
6209 writing 64-bit code, to run under \i{Win64} or Unix.  It covers how to
6210 write assembly code to interface with 64-bit C routines, and how to
6211 write position-independent code for shared libraries.
6212
6213 All 64-bit code uses a flat memory model, since segmentation is not
6214 available in 64-bit mode.  The one exception is the \c{FS} and \c{GS}
6215 registers, which still add their bases.
6216
6217 Position independence in 64-bit mode is significantly simpler, since
6218 the processor supports \c{RIP}-relative addressing directly; see the
6219 \c{REL} keyword (\k{effaddr}).
6220
6221 64-bit programming is relatively similar to 32-bit programming, but
6222 of course pointers are 64 bits long; additionally, all existing
6223 platforms pass arguments in registers rather than on the stack.
6224 Furthermore, 64-bit platforms use SSE2 by default for floating point.
6225 Please see the ABI documentation for your platform.
6226
6227
6228 \C{trouble} Troubleshooting
6229
6230 This chapter describes some of the common problems that users have
6231 been known to encounter with NASM, and answers them. It also gives
6232 instructions for reporting bugs in NASM if you find a difficulty
6233 that isn't listed here.
6234
6235
6236 \H{problems} Common Problems
6237
6238 \S{inefficient} NASM Generates \i{Inefficient Code}
6239
6240 We sometimes get `bug' reports about NASM generating inefficient, or
6241 even `wrong', code on instructions such as \c{ADD ESP,8}. This is a
6242 deliberate design feature, connected to predictability of output:
6243 NASM, on seeing \c{ADD ESP,8}, will generate the form of the
6244 instruction which leaves room for a 32-bit offset. You need to code
6245 \I\c{BYTE}\c{ADD ESP,BYTE 8} if you want the space-efficient form of
6246 the instruction. This isn't a bug, it's user error: if you prefer to
6247 have NASM produce the more efficient code automatically enable
6248 optimization with the \c{-On} option (see \k{opt-On}).
6249
6250
6251 \S{jmprange} My Jumps are Out of Range\I{out of range, jumps}
6252
6253 Similarly, people complain that when they issue \i{conditional
6254 jumps} (which are \c{SHORT} by default) that try to jump too far,
6255 NASM reports `short jump out of range' instead of making the jumps
6256 longer.
6257
6258 This, again, is partly a predictability issue, but in fact has a
6259 more practical reason as well. NASM has no means of being told what
6260 type of processor the code it is generating will be run on; so it
6261 cannot decide for itself that it should generate \i\c{Jcc NEAR} type
6262 instructions, because it doesn't know that it's working for a 386 or
6263 above. Alternatively, it could replace the out-of-range short
6264 \c{JNE} instruction with a very short \c{JE} instruction that jumps
6265 over a \c{JMP NEAR}; this is a sensible solution for processors
6266 below a 386, but hardly efficient on processors which have good
6267 branch prediction \e{and} could have used \c{JNE NEAR} instead. So,
6268 once again, it's up to the user, not the assembler, to decide what
6269 instructions should be generated. See \k{opt-On}.
6270
6271
6272 \S{proborg} \i\c{ORG} Doesn't Work
6273
6274 People writing \i{boot sector} programs in the \c{bin} format often
6275 complain that \c{ORG} doesn't work the way they'd like: in order to
6276 place the \c{0xAA55} signature word at the end of a 512-byte boot
6277 sector, people who are used to MASM tend to code
6278
6279 \c         ORG 0
6280 \c
6281 \c         ; some boot sector code
6282 \c
6283 \c         ORG 510
6284 \c         DW 0xAA55
6285
6286 This is not the intended use of the \c{ORG} directive in NASM, and
6287 will not work. The correct way to solve this problem in NASM is to
6288 use the \i\c{TIMES} directive, like this:
6289
6290 \c         ORG 0
6291 \c
6292 \c         ; some boot sector code
6293 \c
6294 \c         TIMES 510-($-$$) DB 0
6295 \c         DW 0xAA55
6296
6297 The \c{TIMES} directive will insert exactly enough zero bytes into
6298 the output to move the assembly point up to 510. This method also
6299 has the advantage that if you accidentally fill your boot sector too
6300 full, NASM will catch the problem at assembly time and report it, so
6301 you won't end up with a boot sector that you have to disassemble to
6302 find out what's wrong with it.
6303
6304
6305 \S{probtimes} \i\c{TIMES} Doesn't Work
6306
6307 The other common problem with the above code is people who write the
6308 \c{TIMES} line as
6309
6310 \c         TIMES 510-$ DB 0
6311
6312 by reasoning that \c{$} should be a pure number, just like 510, so
6313 the difference between them is also a pure number and can happily be
6314 fed to \c{TIMES}.
6315
6316 NASM is a \e{modular} assembler: the various component parts are
6317 designed to be easily separable for re-use, so they don't exchange
6318 information unnecessarily. In consequence, the \c{bin} output
6319 format, even though it has been told by the \c{ORG} directive that
6320 the \c{.text} section should start at 0, does not pass that
6321 information back to the expression evaluator. So from the
6322 evaluator's point of view, \c{$} isn't a pure number: it's an offset
6323 from a section base. Therefore the difference between \c{$} and 510
6324 is also not a pure number, but involves a section base. Values
6325 involving section bases cannot be passed as arguments to \c{TIMES}.
6326
6327 The solution, as in the previous section, is to code the \c{TIMES}
6328 line in the form
6329
6330 \c         TIMES 510-($-$$) DB 0
6331
6332 in which \c{$} and \c{$$} are offsets from the same section base,
6333 and so their difference is a pure number. This will solve the
6334 problem and generate sensible code.
6335
6336
6337 \H{bugs} \i{Bugs}\I{reporting bugs}
6338
6339 We have never yet released a version of NASM with any \e{known}
6340 bugs. That doesn't usually stop there being plenty we didn't know
6341 about, though. Any that you find should be reported firstly via the
6342 \i\c{bugtracker} at
6343 \W{https://sourceforge.net/projects/nasm/}\c{https://sourceforge.net/projects/nasm/}
6344 (click on "Bugs"), or if that fails then through one of the
6345 contacts in \k{contact}.
6346
6347 Please read \k{qstart} first, and don't report the bug if it's
6348 listed in there as a deliberate feature. (If you think the feature
6349 is badly thought out, feel free to send us reasons why you think it
6350 should be changed, but don't just send us mail saying `This is a
6351 bug' if the documentation says we did it on purpose.) Then read
6352 \k{problems}, and don't bother reporting the bug if it's listed
6353 there.
6354
6355 If you do report a bug, \e{please} give us all of the following
6356 information:
6357
6358 \b What operating system you're running NASM under. DOS, Linux,
6359 NetBSD, Win16, Win32, VMS (I'd be impressed), whatever.
6360
6361 \b If you're running NASM under DOS or Win32, tell us whether you've
6362 compiled your own executable from the DOS source archive, or whether
6363 you were using the standard distribution binaries out of the
6364 archive. If you were using a locally built executable, try to
6365 reproduce the problem using one of the standard binaries, as this
6366 will make it easier for us to reproduce your problem prior to fixing
6367 it.
6368
6369 \b Which version of NASM you're using, and exactly how you invoked
6370 it. Give us the precise command line, and the contents of the
6371 \c{NASMENV} environment variable if any.
6372
6373 \b Which versions of any supplementary programs you're using, and
6374 how you invoked them. If the problem only becomes visible at link
6375 time, tell us what linker you're using, what version of it you've
6376 got, and the exact linker command line. If the problem involves
6377 linking against object files generated by a compiler, tell us what
6378 compiler, what version, and what command line or options you used.
6379 (If you're compiling in an IDE, please try to reproduce the problem
6380 with the command-line version of the compiler.)
6381
6382 \b If at all possible, send us a NASM source file which exhibits the
6383 problem. If this causes copyright problems (e.g. you can only
6384 reproduce the bug in restricted-distribution code) then bear in mind
6385 the following two points: firstly, we guarantee that any source code
6386 sent to us for the purposes of debugging NASM will be used \e{only}
6387 for the purposes of debugging NASM, and that we will delete all our
6388 copies of it as soon as we have found and fixed the bug or bugs in
6389 question; and secondly, we would prefer \e{not} to be mailed large
6390 chunks of code anyway. The smaller the file, the better. A
6391 three-line sample file that does nothing useful \e{except}
6392 demonstrate the problem is much easier to work with than a
6393 fully fledged ten-thousand-line program. (Of course, some errors
6394 \e{do} only crop up in large files, so this may not be possible.)
6395
6396 \b A description of what the problem actually \e{is}. `It doesn't
6397 work' is \e{not} a helpful description! Please describe exactly what
6398 is happening that shouldn't be, or what isn't happening that should.
6399 Examples might be: `NASM generates an error message saying Line 3
6400 for an error that's actually on Line 5'; `NASM generates an error
6401 message that I believe it shouldn't be generating at all'; `NASM
6402 fails to generate an error message that I believe it \e{should} be
6403 generating'; `the object file produced from this source code crashes
6404 my linker'; `the ninth byte of the output file is 66 and I think it
6405 should be 77 instead'.
6406
6407 \b If you believe the output file from NASM to be faulty, send it to
6408 us. That allows us to determine whether our own copy of NASM
6409 generates the same file, or whether the problem is related to
6410 portability issues between our development platforms and yours. We
6411 can handle binary files mailed to us as MIME attachments, uuencoded,
6412 and even BinHex. Alternatively, we may be able to provide an FTP
6413 site you can upload the suspect files to; but mailing them is easier
6414 for us.
6415
6416 \b Any other information or data files that might be helpful. If,
6417 for example, the problem involves NASM failing to generate an object
6418 file while TASM can generate an equivalent file without trouble,
6419 then send us \e{both} object files, so we can see what TASM is doing
6420 differently from us.
6421
6422
6423 \A{ndisasm} \i{Ndisasm}
6424
6425                   The Netwide Disassembler, NDISASM
6426
6427 \H{ndisintro} Introduction
6428
6429
6430 The Netwide Disassembler is a small companion program to the Netwide
6431 Assembler, NASM. It seemed a shame to have an x86 assembler,
6432 complete with a full instruction table, and not make as much use of
6433 it as possible, so here's a disassembler which shares the
6434 instruction table (and some other bits of code) with NASM.
6435
6436 The Netwide Disassembler does nothing except to produce
6437 disassemblies of \e{binary} source files. NDISASM does not have any
6438 understanding of object file formats, like \c{objdump}, and it will
6439 not understand \c{DOS .EXE} files like \c{debug} will. It just
6440 disassembles.
6441
6442
6443 \H{ndisstart} Getting Started: Installation
6444
6445 See \k{install} for installation instructions. NDISASM, like NASM,
6446 has a \c{man page} which you may want to put somewhere useful, if you
6447 are on a Unix system.
6448
6449
6450 \H{ndisrun} Running NDISASM
6451
6452 To disassemble a file, you will typically use a command of the form
6453
6454 \c        ndisasm -b {16|32|64} filename
6455
6456 NDISASM can disassemble 16-, 32- or 64-bit code equally easily,
6457 provided of course that you remember to specify which it is to work
6458 with. If no \i\c{-b} switch is present, NDISASM works in 16-bit mode
6459 by default. The \i\c{-u} switch (for USE32) also invokes 32-bit mode.
6460
6461 Two more command line options are \i\c{-r} which reports the version
6462 number of NDISASM you are running, and \i\c{-h} which gives a short
6463 summary of command line options.
6464
6465
6466 \S{ndiscom} COM Files: Specifying an Origin
6467
6468 To disassemble a \c{DOS .COM} file correctly, a disassembler must assume
6469 that the first instruction in the file is loaded at address \c{0x100},
6470 rather than at zero. NDISASM, which assumes by default that any file
6471 you give it is loaded at zero, will therefore need to be informed of
6472 this.
6473
6474 The \i\c{-o} option allows you to declare a different origin for the
6475 file you are disassembling. Its argument may be expressed in any of
6476 the NASM numeric formats: decimal by default, if it begins with `\c{$}'
6477 or `\c{0x}' or ends in `\c{H}' it's \c{hex}, if it ends in `\c{Q}' it's
6478 \c{octal}, and if it ends in `\c{B}' it's \c{binary}.
6479
6480 Hence, to disassemble a \c{.COM} file:
6481
6482 \c        ndisasm -o100h filename.com
6483
6484 will do the trick.
6485
6486
6487 \S{ndissync} Code Following Data: Synchronisation
6488
6489 Suppose you are disassembling a file which contains some data which
6490 isn't machine code, and \e{then} contains some machine code. NDISASM
6491 will faithfully plough through the data section, producing machine
6492 instructions wherever it can (although most of them will look
6493 bizarre, and some may have unusual prefixes, e.g. `\c{FS OR AX,0x240A}'),
6494 and generating `DB' instructions ever so often if it's totally stumped.
6495 Then it will reach the code section.
6496
6497 Supposing NDISASM has just finished generating a strange machine
6498 instruction from part of the data section, and its file position is
6499 now one byte \e{before} the beginning of the code section. It's
6500 entirely possible that another spurious instruction will get
6501 generated, starting with the final byte of the data section, and
6502 then the correct first instruction in the code section will not be
6503 seen because the starting point skipped over it. This isn't really
6504 ideal.
6505
6506 To avoid this, you can specify a `\i\c{synchronisation}' point, or indeed
6507 as many synchronisation points as you like (although NDISASM can
6508 only handle 8192 sync points internally). The definition of a sync
6509 point is this: NDISASM guarantees to hit sync points exactly during
6510 disassembly. If it is thinking about generating an instruction which
6511 would cause it to jump over a sync point, it will discard that
6512 instruction and output a `\c{db}' instead. So it \e{will} start
6513 disassembly exactly from the sync point, and so you \e{will} see all
6514 the instructions in your code section.
6515
6516 Sync points are specified using the \i\c{-s} option: they are measured
6517 in terms of the program origin, not the file position. So if you
6518 want to synchronize after 32 bytes of a \c{.COM} file, you would have to
6519 do
6520
6521 \c        ndisasm -o100h -s120h file.com
6522
6523 rather than
6524
6525 \c        ndisasm -o100h -s20h file.com
6526
6527 As stated above, you can specify multiple sync markers if you need
6528 to, just by repeating the \c{-s} option.
6529
6530
6531 \S{ndisisync} Mixed Code and Data: Automatic (Intelligent) Synchronisation
6532 \I\c{auto-sync}
6533
6534 Suppose you are disassembling the boot sector of a \c{DOS} floppy (maybe
6535 it has a virus, and you need to understand the virus so that you
6536 know what kinds of damage it might have done you). Typically, this
6537 will contain a \c{JMP} instruction, then some data, then the rest of the
6538 code. So there is a very good chance of NDISASM being \e{misaligned}
6539 when the data ends and the code begins. Hence a sync point is
6540 needed.
6541
6542 On the other hand, why should you have to specify the sync point
6543 manually? What you'd do in order to find where the sync point would
6544 be, surely, would be to read the \c{JMP} instruction, and then to use
6545 its target address as a sync point. So can NDISASM do that for you?
6546
6547 The answer, of course, is yes: using either of the synonymous
6548 switches \i\c{-a} (for automatic sync) or \i\c{-i} (for intelligent
6549 sync) will enable \c{auto-sync} mode. Auto-sync mode automatically
6550 generates a sync point for any forward-referring PC-relative jump or
6551 call instruction that NDISASM encounters. (Since NDISASM is one-pass,
6552 if it encounters a PC-relative jump whose target has already been
6553 processed, there isn't much it can do about it...)
6554
6555 Only PC-relative jumps are processed, since an absolute jump is
6556 either through a register (in which case NDISASM doesn't know what
6557 the register contains) or involves a segment address (in which case
6558 the target code isn't in the same segment that NDISASM is working
6559 in, and so the sync point can't be placed anywhere useful).
6560
6561 For some kinds of file, this mechanism will automatically put sync
6562 points in all the right places, and save you from having to place
6563 any sync points manually. However, it should be stressed that
6564 auto-sync mode is \e{not} guaranteed to catch all the sync points, and
6565 you may still have to place some manually.
6566
6567 Auto-sync mode doesn't prevent you from declaring manual sync
6568 points: it just adds automatically generated ones to the ones you
6569 provide. It's perfectly feasible to specify \c{-i} \e{and} some \c{-s}
6570 options.
6571
6572 Another caveat with auto-sync mode is that if, by some unpleasant
6573 fluke, something in your data section should disassemble to a
6574 PC-relative call or jump instruction, NDISASM may obediently place a
6575 sync point in a totally random place, for example in the middle of
6576 one of the instructions in your code section. So you may end up with
6577 a wrong disassembly even if you use auto-sync. Again, there isn't
6578 much I can do about this. If you have problems, you'll have to use
6579 manual sync points, or use the \c{-k} option (documented below) to
6580 suppress disassembly of the data area.
6581
6582
6583 \S{ndisother} Other Options
6584
6585 The \i\c{-e} option skips a header on the file, by ignoring the first N
6586 bytes. This means that the header is \e{not} counted towards the
6587 disassembly offset: if you give \c{-e10 -o10}, disassembly will start
6588 at byte 10 in the file, and this will be given offset 10, not 20.
6589
6590 The \i\c{-k} option is provided with two comma-separated numeric
6591 arguments, the first of which is an assembly offset and the second
6592 is a number of bytes to skip. This \e{will} count the skipped bytes
6593 towards the assembly offset: its use is to suppress disassembly of a
6594 data section which wouldn't contain anything you wanted to see
6595 anyway.
6596
6597
6598 \H{ndisbugs} Bugs and Improvements
6599
6600 There are no known bugs. However, any you find, with patches if
6601 possible, should be sent to
6602 \W{mailto:nasm-bugs@lists.sourceforge.net}\c{nasm-bugs@lists.sourceforge.net}, or to the
6603 developer's site at
6604 \W{https://sourceforge.net/projects/nasm/}\c{https://sourceforge.net/projects/nasm/}
6605 and we'll try to fix them. Feel free to send contributions and
6606 new features as well.
6607
6608 Future plans include awareness of which processors certain
6609 instructions will run on, and marking of instructions that are too
6610 advanced for some processor (or are \c{FPU} instructions, or are
6611 undocumented opcodes, or are privileged protected-mode instructions,
6612 or whatever).
6613
6614 That's All Folks!
6615
6616 I hope NDISASM is of some use to somebody. Including me. :-)
6617
6618 I don't recommend taking NDISASM apart to see how an efficient
6619 disassembler works, because as far as I know, it isn't an efficient
6620 one anyway. You have been warned.
6621