summaryrefslogtreecommitdiff
path: root/nasm.txt
diff options
context:
space:
mode:
authorCyrill Gorcunov <gorcunov@gmail.com>2013-02-17 22:50:19 +0400
committerCyrill Gorcunov <gorcunov@gmail.com>2013-02-17 22:50:19 +0400
commit1a63699ce58044f99bd56bab89d3b08e41d29bd9 (patch)
tree9e50c8efd7fa2b5e9d3522401a39e7f66c5fb2ca /nasm.txt
parenta709e767f608f633cd14ac04c4f776fc2c57a00c (diff)
downloadnasm-1a63699ce58044f99bd56bab89d3b08e41d29bd9.tar.gz
man: Generate manpages from asciidoc format
The asciidoc format is a way more easier to read by a human. Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
Diffstat (limited to 'nasm.txt')
-rw-r--r--nasm.txt292
1 files changed, 292 insertions, 0 deletions
diff --git a/nasm.txt b/nasm.txt
new file mode 100644
index 00000000..dde95bab
--- /dev/null
+++ b/nasm.txt
@@ -0,0 +1,292 @@
+nasm(1)
+=======
+:doctype: manpage
+:man source: NASM
+:man manual: The Netwide Assembler Project
+
+NAME
+----
+nasm - the Netwide Assembler, a portable 80x86 assembler
+
+SYNOPSIS
+--------
+*nasm* [*-@* response file] [*-f* format] [*-o* outfile] [*-l* listfile] ['options'...] filename
+
+DESCRIPTION
+-----------
+The *nasm* command assembles the file 'filename' and directs output to the file
+'outfile' if specified. If 'outfile' is not specified, *nasm* will derive a default
+output file name from the name of its input file, usually by appending `.o' or
+`.obj', or by removing all extensions for a raw binary file. Failing that, the
+output file name will be `nasm.out'.
+
+OPTIONS
+-------
+*-@* 'filename'::
+ Causes *nasm* to process options from filename as if they were included on
+ the command line.
+
+*-a*::
+ Causes *nasm* to assemble the given input file without first applying the
+ macro preprocessor.
+
+*-D*|*-d* 'macro[=value]'::
+ Pre-defines a single-line macro.
+
+*-e*::
+ Causes *nasm* to preprocess the given input file, and write the output to
+ 'stdout' (or the specified output file name), and not actually assemble
+ anything.
+
+*-f* 'format'::
+ Specifies the output file format. To see a list of valid output formats,
+ use the *-hf* option.
+
+*-g*::
+ Causes *nasm* to generate debug information in selected format
+
+*-h*::
+ Causes *nasm* to exit immediately, after giving a summary of its
+ invocation options.
+
+*-hf*::
+ Same as *-h* , but also lists all valid output formats.
+
+*-I*|*-i* 'directory'::
+ Adds a directory to the search path for include files. The directory
+ specification must include the trailing slash, as it will be directly
+ prepended to the name of the include file.
+
+*-l* 'listfile'::
+ Causes an assembly listing to be directed to the given file, in which
+ the original source is displayed on the right hand side (plus the source
+ for included files and the expansions of multi-line macros) and the
+ generated code is shown in hex on the left.
+
+*-M*::
+ Causes *nasm* to output Makefile-style dependencies to stdout; normal
+ output is suppressed.
+
+*-MG* 'file'::
+ Same as *-M* but assumes that missing Makefile dependecies are generated
+ and added to dependency list without a prefix.
+
+*-MF* 'file'::
+ Output Makefile-style dependencies to the specified file.
+
+*-MD* 'file'::
+ Same as a combination of *-M* and *-MF* options.
+
+*-MT* 'file'::
+ Override the default name of the dependency target dependency target name.
+ This is normally the same as the output filename, specified by
+ the *-o* option.
+
+*-MQ* 'file'::
+ The same as *-MT* except it tries to quote characters that have special
+ meaning in Makefile syntax. This is not foolproof, as not all characters
+ with special meaning are quotable in Make.
+
+*-MP*::
+ Emit phony target.
+
+*-O* 'number'::
+ Optimize branch offsets.
+ * *-O0*: No optimization
+ * *-O1*: Minimal optimization
+ * *-Ox*: Multipass optimization (default)
+
+*-o* 'outfile'::
+ Specifies a precise name for the output file, overriding *nasm*'s default
+ means of determining it.
+
+*-P*|*-p* 'file'::
+ Specifies a file to be pre-included, before the main source file
+ starts to be processed.
+
+*-s*::
+ Causes *nasm* to send its error messages and/or help text to stdout
+ instead of stderr.
+
+*-t*::
+ Causes *nasm* to assemble in SciTech TASM compatible mode.
+
+*-U*|*-u* 'macro'::
+ Undefines a single-line macro.
+
+*-v*::
+ Causes *nasm* to exit immediately, after displaying its version number.
+
+*-w*'[+-]foo'::
+ Causes *nasm* to enable or disable certain classes of warning messages,
+ for example *-w+orphan-labels* or *-w-macro-params*.
+
+*-X* 'format'::
+ Specifies error reporting format (gnu or vc).
+
+*-Z* 'filename'::
+ Causes *nasm* to redirect error messages to 'filename'. This option exists
+ to support operating systems on which stderr is not easily redirected.
+
+--prefix::
+--postfix::
+ Prepend or append (respectively) the given argument to all global or
+ extern variables.
+
+SYNTAX
+------
+This man page does not fully describe the syntax of *nasm*'s assembly language,
+but does give a summary of the differences from other assemblers.
+
+'Registers' have no leading `%' sign, unlike *gas*, and floating-point stack
+registers are referred to as 'st0', 'st1', and so on.
+
+'Floating-point instructions' may use either the single-operand form or the
+double. A 'TO' keyword is provided; thus, one could either write
+
+ fadd st0,st1
+ fadd st1,st0
+
+or one could use the alternative single-operand forms
+
+ fadd st1
+ fadd to st1
+
+'Uninitialised storage' is reserved using the 'RESB', 'RESW', 'RESD', 'RESQ',
+'REST' and 'RESO' pseudo-opcodes, each taking one parameter which gives the
+number of bytes, words, doublewords, quadwords or ten-byte words to reserve.
+
+'Repetition' of data items is not done by the 'DUP' keyword as seen in DOS
+assemblers, but by the use of the 'TIMES' prefix, like this:
+
+ message: times 3 db 'abc'
+ times 64-$+message db 0
+
+which defines the string `abcabcabc`, followed by the right number of zero
+bytes to make the total length up to 64 bytes.
+
+'Symbol references' are always understood to be immediate (i.e. the address
+of the symbol), unless square brackets are used, in which case the contents
+of the memory location are used. Thus:
+
+ mov ax,wordvar
+
+loads AX with the address of the variable `wordvar`, whereas
+
+ mov ax,[wordvar]
+ mov ax,[wordvar+1]
+ mov ax,[es:wordvar+bx]
+
+all refer to the 'contents' of memory locations. The syntaxes
+
+ mov ax,es:wordvar[bx]
+ es mov ax,wordvar[1]
+
+are not legal at all, although the use of a segment register name as an instruction
+prefix is valid, and can be used with instructions such as 'LODSB' which can't
+be overridden any other way.
+
+'Constants' may be expressed numerically in most formats: a trailing H, Q or
+B denotes hex, octal or binary respectively, and a leading `0x' or `$' denotes
+hex as well. Leading zeros are not treated specially at all. Character constants
+may be enclosed in single or double quotes; there is no escape character. The
+ordering is little-endian (reversed), so that the character constant ''abcd''
+denotes 0x64636261 and not 0x61626364.
+
+Local labels begin with a period, and their `locality' is granted by the assembler
+prepending the name of the previous non-local symbol. Thus declaring a label
+`.loop' after a label `label' has actually defined a symbol called `label.loop'.
+
+DIRECTIVES
+----------
+'SECTION' 'name' or 'SEGMENT' 'name' causes *nasm* to direct all following code
+to the named section. Section names vary with output file format, although most
+formats support the names '.text', '.data' and '.bss'. (The exception is the
+'obj' format, in which all segments are user-definable.)
+
+'ABSOLUTE' 'address' causes *nasm* to position its notional assembly point at
+an absolute address: so no code or data may be generated, but you can use 'RESB',
+'RESW' and 'RESD' to move the assembly point further on, and you can define labels.
+So this directive may be used to define data structures. When you have finished
+doing absolute assembly, you must issue another 'SECTION' directive to return to
+normal assembly.
+
+'BITS' '16', 'BITS' '32' or 'BITS' '64' switches the default processor mode for
+which *nasm* is generating code: it is equivalent to 'USE16' or 'USE32' in DOS
+assemblers.
+
+'EXTERN' 'symbol' and 'GLOBAL' 'symbol' import and export symbol definitions,
+respectively, from and to other modules. Note that the 'GLOBAL' directive must
+appear before the definition of the symbol it refers to.
+
+'STRUC' 'strucname' and 'ENDSTRUC', when used to bracket a number of 'RESB',
+'RESW' or similar instructions, define a data structure. In addition to
+defining the offsets of the structure members, the construct also defines a symbol
+for the size of the structure, which is simply the structure name with 'size'
+tacked on to the end.
+
+FORMAT-SPECIFIC DIRECTIVES
+--------------------------
+'ORG' 'address' is used by the 'bin' flat-form binary output format, and
+specifies the address at which the output code will eventually be loaded.
+
+'GROUP' 'grpname' 'seg1' 'seg2'... is used by the obj (Microsoft 16-bit)
+output format, and defines segment groups. This format also uses 'UPPERCASE',
+which directs that all segment, group and symbol names output to the object
+file should be in uppercase. Note that the actual assembly is still case
+sensitive.
+
+'LIBRARY' 'libname' is used by the 'rdf' output format, and causes a
+dependency record to be written to the output file which indicates that
+the program requires a certain library in order to run.
+
+MACRO PREPROCESSOR
+------------------
+Single-line macros are defined using the '%define' or '%idefine' commands, in
+a similar fashion to the C preprocessor. They can be overloaded with respect
+to number of parameters, although defining a macro with no parameters prevents
+the definition of any macro with the same name taking parameters, and vice versa.
+'%define' defines macros whose names match case-sensitively, whereas '%idefine'
+defines case-insensitive macros.
+
+Multi-line macros are defined using '%macro' and '%imacro' (the distinction is the
+same as that between '%define' and '%idefine'), whose syntax is as follows
+
+ %macro name minprm[-maxprm][+][.nolist] [defaults]
+ <some lines of macro expansion text>
+ %endmacro
+
+Again, these macros may be overloaded. The trailing plus sign indicates that
+any parameters after the last one get subsumed, with their separating commas,
+into the last parameter. The 'defaults' part can be used to specify defaults for
+unspecified macro parameters after 'minparam'. '%endm' is a valid synonym for
+'%endmacro'.
+
+To refer to the macro parameters within a macro expansion, you use '%1', '%2' and
+so on. You can also enforce that a macro parameter should contain a condition
+code by using '%+1', and you can invert the condition code by using '%-1'. You can also
+define a label specific to a macro invocation by prefixing it with a double `%' sign.
+
+Files can be included using the '%include' directive, which works like C.
+
+The preprocessor has a `context stack', which may be used by one macro to store
+information that a later one will retrieve. You can push a context on the stack
+using '%push', remove one using '%pop', and change the name of the top context (without
+disturbing any associated definitions) using '%repl'. Labels and '%define' macros
+specific to the top context may be defined by prefixing their names with %$,
+and things specific to the next context down with %$$, and so on.
+
+Conditional assembly is done by means of '%ifdef', '%ifndef', '%else' and '%endif'
+as in C. (Except that '%ifdef' can accept several putative macro names, and
+will evaluate TRUE if any of them is defined.) In addition, the directives
+'%ifctx' and '%ifnctx' can be used to condition on the name of the top context
+on the context stack. The obvious set of `else-if' directives, '%elifdef',
+'%elifndef', '%elifctx' and '%elifnctx' are also supported.
+
+BUGS
+----
+Please report bugs through the bug tracker function at http://nasm.us.
+
+SEE ALSO
+--------
+*as*(1), *ld*(1).