NASM 0.98p3-hpa
[nasm/avx512.git] / nasm.1
blob051da482bb291edfd3ba7905aed43c67e7802fa7
1 .TH NASM 1 "The Netwide Assembler Project"
2 .SH NAME
3 nasm \- the Netwide Assembler \- portable 80x86 assembler
4 .SH SYNOPSIS
5 .B nasm
7 .B \-f
8 format
9 ] [
10 .B \-o
11 outfile
12 ] [
13 .IR options ...
14 ] infile
15 .br
16 .B nasm \-h
17 .br
18 .B nasm \-r
19 .SH DESCRIPTION
20 The
21 .B nasm
22 command assembles the file
23 .I infile
24 and directs output to the file
25 .I outfile
26 if specified. If
27 .I outfile
28 is not specified,
29 .B nasm
30 will derive a default output file name from the name of its input
31 file, usually by appending `.o' or `.obj', or by removing all
32 extensions for a raw binary file. Failing that, the output file name
33 will be `nasm.out'.
34 .SS OPTIONS
35 .TP
36 .B \-h
37 Causes
38 .B nasm
39 to exit immediately, after giving a summary of its invocation
40 options, and listing all its supported output file formats.
41 .TP
42 .B \-a
43 Causes
44 .B nasm
45 to assemble the given input file without first applying the macro
46 preprocessor.
47 .TP
48 .B \-e
49 Causes
50 .B nasm
51 to preprocess the given input file, and write the output to
52 .I stdout
53 (or the specified output file name), and not actually assemble
54 anything.
55 .TP
56 .BI \-r
57 Causes
58 .B nasm
59 to exit immediately, after displaying its version number.
60 .TP
61 .BI \-f " format"
62 Specifies the output file format. Formats include
63 .IR bin ,
64 to produce flat-form binary files, and
65 .I aout
66 and
67 .I elf
68 to produce Linux a.out and ELF object files, respectively.
69 .TP
70 .BI \-o " outfile"
71 Specifies a precise name for the output file, overriding
72 .BR nasm 's
73 default means of determining it.
74 .TP
75 .BI \-l " listfile"
76 Causes an assembly listing to be directed to the given file, in
77 which the original source is displayed on the right hand side (plus
78 the source for included files and the expansions of multi-line
79 macros) and the generated code is shown in hex on the left.
80 .TP
81 .B \-s
82 Causes
83 .B nasm
84 to send its error messages and/or help text to
85 .I stdout
86 instead of
87 .IR stderr .
88 .TP
89 .BI \-w [+-]foo
90 Causes
91 .B nasm
92 to enable or disable certain classes of warning messages, for
93 example
94 .B \-w+orphan-labels
96 .B \-w-macro-params
97 to, respectively, enable warnings about labels alone on lines or
98 disable warnings about incorrect numbers of parameters in macro
99 calls.
101 .BI \-i " directory"
102 Adds a directory to the search path for include files. The directory
103 specification must include the trailing slash, as it will be
104 directly prepended to the name of the include file.
106 .BI \-p " file"
107 Specifies a file to be pre-included, before the main source file
108 starts to be processed.
110 .BI \-d " macro[=value]"
111 Pre-defines a single-line macro.
114 .SS SYNTAX
115 This man page does not fully describe the syntax of
116 .BR nasm 's
117 assembly language, but does give a summary of the differences from
118 other assemblers.
120 .I Registers
121 have no leading `%' sign, unlike
122 .BR gas ,
123 and floating-point stack registers are referred to as
124 .IR st0 ,
125 .IR st1 ,
126 and so on.
128 .I Floating-point instructions
129 may use either the single-operand form or the double. A
130 .I TO
131 keyword is provided; thus, one could either write
133 .ti +15n
134 fadd st0,st1
136 .ti +15n
137 fadd st1,st0
139 or one could use the alternative single-operand forms
141 .ti +15n
142 fadd st1
144 .ti +15n
145 fadd to st1
147 .I Uninitialised storage
148 is reserved using the
149 .IR RESB ,
150 .IR RESW ,
151 .IR RESD ,
152 .I RESQ
154 .I REST
155 pseudo-opcodes, each taking one parameter which gives the number of
156 bytes, words, doublewords, quadwords or ten-byte words to reserve.
158 .I Repetition
159 of data items is not done by the
160 .I DUP
161 keyword as seen in DOS assemblers, but by the use of the
162 .I TIMES
163 prefix, like this:
165 .ti +6n
166 .ta 9n
167 message:        times 3 db 'abc'
169 .ti +15n
170 times 64-$+message db 0
172 which defines the string `abcabcabc', followed by the right number
173 of zero bytes to make the total length up to 64 bytes.
175 .I Symbol references
176 are always understood to be immediate (i.e. the address of the
177 symbol), unless square brackets are used, in which case the contents
178 of the memory location are used. Thus:
180 .ti +15n
181 mov ax,wordvar
183 loads AX with the address of the variable `wordvar', whereas
185 .ti +15n
186 mov ax,[wordvar]
188 .ti +15n
189 mov ax,[wordvar+1]
191 .ti +15n
192 mov ax,[es:wordvar+bx]
194 all refer to the
195 .I contents
196 of memory locations. The syntaxes
198 .ti +15n
199 mov ax,es:wordvar[bx]
201 .ti +15n
202 es mov ax,wordvar[1]
204 are not legal at all, although the use of a segment register name as
205 an instruction prefix is valid, and can be used with instructions
206 such as
207 .I LODSB
208 which can't be overridden any other way.
210 .I Constants
211 may be expressed numerically in most formats: a trailing H, Q or B
212 denotes hex, octal or binary respectively, and a leading `0x' or `$'
213 denotes hex as well. Leading zeros are not treated specially at all.
214 Character constants may be enclosed in single or double quotes;
215 there is no escape character. The ordering is little-endian
216 (reversed), so that the character constant
217 .I 'abcd'
218 denotes 0x64636261 and not 0x61626364.
220 .I Local labels
221 begin with a period, and their `locality' is granted by the
222 assembler prepending the name of the previous non-local symbol. Thus
223 declaring a label `.loop' after a label `label' has actually defined
224 a symbol called `label.loop'.
225 .SS DIRECTIVES
226 .I SECTION name
228 .I SEGMENT name
229 causes
230 .B nasm
231 to direct all following code to the named section. Section names
232 vary with output file format, although most formats support the
233 names
234 .IR .text ,
235 .I .data
237 .IR .bss .
238 (The exception is the
239 .I obj
240 format, in which all segments are user-definable.)
242 .I ABSOLUTE address
243 causes
244 .B nasm
245 to position its notional assembly point at an absolute address: so
246 no code or data may be generated, but you can use
247 .IR RESB ,
248 .I RESW
250 .I RESD
251 to move the assembly point further on, and you can define labels. So
252 this directive may be used to define data structures. When you have
253 finished doing absolute assembly, you must issue another
254 .I SECTION
255 directive to return to normal assembly.
257 .I BITS 16
259 .I BITS 32
260 switches the default processor mode for which
261 .B nasm
262 is generating code: it is equivalent to
263 .I USE16
265 .I USE32
266 in DOS assemblers.
268 .I EXTERN symbol
270 .I GLOBAL symbol
271 import and export symbol definitions, respectively, from and to
272 other modules. Note that the
273 .I GLOBAL
274 directive must appear before the definition of the symbol it refers
277 .I STRUC strucname
279 .IR ENDSTRUC ,
280 when used to bracket a number of
281 .IR RESB ,
282 .I RESW
283 or similar instructions, define a data structure. In addition to
284 defining the offsets of the structure members, the construct also
285 defines a symbol for the size of the structure, which is simply the
286 structure name with
287 .I _size
288 tacked on to the end.
289 .SS FORMAT-SPECIFIC DIRECTIVES
290 .I ORG address
291 is used by the
292 .I bin
293 flat-form binary output format, and specifies the address at which
294 the output code will eventually be loaded.
296 .I GROUP grpname seg1 seg2...
297 is used by the
298 .I obj
299 (Microsoft 16-bit) output format, and defines segment groups. This
300 format also uses
301 .IR UPPERCASE ,
302 which directs that all segment, group and symbol names output to the
303 object file should be in uppercase. Note that the actual assembly is
304 still case sensitive.
306 .I LIBRARY libname
307 is used by the
308 .I rdf
309 output format, and causes a dependency record to be written to the
310 output file which indicates that the program requires a certain
311 library in order to run.
312 .SS MACRO PREPROCESSOR
313 Single-line macros are defined using the
314 .I %define
316 .I %idefine
317 commands, in a similar fashion to the C preprocessor. They can be
318 overloaded with respect to number of parameters, although defining a
319 macro with no parameters prevents the definition of any macro with
320 the same name taking parameters, and vice versa.
321 .I %define
322 defines macros whose names match case-sensitively, whereas
323 .I %idefine
324 defines case-insensitive macros.
326 Multi-line macros are defined using
327 .I %macro
329 .I %imacro
330 (the distinction is the same as that between
331 .I %define
333 .IR %idefine ),
334 whose syntax is as follows:
336 .ti +6n
337 %macro
338 .I name
339 .IR minprm [- maxprm "][+][.nolist] [" defaults ]
341 .ti +15n
342 <some lines of macro expansion text>
344 .ti +6n
345 %endmacro
347 Again, these macros may be overloaded. The trailing plus sign
348 indicates that any parameters after the last one get subsumed, with
349 their separating commas, into the last parameter. The
350 .I defaults
351 part can be used to specify defaults for unspecified macro
352 parameters after
353 .IR minparam .
354 .I %endm
355 is a valid synonym for
356 .IR %endmacro .
358 To refer to the macro parameters within a macro expansion, you use
359 .IR %1 ,
360 .I %2
361 and so on. You can also enforce that a macro parameter should
362 contain a condition code by using
363 .IR %+1 ,
364 and you can invert the condition code by using
365 .IR %-1 .
366 You can also define a label specific to a macro invocation by
367 prefixing it with a double % sign.
369 Files can be included using the
370 .I %include
371 directive, which works like C.
373 The preprocessor has a `context stack', which may be used by one
374 macro to store information that a later one will retrieve. You can
375 push a context on the stack using
376 .IR %push ,
377 remove one using
378 .IR %pop ,
379 and change the name of the top context (without disturbing any
380 associated definitions) using
381 .IR %repl .
382 Labels and
383 .I %define
384 macros specific to the top context may be defined by prefixing their
385 names with %$, and things specific to the next context down with
386 %$$, and so on.
388 Conditional assembly is done by means of
389 .IR %ifdef ,
390 .IR %ifndef ,
391 .I %else
393 .I %endif
394 as in C. (Except that
395 .I %ifdef
396 can accept several putative macro names, and will evaluate TRUE if
397 any of them is defined.) In addition, the directives
398 .I %ifctx
400 .I %ifnctx
401 can be used to condition on the name of the top context on the
402 context stack. The obvious set of `else-if' directives,
403 .IR %elifdef ,
404 .IR %elifndef ,
405 .IR %elifctx
407 .IR %elifnctx
408 are also supported.
409 .SH BUGS
410 There is a reported seg-fault on some (Linux) systems with some
411 large source files. This appears to be very hard to reproduce. All
412 other
413 .I known
414 bugs have been fixed...
415 .SH RESTRICTIONS
416 There is no support for listing files, symbol maps, or debugging
417 object-file records. The advanced features of the ELF and Win32
418 object file formats are not supported, and there is no means for
419 warning the programmer against using an instruction beyond the
420 capability of the target processor.
421 .SH SEE ALSO
422 .BR as "(" 1 "),"
423 .BR ld "(" 1 ")."