summaryrefslogtreecommitdiff
path: root/doc/nasmdoc.src
diff options
context:
space:
mode:
Diffstat (limited to 'doc/nasmdoc.src')
-rw-r--r--doc/nasmdoc.src68
1 files changed, 45 insertions, 23 deletions
diff --git a/doc/nasmdoc.src b/doc/nasmdoc.src
index 6dbecce..4b1a9bd 100644
--- a/doc/nasmdoc.src
+++ b/doc/nasmdoc.src
@@ -701,8 +701,7 @@ The syntax is:
are optimised, unless the long form is specified.
\b \c{-On} multi-pass optimization, minimize branch offsets; also will
- minimize signed immediate bytes, overriding size specification
- when the \c{strict} keyword hasn't been used (see \k{strict}).
+ minimize signed immediate bytes, overriding size specification.
If 2 <= n <= 3, then there are 5 * n passes, otherwise there
are n passes.
@@ -1482,12 +1481,12 @@ invent one using the macro processor.
\H{strict} \i\c{STRICT}: Inhibiting Optimization
-When assembling with the optimizer set to level 2 or higher (see
-\k{opt-On}), NASM will usee size specifiers (\c{BYTE}, \c{WORD},
-\c{DWORD}, \c{QWORD}, or \c{TWORD}), but will give them the smallest
-possible size. The keyword \c{STRICT} can be used to inhibit
-optimization and force a particular operand to be emitted in the
-specified size. For example, with the optimizer on, and in
+When compiling with the optimizer set to level 2 or higher (see
+\k{opt-On}), NASM will use size specifiers (\c{BYTE}, \c{WORD},
+\c{DWORD}, \c{QWORD}, or \c{TWORD}) strictly to choose the address- or
+operand-size of the instruction. The keyword \c{STRICT} can be used
+to inhibit optimization and force a particular operand to be emitted
+in the specified size. For example, with the optimizer on, and in
\c{BITS 16} mode,
\c push dword 33
@@ -1499,9 +1498,6 @@ is encoded in three bytes \c{66 6A 21}, whereas
is encoded in six bytes, with a full dword immediate operand \c{66 68
21 00 00 00}.
-With the optimizer off, the same code (six bytes) is generated whether
-the \c{STRICT} keyword was used or not.
-
\H{crit} \i{Critical Expressions}
@@ -3240,7 +3236,7 @@ which has no function other than to call the primitive form.
\S{USE16 & USE32} \i\c{USE16} & \i\c{USE32}: Aliases for BITS
The `\c{USE16}' and `\c{USE32}' directives can be used in place of
-`\c{BITS 16}' and `\c{BITS 32}', for compatibility with other assemblers.
+`\c{BIT 16}' and `\c{BITS 32}', for compatibility with other assemblers.
\H{section} \i\c{SECTION} or \i\c{SEGMENT}: Changing and \i{Defining
@@ -3528,16 +3524,8 @@ binary' files are used by \i{MS-DOS}: \i\c{.COM} executables and
is also useful for \i{operating system} and \i{boot loader}
development.
-\c{bin} supports the three \i{standardised section names} \i\c{.text},
-\i\c{.data} and \i\c{.bss} only. The file NASM outputs will contain the
-contents of the \c{.text} section first, followed by the contents of
-the \c{.data} section, aligned on a four-byte boundary. The \c{.bss}
-section is not stored in the output file at all, but is assumed to
-appear directly after the end of the \c{.data} section, again
-aligned on a four-byte boundary.
-
-If you specify no explicit \c{SECTION} directive, the code you write
-will be directed by default into the \c{.text} section.
+The \c{bin} format supports \i{multiple section names}. For details of
+how nasm handles sections in the bin format, see \k{multisec}.
Using the \c{bin} format puts NASM by default into 16-bit mode (see
\k{bits}). In order to use \c{bin} to write 32-bit code such as an
@@ -3569,7 +3557,7 @@ which allows you to jump around in the object file and overwrite
code you have already generated, NASM's \c{ORG} does exactly what
the directive says: \e{origin}. Its sole function is to specify one
offset which is added to all internal address references within the
-file; it does not permit any of the trickery that MASM's version
+section; it does not permit any of the trickery that MASM's version
does. See \k{proborg} for further comments.
@@ -3592,6 +3580,40 @@ given may be any power of two.\I{section alignment, in
bin}\I{segment alignment, in bin}\I{alignment, in bin sections}
+\S{multisec} \i\c{MULTISECTION} support for the BIN format.
+
+The \c{bin} format allows the use of multiple sections, which are
+ordered according to a few basic rules.
+
+\b Any code which comes before an explicit \c{SECTION} directive
+is directed by default into the \c{.text} section.
+
+\b If a .text section is not given an ORG statement, it is allocated
+\c{ORG 0} by default.
+
+\b Sections which have an ORG statement, explicit or implicit, are
+placed in the order of the ORG statement. The code is padded with 0s
+to give the correct offsets within the output file.
+
+\b If a section has multiple ORG statements, the last ORG statement
+is applied to the entire section, without affecting the order in
+which the separate parts of the section are put together at assembly
+time.
+
+\b Sections without an ORG statement will be placed after those which
+do have one, and they will be placed in the order that they are first
+declared.
+
+\b The .data section does not follow any sepcial rules, unlike the
+.text and .bss sections.
+
+\b The .bss section will be placed after all other sections.
+
+\b All sections are aligned on dword boundaries.
+
+\b Sections cannot overlap.
+
+
\H{objfmt} \i\c{obj}: \i{Microsoft OMF}\I{OMF} Object Files
The \c{obj} file format (NASM calls it \c{obj} rather than \c{omf}