blob: d9f21498d734eebdc10cb7742c9041b2390b825a [file] [log] [blame]
.\"Generated by db2man.xsl. Don't modify this, modify the source.
.de Sh \" Subsection
.br
.if t .Sp
.ne 5
.PP
\fB\\$1\fR
.PP
..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Ip \" List item
.br
.ie \\n(.$>=3 .ne \\$3
.el .ne 3
.IP "\\$1" \\$2
..
.TH "YASM" 1 "September 2004" "YASM" "YASM Modular Assembler"
.SH NAME
yasm \- The YASM Modular Assembler
.SH "SYNOPSIS"
.ad l
.hy 0
.HP 5
\fByasm\fR [\fB\-f\ \fIformat\fR\fR] [\fB\-o\ \fIoutfile\fR\fR] [\fB\fIoptions\fR\fR...] [\fIinfile\fR]
.ad
.hy
.ad l
.hy 0
.HP 5
\fByasm\fR \fB\-h\fR
.ad
.hy
.SH "DESCRIPTION"
.PP
The YASM Modular Assembler is a portable, retargetable assembler written under the ``new'' (2 or 3 clause) BSD license\&. It is designed from the ground up to allow for multiple assembler syntaxes (parsers) to be supported in addition to multiple output object formats and multiple instruction sets\&. Another primary module of the overall design is an optimizer module\&.
.PP
YASM consists of the \fByasm\fR command, libyasm, the core backend library, and a large number of loadable modules\&. On some platforms, libyasm and the loadable modules are statically built into the \fByasm\fR executable rather than being dynamically loaded\&.
.PP
The \fByasm\fR command assembles the file infile and directs output to the file \fIoutfile\fR if specified\&. If \fIoutfile\fR is not specified, \fByasm\fR will derive a default output file name from the name of its input file, usually by appending \fI\&.o\fR or \fI\&.obj\fR, or by removing all extensions for a raw binary file\&. Failing that, the output file name will be \fIyasm\&.out\fR\&.
.PP
If called without an \fIinfile\fR, \fByasm\fR assembles the standard input and directs output to the file \fIoutfile\fR, or \fIyasm\&.out\fR if no \fIoutfile\fR is specified\&.
.SH "OPTIONS"
.PP
Many options may be given in one of two forms: either a dash followed by a single letter, or two dashes followed by a long option name\&.
.PP
The following general options are available:
.TP
\fB\-\-version\fR
Prints yasm version information and license summary to standard output\&. All other options are ignored, and no output file is generated\&.
.TP
\fB\-h\fR or \fB\-\-help\fR
Prints a summary of invocation options\&. All other options are ignored, and no output file is generated\&.
.TP
\fB\-a \fIarch\fR\fR or \fB\-\-arch=\fIarch\fR\fR
Selects the target architecture\&. The default architecture is ``x86'', which supports both the IA\-32 and derivatives and AMD64 instruction sets\&. To print a list of available architectures to standard output, use ``help'' as \fIarch\fR\&. See \fByasm_arch\fR(7) for more details\&.
.TP
\fB\-p \fIparser\fR\fR or \fB\-\-parser=\fIparser\fR\fR
Selects the parser (the assembler syntax)\&. The default parser is ``nasm'', which emulates the syntax of NASM, the Netwide Assembler\&. To print a list of available parsers to standard output, use ``help'' as \fIparser\fR\&.
.TP
\fB\-r \fIpreproc\fR\fR or \fB\-\-preproc=\fIpreproc\fR\fR
Selects the preprocessor to use on the input file before passing it to the parser\&. Preprocessors often provide macro functionality that is not included in the main parser\&. The default preprocessor is ``nasm'', which is an imported version of the actual NASM preprocessor\&. A ``raw'' preprocessor is also available, which simply skips the preprocessing step, passing the input file directly to the parser\&. To print a list of available preprocessors to standard output, use ``help'' as \fIpreproc\fR\&.
.TP
\fB\-f \fIformat\fR\fR or \fB\-\-oformat=\fIformat\fR\fR
Selects the output object format\&. The default object format is ``bin'', which is a flat format binary with no relocation\&. To print a list of available object formats to standard output, use ``help'' as \fIformat\fR\&.
.TP
\fB\-g \fIdebug\fR\fR or \fB\-\-dformat=\fIdebug\fR\fR
Selects the debugging format for debug information\&. Debugging information can be used by a debugger to associate executable code back to the source file or get data structure and type information\&. Available debug formats vary between different object formats; \fByasm\fR will error when an invalid combination is selected\&. The default object format is selected by the object format\&. To print a list of available debugging formats to standard output, use ``help'' as \fIdebug\fR\&.
.TP
\fB\-L \fIlist\fR\fR or \fB\-\-lformat=\fIlist\fR\fR
Selects the format/style of the output list file\&. List files typically intermix the original source with the machine code generated by the assembler\&. The default list format is ``nasm'', which mimics the NASM list file format\&. To print a list of available list file formats to standard output, use ``help'' as \fIlist\fR\&.
.TP
\fB\-o \fIfilename\fR\fR or \fB\-\-objfile=\fIfilename\fR\fR
Specifies the name of the output file, overriding any default name selected by \fByasm\fR\&.
.TP
\fB\-l \fIlistfile\fR\fR or \fB\-\-list=\fIlistfile\fR\fR
Specifies the name of the output list file\&. If this option is not used, no list file is generated\&.
.TP
\fB\-m \fImachine\fR\fR or \fB\-\-machine=\fImachine\fR\fR
Selects the target machine architecture\&. Essentially a subtype of the selected architecture, the machine type selects between major subsets of an architecture\&. For example, for the ``x86'' architecture, the two available machines are ``x86'', which is used for the IA\-32 and derivative 32\-bit instruction set, and ``amd64'', which is used for the 64\-bit instruction set\&. This differentiation is required to generate the proper object file for relocatable object formats such as COFF and ELF\&. To print a list of available machines for a given architecture to standard output, use ``help'' as \fImachine\fR and the given architecture using \fB\-a \fIarch\fR\fR\&. See \fByasm_arch\fR(7) for more details\&.
.SH "WARNING OPTIONS"
.PP
\fB\-W\fR options have two contrary forms: \fB\-W\fIname\fR\fR and \fB\-Wno\-\fIname\fR\fR\&. Only the non\-default forms are shown here\&.
.TP
\fB\-w\fR
Inhibits all warning messages\&.
.TP
\fB\-Werror\fR
Treats warnings as errors\&.
.TP
\fB\-Wno\-unrecognized\-char\fR
Causes \fByasm\fR to not warn on unrecognized characters found in the input\&.
.TP
\fB\-Worphan\-labels\fR
Causes \fByasm\fR to warn about labels found alone on a line without a trailing colon\&. While these are legal labels in the ``nasm'' parser, they may be unintentional, due to typos or macro definition ordering\&.
.TP
\fB\-X \fIstyle\fR\fR
Selects a specific output style of error and warning messages\&. The default is ``gnu'' style, which mimics the output of \fBgcc\fR\&. The ``vc'' style is also available, which mimics the output of Microsoft's Visual C++ compiler\&.
.SH "PREPROCESSOR OPTIONS"
.TP
\fB\-e\fR or \fB\-\-preproc\-only\fR
Stops assembly after the preprocessing stage; preprocessed output is sent to the specified output name or, if no output name is specified, the standard output\&. No object file is produced\&.
.TP
\fB\-I \fIpath\fR\fR
Adds directory \fIpath\fR to the search path for include files\&.
.TP
\fB\-P \fIfilename\fR\fR
Pre\-includes file \fIfilename\fR, making it look as though \fIfilename\fR was prepended to the input\&.
.TP
\fB\-D \fImacro[=value]\fR\fR
Pre\-defines a single\-line macro\&.
.TP
\fB\-U \fImacro\fR\fR
Undefines a single\-line macro\&.
.SH "EXAMPLES"
.PP
To assemble NASM syntax, 32\-bit x86 source \fIsource\&.asm\fR into ELF file \fIsource\&.o\fR, warning on orphan labels:
.IP
yasm \-f elf \-Worphan\-labels source\&.asm
.PP
To assemble NASM syntax AMD64 source \fIx\&.asm\fR into AMD64 Win32 file \fIobject\&.obj\fR:
.IP
yasm \-m amd64 \-f win32 \-o object\&.obj x\&.asm
.PP
To assemble already preprocessed NASM syntax 32\-bit x86 source \fIy\&.asm\fR into flat binary file \fIy\&.com\fR:
.IP
yasm \-f bin \-r raw \-o y\&.com y\&.asm
.SH "DIAGNOSTICS"
.PP
The \fByasm\fR command exits 0 on success, and nonzero if an error occurs\&.
.SH "COMPATIBILITY"
.PP
YASM's NASM parser and preprocessor, while they strive to be as compatible as possible with NASM, have a few incompatibilities due to YASM's different internal structure\&.
.SH "RESTRICTIONS"
.PP
As object files are often architecture and machine dependent, not all combinations of object formats, architectures, and machines are legal; trying to use an invalid combination will result in an error\&.
.PP
There is no support for list files or symbol maps\&.
.PP
Relocatable object formats are limited to static linking applications, as YASM cannot generate relocations for dynamic linking\&.
.SH "SEE ALSO"
.PP
\fBas\fR(1), \fBld\fR(1), \fBnasm\fR(1), \fByasm_arch\fR(7)
.SH "BUGS"
.PP
When using the ``x86'' architecture, it is overly easy to generate AMD64 code (using the \fBBITS 64\fR directive) and generate a 32\-bit object file (by failing to specify \fB\-m amd64\fR on the command line)\&. Similarly, specifying \fB\-m amd64\fR does not default the BITS setting to 64\&.
.SH AUTHOR
Peter Johnson <peter@tortall\&.net>.