Added documentation for -X command line switch which allows the user to
[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}{2002}
8 \M{author}{The NASM Development Team}
9 \M{license}{All rights reserved. This document is redistributable under the licence 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{-a} \c{-a} option
24 \IR{-d} \c{-d} option
25 \IR{-e} \c{-e} option
26 \IR{-f} \c{-f} option
27 \IR{-g} \c{-g} option
28 \IR{-i} \c{-i} option
29 \IR{-l} \c{-l} option
30 \IR{-o} \c{-o} option
31 \IR{-p} \c{-p} option
32 \IR{-s} \c{-s} option
33 \IR{-u} \c{-u} option
34 \IR{-v} \c{-v} option
35 \IR{-w} \c{-w} option
36 \IR{!=} \c{!=} operator
37 \IR{$, here} \c{$}, Here token
38 \IR{$, prefix} \c{$}, prefix
39 \IR{$$} \c{$$} token
40 \IR{%} \c{%} operator
41 \IR{%%} \c{%%} operator
42 \IR{%+1} \c{%+1} and \c{%-1} syntax
43 \IA{%-1}{%+1}
44 \IR{%0} \c{%0} parameter count
45 \IR{&} \c{&} operator
46 \IR{&&} \c{&&} operator
47 \IR{*} \c{*} operator
48 \IR{..@} \c{..@} symbol prefix
49 \IR{/} \c{/} operator
50 \IR{//} \c{//} operator
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{?} MASM syntax
61 \IR{^} \c{^} operator
62 \IR{^^} \c{^^} operator
63 \IR{|} \c{|} operator
64 \IR{||} \c{||} operator
65 \IR{~} \c{~} operator
66 \IR{%$} \c{%$} and \c{%$$} prefixes
67 \IA{%$$}{%$}
68 \IR{+ opaddition} \c{+} operator, binary
69 \IR{+ opunary} \c{+} operator, unary
70 \IR{+ modifier} \c{+} modifier
71 \IR{- opsubtraction} \c{-} operator, binary
72 \IR{- opunary} \c{-} operator, unary
73 \IR{alignment, in bin sections} alignment, in \c{bin} sections
74 \IR{alignment, in elf sections} alignment, in \c{elf} sections
75 \IR{alignment, in win32 sections} alignment, in \c{win32} sections
76 \IR{alignment, of elf common variables} alignment, of \c{elf} common
77 variables
78 \IR{alignment, in obj sections} alignment, in \c{obj} sections
79 \IR{a.out, bsd version} \c{a.out}, BSD version
80 \IR{a.out, linux version} \c{a.out}, Linux version
81 \IR{autoconf} Autoconf
82 \IR{bin} bin
83 \IR{bitwise and} bitwise AND
84 \IR{bitwise or} bitwise OR
85 \IR{bitwise xor} bitwise XOR
86 \IR{block ifs} block IFs
87 \IR{borland pascal} Borland, Pascal
88 \IR{borland's win32 compilers} Borland, Win32 compilers
89 \IR{braces, after % sign} braces, after \c{%} sign
90 \IR{bsd} BSD
91 \IR{c calling convention} C calling convention
92 \IR{c symbol names} C symbol names
93 \IA{critical expressions}{critical expression}
94 \IA{command line}{command-line}
95 \IA{case sensitivity}{case sensitive}
96 \IA{case-sensitive}{case sensitive}
97 \IA{case-insensitive}{case sensitive}
98 \IA{character constants}{character constant}
99 \IR{common object file format} Common Object File Format
100 \IR{common variables, alignment in elf} common variables, alignment
101 in \c{elf}
102 \IR{common, elf extensions to} \c{COMMON}, \c{elf} extensions to
103 \IR{common, obj extensions to} \c{COMMON}, \c{obj} extensions to
104 \IR{declaring structure} declaring structures
105 \IR{default-wrt mechanism} default-\c{WRT} mechanism
106 \IR{devpac} DevPac
107 \IR{djgpp} DJGPP
108 \IR{dll symbols, exporting} DLL symbols, exporting
109 \IR{dll symbols, importing} DLL symbols, importing
110 \IR{dos} DOS
111 \IR{dos archive} DOS archive
112 \IR{dos source archive} DOS source archive
113 \IA{effective address}{effective addresses}
114 \IA{effective-address}{effective addresses}
115 \IR{elf} ELF
116 \IR{elf, 16-bit code and} ELF, 16-bit code and
117 \IR{elf shared libraries} ELF, shared libraries
118 \IR{executable and linkable format} Executable and Linkable Format
119 \IR{extern, obj extensions to} \c{EXTERN}, \c{obj} extensions to
120 \IR{freebsd} FreeBSD
121 \IR{freelink} FreeLink
122 \IR{functions, c calling convention} functions, C calling convention
123 \IR{functions, pascal calling convention} functions, Pascal calling
124 convention
125 \IR{global, aoutb extensions to} \c{GLOBAL}, \c{aoutb} extensions to
126 \IR{global, elf extensions to} \c{GLOBAL}, \c{elf} extensions to
127 \IR{global, rdf extensions to} \c{GLOBAL}, \c{rdf} extensions to
128 \IR{got} GOT
129 \IR{got relocations} \c{GOT} relocations
130 \IR{gotoff relocation} \c{GOTOFF} relocations
131 \IR{gotpc relocation} \c{GOTPC} relocations
132 \IR{intel number formats} Intel number formats
133 \IR{linux, elf} Linux, ELF
134 \IR{linux, a.out} Linux, \c{a.out}
135 \IR{linux, as86} Linux, \c{as86}
136 \IR{logical and} logical AND
137 \IR{logical or} logical OR
138 \IR{logical xor} logical XOR
139 \IR{masm} MASM
140 \IA{memory reference}{memory references}
141 \IR{minix} Minix
142 \IA{misc directory}{misc subdirectory}
143 \IR{misc subdirectory} \c{misc} subdirectory
144 \IR{microsoft omf} Microsoft OMF
145 \IR{mmx registers} MMX registers
146 \IA{modr/m}{modr/m byte}
147 \IR{modr/m byte} ModR/M byte
148 \IR{ms-dos} MS-DOS
149 \IR{ms-dos device drivers} MS-DOS device drivers
150 \IR{multipush} \c{multipush} macro
151 \IR{nasm version} NASM version
152 \IR{netbsd} NetBSD
153 \IR{omf} OMF
154 \IR{openbsd} OpenBSD
155 \IR{operating system} operating system
156 \IR{os/2} OS/2
157 \IR{pascal calling convention}Pascal calling convention
158 \IR{passes} passes, assembly
159 \IR{perl} Perl
160 \IR{pic} PIC
161 \IR{pharlap} PharLap
162 \IR{plt} PLT
163 \IR{plt} \c{PLT} relocations
164 \IA{pre-defining macros}{pre-define}
165 \IA{preprocessor expressions}{preprocessor, expressions}
166 \IA{preprocessor loops}{preprocessor, loops}
167 \IA{preprocessor variables}{preprocessor, variables}
168 \IA{rdoff subdirectory}{rdoff}
169 \IR{rdoff} \c{rdoff} subdirectory
170 \IR{relocatable dynamic object file format} Relocatable Dynamic
171 Object File Format
172 \IR{relocations, pic-specific} relocations, PIC-specific
173 \IA{repeating}{repeating code}
174 \IR{section alignment, in elf} section alignment, in \c{elf}
175 \IR{section alignment, in bin} section alignment, in \c{bin}
176 \IR{section alignment, in obj} section alignment, in \c{obj}
177 \IR{section alignment, in win32} section alignment, in \c{win32}
178 \IR{section, elf extensions to} \c{SECTION}, \c{elf} extensions to
179 \IR{section, win32 extensions to} \c{SECTION}, \c{win32} extensions to
180 \IR{segment alignment, in bin} segment alignment, in \c{bin}
181 \IR{segment alignment, in obj} segment alignment, in \c{obj}
182 \IR{segment, obj extensions to} \c{SEGMENT}, \c{elf} extensions to
183 \IR{segment names, borland pascal} segment names, Borland Pascal
184 \IR{shift command} \c{shift} command
185 \IA{sib}{sib byte}
186 \IR{sib byte} SIB byte
187 \IR{solaris x86} Solaris x86
188 \IA{standard section names}{standardised section names}
189 \IR{symbols, exporting from dlls} symbols, exporting from DLLs
190 \IR{symbols, importing from dlls} symbols, importing from DLLs
191 \IR{test subdirectory} \c{test} subdirectory
192 \IR{tlink} \c{TLINK}
193 \IR{underscore, in c symbols} underscore, in C symbols
194 \IR{unix} Unix
195 \IA{sco unix}{unix, sco}
196 \IR{unix, sco} Unix, SCO
197 \IA{unix source archive}{unix, source archive}
198 \IR{unix, source archive} Unix, source archive
199 \IA{unix system v}{unix, system v}
200 \IR{unix, system v} Unix, System V
201 \IR{unixware} UnixWare
202 \IR{val} VAL
203 \IR{version number of nasm} version number of NASM
204 \IR{visual c++} Visual C++
205 \IR{www page} WWW page
206 \IR{win32} Win32
207 \IR{windows} Windows
208 \IR{windows 95} Windows 95
209 \IR{windows nt} Windows NT
210 \# \IC{program entry point}{entry point, program}
211 \# \IC{program entry point}{start point, program}
212 \# \IC{MS-DOS device drivers}{device drivers, MS-DOS}
213 \# \IC{16-bit mode, versus 32-bit mode}{32-bit mode, versus 16-bit mode}
214 \# \IC{c symbol names}{symbol names, in C}
215
216
217 \C{intro} Introduction
218
219 \H{whatsnasm} What Is NASM?
220
221 The Netwide Assembler, NASM, is an 80x86 assembler designed for
222 portability and modularity. It supports a range of object file
223 formats, including Linux and \c{NetBSD/FreeBSD} \c{a.out}, \c{ELF}, 
224 \c{COFF}, Microsoft 16-bit \c{OBJ} and \c{Win32}. It will also output
225 plain binary files. Its syntax is designed to be simple and easy to
226 understand, similar to Intel's but less complex. It supports \c{Pentium},
227 \c{P6}, \c{MMX}, \c{3DNow!}, \c{SSE} and \c{SSE2} opcodes, and has
228 macro capability.
229
230
231 \S{yaasm} Why Yet Another Assembler?
232
233 The Netwide Assembler grew out of an idea on \i\c{comp.lang.asm.x86}
234 (or possibly \i\c{alt.lang.asm} - I forget which), which was
235 essentially that there didn't seem to be a good \e{free} x86-series
236 assembler around, and that maybe someone ought to write one.
237
238 \b \i\c{a86} is good, but not free, and in particular you don't get any
239 32-bit capability until you pay. It's DOS only, too.
240
241 \b \i\c{gas} is free, and ports over DOS and Unix, but it's not
242 very good, since it's designed to be a back end to \i\c{gcc}, which
243 always feeds it correct code. So its error checking is minimal. Also,
244 its syntax is horrible, from the point of view of anyone trying to
245 actually \e{write} anything in it. Plus you can't write 16-bit code in
246 it (properly).
247
248 \b \i\c{as86} is Minix- and Linux-specific, and (my version at least)
249 doesn't seem to have much (or any) documentation.
250
251 \b \i\c{MASM} isn't very good, and it's expensive, and it runs only under
252 DOS.
253
254 \b \i\c{TASM} is better, but still strives for MASM compatibility,
255 which means millions of directives and tons of red tape. And its syntax
256 is essentially MASM's, with the contradictions and quirks that
257 entails (although it sorts out some of those by means of Ideal mode).
258 It's expensive too. And it's DOS-only.
259
260 So here, for your coding pleasure, is NASM. At present it's
261 still in prototype stage - we don't promise that it can outperform
262 any of these assemblers. But please, \e{please} send us bug reports,
263 fixes, helpful information, and anything else you can get your hands
264 on (and thanks to the many people who've done this already! You all
265 know who you are), and we'll improve it out of all recognition.
266 Again.
267
268
269 \S{legal} Licence Conditions
270
271 Please see the file \c{Licence}, supplied as part of any NASM
272 distribution archive, for the \i{licence} conditions under which you
273 may use NASM.
274
275
276 \H{contact} Contact Information
277
278 The current version of NASM (since about 0.98.08) are maintained by a
279 team of developers, accessible through the \c{nasm-devel} mailing list
280 (see below for the link).
281 If you want to report a bug, please read \k{bugs} first.
282
283 NASM has a \i{WWW page} at
284 \W{http://www.web-sites.co.uk/nasm}\c{http://www.web-sites.co.uk/nasm},
285 and another, with additional information, at
286 \W{http://nasm.2y.net/}\c{http://nasm.2y.net/}
287
288 The original authors are \i{e\-mail}able as
289 \W{mailto:jules@dsf.org.uk}\c{jules@dsf.org.uk} and
290 \W{mailto:anakin@pobox.com}\c{anakin@pobox.com}.
291 The latter is no longer involved in the development team.
292
293 \i{New releases} of NASM are uploaded to the official sites
294 \W{http://www.web-sites.co.uk/nasm}\c{http://www.web-sites.co.uk/nasm}
295 and to
296 \W{ftp://ftp.kernel.org/pub/software/devel/nasm/}\i\c{ftp.kernel.org}
297 and
298 \W{ftp://ibiblio.org/pub/Linux/devel/lang/assemblers/}\i\c{ibiblio.org}.
299
300 Announcements are posted to
301 \W{news:comp.lang.asm.x86}\i\c{comp.lang.asm.x86},
302 \W{news:alt.lang.asm}\i\c{alt.lang.asm} and
303 \W{news:comp.os.linux.announce}\i\c{comp.os.linux.announce}
304
305 If you want information about NASM beta releases, and the current
306 development status, please subscribe to the \i\c{nasm-devel} email list
307 by registering at
308 \W{http://groups.yahoo.com/group/nasm-devel}\c{http://groups.yahoo.com/group/nasm-devel},
309 \W{http://www.pairlist.net/mailman/listinfo/nasm-devel}\c{http://www.pairlist.net/mailman/listinfo/nasm-devel}
310 and
311 \W{http://sourceforge.net/projects/nasm}\c{http://sourceforge.net/projects/nasm}.
312
313 The preferred list is the list at Sourceforge, which is also the home to
314 the latest nasm source code and releases. The other lists are open, but
315 may not continue to be supported in the long term.
316
317
318 \H{install} Installation
319
320 \S{instdos} \i{Installing} NASM under MS-\i{DOS} or Windows
321
322 Once you've obtained the \i{DOS archive} for NASM, \i\c{nasmXXX.zip}
323 (where \c{XXX} denotes the version number of NASM contained in the
324 archive), unpack it into its own directory (for example \c{c:\\nasm}).
325
326 The archive will contain four executable files: the NASM executable
327 files \i\c{nasm.exe} and \i\c{nasmw.exe}, and the NDISASM executable
328 files \i\c{ndisasm.exe} and \i\c{ndisasmw.exe}. In each case, the
329 file whose name ends in \c{w} is a \I{Win32}\c{Win32} executable,
330 designed to run under \I{Windows 95}\c{Windows 95} or \I{Windows NT}
331 \c{Windows NT} Intel, and the other one is a 16-bit \I{DOS}\c{DOS}
332 executable.
333
334 The only file NASM needs to run is its own executable, so copy
335 (at least) one of \c{nasm.exe} and \c{nasmw.exe} to a directory on
336 your PATH, or alternatively edit \i\c{autoexec.bat} to add the
337 \c{nasm} directory to your \i\c{PATH}. (If you're only installing the
338 \c{Win32} version, you may wish to rename it to \c{nasm.exe}.)
339
340 That's it - NASM is installed. You don't need the nasm directory
341 to be present to run NASM (unless you've added it to your \c{PATH}),
342 so you can delete it if you need to save space; however, you may
343 want to keep the documentation or test programs.
344
345 If you've downloaded the \i{DOS source archive}, \i\c{nasmXXXs.zip},
346 the \c{nasm} directory will also contain the full NASM \i{source
347 code}, and a selection of \i{Makefiles} you can (hopefully) use to
348 rebuild your copy of NASM from scratch.
349
350 Note that the source files \c{insnsa.c}, \c{insnsd.c}, \c{insnsi.h}
351 and \c{insnsn.c} are automatically generated from the master
352 instruction table \c{insns.dat} by a Perl script; the file
353 \c{macros.c} is generated from \c{standard.mac} by another Perl
354 script. Although the NASM 0.98 distribution includes these generated
355 files, you will need to rebuild them (and hence, will need a Perl
356 interpreter) if you change insns.dat, standard.mac or the
357 documentation. It is possible future source distributions may not
358 include these files at all. Ports of \i{Perl} for a variety of
359 platforms, including DOS and Windows, are available from
360 \W{http://www.cpan.org/ports/}\i{www.cpan.org}.
361
362
363 \S{instdos} Installing NASM under \i{Unix}
364
365 Once you've obtained the \i{Unix source archive} for NASM,
366 \i\c{nasm-X.XX.tar.gz} (where \c{X.XX} denotes the version number of
367 NASM contained in the archive), unpack it into a directory such
368 as \c{/usr/local/src}. The archive, when unpacked, will create its
369 own subdirectory \c{nasm-X.XX}.
370
371 NASM is an \I{Autoconf}\I\c{configure}auto-configuring package: once
372 you've unpacked it, \c{cd} to the directory it's been unpacked into
373 and type \c{./configure}. This shell script will find the best C
374 compiler to use for building NASM and set up \i{Makefiles}
375 accordingly.
376
377 Once NASM has auto-configured, you can type \i\c{make} to build the
378 \c{nasm} and \c{ndisasm} binaries, and then \c{make install} to
379 install them in \c{/usr/local/bin} and install the \i{man pages}
380 \i\c{nasm.1} and \i\c{ndisasm.1} in \c{/usr/local/man/man1}.
381 Alternatively, you can give options such as \c{--prefix} to the
382 configure script (see the file \i\c{INSTALL} for more details), or
383 install the programs yourself.
384
385 NASM also comes with a set of utilities for handling the \c{RDOFF}
386 custom object-file format, which are in the \i\c{rdoff} subdirectory
387 of the NASM archive. You can build these with \c{make rdf} and
388 install them with \c{make rdf_install}, if you want them.
389
390 If NASM fails to auto-configure, you may still be able to make it
391 compile by using the fall-back Unix makefile \i\c{Makefile.unx}.
392 Copy or rename that file to \c{Makefile} and try typing \c{make}.
393 There is also a Makefile.unx file in the \c{rdoff} subdirectory.
394
395
396 \C{running} Running NASM
397
398 \H{syntax} NASM \i{Command-Line} Syntax
399
400 To assemble a file, you issue a command of the form
401
402 \c nasm -f <format> <filename> [-o <output>]
403
404 For example,
405
406 \c nasm -f elf myfile.asm
407
408 will assemble \c{myfile.asm} into an \c{ELF} object file \c{myfile.o}. And
409
410 \c nasm -f bin myfile.asm -o myfile.com
411
412 will assemble \c{myfile.asm} into a raw binary file \c{myfile.com}.
413
414 To produce a listing file, with the hex codes output from NASM
415 displayed on the left of the original sources, use the \c{-l} option
416 to give a listing file name, for example:
417
418 \c nasm -f coff myfile.asm -l myfile.lst
419
420 To get further usage instructions from NASM, try typing
421
422 \c nasm -h
423
424 This will also list the available output file formats, and what they
425 are.
426
427 If you use Linux but aren't sure whether your system is \c{a.out}
428 or \c{ELF}, type
429
430 \c file nasm
431
432 (in the directory in which you put the NASM binary when you
433 installed it). If it says something like
434
435 \c nasm: ELF 32-bit LSB executable i386 (386 and up) Version 1
436
437 then your system is \c{ELF}, and you should use the option \c{-f elf}
438 when you want NASM to produce Linux object files. If it says
439
440 \c nasm: Linux/i386 demand-paged executable (QMAGIC)
441
442 or something similar, your system is \c{a.out}, and you should use
443 \c{-f aout} instead (Linux \c{a.out} systems have long been obsolete,
444 and are rare these days.)
445
446 Like Unix compilers and assemblers, NASM is silent unless it
447 goes wrong: you won't see any output at all, unless it gives error
448 messages.
449
450
451 \S{opt-o} The \i\c{-o} Option: Specifying the Output File Name
452
453 NASM will normally choose the name of your output file for you;
454 precisely how it does this is dependent on the object file format.
455 For Microsoft object file formats (\i\c{obj} and \i\c{win32}), it
456 will remove the \c{.asm} \i{extension} (or whatever extension you
457 like to use - NASM doesn't care) from your source file name and
458 substitute \c{.obj}. For Unix object file formats (\i\c{aout},
459 \i\c{coff}, \i\c{elf} and \i\c{as86}) it will substitute \c{.o}. For
460 \i\c{rdf}, it will use \c{.rdf}, and for the \i\c{bin} format it
461 will simply remove the extension, so that \c{myfile.asm} produces
462 the output file \c{myfile}.
463
464 If the output file already exists, NASM will overwrite it, unless it
465 has the same name as the input file, in which case it will give a
466 warning and use \i\c{nasm.out} as the output file name instead.
467
468 For situations in which this behaviour is unacceptable, NASM
469 provides the \c{-o} command-line option, which allows you to specify
470 your desired output file name. You invoke \c{-o} by following it
471 with the name you wish for the output file, either with or without
472 an intervening space. For example:
473
474 \c nasm -f bin program.asm -o program.com
475 \c nasm -f bin driver.asm -odriver.sys
476
477 Note that this is a small o, and is different from a capital O , which
478 is used to specify the number of optimisation passes required. See \k{opt-On}.
479
480
481 \S{opt-f} The \i\c{-f} Option: Specifying the \i{Output File Format}
482
483 If you do not supply the \c{-f} option to NASM, it will choose an
484 output file format for you itself. In the distribution versions of
485 NASM, the default is always \i\c{bin}; if you've compiled your own
486 copy of NASM, you can redefine \i\c{OF_DEFAULT} at compile time and
487 choose what you want the default to be.
488
489 Like \c{-o}, the intervening space between \c{-f} and the output
490 file format is optional; so \c{-f elf} and \c{-felf} are both valid.
491
492 A complete list of the available output file formats can be given by
493 issuing the command \i\c{nasm -hf}.
494
495
496 \S{opt-l} The \i\c{-l} Option: Generating a \i{Listing File}
497
498 If you supply the \c{-l} option to NASM, followed (with the usual
499 optional space) by a file name, NASM will generate a
500 \i{source-listing file} for you, in which addresses and generated
501 code are listed on the left, and the actual source code, with
502 expansions of multi-line macros (except those which specifically
503 request no expansion in source listings: see \k{nolist}) on the
504 right. For example:
505
506 \c nasm -f elf myfile.asm -l myfile.lst
507
508
509 \S{opt-M} The \i\c{-M} Option: Generate \i{Makefile Dependencies}.
510
511 This option can be used to generate makefile dependencies on stdout.
512 This can be redirected to a file for further processing. For example:
513
514 \c NASM -M myfile.asm > myfile.dep
515
516
517 \S{opt-F} The \i\c{-F} Option: Selecting a \i{Debugging Format}
518
519 This option can be used to select a debugging format for the output file.
520 The syntax is the same as for the -f option, except that it produces
521 output in a debugging format.
522
523 A complete list of the available debug file formats for an output format
524 can be seen by issuing the command \i\c{nasm -f <format> -y}.
525
526 This option is not built into NASM by default. For information on how
527 to enable it when building from the sources, see \k{dbgfmt}
528
529
530 \S{opt-g} The \i\c{-g} Option: Enabling \i{Debug Information}.
531
532 This option can be used to generate debugging information in the specified
533 format.
534
535 See \k{opt-F} for more information.
536
537
538 \S{opt-X} The \i\c{-X} Option: Selecting an \i{Error Reporting Format}
539
540 This option can be used to select an error reporting format for any 
541 error messages that might be produced by NASM.
542
543 Currently, two error reporting formats may be selected.  They are
544 the \c{-Xvc} option and the \c{-Xgnu} option.  The GNU format is 
545 the default and looks like this:
546
547 \c filename.asm:65: error:specific error message 
548
549
550 where \c{filename.asm} is the name of the source file in which the
551 error was detected, \c{65} is the source file line number on which 
552 the error was detected, \c{error} is the severity of the error (this
553 could be \c{warning}), and \c{specific error message} is a more
554 detailed text message which should help pinpoint the exact problem.
555
556 The other format, specified by \c{-Xvc} is the style used by Microsoft
557 Visual C++ and some other programs.  It looks like this:
558
559 \c filename.asm(65) error:specific error message
560
561
562 where the only difference is that the line number is in parentheses
563 instead of being delimited by colons.  
564
565 See also the \c{Visual C++} output format, \k{win32fmt}.
566
567 \S{opt-E} The \i\c{-E} Option: Send Errors to a File
568
569 Under \I{DOS}\c{MS-DOS} it can be difficult (though there are ways) to
570 redirect the standard-error output of a program to a file. Since
571 NASM usually produces its warning and \i{error messages} on
572 \i\c{stderr}, this can make it hard to capture the errors if (for
573 example) you want to load them into an editor.
574
575 NASM therefore provides the \c{-E} option, taking a filename argument
576 which causes errors to be sent to the specified files rather than
577 standard error. Therefore you can \I{redirecting errors}redirect
578 the errors into a file by typing
579
580 \c nasm -E myfile.err -f obj myfile.asm
581
582
583 \S{opt-s} The \i\c{-s} Option: Send Errors to \i\c{stdout}
584
585 The \c{-s} option redirects \i{error messages} to \c{stdout} rather
586 than \c{stderr}, so it can be redirected under \I{DOS}\c{MS-DOS}. To
587 assemble the file \c{myfile.asm} and pipe its output to the \c{more}
588 program, you can type:
589
590 \c nasm -s -f obj myfile.asm | more
591
592 See also the \c{-E} option, \k{opt-E}.
593
594
595 \S{opt-i} The \i\c{-i}\I\c{-I} Option: Include File Search Directories
596
597 When NASM sees the \i\c{%include} directive in a source file (see
598 \k{include}), it will search for the given file not only in the
599 current directory, but also in any directories specified on the
600 command line by the use of the \c{-i} option. Therefore you can
601 include files from a \i{macro library}, for example, by typing
602
603 \c nasm -ic:\macrolib\ -f obj myfile.asm
604
605 (As usual, a space between \c{-i} and the path name is allowed, and
606 optional).
607
608 NASM, in the interests of complete source-code portability, does not
609 understand the file naming conventions of the OS it is running on;
610 the string you provide as an argument to the \c{-i} option will be
611 prepended exactly as written to the name of the include file.
612 Therefore the trailing backslash in the above example is necessary.
613 Under Unix, a trailing forward slash is similarly necessary.
614
615 (You can use this to your advantage, if you're really \i{perverse},
616 by noting that the option \c{-ifoo} will cause \c{%include "bar.i"}
617 to search for the file \c{foobar.i}...)
618
619 If you want to define a \e{standard} \i{include search path},
620 similar to \c{/usr/include} on Unix systems, you should place one or
621 more \c{-i} directives in the \c{NASMENV} environment variable (see
622 \k{nasmenv}).
623
624 For Makefile compatibility with many C compilers, this option can also
625 be specified as \c{-I}.
626
627
628 \S{opt-p} The \i\c{-p}\I\c{-P} Option: \I{pre-including files}Pre-Include a File
629
630 \I\c{%include}NASM allows you to specify files to be
631 \e{pre-included} into your source file, by the use of the \c{-p}
632 option. So running
633
634 \c nasm myfile.asm -p myinc.inc
635
636 is equivalent to running \c{nasm myfile.asm} and placing the
637 directive \c{%include "myinc.inc"} at the start of the file.
638
639 For consistency with the \c{-I}, \c{-D} and \c{-U} options, this
640 option can also be specified as \c{-P}.
641
642
643 \S{opt-d} The \i\c{-d}\I\c{-D} Option: \I{pre-defining macros}Pre-Define a Macro
644
645 \I\c{%define}Just as the \c{-p} option gives an alternative to placing
646 \c{%include} directives at the start of a source file, the \c{-d}
647 option gives an alternative to placing a \c{%define} directive. You
648 could code
649
650 \c nasm myfile.asm -dFOO=100
651
652 as an alternative to placing the directive
653
654 \c %define FOO 100
655
656 at the start of the file. You can miss off the macro value, as well:
657 the option \c{-dFOO} is equivalent to coding \c{%define FOO}. This
658 form of the directive may be useful for selecting \i{assembly-time
659 options} which are then tested using \c{%ifdef}, for example
660 \c{-dDEBUG}.
661
662 For Makefile compatibility with many C compilers, this option can also
663 be specified as \c{-D}.
664
665
666 \S{opt-u} The \i\c{-u}\I\c{-U} Option: \I{Undefining macros}Undefine a Macro
667
668 \I\c{%undef}The \c{-u} option undefines a macro that would otherwise
669 have been pre-defined, either automatically or by a \c{-p} or \c{-d}
670 option specified earlier on the command lines.
671
672 For example, the following command line:
673
674 \c nasm myfile.asm -dFOO=100 -uFOO
675
676 would result in \c{FOO} \e{not} being a predefined macro in the
677 program. This is useful to override options specified at a different
678 point in a Makefile.
679
680 For Makefile compatibility with many C compilers, this option can also
681 be specified as \c{-U}.
682
683
684 \S{opt-e} The \i\c{-e} Option: Preprocess Only
685
686 NASM allows the \i{preprocessor} to be run on its own, up to a
687 point. Using the \c{-e} option (which requires no arguments) will
688 cause NASM to preprocess its input file, expand all the macro
689 references, remove all the comments and preprocessor directives, and
690 print the resulting file on standard output (or save it to a file,
691 if the \c{-o} option is also used).
692
693 This option cannot be applied to programs which require the
694 preprocessor to evaluate \I{preprocessor expressions}\i{expressions}
695 which depend on the values of symbols: so code such as
696
697 \c %assign tablesize ($-tablestart)
698
699 will cause an error in \i{preprocess-only mode}.
700
701
702 \S{opt-a} The \i\c{-a} Option: Don't Preprocess At All
703
704 If NASM is being used as the back end to a compiler, it might be
705 desirable to \I{suppressing preprocessing}suppress preprocessing
706 completely and assume the compiler has already done it, to save time
707 and increase compilation speeds. The \c{-a} option, requiring no
708 argument, instructs NASM to replace its powerful \i{preprocessor}
709 with a \i{stub preprocessor} which does nothing.
710
711
712 \S{opt-On} The \i\c{-On} Option: Specifying \i{Multipass Optimization}.
713
714 NASM defaults to being a two pass assembler. This means that if you
715 have a complex source file which needs more than 2 passes to assemble
716 correctly, you have to tell it.
717
718 Using the \c{-O} option, you can tell NASM to carry out multiple passes.
719 The syntax is:
720
721 \b \c{-O0} strict two-pass assembly, JMP and Jcc are handled more
722         like v0.98, except that backward JMPs are short, if possible.
723         Immediate operands take their long forms if a short form is
724         not specified.
725
726 \b \c{-O1} strict two-pass assembly, but forward branches are assembled
727         with code guaranteed to reach; may produce larger code than
728         -O0, but will produce successful assembly more often if
729         branch offset sizes are not specified.
730         Additionally, immediate operands which will fit in a signed byte
731         are optimised, unless the long form is specified.
732
733 \b \c{-On} multi-pass optimization, minimize branch offsets; also will
734         minimize signed immediate bytes, overriding size specification
735         when the \c{strict} keyword hasn't been used (see \k{strict}).
736         If 2 <= n <= 3, then there are 5 * n passes, otherwise there
737         are n passes.
738
739
740 Note that this is a capital O, and is different from a small o, which
741 is used to specify the output format. See \k{opt-o}.
742
743
744 \S{opt-t} The \i\c{-t} option: Enable TASM Compatibility Mode
745
746 NASM includes a limited form of compatibility with Borland's \i\c{TASM}.
747 When NASM's \c{-t} option is used, the following changes are made:
748
749 \b local labels may be prefixed with \c{@@} instead of \c{.}
750
751 \b TASM-style response files beginning with \c{@} may be specified on
752 the command line. This is different from the \c{-@resp} style that NASM
753 natively supports.
754
755 \b size override is supported within brackets. In TASM compatible mode,
756 a size override inside square brackets changes the size of the operand,
757 and not the address type of the operand as it does in NASM syntax. E.g.
758 \c{mov eax,[DWORD val]} is valid syntax in TASM compatibility mode.
759 Note that you lose the ability to override the default address type for
760 the instruction.
761
762 \b \c{%arg} preprocessor directive is supported which is similar to
763 TASM's \c{ARG} directive.
764
765 \b \c{%local} preprocessor directive
766
767 \b \c{%stacksize} preprocessor directive
768
769 \b unprefixed forms of some directives supported (\c{arg}, \c{elif},
770 \c{else}, \c{endif}, \c{if}, \c{ifdef}, \c{ifdifi}, \c{ifndef},
771 \c{include}, \c{local})
772
773 \b more...
774
775 For more information on the directives, see the section on TASM
776 Compatiblity preprocessor directives in \k{tasmcompat}.
777
778
779 \S{opt-w} The \i\c{-w} Option: Enable or Disable Assembly \i{Warnings}
780
781 NASM can observe many conditions during the course of assembly which
782 are worth mentioning to the user, but not a sufficiently severe
783 error to justify NASM refusing to generate an output file. These
784 conditions are reported like errors, but come up with the word
785 `warning' before the message. Warnings do not prevent NASM from
786 generating an output file and returning a success status to the
787 operating system.
788
789 Some conditions are even less severe than that: they are only
790 sometimes worth mentioning to the user. Therefore NASM supports the
791 \c{-w} command-line option, which enables or disables certain
792 classes of assembly warning. Such warning classes are described by a
793 name, for example \c{orphan-labels}; you can enable warnings of
794 this class by the command-line option \c{-w+orphan-labels} and
795 disable it by \c{-w-orphan-labels}.
796
797 The \i{suppressible warning} classes are:
798
799 \b \i\c{macro-params} covers warnings about \i{multi-line macros}
800 being invoked with the wrong number of parameters. This warning
801 class is enabled by default; see \k{mlmacover} for an example of why
802 you might want to disable it.
803
804 \b \i\c{orphan-labels} covers warnings about source lines which
805 contain no instruction but define a label without a trailing colon.
806 NASM does not warn about this somewhat obscure condition by default;
807 see \k{syntax} for an example of why you might want it to.
808
809 \b \i\c{number-overflow} covers warnings about numeric constants which
810 don't fit in 32 bits (for example, it's easy to type one too many Fs
811 and produce \c{0x7ffffffff} by mistake). This warning class is
812 enabled by default.
813
814
815 \S{opt-v} The \i\c{-v} Option: Display \i{Version} Info
816
817 Typing \c{NASM -v} will display the version of NASM which you are using,
818 and the date on which it was compiled.
819
820 You will need the version number if you report a bug.
821
822
823 \S{nasmenv} The \c{NASMENV} \i{Environment} Variable
824
825 If you define an environment variable called \c{NASMENV}, the program
826 will interpret it as a list of extra command-line options, which are
827 processed before the real command line. You can use this to define
828 standard search directories for include files, by putting \c{-i}
829 options in the \c{NASMENV} variable.
830
831 The value of the variable is split up at white space, so that the
832 value \c{-s -ic:\\nasmlib} will be treated as two separate options.
833 However, that means that the value \c{-dNAME="my name"} won't do
834 what you might want, because it will be split at the space and the
835 NASM command-line processing will get confused by the two
836 nonsensical words \c{-dNAME="my} and \c{name"}.
837
838 To get round this, NASM provides a feature whereby, if you begin the
839 \c{NASMENV} environment variable with some character that isn't a minus
840 sign, then NASM will treat this character as the \i{separator
841 character} for options. So setting the \c{NASMENV} variable to the
842 value \c{!-s!-ic:\\nasmlib} is equivalent to setting it to \c{-s
843 -ic:\\nasmlib}, but \c{!-dNAME="my name"} will work.
844
845 This environment variable was previously called \c{NASM}. This was
846 changed with version 0.98.31.
847
848
849 \H{qstart} \i{Quick Start} for \i{MASM} Users
850
851 If you're used to writing programs with MASM, or with \i{TASM} in
852 MASM-compatible (non-Ideal) mode, or with \i\c{a86}, this section
853 attempts to outline the major differences between MASM's syntax and
854 NASM's. If you're not already used to MASM, it's probably worth
855 skipping this section.
856
857
858 \S{qscs} NASM Is \I{case sensitivity}Case-Sensitive
859
860 One simple difference is that NASM is case-sensitive. It makes a
861 difference whether you call your label \c{foo}, \c{Foo} or \c{FOO}.
862 If you're assembling to \c{DOS} or \c{OS/2} \c{.OBJ} files, you can
863 invoke the \i\c{UPPERCASE} directive (documented in \k{objfmt}) to
864 ensure that all symbols exported to other code modules are forced
865 to be upper case; but even then, \e{within} a single module, NASM
866 will distinguish between labels differing only in case.
867
868
869 \S{qsbrackets} NASM Requires \i{Square Brackets} For \i{Memory References}
870
871 NASM was designed with simplicity of syntax in mind. One of the
872 \i{design goals} of NASM is that it should be possible, as far as is
873 practical, for the user to look at a single line of NASM code
874 and tell what opcode is generated by it. You can't do this in MASM:
875 if you declare, for example,
876
877 \c foo     equ     1
878 \c bar     dw      2
879
880 then the two lines of code
881
882 \c         mov     ax,foo
883 \c         mov     ax,bar
884
885 generate completely different opcodes, despite having
886 identical-looking syntaxes.
887
888 NASM avoids this undesirable situation by having a much simpler
889 syntax for memory references. The rule is simply that any access to
890 the \e{contents} of a memory location requires square brackets
891 around the address, and any access to the \e{address} of a variable
892 doesn't. So an instruction of the form \c{mov ax,foo} will
893 \e{always} refer to a compile-time constant, whether it's an \c{EQU}
894 or the address of a variable; and to access the \e{contents} of the
895 variable \c{bar}, you must code \c{mov ax,[bar]}.
896
897 This also means that NASM has no need for MASM's \i\c{OFFSET}
898 keyword, since the MASM code \c{mov ax,offset bar} means exactly the
899 same thing as NASM's \c{mov ax,bar}. If you're trying to get
900 large amounts of MASM code to assemble sensibly under NASM, you
901 can always code \c{%idefine offset} to make the preprocessor treat
902 the \c{OFFSET} keyword as a no-op.
903
904 This issue is even more confusing in \i\c{a86}, where declaring a
905 label with a trailing colon defines it to be a `label' as opposed to
906 a `variable' and causes \c{a86} to adopt NASM-style semantics; so in
907 \c{a86}, \c{mov ax,var} has different behaviour depending on whether
908 \c{var} was declared as \c{var: dw 0} (a label) or \c{var dw 0} (a
909 word-size variable). NASM is very simple by comparison:
910 \e{everything} is a label.
911
912 NASM, in the interests of simplicity, also does not support the
913 \i{hybrid syntaxes} supported by MASM and its clones, such as
914 \c{mov ax,table[bx]}, where a memory reference is denoted by one
915 portion outside square brackets and another portion inside. The
916 correct syntax for the above is \c{mov ax,[table+bx]}. Likewise,
917 \c{mov ax,es:[di]} is wrong and \c{mov ax,[es:di]} is right.
918
919
920 \S{qstypes} NASM Doesn't Store \i{Variable Types}
921
922 NASM, by design, chooses not to remember the types of variables you
923 declare. Whereas MASM will remember, on seeing \c{var dw 0}, that
924 you declared \c{var} as a word-size variable, and will then be able
925 to fill in the \i{ambiguity} in the size of the instruction \c{mov
926 var,2}, NASM will deliberately remember nothing about the symbol
927 \c{var} except where it begins, and so you must explicitly code
928 \c{mov word [var],2}.
929
930 For this reason, NASM doesn't support the \c{LODS}, \c{MOVS},
931 \c{STOS}, \c{SCAS}, \c{CMPS}, \c{INS}, or \c{OUTS} instructions,
932 but only supports the forms such as \c{LODSB}, \c{MOVSW}, and
933 \c{SCASD}, which explicitly specify the size of the components of
934 the strings being manipulated.
935
936
937 \S{qsassume} NASM Doesn't \i\c{ASSUME}
938
939 As part of NASM's drive for simplicity, it also does not support the
940 \c{ASSUME} directive. NASM will not keep track of what values you
941 choose to put in your segment registers, and will never
942 \e{automatically} generate a \i{segment override} prefix.
943
944
945 \S{qsmodel} NASM Doesn't Support \i{Memory Models}
946
947 NASM also does not have any directives to support different 16-bit
948 memory models. The programmer has to keep track of which functions
949 are supposed to be called with a \i{far call} and which with a
950 \i{near call}, and is responsible for putting the correct form of
951 \c{RET} instruction (\c{RETN} or \c{RETF}; NASM accepts \c{RET}
952 itself as an alternate form for \c{RETN}); in addition, the
953 programmer is responsible for coding CALL FAR instructions where
954 necessary when calling \e{external} functions, and must also keep
955 track of which external variable definitions are far and which are
956 near.
957
958
959 \S{qsfpu} \i{Floating-Point} Differences
960
961 NASM uses different names to refer to floating-point registers from
962 MASM: where MASM would call them \c{ST(0)}, \c{ST(1)} and so on, and
963 \i\c{a86} would call them simply \c{0}, \c{1} and so on, NASM
964 chooses to call them \c{st0}, \c{st1} etc.
965
966 As of version 0.96, NASM now treats the instructions with
967 \i{`nowait'} forms in the same way as MASM-compatible assemblers.
968 The idiosyncratic treatment employed by 0.95 and earlier was based
969 on a misunderstanding by the authors.
970
971
972 \S{qsother} Other Differences
973
974 For historical reasons, NASM uses the keyword \i\c{TWORD} where MASM
975 and compatible assemblers use \i\c{TBYTE}.
976
977 NASM does not declare \i{uninitialised storage} in the same way as
978 MASM: where a MASM programmer might use \c{stack db 64 dup (?)},
979 NASM requires \c{stack resb 64}, intended to be read as `reserve 64
980 bytes'. For a limited amount of compatibility, since NASM treats
981 \c{?} as a valid character in symbol names, you can code \c{? equ 0}
982 and then writing \c{dw ?} will at least do something vaguely useful.
983 \I\c{RESB}\i\c{DUP} is still not a supported syntax, however.
984
985 In addition to all of this, macros and directives work completely
986 differently to MASM. See \k{preproc} and \k{directive} for further
987 details.
988
989
990 \C{lang} The NASM Language
991
992 \H{syntax} Layout of a NASM Source Line
993
994 Like most assemblers, each NASM source line contains (unless it
995 is a macro, a preprocessor directive or an assembler directive: see
996 \k{preproc} and \k{directive}) some combination of the four fields
997
998 \c label:    instruction operands        ; comment
999
1000 As usual, most of these fields are optional; the presence or absence
1001 of any combination of a label, an instruction and a comment is allowed.
1002 Of course, the operand field is either required or forbidden by the
1003 presence and nature of the instruction field.
1004
1005 NASM uses backslash (\\) as the line continuation character; if a line
1006 ends with backslash, the next line is considered to be a part of the
1007 backslash-ended line.
1008
1009 NASM places no restrictions on white space within a line: labels may
1010 have white space before them, or instructions may have no space
1011 before them, or anything. The \i{colon} after a label is also
1012 optional. (Note that this means that if you intend to code \c{lodsb}
1013 alone on a line, and type \c{lodab} by accident, then that's still a
1014 valid source line which does nothing but define a label. Running
1015 NASM with the command-line option
1016 \I{orphan-labels}\c{-w+orphan-labels} will cause it to warn you if
1017 you define a label alone on a line without a \i{trailing colon}.)
1018
1019 \i{Valid characters} in labels are letters, numbers, \c{_}, \c{$},
1020 \c{#}, \c{@}, \c{~}, \c{.}, and \c{?}. The only characters which may
1021 be used as the \e{first} character of an identifier are letters,
1022 \c{.} (with special meaning: see \k{locallab}), \c{_} and \c{?}.
1023 An identifier may also be prefixed with a \I{$, prefix}\c{$} to
1024 indicate that it is intended to be read as an identifier and not a
1025 reserved word; thus, if some other module you are linking with
1026 defines a symbol called \c{eax}, you can refer to \c{$eax} in NASM
1027 code to distinguish the symbol from the register.
1028
1029 The instruction field may contain any machine instruction: Pentium
1030 and P6 instructions, FPU instructions, MMX instructions and even
1031 undocumented instructions are all supported. The instruction may be
1032 prefixed by \c{LOCK}, \c{REP}, \c{REPE}/\c{REPZ} or
1033 \c{REPNE}/\c{REPNZ}, in the usual way. Explicit \I{address-size
1034 prefixes}address-size and \i{operand-size prefixes} \c{A16},
1035 \c{A32}, \c{O16} and \c{O32} are provided - one example of their use
1036 is given in \k{mixsize}. You can also use the name of a \I{segment
1037 override}segment register as an instruction prefix: coding
1038 \c{es mov [bx],ax} is equivalent to coding \c{mov [es:bx],ax}. We
1039 recommend the latter syntax, since it is consistent with other
1040 syntactic features of the language, but for instructions such as
1041 \c{LODSB}, which has no operands and yet can require a segment
1042 override, there is no clean syntactic way to proceed apart from
1043 \c{es lodsb}.
1044
1045 An instruction is not required to use a prefix: prefixes such as
1046 \c{CS}, \c{A32}, \c{LOCK} or \c{REPE} can appear on a line by
1047 themselves, and NASM will just generate the prefix bytes.
1048
1049 In addition to actual machine instructions, NASM also supports a
1050 number of pseudo-instructions, described in \k{pseudop}.
1051
1052 Instruction \i{operands} may take a number of forms: they can be
1053 registers, described simply by the register name (e.g. \c{ax},
1054 \c{bp}, \c{ebx}, \c{cr0}: NASM does not use the \c{gas}-style
1055 syntax in which register names must be prefixed by a \c{%} sign), or
1056 they can be \i{effective addresses} (see \k{effaddr}), constants
1057 (\k{const}) or expressions (\k{expr}).
1058
1059 For \i{floating-point} instructions, NASM accepts a wide range of
1060 syntaxes: you can use two-operand forms like MASM supports, or you
1061 can use NASM's native single-operand forms in most cases. Details of
1062 all forms of each supported instruction are given in
1063 \k{iref}. For example, you can code:
1064
1065 \c         fadd    st1             ; this sets st0 := st0 + st1
1066 \c         fadd    st0,st1         ; so does this
1067 \c
1068 \c         fadd    st1,st0         ; this sets st1 := st1 + st0
1069 \c         fadd    to st1          ; so does this
1070
1071 Almost any floating-point instruction that references memory must
1072 use one of the prefixes \i\c{DWORD}, \i\c{QWORD} or \i\c{TWORD} to
1073 indicate what size of \i{memory operand} it refers to.
1074
1075
1076 \H{pseudop} \i{Pseudo-Instructions}
1077
1078 Pseudo-instructions are things which, though not real x86 machine
1079 instructions, are used in the instruction field anyway because
1080 that's the most convenient place to put them. The current
1081 pseudo-instructions are \i\c{DB}, \i\c{DW}, \i\c{DD}, \i\c{DQ} and
1082 \i\c{DT}, their \i{uninitialised} counterparts \i\c{RESB},
1083 \i\c{RESW}, \i\c{RESD}, \i\c{RESQ} and \i\c{REST}, the \i\c{INCBIN}
1084 command, the \i\c{EQU} command, and the \i\c{TIMES} prefix.
1085
1086
1087 \S{db} \c{DB} and friends: Declaring Initialised Data
1088
1089 \i\c{DB}, \i\c{DW}, \i\c{DD}, \i\c{DQ} and \i\c{DT} are used, much
1090 as in MASM, to declare initialised data in the output file. They can
1091 be invoked in a wide range of ways:
1092 \I{floating-point}\I{character constant}\I{string constant}
1093
1094 \c       db    0x55                ; just the byte 0x55
1095 \c       db    0x55,0x56,0x57      ; three bytes in succession
1096 \c       db    'a',0x55            ; character constants are OK
1097 \c       db    'hello',13,10,'$'   ; so are string constants
1098 \c       dw    0x1234              ; 0x34 0x12
1099 \c       dw    'a'                 ; 0x41 0x00 (it's just a number)
1100 \c       dw    'ab'                ; 0x41 0x42 (character constant)
1101 \c       dw    'abc'               ; 0x41 0x42 0x43 0x00 (string)
1102 \c       dd    0x12345678          ; 0x78 0x56 0x34 0x12
1103 \c       dd    1.234567e20         ; floating-point constant
1104 \c       dq    1.234567e20         ; double-precision float
1105 \c       dt    1.234567e20         ; extended-precision float
1106
1107 \c{DQ} and \c{DT} do not accept \i{numeric constants} or string
1108 constants as operands.
1109
1110
1111 \S{resb} \c{RESB} and friends: Declaring \i{Uninitialised} Data
1112
1113 \i\c{RESB}, \i\c{RESW}, \i\c{RESD}, \i\c{RESQ} and \i\c{REST} are
1114 designed to be used in the BSS section of a module: they declare
1115 \e{uninitialised} storage space. Each takes a single operand, which
1116 is the number of bytes, words, doublewords or whatever to reserve.
1117 As stated in \k{qsother}, NASM does not support the MASM/TASM syntax
1118 of reserving uninitialised space by writing \I\c{?}\c{DW ?} or
1119 similar things: this is what it does instead. The operand to a
1120 \c{RESB}-type pseudo-instruction is a \i\e{critical expression}: see
1121 \k{crit}.
1122
1123 For example:
1124
1125 \c buffer:         resb    64              ; reserve 64 bytes
1126 \c wordvar:        resw    1               ; reserve a word
1127 \c realarray       resq    10              ; array of ten reals
1128
1129
1130 \S{incbin} \i\c{INCBIN}: Including External \i{Binary Files}
1131
1132 \c{INCBIN} is borrowed from the old Amiga assembler \i{DevPac}: it
1133 includes a binary file verbatim into the output file. This can be
1134 handy for (for example) including \i{graphics} and \i{sound} data
1135 directly into a game executable file. It can be called in one of
1136 these three ways:
1137
1138 \c     incbin  "file.dat"             ; include the whole file
1139 \c     incbin  "file.dat",1024        ; skip the first 1024 bytes
1140 \c     incbin  "file.dat",1024,512    ; skip the first 1024, and
1141 \c                                    ; actually include at most 512
1142
1143
1144 \S{equ} \i\c{EQU}: Defining Constants
1145
1146 \c{EQU} defines a symbol to a given constant value: when \c{EQU} is
1147 used, the source line must contain a label. The action of \c{EQU} is
1148 to define the given label name to the value of its (only) operand.
1149 This definition is absolute, and cannot change later. So, for
1150 example,
1151
1152 \c message         db      'hello, world'
1153 \c msglen          equ     $-message
1154
1155 defines \c{msglen} to be the constant 12. \c{msglen} may not then be
1156 redefined later. This is not a \i{preprocessor} definition either:
1157 the value of \c{msglen} is evaluated \e{once}, using the value of
1158 \c{$} (see \k{expr} for an explanation of \c{$}) at the point of
1159 definition, rather than being evaluated wherever it is referenced
1160 and using the value of \c{$} at the point of reference. Note that
1161 the operand to an \c{EQU} is also a \i{critical expression}
1162 (\k{crit}).
1163
1164
1165 \S{times} \i\c{TIMES}: \i{Repeating} Instructions or Data
1166
1167 The \c{TIMES} prefix causes the instruction to be assembled multiple
1168 times. This is partly present as NASM's equivalent of the \i\c{DUP}
1169 syntax supported by \i{MASM}-compatible assemblers, in that you can
1170 code
1171
1172 \c zerobuf:        times 64 db 0
1173
1174 or similar things; but \c{TIMES} is more versatile than that. The
1175 argument to \c{TIMES} is not just a numeric constant, but a numeric
1176 \e{expression}, so you can do things like
1177
1178 \c buffer: db      'hello, world'
1179 \c         times 64-$+buffer db ' '
1180
1181 which will store exactly enough spaces to make the total length of
1182 \c{buffer} up to 64. Finally, \c{TIMES} can be applied to ordinary
1183 instructions, so you can code trivial \i{unrolled loops} in it:
1184
1185 \c         times 100 movsb
1186
1187 Note that there is no effective difference between \c{times 100 resb
1188 1} and \c{resb 100}, except that the latter will be assembled about
1189 100 times faster due to the internal structure of the assembler.
1190
1191 The operand to \c{TIMES}, like that of \c{EQU} and those of \c{RESB}
1192 and friends, is a critical expression (\k{crit}).
1193
1194 Note also that \c{TIMES} can't be applied to \i{macros}: the reason
1195 for this is that \c{TIMES} is processed after the macro phase, which
1196 allows the argument to \c{TIMES} to contain expressions such as
1197 \c{64-$+buffer} as above. To repeat more than one line of code, or a
1198 complex macro, use the preprocessor \i\c{%rep} directive.
1199
1200
1201 \H{effaddr} Effective Addresses
1202
1203 An \i{effective address} is any operand to an instruction which
1204 \I{memory reference}references memory. Effective addresses, in NASM,
1205 have a very simple syntax: they consist of an expression evaluating
1206 to the desired address, enclosed in \i{square brackets}. For
1207 example:
1208
1209 \c wordvar dw      123
1210 \c         mov     ax,[wordvar]
1211 \c         mov     ax,[wordvar+1]
1212 \c         mov     ax,[es:wordvar+bx]
1213
1214 Anything not conforming to this simple system is not a valid memory
1215 reference in NASM, for example \c{es:wordvar[bx]}.
1216
1217 More complicated effective addresses, such as those involving more
1218 than one register, work in exactly the same way:
1219
1220 \c         mov     eax,[ebx*2+ecx+offset]
1221 \c         mov     ax,[bp+di+8]
1222
1223 NASM is capable of doing \i{algebra} on these effective addresses,
1224 so that things which don't necessarily \e{look} legal are perfectly
1225 all right:
1226
1227 \c     mov     eax,[ebx*5]             ; assembles as [ebx*4+ebx]
1228 \c     mov     eax,[label1*2-label2]   ; ie [label1+(label1-label2)]
1229
1230 Some forms of effective address have more than one assembled form;
1231 in most such cases NASM will generate the smallest form it can. For
1232 example, there are distinct assembled forms for the 32-bit effective
1233 addresses \c{[eax*2+0]} and \c{[eax+eax]}, and NASM will generally
1234 generate the latter on the grounds that the former requires four
1235 bytes to store a zero offset.
1236
1237 NASM has a hinting mechanism which will cause \c{[eax+ebx]} and
1238 \c{[ebx+eax]} to generate different opcodes; this is occasionally
1239 useful because \c{[esi+ebp]} and \c{[ebp+esi]} have different
1240 default segment registers.
1241
1242 However, you can force NASM to generate an effective address in a
1243 particular form by the use of the keywords \c{BYTE}, \c{WORD},
1244 \c{DWORD} and \c{NOSPLIT}. If you need \c{[eax+3]} to be assembled
1245 using a double-word offset field instead of the one byte NASM will
1246 normally generate, you can code \c{[dword eax+3]}. Similarly, you
1247 can force NASM to use a byte offset for a small value which it
1248 hasn't seen on the first pass (see \k{crit} for an example of such a
1249 code fragment) by using \c{[byte eax+offset]}. As special cases,
1250 \c{[byte eax]} will code \c{[eax+0]} with a byte offset of zero, and
1251 \c{[dword eax]} will code it with a double-word offset of zero. The
1252 normal form, \c{[eax]}, will be coded with no offset field.
1253
1254 The form described in the previous paragraph is also useful if you
1255 are trying to access data in a 32-bit segment from within 16 bit code.
1256 For more information on this see the section on mixed-size addressing
1257 (\k{mixaddr}). In particular, if you need to access data with a known
1258 offset that is larger than will fit in a 16-bit value, if you don't
1259 specify that it is a dword offset, nasm will cause the high word of
1260 the offset to be lost.
1261
1262 Similarly, NASM will split \c{[eax*2]} into \c{[eax+eax]} because
1263 that allows the offset field to be absent and space to be saved; in
1264 fact, it will also split \c{[eax*2+offset]} into
1265 \c{[eax+eax+offset]}. You can combat this behaviour by the use of
1266 the \c{NOSPLIT} keyword: \c{[nosplit eax*2]} will force
1267 \c{[eax*2+0]} to be generated literally.
1268
1269
1270 \H{const} \i{Constants}
1271
1272 NASM understands four different types of constant: numeric,
1273 character, string and floating-point.
1274
1275
1276 \S{numconst} \i{Numeric Constants}
1277
1278 A numeric constant is simply a number. NASM allows you to specify
1279 numbers in a variety of number bases, in a variety of ways: you can
1280 suffix \c{H}, \c{Q} and \c{B} for \i{hex}, \i{octal} and \i{binary},
1281 or you can prefix \c{0x} for hex in the style of C, or you can
1282 prefix \c{$} for hex in the style of Borland Pascal. Note, though,
1283 that the \I{$, prefix}\c{$} prefix does double duty as a prefix on
1284 identifiers (see \k{syntax}), so a hex number prefixed with a \c{$}
1285 sign must have a digit after the \c{$} rather than a letter.
1286
1287 Some examples:
1288
1289 \c         mov     ax,100          ; decimal
1290 \c         mov     ax,0a2h         ; hex
1291 \c         mov     ax,$0a2         ; hex again: the 0 is required
1292 \c         mov     ax,0xa2         ; hex yet again
1293 \c         mov     ax,777q         ; octal
1294 \c         mov     ax,10010011b    ; binary
1295
1296
1297 \S{chrconst} \i{Character Constants}
1298
1299 A character constant consists of up to four characters enclosed in
1300 either single or double quotes. The type of quote makes no
1301 difference to NASM, except of course that surrounding the constant
1302 with single quotes allows double quotes to appear within it and vice
1303 versa.
1304
1305 A character constant with more than one character will be arranged
1306 with \i{little-endian} order in mind: if you code
1307
1308 \c           mov eax,'abcd'
1309
1310 then the constant generated is not \c{0x61626364}, but
1311 \c{0x64636261}, so that if you were then to store the value into
1312 memory, it would read \c{abcd} rather than \c{dcba}. This is also
1313 the sense of character constants understood by the Pentium's
1314 \i\c{CPUID} instruction (see \k{insCPUID}).
1315
1316
1317 \S{strconst} String Constants
1318
1319 String constants are only acceptable to some pseudo-instructions,
1320 namely the \I\c{DW}\I\c{DD}\I\c{DQ}\I\c{DT}\i\c{DB} family and
1321 \i\c{INCBIN}.
1322
1323 A string constant looks like a character constant, only longer. It
1324 is treated as a concatenation of maximum-size character constants
1325 for the conditions. So the following are equivalent:
1326
1327 \c       db    'hello'               ; string constant
1328 \c       db    'h','e','l','l','o'   ; equivalent character constants
1329
1330 And the following are also equivalent:
1331
1332 \c       dd    'ninechars'           ; doubleword string constant
1333 \c       dd    'nine','char','s'     ; becomes three doublewords
1334 \c       db    'ninechars',0,0,0     ; and really looks like this
1335
1336 Note that when used as an operand to \c{db}, a constant like
1337 \c{'ab'} is treated as a string constant despite being short enough
1338 to be a character constant, because otherwise \c{db 'ab'} would have
1339 the same effect as \c{db 'a'}, which would be silly. Similarly,
1340 three-character or four-character constants are treated as strings
1341 when they are operands to \c{dw}.
1342
1343
1344 \S{fltconst} \I{floating-point, constants}Floating-Point Constants
1345
1346 \i{Floating-point} constants are acceptable only as arguments to
1347 \i\c{DD}, \i\c{DQ} and \i\c{DT}. They are expressed in the
1348 traditional form: digits, then a period, then optionally more
1349 digits, then optionally an \c{E} followed by an exponent. The period
1350 is mandatory, so that NASM can distinguish between \c{dd 1}, which
1351 declares an integer constant, and \c{dd 1.0} which declares a
1352 floating-point constant.
1353
1354 Some examples:
1355
1356 \c       dd    1.2                     ; an easy one
1357 \c       dq    1.e10                   ; 10,000,000,000
1358 \c       dq    1.e+10                  ; synonymous with 1.e10
1359 \c       dq    1.e-10                  ; 0.000 000 000 1
1360 \c       dt    3.141592653589793238462 ; pi
1361
1362 NASM cannot do compile-time arithmetic on floating-point constants.
1363 This is because NASM is designed to be portable - although it always
1364 generates code to run on x86 processors, the assembler itself can
1365 run on any system with an ANSI C compiler. Therefore, the assembler
1366 cannot guarantee the presence of a floating-point unit capable of
1367 handling the \i{Intel number formats}, and so for NASM to be able to
1368 do floating arithmetic it would have to include its own complete set
1369 of floating-point routines, which would significantly increase the
1370 size of the assembler for very little benefit.
1371
1372
1373 \H{expr} \i{Expressions}
1374
1375 Expressions in NASM are similar in syntax to those in C.
1376
1377 NASM does not guarantee the size of the integers used to evaluate
1378 expressions at compile time: since NASM can compile and run on
1379 64-bit systems quite happily, don't assume that expressions are
1380 evaluated in 32-bit registers and so try to make deliberate use of
1381 \i{integer overflow}. It might not always work. The only thing NASM
1382 will guarantee is what's guaranteed by ANSI C: you always have \e{at
1383 least} 32 bits to work in.
1384
1385 NASM supports two special tokens in expressions, allowing
1386 calculations to involve the current assembly position: the
1387 \I{$, here}\c{$} and \i\c{$$} tokens. \c{$} evaluates to the assembly
1388 position at the beginning of the line containing the expression; so
1389 you can code an \i{infinite loop} using \c{JMP $}. \c{$$} evaluates
1390 to the beginning of the current section; so you can tell how far
1391 into the section you are by using \c{($-$$)}.
1392
1393 The arithmetic \i{operators} provided by NASM are listed here, in
1394 increasing order of \i{precedence}.
1395
1396
1397 \S{expor} \i\c{|}: \i{Bitwise OR} Operator
1398
1399 The \c{|} operator gives a bitwise OR, exactly as performed by the
1400 \c{OR} machine instruction. Bitwise OR is the lowest-priority
1401 arithmetic operator supported by NASM.
1402
1403
1404 \S{expxor} \i\c{^}: \i{Bitwise XOR} Operator
1405
1406 \c{^} provides the bitwise XOR operation.
1407
1408
1409 \S{expand} \i\c{&}: \i{Bitwise AND} Operator
1410
1411 \c{&} provides the bitwise AND operation.
1412
1413
1414 \S{expshift} \i\c{<<} and \i\c{>>}: \i{Bit Shift} Operators
1415
1416 \c{<<} gives a bit-shift to the left, just as it does in C. So \c{5<<3}
1417 evaluates to 5 times 8, or 40. \c{>>} gives a bit-shift to the
1418 right; in NASM, such a shift is \e{always} unsigned, so that
1419 the bits shifted in from the left-hand end are filled with zero
1420 rather than a sign-extension of the previous highest bit.
1421
1422
1423 \S{expplmi} \I{+ opaddition}\c{+} and \I{- opsubtraction}\c{-}:
1424 \i{Addition} and \i{Subtraction} Operators
1425
1426 The \c{+} and \c{-} operators do perfectly ordinary addition and
1427 subtraction.
1428
1429
1430 \S{expmul} \i\c{*}, \i\c{/}, \i\c{//}, \i\c{%} and \i\c{%%}:
1431 \i{Multiplication} and \i{Division}
1432
1433 \c{*} is the multiplication operator. \c{/} and \c{//} are both
1434 division operators: \c{/} is \i{unsigned division} and \c{//} is
1435 \i{signed division}. Similarly, \c{%} and \c{%%} provide \I{unsigned
1436 modulo}\I{modulo operators}unsigned and
1437 \i{signed modulo} operators respectively.
1438
1439 NASM, like ANSI C, provides no guarantees about the sensible
1440 operation of the signed modulo operator.
1441
1442 Since the \c{%} character is used extensively by the macro
1443 \i{preprocessor}, you should ensure that both the signed and unsigned
1444 modulo operators are followed by white space wherever they appear.
1445
1446
1447 \S{expmul} \i{Unary Operators}: \I{+ opunary}\c{+}, \I{- opunary}\c{-},
1448 \i\c{~} and \i\c{SEG}
1449
1450 The highest-priority operators in NASM's expression grammar are
1451 those which only apply to one argument. \c{-} negates its operand,
1452 \c{+} does nothing (it's provided for symmetry with \c{-}), \c{~}
1453 computes the \i{one's complement} of its operand, and \c{SEG}
1454 provides the \i{segment address} of its operand (explained in more
1455 detail in \k{segwrt}).
1456
1457
1458 \H{segwrt} \i\c{SEG} and \i\c{WRT}
1459
1460 When writing large 16-bit programs, which must be split into
1461 multiple \i{segments}, it is often necessary to be able to refer to
1462 the \I{segment address}segment part of the address of a symbol. NASM
1463 supports the \c{SEG} operator to perform this function.
1464
1465 The \c{SEG} operator returns the \i\e{preferred} segment base of a
1466 symbol, defined as the segment base relative to which the offset of
1467 the symbol makes sense. So the code
1468
1469 \c         mov     ax,seg symbol
1470 \c         mov     es,ax
1471 \c         mov     bx,symbol
1472
1473 will load \c{ES:BX} with a valid pointer to the symbol \c{symbol}.
1474
1475 Things can be more complex than this: since 16-bit segments and
1476 \i{groups} may \I{overlapping segments}overlap, you might occasionally
1477 want to refer to some symbol using a different segment base from the
1478 preferred one. NASM lets you do this, by the use of the \c{WRT}
1479 (With Reference To) keyword. So you can do things like
1480
1481 \c         mov     ax,weird_seg        ; weird_seg is a segment base
1482 \c         mov     es,ax
1483 \c         mov     bx,symbol wrt weird_seg
1484
1485 to load \c{ES:BX} with a different, but functionally equivalent,
1486 pointer to the symbol \c{symbol}.
1487
1488 NASM supports far (inter-segment) calls and jumps by means of the
1489 syntax \c{call segment:offset}, where \c{segment} and \c{offset}
1490 both represent immediate values. So to call a far procedure, you
1491 could code either of
1492
1493 \c         call    (seg procedure):procedure
1494 \c         call    weird_seg:(procedure wrt weird_seg)
1495
1496 (The parentheses are included for clarity, to show the intended
1497 parsing of the above instructions. They are not necessary in
1498 practice.)
1499
1500 NASM supports the syntax \I\c{CALL FAR}\c{call far procedure} as a
1501 synonym for the first of the above usages. \c{JMP} works identically
1502 to \c{CALL} in these examples.
1503
1504 To declare a \i{far pointer} to a data item in a data segment, you
1505 must code
1506
1507 \c         dw      symbol, seg symbol
1508
1509 NASM supports no convenient synonym for this, though you can always
1510 invent one using the macro processor.
1511
1512
1513 \H{strict} \i\c{STRICT}: Inhibiting Optimization
1514
1515 When assembling with the optimizer set to level 2 or higher (see
1516 \k{opt-On}), NASM will usee size specifiers (\c{BYTE}, \c{WORD},
1517 \c{DWORD}, \c{QWORD}, or \c{TWORD}), but will give them the smallest
1518 possible size. The keyword \c{STRICT} can be used to inhibit
1519 optimization and force a particular operand to be emitted in the
1520 specified size. For example, with the optimizer on, and in
1521 \c{BITS 16} mode,
1522
1523 \c         push dword 33
1524
1525 is encoded in three bytes \c{66 6A 21}, whereas
1526
1527 \c         push strict dword 33
1528
1529 is encoded in six bytes, with a full dword immediate operand \c{66 68
1530 21 00 00 00}.
1531
1532 With the optimizer off, the same code (six bytes) is generated whether
1533 the \c{STRICT} keyword was used or not.
1534
1535
1536 \H{crit} \i{Critical Expressions}
1537
1538 A limitation of NASM is that it is a \i{two-pass assembler}; unlike
1539 TASM and others, it will always do exactly two \I{passes}\i{assembly
1540 passes}. Therefore it is unable to cope with source files that are
1541 complex enough to require three or more passes.
1542
1543 The first pass is used to determine the size of all the assembled
1544 code and data, so that the second pass, when generating all the
1545 code, knows all the symbol addresses the code refers to. So one
1546 thing NASM can't handle is code whose size depends on the value of a
1547 symbol declared after the code in question. For example,
1548
1549 \c         times (label-$) db 0
1550 \c label:  db      'Where am I?'
1551
1552 The argument to \i\c{TIMES} in this case could equally legally
1553 evaluate to anything at all; NASM will reject this example because
1554 it cannot tell the size of the \c{TIMES} line when it first sees it.
1555 It will just as firmly reject the slightly \I{paradox}paradoxical
1556 code
1557
1558 \c         times (label-$+1) db 0
1559 \c label:  db      'NOW where am I?'
1560
1561 in which \e{any} value for the \c{TIMES} argument is by definition
1562 wrong!
1563
1564 NASM rejects these examples by means of a concept called a
1565 \e{critical expression}, which is defined to be an expression whose
1566 value is required to be computable in the first pass, and which must
1567 therefore depend only on symbols defined before it. The argument to
1568 the \c{TIMES} prefix is a critical expression; for the same reason,
1569 the arguments to the \i\c{RESB} family of pseudo-instructions are
1570 also critical expressions.
1571
1572 Critical expressions can crop up in other contexts as well: consider
1573 the following code.
1574
1575 \c                 mov     ax,symbol1
1576 \c symbol1         equ     symbol2
1577 \c symbol2:
1578
1579 On the first pass, NASM cannot determine the value of \c{symbol1},
1580 because \c{symbol1} is defined to be equal to \c{symbol2} which NASM
1581 hasn't seen yet. On the second pass, therefore, when it encounters
1582 the line \c{mov ax,symbol1}, it is unable to generate the code for
1583 it because it still doesn't know the value of \c{symbol1}. On the
1584 next line, it would see the \i\c{EQU} again and be able to determine
1585 the value of \c{symbol1}, but by then it would be too late.
1586
1587 NASM avoids this problem by defining the right-hand side of an
1588 \c{EQU} statement to be a critical expression, so the definition of
1589 \c{symbol1} would be rejected in the first pass.
1590
1591 There is a related issue involving \i{forward references}: consider
1592 this code fragment.
1593
1594 \c         mov     eax,[ebx+offset]
1595 \c offset  equ     10
1596
1597 NASM, on pass one, must calculate the size of the instruction \c{mov
1598 eax,[ebx+offset]} without knowing the value of \c{offset}. It has no
1599 way of knowing that \c{offset} is small enough to fit into a
1600 one-byte offset field and that it could therefore get away with
1601 generating a shorter form of the \i{effective-address} encoding; for
1602 all it knows, in pass one, \c{offset} could be a symbol in the code
1603 segment, and it might need the full four-byte form. So it is forced
1604 to compute the size of the instruction to accommodate a four-byte
1605 address part. In pass two, having made this decision, it is now
1606 forced to honour it and keep the instruction large, so the code
1607 generated in this case is not as small as it could have been. This
1608 problem can be solved by defining \c{offset} before using it, or by
1609 forcing byte size in the effective address by coding \c{[byte
1610 ebx+offset]}.
1611
1612
1613 \H{locallab} \i{Local Labels}
1614
1615 NASM gives special treatment to symbols beginning with a \i{period}.
1616 A label beginning with a single period is treated as a \e{local}
1617 label, which means that it is associated with the previous non-local
1618 label. So, for example:
1619
1620 \c label1  ; some code
1621 \c
1622 \c .loop
1623 \c         ; some more code
1624 \c
1625 \c         jne     .loop
1626 \c         ret
1627 \c
1628 \c label2  ; some code
1629 \c
1630 \c .loop
1631 \c         ; some more code
1632 \c
1633 \c         jne     .loop
1634 \c         ret
1635
1636 In the above code fragment, each \c{JNE} instruction jumps to the
1637 line immediately before it, because the two definitions of \c{.loop}
1638 are kept separate by virtue of each being associated with the
1639 previous non-local label.
1640
1641 This form of local label handling is borrowed from the old Amiga
1642 assembler \i{DevPac}; however, NASM goes one step further, in
1643 allowing access to local labels from other parts of the code. This
1644 is achieved by means of \e{defining} a local label in terms of the
1645 previous non-local label: the first definition of \c{.loop} above is
1646 really defining a symbol called \c{label1.loop}, and the second
1647 defines a symbol called \c{label2.loop}. So, if you really needed
1648 to, you could write
1649
1650 \c label3  ; some more code
1651 \c         ; and some more
1652 \c
1653 \c         jmp label1.loop
1654
1655 Sometimes it is useful - in a macro, for instance - to be able to
1656 define a label which can be referenced from anywhere but which
1657 doesn't interfere with the normal local-label mechanism. Such a
1658 label can't be non-local because it would interfere with subsequent
1659 definitions of, and references to, local labels; and it can't be
1660 local because the macro that defined it wouldn't know the label's
1661 full name. NASM therefore introduces a third type of label, which is
1662 probably only useful in macro definitions: if a label begins with
1663 the \I{label prefix}special prefix \i\c{..@}, then it does nothing
1664 to the local label mechanism. So you could code
1665
1666 \c label1:                         ; a non-local label
1667 \c .local:                         ; this is really label1.local
1668 \c ..@foo:                         ; this is a special symbol
1669 \c label2:                         ; another non-local label
1670 \c .local:                         ; this is really label2.local
1671 \c
1672 \c         jmp     ..@foo          ; this will jump three lines up
1673
1674 NASM has the capacity to define other special symbols beginning with
1675 a double period: for example, \c{..start} is used to specify the
1676 entry point in the \c{obj} output format (see \k{dotdotstart}).
1677
1678
1679 \C{preproc} The NASM \i{Preprocessor}
1680
1681 NASM contains a powerful \i{macro processor}, which supports
1682 conditional assembly, multi-level file inclusion, two forms of macro
1683 (single-line and multi-line), and a `context stack' mechanism for
1684 extra macro power. Preprocessor directives all begin with a \c{%}
1685 sign.
1686
1687 The preprocessor collapses all lines which end with a backslash (\\)
1688 character into a single line.  Thus:
1689
1690 \c %define THIS_VERY_LONG_MACRO_NAME_IS_DEFINED_TO \\
1691 \c         THIS_VALUE
1692
1693 will work like a single-line macro without the backslash-newline
1694 sequence.
1695
1696 \H{slmacro} \i{Single-Line Macros}
1697
1698 \S{define} The Normal Way: \I\c{%idefine}\i\c{%define}
1699
1700 Single-line macros are defined using the \c{%define} preprocessor
1701 directive. The definitions work in a similar way to C; so you can do
1702 things like
1703
1704 \c %define ctrl    0x1F &
1705 \c %define param(a,b) ((a)+(a)*(b))
1706 \c
1707 \c         mov     byte [param(2,ebx)], ctrl 'D'
1708
1709 which will expand to
1710
1711 \c         mov     byte [(2)+(2)*(ebx)], 0x1F & 'D'
1712
1713 When the expansion of a single-line macro contains tokens which
1714 invoke another macro, the expansion is performed at invocation time,
1715 not at definition time. Thus the code
1716
1717 \c %define a(x)    1+b(x)
1718 \c %define b(x)    2*x
1719 \c
1720 \c         mov     ax,a(8)
1721
1722 will evaluate in the expected way to \c{mov ax,1+2*8}, even though
1723 the macro \c{b} wasn't defined at the time of definition of \c{a}.
1724
1725 Macros defined with \c{%define} are \i{case sensitive}: after
1726 \c{%define foo bar}, only \c{foo} will expand to \c{bar}: \c{Foo} or
1727 \c{FOO} will not. By using \c{%idefine} instead of \c{%define} (the
1728 `i' stands for `insensitive') you can define all the case variants
1729 of a macro at once, so that \c{%idefine foo bar} would cause
1730 \c{foo}, \c{Foo}, \c{FOO}, \c{fOO} and so on all to expand to
1731 \c{bar}.
1732
1733 There is a mechanism which detects when a macro call has occurred as
1734 a result of a previous expansion of the same macro, to guard against
1735 \i{circular references} and infinite loops. If this happens, the
1736 preprocessor will only expand the first occurrence of the macro.
1737 Hence, if you code
1738
1739 \c %define a(x)    1+a(x)
1740 \c
1741 \c         mov     ax,a(3)
1742
1743 the macro \c{a(3)} will expand once, becoming \c{1+a(3)}, and will
1744 then expand no further. This behaviour can be useful: see \k{32c}
1745 for an example of its use.
1746
1747 You can \I{overloading, single-line macros}overload single-line
1748 macros: if you write
1749
1750 \c %define foo(x)   1+x
1751 \c %define foo(x,y) 1+x*y
1752
1753 the preprocessor will be able to handle both types of macro call,
1754 by counting the parameters you pass; so \c{foo(3)} will become
1755 \c{1+3} whereas \c{foo(ebx,2)} will become \c{1+ebx*2}. However, if
1756 you define
1757
1758 \c %define foo bar
1759
1760 then no other definition of \c{foo} will be accepted: a macro with
1761 no parameters prohibits the definition of the same name as a macro
1762 \e{with} parameters, and vice versa.
1763
1764 This doesn't prevent single-line macros being \e{redefined}: you can
1765 perfectly well define a macro with
1766
1767 \c %define foo bar
1768
1769 and then re-define it later in the same source file with
1770
1771 \c %define foo baz
1772
1773 Then everywhere the macro \c{foo} is invoked, it will be expanded
1774 according to the most recent definition. This is particularly useful
1775 when defining single-line macros with \c{%assign} (see \k{assign}).
1776
1777 You can \i{pre-define} single-line macros using the `-d' option on
1778 the NASM command line: see \k{opt-d}.
1779
1780
1781 \S{xdefine} Enhancing %define: \I\c{%xidefine}\i\c{%xdefine}
1782
1783 To have a reference to an embedded single-line macro resolved at the
1784 time that it is embedded, as opposed to when the calling macro is
1785 expanded, you need a different mechanism to the one offered by
1786 \c{%define}. The solution is to use \c{%xdefine}, or it's
1787 \I{case sensitive}case-insensitive counterpart \c{%xidefine}.
1788
1789 Suppose you have the following code:
1790
1791 \c %define  isTrue  1
1792 \c %define  isFalse isTrue
1793 \c %define  isTrue  0
1794 \c
1795 \c val1:    db      isFalse
1796 \c
1797 \c %define  isTrue  1
1798 \c
1799 \c val2:    db      isFalse
1800
1801 In this case, \c{val1} is equal to 0, and \c{val2} is equal to 1.
1802 This is because, when a single-line macro is defined using
1803 \c{%define}, it is expanded only when it is called. As \c{isFalse}
1804 expands to \c{isTrue}, the expansion will be the current value of
1805 \c{isTrue}. The first time it is called that is 0, and the second
1806 time it is 1.
1807
1808 If you wanted \c{isFalse} to expand to the value assigned to the
1809 embedded macro \c{isTrue} at the time that \c{isFalse} was defined,
1810 you need to change the above code to use \c{%xdefine}.
1811
1812 \c %xdefine isTrue  1
1813 \c %xdefine isFalse isTrue
1814 \c %xdefine isTrue  0
1815 \c
1816 \c val1:    db      isFalse
1817 \c
1818 \c %xdefine isTrue  1
1819 \c
1820 \c val2:    db      isFalse
1821
1822 Now, each time that \c{isFalse} is called, it expands to 1,
1823 as that is what the embedded macro \c{isTrue} expanded to at
1824 the time that \c{isFalse} was defined.
1825
1826
1827 \S{concat%+} Concatenating Single Line Macro Tokens: \i\c{%+}
1828
1829 Individual tokens in single line macros can be concatenated, to produce
1830 longer tokens for later processing. This can be useful if there are
1831 several similar macros that perform similar functions.
1832
1833 As an example, consider the following:
1834
1835 \c %define BDASTART 400h                ; Start of BIOS data area
1836
1837 \c struc   tBIOSDA                      ; its structure
1838 \c         .COM1addr       RESW    1
1839 \c         .COM2addr       RESW    1
1840 \c         ; ..and so on
1841 \c endstruc
1842
1843 Now, if we need to access the elements of tBIOSDA in different places,
1844 we can end up with:
1845
1846 \c         mov     ax,BDASTART + tBIOSDA.COM1addr
1847 \c         mov     bx,BDASTART + tBIOSDA.COM2addr
1848
1849 This will become pretty ugly (and tedious) if used in many places, and
1850 can be reduced in size significantly by using the following macro:
1851
1852 \c ; Macro to access BIOS variables by their names (from tBDA):
1853
1854 \c %define BDA(x)  BDASTART + tBIOSDA. %+ x
1855
1856 Now the above code can be written as:
1857
1858 \c         mov     ax,BDA(COM1addr)
1859 \c         mov     bx,BDA(COM2addr)
1860
1861 Using this feature, we can simplify references to a lot of macros (and,
1862 in turn, reduce typing errors).
1863
1864
1865 \S{undef} Undefining macros: \i\c{%undef}
1866
1867 Single-line macros can be removed with the \c{%undef} command.  For
1868 example, the following sequence:
1869
1870 \c %define foo bar
1871 \c %undef  foo
1872 \c
1873 \c         mov     eax, foo
1874
1875 will expand to the instruction \c{mov eax, foo}, since after
1876 \c{%undef} the macro \c{foo} is no longer defined.
1877
1878 Macros that would otherwise be pre-defined can be undefined on the
1879 command-line using the `-u' option on the NASM command line: see
1880 \k{opt-u}.
1881
1882
1883 \S{assign} \i{Preprocessor Variables}: \i\c{%assign}
1884
1885 An alternative way to define single-line macros is by means of the
1886 \c{%assign} command (and its \I{case sensitive}case-insensitive
1887 counterpart \i\c{%iassign}, which differs from \c{%assign} in
1888 exactly the same way that \c{%idefine} differs from \c{%define}).
1889
1890 \c{%assign} is used to define single-line macros which take no
1891 parameters and have a numeric value. This value can be specified in
1892 the form of an expression, and it will be evaluated once, when the
1893 \c{%assign} directive is processed.
1894
1895 Like \c{%define}, macros defined using \c{%assign} can be re-defined
1896 later, so you can do things like
1897
1898 \c %assign i i+1
1899
1900 to increment the numeric value of a macro.
1901
1902 \c{%assign} is useful for controlling the termination of \c{%rep}
1903 preprocessor loops: see \k{rep} for an example of this. Another
1904 use for \c{%assign} is given in \k{16c} and \k{32c}.
1905
1906 The expression passed to \c{%assign} is a \i{critical expression}
1907 (see \k{crit}), and must also evaluate to a pure number (rather than
1908 a relocatable reference such as a code or data address, or anything
1909 involving a register).
1910
1911
1912 \H{strlen} \i{String Handling in Macros}: \i\c{%strlen} and \i\c{%substr}
1913
1914 It's often useful to be able to handle strings in macros. NASM
1915 supports two simple string handling macro operators from which
1916 more complex operations can be constructed.
1917
1918
1919 \S{strlen} \i{String Length}: \i\c{%strlen}
1920
1921 The \c{%strlen} macro is like \c{%assign} macro in that it creates
1922 (or redefines) a numeric value to a macro. The difference is that
1923 with \c{%strlen}, the numeric value is the length of a string. An
1924 example of the use of this would be:
1925
1926 \c %strlen charcnt 'my string'
1927
1928 In this example, \c{charcnt} would receive the value 8, just as
1929 if an \c{%assign} had been used. In this example, \c{'my string'}
1930 was a literal string but it could also have been a single-line
1931 macro that expands to a string, as in the following example:
1932
1933 \c %define sometext 'my string'
1934 \c %strlen charcnt sometext
1935
1936 As in the first case, this would result in \c{charcnt} being
1937 assigned the value of 8.
1938
1939
1940 \S{substr} \i{Sub-strings}: \i\c{%substr}
1941
1942 Individual letters in strings can be extracted using \c{%substr}.
1943 An example of its use is probably more useful than the description:
1944
1945 \c %substr mychar  'xyz' 1         ; equivalent to %define mychar 'x'
1946 \c %substr mychar  'xyz' 2         ; equivalent to %define mychar 'y'
1947 \c %substr mychar  'xyz' 3         ; equivalent to %define mychar 'z'
1948
1949 In this example, mychar gets the value of 'y'. As with \c{%strlen}
1950 (see \k{strlen}), the first parameter is the single-line macro to
1951 be created and the second is the string. The third parameter
1952 specifies which character is to be selected. Note that the first
1953 index is 1, not 0 and the last index is equal to the value that
1954 \c{%strlen} would assign given the same string. Index values out
1955 of range result in an empty string.
1956
1957
1958 \H{mlmacro} \i{Multi-Line Macros}: \I\c{%imacro}\i\c{%macro}
1959
1960 Multi-line macros are much more like the type of macro seen in MASM
1961 and TASM: a multi-line macro definition in NASM looks something like
1962 this.
1963
1964 \c %macro  prologue 1
1965 \c
1966 \c         push    ebp
1967 \c         mov     ebp,esp
1968 \c         sub     esp,%1
1969 \c
1970 \c %endmacro
1971
1972 This defines a C-like function prologue as a macro: so you would
1973 invoke the macro with a call such as
1974
1975 \c myfunc:   prologue 12
1976
1977 which would expand to the three lines of code
1978
1979 \c myfunc: push    ebp
1980 \c         mov     ebp,esp
1981 \c         sub     esp,12
1982
1983 The number \c{1} after the macro name in the \c{%macro} line defines
1984 the number of parameters the macro \c{prologue} expects to receive.
1985 The use of \c{%1} inside the macro definition refers to the first
1986 parameter to the macro call. With a macro taking more than one
1987 parameter, subsequent parameters would be referred to as \c{%2},
1988 \c{%3} and so on.
1989
1990 Multi-line macros, like single-line macros, are \i{case-sensitive},
1991 unless you define them using the alternative directive \c{%imacro}.
1992
1993 If you need to pass a comma as \e{part} of a parameter to a
1994 multi-line macro, you can do that by enclosing the entire parameter
1995 in \I{braces, around macro parameters}braces. So you could code
1996 things like
1997
1998 \c %macro  silly 2
1999 \c
2000 \c     %2: db      %1
2001 \c
2002 \c %endmacro
2003 \c
2004 \c         silly 'a', letter_a             ; letter_a:  db 'a'
2005 \c         silly 'ab', string_ab           ; string_ab: db 'ab'
2006 \c         silly {13,10}, crlf             ; crlf:      db 13,10
2007
2008
2009 \S{mlmacover} Overloading Multi-Line Macros\I{overloading, multi-line macros}
2010
2011 As with single-line macros, multi-line macros can be overloaded by
2012 defining the same macro name several times with different numbers of
2013 parameters. This time, no exception is made for macros with no
2014 parameters at all. So you could define
2015
2016 \c %macro  prologue 0
2017 \c
2018 \c         push    ebp
2019 \c         mov     ebp,esp
2020 \c
2021 \c %endmacro
2022
2023 to define an alternative form of the function prologue which
2024 allocates no local stack space.
2025
2026 Sometimes, however, you might want to `overload' a machine
2027 instruction; for example, you might want to define
2028
2029 \c %macro  push 2
2030 \c
2031 \c         push    %1
2032 \c         push    %2
2033 \c
2034 \c %endmacro
2035
2036 so that you could code
2037
2038 \c         push    ebx             ; this line is not a macro call
2039 \c         push    eax,ecx         ; but this one is
2040
2041 Ordinarily, NASM will give a warning for the first of the above two
2042 lines, since \c{push} is now defined to be a macro, and is being
2043 invoked with a number of parameters for which no definition has been
2044 given. The correct code will still be generated, but the assembler
2045 will give a warning. This warning can be disabled by the use of the
2046 \c{-w-macro-params} command-line option (see \k{opt-w}).
2047
2048
2049 \S{maclocal} \i{Macro-Local Labels}
2050
2051 NASM allows you to define labels within a multi-line macro
2052 definition in such a way as to make them local to the macro call: so
2053 calling the same macro multiple times will use a different label
2054 each time. You do this by prefixing \i\c{%%} to the label name. So
2055 you can invent an instruction which executes a \c{RET} if the \c{Z}
2056 flag is set by doing this:
2057
2058 \c %macro  retz 0
2059 \c
2060 \c         jnz     %%skip
2061 \c         ret
2062 \c     %%skip:
2063 \c
2064 \c %endmacro
2065
2066 You can call this macro as many times as you want, and every time
2067 you call it NASM will make up a different `real' name to substitute
2068 for the label \c{%%skip}. The names NASM invents are of the form
2069 \c{..@2345.skip}, where the number 2345 changes with every macro
2070 call. The \i\c{..@} prefix prevents macro-local labels from
2071 interfering with the local label mechanism, as described in
2072 \k{locallab}. You should avoid defining your own labels in this form
2073 (the \c{..@} prefix, then a number, then another period) in case
2074 they interfere with macro-local labels.
2075
2076
2077 \S{mlmacgre} \i{Greedy Macro Parameters}
2078
2079 Occasionally it is useful to define a macro which lumps its entire
2080 command line into one parameter definition, possibly after
2081 extracting one or two smaller parameters from the front. An example
2082 might be a macro to write a text string to a file in MS-DOS, where
2083 you might want to be able to write
2084
2085 \c         writefile [filehandle],"hello, world",13,10
2086
2087 NASM allows you to define the last parameter of a macro to be
2088 \e{greedy}, meaning that if you invoke the macro with more
2089 parameters than it expects, all the spare parameters get lumped into
2090 the last defined one along with the separating commas. So if you
2091 code:
2092
2093 \c %macro  writefile 2+
2094 \c
2095 \c         jmp     %%endstr
2096 \c   %%str:        db      %2
2097 \c   %%endstr:
2098 \c         mov     dx,%%str
2099 \c         mov     cx,%%endstr-%%str
2100 \c         mov     bx,%1
2101 \c         mov     ah,0x40
2102 \c         int     0x21
2103 \c
2104 \c %endmacro
2105
2106 then the example call to \c{writefile} above will work as expected:
2107 the text before the first comma, \c{[filehandle]}, is used as the
2108 first macro parameter and expanded when \c{%1} is referred to, and
2109 all the subsequent text is lumped into \c{%2} and placed after the
2110 \c{db}.
2111
2112 The greedy nature of the macro is indicated to NASM by the use of
2113 the \I{+ modifier}\c{+} sign after the parameter count on the
2114 \c{%macro} line.
2115
2116 If you define a greedy macro, you are effectively telling NASM how
2117 it should expand the macro given \e{any} number of parameters from
2118 the actual number specified up to infinity; in this case, for
2119 example, NASM now knows what to do when it sees a call to
2120 \c{writefile} with 2, 3, 4 or more parameters. NASM will take this
2121 into account when overloading macros, and will not allow you to
2122 define another form of \c{writefile} taking 4 parameters (for
2123 example).
2124
2125 Of course, the above macro could have been implemented as a
2126 non-greedy macro, in which case the call to it would have had to
2127 look like
2128
2129 \c           writefile [filehandle], {"hello, world",13,10}
2130
2131 NASM provides both mechanisms for putting \i{commas in macro
2132 parameters}, and you choose which one you prefer for each macro
2133 definition.
2134
2135 See \k{sectmac} for a better way to write the above macro.
2136
2137
2138 \S{mlmacdef} \i{Default Macro Parameters}
2139
2140 NASM also allows you to define a multi-line macro with a \e{range}
2141 of allowable parameter counts. If you do this, you can specify
2142 defaults for \i{omitted parameters}. So, for example:
2143
2144 \c %macro  die 0-1 "Painful program death has occurred."
2145 \c
2146 \c         writefile 2,%1
2147 \c         mov     ax,0x4c01
2148 \c         int     0x21
2149 \c
2150 \c %endmacro
2151
2152 This macro (which makes use of the \c{writefile} macro defined in
2153 \k{mlmacgre}) can be called with an explicit error message, which it
2154 will display on the error output stream before exiting, or it can be
2155 called with no parameters, in which case it will use the default
2156 error message supplied in the macro definition.
2157
2158 In general, you supply a minimum and maximum number of parameters
2159 for a macro of this type; the minimum number of parameters are then
2160 required in the macro call, and then you provide defaults for the
2161 optional ones. So if a macro definition began with the line
2162
2163 \c %macro foobar 1-3 eax,[ebx+2]
2164
2165 then it could be called with between one and three parameters, and
2166 \c{%1} would always be taken from the macro call. \c{%2}, if not
2167 specified by the macro call, would default to \c{eax}, and \c{%3} if
2168 not specified would default to \c{[ebx+2]}.
2169
2170 You may omit parameter defaults from the macro definition, in which
2171 case the parameter default is taken to be blank. This can be useful
2172 for macros which can take a variable number of parameters, since the
2173 \i\c{%0} token (see \k{percent0}) allows you to determine how many
2174 parameters were really passed to the macro call.
2175
2176 This defaulting mechanism can be combined with the greedy-parameter
2177 mechanism; so the \c{die} macro above could be made more powerful,
2178 and more useful, by changing the first line of the definition to
2179
2180 \c %macro die 0-1+ "Painful program death has occurred.",13,10
2181
2182 The maximum parameter count can be infinite, denoted by \c{*}. In
2183 this case, of course, it is impossible to provide a \e{full} set of
2184 default parameters. Examples of this usage are shown in \k{rotate}.
2185
2186
2187 \S{percent0} \i\c{%0}: \I{counting macro parameters}Macro Parameter Counter
2188
2189 For a macro which can take a variable number of parameters, the
2190 parameter reference \c{%0} will return a numeric constant giving the
2191 number of parameters passed to the macro. This can be used as an
2192 argument to \c{%rep} (see \k{rep}) in order to iterate through all
2193 the parameters of a macro. Examples are given in \k{rotate}.
2194
2195
2196 \S{rotate} \i\c{%rotate}: \i{Rotating Macro Parameters}
2197
2198 Unix shell programmers will be familiar with the \I{shift
2199 command}\c{shift} shell command, which allows the arguments passed
2200 to a shell script (referenced as \c{$1}, \c{$2} and so on) to be
2201 moved left by one place, so that the argument previously referenced
2202 as \c{$2} becomes available as \c{$1}, and the argument previously
2203 referenced as \c{$1} is no longer available at all.
2204
2205 NASM provides a similar mechanism, in the form of \c{%rotate}. As
2206 its name suggests, it differs from the Unix \c{shift} in that no
2207 parameters are lost: parameters rotated off the left end of the
2208 argument list reappear on the right, and vice versa.
2209
2210 \c{%rotate} is invoked with a single numeric argument (which may be
2211 an expression). The macro parameters are rotated to the left by that
2212 many places. If the argument to \c{%rotate} is negative, the macro
2213 parameters are rotated to the right.
2214
2215 \I{iterating over macro parameters}So a pair of macros to save and
2216 restore a set of registers might work as follows:
2217
2218 \c %macro  multipush 1-*
2219 \c
2220 \c   %rep  %0
2221 \c         push    %1
2222 \c   %rotate 1
2223 \c   %endrep
2224 \c
2225 \c %endmacro
2226
2227 This macro invokes the \c{PUSH} instruction on each of its arguments
2228 in turn, from left to right. It begins by pushing its first
2229 argument, \c{%1}, then invokes \c{%rotate} to move all the arguments
2230 one place to the left, so that the original second argument is now
2231 available as \c{%1}. Repeating this procedure as many times as there
2232 were arguments (achieved by supplying \c{%0} as the argument to
2233 \c{%rep}) causes each argument in turn to be pushed.
2234
2235 Note also the use of \c{*} as the maximum parameter count,
2236 indicating that there is no upper limit on the number of parameters
2237 you may supply to the \i\c{multipush} macro.
2238
2239 It would be convenient, when using this macro, to have a \c{POP}
2240 equivalent, which \e{didn't} require the arguments to be given in
2241 reverse order. Ideally, you would write the \c{multipush} macro
2242 call, then cut-and-paste the line to where the pop needed to be
2243 done, and change the name of the called macro to \c{multipop}, and
2244 the macro would take care of popping the registers in the opposite
2245 order from the one in which they were pushed.
2246
2247 This can be done by the following definition:
2248
2249 \c %macro  multipop 1-*
2250 \c
2251 \c   %rep %0
2252 \c   %rotate -1
2253 \c         pop     %1
2254 \c   %endrep
2255 \c
2256 \c %endmacro
2257
2258 This macro begins by rotating its arguments one place to the
2259 \e{right}, so that the original \e{last} argument appears as \c{%1}.
2260 This is then popped, and the arguments are rotated right again, so
2261 the second-to-last argument becomes \c{%1}. Thus the arguments are
2262 iterated through in reverse order.
2263
2264
2265 \S{concat} \i{Concatenating Macro Parameters}
2266
2267 NASM can concatenate macro parameters on to other text surrounding
2268 them. This allows you to declare a family of symbols, for example,
2269 in a macro definition. If, for example, you wanted to generate a
2270 table of key codes along with offsets into the table, you could code
2271 something like
2272
2273 \c %macro keytab_entry 2
2274 \c
2275 \c     keypos%1    equ     $-keytab
2276 \c                 db      %2
2277 \c
2278 \c %endmacro
2279 \c
2280 \c keytab:
2281 \c           keytab_entry F1,128+1
2282 \c           keytab_entry F2,128+2
2283 \c           keytab_entry Return,13
2284
2285 which would expand to
2286
2287 \c keytab:
2288 \c keyposF1        equ     $-keytab
2289 \c                 db     128+1
2290 \c keyposF2        equ     $-keytab
2291 \c                 db      128+2
2292 \c keyposReturn    equ     $-keytab
2293 \c                 db      13
2294
2295 You can just as easily concatenate text on to the other end of a
2296 macro parameter, by writing \c{%1foo}.
2297
2298 If you need to append a \e{digit} to a macro parameter, for example
2299 defining labels \c{foo1} and \c{foo2} when passed the parameter
2300 \c{foo}, you can't code \c{%11} because that would be taken as the
2301 eleventh macro parameter. Instead, you must code
2302 \I{braces, after % sign}\c{%\{1\}1}, which will separate the first
2303 \c{1} (giving the number of the macro parameter) from the second
2304 (literal text to be concatenated to the parameter).
2305
2306 This concatenation can also be applied to other preprocessor in-line
2307 objects, such as macro-local labels (\k{maclocal}) and context-local
2308 labels (\k{ctxlocal}). In all cases, ambiguities in syntax can be
2309 resolved by enclosing everything after the \c{%} sign and before the
2310 literal text in braces: so \c{%\{%foo\}bar} concatenates the text
2311 \c{bar} to the end of the real name of the macro-local label
2312 \c{%%foo}. (This is unnecessary, since the form NASM uses for the
2313 real names of macro-local labels means that the two usages
2314 \c{%\{%foo\}bar} and \c{%%foobar} would both expand to the same
2315 thing anyway; nevertheless, the capability is there.)
2316
2317
2318 \S{mlmaccc} \i{Condition Codes as Macro Parameters}
2319
2320 NASM can give special treatment to a macro parameter which contains
2321 a condition code. For a start, you can refer to the macro parameter
2322 \c{%1} by means of the alternative syntax \i\c{%+1}, which informs
2323 NASM that this macro parameter is supposed to contain a condition
2324 code, and will cause the preprocessor to report an error message if
2325 the macro is called with a parameter which is \e{not} a valid
2326 condition code.
2327
2328 Far more usefully, though, you can refer to the macro parameter by
2329 means of \i\c{%-1}, which NASM will expand as the \e{inverse}
2330 condition code. So the \c{retz} macro defined in \k{maclocal} can be
2331 replaced by a general \i{conditional-return macro} like this:
2332
2333 \c %macro  retc 1
2334 \c
2335 \c         j%-1    %%skip
2336 \c         ret
2337 \c   %%skip:
2338 \c
2339 \c %endmacro
2340
2341 This macro can now be invoked using calls like \c{retc ne}, which
2342 will cause the conditional-jump instruction in the macro expansion
2343 to come out as \c{JE}, or \c{retc po} which will make the jump a
2344 \c{JPE}.
2345
2346 The \c{%+1} macro-parameter reference is quite happy to interpret
2347 the arguments \c{CXZ} and \c{ECXZ} as valid condition codes;
2348 however, \c{%-1} will report an error if passed either of these,
2349 because no inverse condition code exists.
2350
2351
2352 \S{nolist} \i{Disabling Listing Expansion}\I\c{.nolist}
2353
2354 When NASM is generating a listing file from your program, it will
2355 generally expand multi-line macros by means of writing the macro
2356 call and then listing each line of the expansion. This allows you to
2357 see which instructions in the macro expansion are generating what
2358 code; however, for some macros this clutters the listing up
2359 unnecessarily.
2360
2361 NASM therefore provides the \c{.nolist} qualifier, which you can
2362 include in a macro definition to inhibit the expansion of the macro
2363 in the listing file. The \c{.nolist} qualifier comes directly after
2364 the number of parameters, like this:
2365
2366 \c %macro foo 1.nolist
2367
2368 Or like this:
2369
2370 \c %macro bar 1-5+.nolist a,b,c,d,e,f,g,h
2371
2372 \H{condasm} \i{Conditional Assembly}\I\c{%if}
2373
2374 Similarly to the C preprocessor, NASM allows sections of a source
2375 file to be assembled only if certain conditions are met. The general
2376 syntax of this feature looks like this:
2377
2378 \c %if<condition>
2379 \c     ; some code which only appears if <condition> is met
2380 \c %elif<condition2>
2381 \c     ; only appears if <condition> is not met but <condition2> is
2382 \c %else
2383 \c     ; this appears if neither <condition> nor <condition2> was met
2384 \c %endif
2385
2386 The \i\c{%else} clause is optional, as is the \i\c{%elif} clause.
2387 You can have more than one \c{%elif} clause as well.
2388
2389
2390 \S{ifdef} \i\c{%ifdef}: Testing Single-Line Macro Existence\I{testing,
2391 single-line macro existence}
2392
2393 Beginning a conditional-assembly block with the line \c{%ifdef
2394 MACRO} will assemble the subsequent code if, and only if, a
2395 single-line macro called \c{MACRO} is defined. If not, then the
2396 \c{%elif} and \c{%else} blocks (if any) will be processed instead.
2397
2398 For example, when debugging a program, you might want to write code
2399 such as
2400
2401 \c           ; perform some function
2402 \c %ifdef DEBUG
2403 \c           writefile 2,"Function performed successfully",13,10
2404 \c %endif
2405 \c           ; go and do something else
2406
2407 Then you could use the command-line option \c{-dDEBUG} to create a
2408 version of the program which produced debugging messages, and remove
2409 the option to generate the final release version of the program.
2410
2411 You can test for a macro \e{not} being defined by using
2412 \i\c{%ifndef} instead of \c{%ifdef}. You can also test for macro
2413 definitions in \c{%elif} blocks by using \i\c{%elifdef} and
2414 \i\c{%elifndef}.
2415
2416
2417 \S{ifmacro} \i\c{ifmacro}: Testing Multi-Line Macro
2418 Existence\I{testing, multi-line macro existence}
2419
2420 The \c{%ifmacro} directive operates in the same way as the \c{%ifdef}
2421 directive, except that it checks for the existence of a multi-line macro.
2422
2423 For example, you may be working with a large project and not have control
2424 over the macros in a library. You may want to create a macro with one
2425 name if it doesn't already exist, and another name if one with that name
2426 does exist.
2427
2428 The \c{%ifmacro} is considered true if defining a macro with the given name
2429 and number of arguments would cause a definitions conflict. For example:
2430
2431 \c %ifmacro MyMacro 1-3
2432 \c
2433 \c      %error "MyMacro 1-3" causes a conflict with an existing macro.
2434 \c
2435 \c %else
2436 \c
2437 \c      %macro MyMacro 1-3
2438 \c
2439 \c              ; insert code to define the macro
2440 \c
2441 \c      %endmacro
2442 \c
2443 \c %endif
2444
2445 This will create the macro "MyMacro 1-3" if no macro already exists which
2446 would conflict with it, and emits a warning if there would be a definition
2447 conflict.
2448
2449 You can test for the macro not existing by using the \i\c{%ifnmacro} instead
2450 of \c{%ifmacro}. Additional tests can be performed in \c{%elif} blocks by using
2451 \i\c{%elifmacro} and \i\c{%elifnmacro}.
2452
2453
2454 \S{ifctx} \i\c{%ifctx}: Testing the Context Stack\I{testing, context
2455 stack}
2456
2457 The conditional-assembly construct \c{%ifctx ctxname} will cause the
2458 subsequent code to be assembled if and only if the top context on
2459 the preprocessor's context stack has the name \c{ctxname}. As with
2460 \c{%ifdef}, the inverse and \c{%elif} forms \i\c{%ifnctx},
2461 \i\c{%elifctx} and \i\c{%elifnctx} are also supported.
2462
2463 For more details of the context stack, see \k{ctxstack}. For a
2464 sample use of \c{%ifctx}, see \k{blockif}.
2465
2466
2467 \S{if} \i\c{%if}: Testing Arbitrary Numeric Expressions\I{testing,
2468 arbitrary numeric expressions}
2469
2470 The conditional-assembly construct \c{%if expr} will cause the
2471 subsequent code to be assembled if and only if the value of the
2472 numeric expression \c{expr} is non-zero. An example of the use of
2473 this feature is in deciding when to break out of a \c{%rep}
2474 preprocessor loop: see \k{rep} for a detailed example.
2475
2476 The expression given to \c{%if}, and its counterpart \i\c{%elif}, is
2477 a critical expression (see \k{crit}).
2478
2479 \c{%if} extends the normal NASM expression syntax, by providing a
2480 set of \i{relational operators} which are not normally available in
2481 expressions. The operators \i\c{=}, \i\c{<}, \i\c{>}, \i\c{<=},
2482 \i\c{>=} and \i\c{<>} test equality, less-than, greater-than,
2483 less-or-equal, greater-or-equal and not-equal respectively. The
2484 C-like forms \i\c{==} and \i\c{!=} are supported as alternative
2485 forms of \c{=} and \c{<>}. In addition, low-priority logical
2486 operators \i\c{&&}, \i\c{^^} and \i\c{||} are provided, supplying
2487 \i{logical AND}, \i{logical XOR} and \i{logical OR}. These work like
2488 the C logical operators (although C has no logical XOR), in that
2489 they always return either 0 or 1, and treat any non-zero input as 1
2490 (so that \c{^^}, for example, returns 1 if exactly one of its inputs
2491 is zero, and 0 otherwise). The relational operators also return 1
2492 for true and 0 for false.
2493
2494
2495 \S{ifidn} \i\c{%ifidn} and \i\c{%ifidni}: Testing Exact Text
2496 Identity\I{testing, exact text identity}
2497
2498 The construct \c{%ifidn text1,text2} will cause the subsequent code
2499 to be assembled if and only if \c{text1} and \c{text2}, after
2500 expanding single-line macros, are identical pieces of text.
2501 Differences in white space are not counted.
2502
2503 \c{%ifidni} is similar to \c{%ifidn}, but is \i{case-insensitive}.
2504
2505 For example, the following macro pushes a register or number on the
2506 stack, and allows you to treat \c{IP} as a real register:
2507
2508 \c %macro  pushparam 1
2509 \c
2510 \c   %ifidni %1,ip
2511 \c         call    %%label
2512 \c   %%label:
2513 \c   %else
2514 \c         push    %1
2515 \c   %endif
2516 \c
2517 \c %endmacro
2518
2519 Like most other \c{%if} constructs, \c{%ifidn} has a counterpart
2520 \i\c{%elifidn}, and negative forms \i\c{%ifnidn} and \i\c{%elifnidn}.
2521 Similarly, \c{%ifidni} has counterparts \i\c{%elifidni},
2522 \i\c{%ifnidni} and \i\c{%elifnidni}.
2523
2524
2525 \S{iftyp} \i\c{%ifid}, \i\c{%ifnum}, \i\c{%ifstr}: Testing Token
2526 Types\I{testing, token types}
2527
2528 Some macros will want to perform different tasks depending on
2529 whether they are passed a number, a string, or an identifier. For
2530 example, a string output macro might want to be able to cope with
2531 being passed either a string constant or a pointer to an existing
2532 string.
2533
2534 The conditional assembly construct \c{%ifid}, taking one parameter
2535 (which may be blank), assembles the subsequent code if and only if
2536 the first token in the parameter exists and is an identifier.
2537 \c{%ifnum} works similarly, but tests for the token being a numeric
2538 constant; \c{%ifstr} tests for it being a string.
2539
2540 For example, the \c{writefile} macro defined in \k{mlmacgre} can be
2541 extended to take advantage of \c{%ifstr} in the following fashion:
2542
2543 \c %macro writefile 2-3+
2544 \c
2545 \c   %ifstr %2
2546 \c         jmp     %%endstr
2547 \c     %if %0 = 3
2548 \c       %%str:    db      %2,%3
2549 \c     %else
2550 \c       %%str:    db      %2
2551 \c     %endif
2552 \c       %%endstr: mov     dx,%%str
2553 \c                 mov     cx,%%endstr-%%str
2554 \c   %else
2555 \c                 mov     dx,%2
2556 \c                 mov     cx,%3
2557 \c   %endif
2558 \c                 mov     bx,%1
2559 \c                 mov     ah,0x40
2560 \c                 int     0x21
2561 \c
2562 \c %endmacro
2563
2564 Then the \c{writefile} macro can cope with being called in either of
2565 the following two ways:
2566
2567 \c         writefile [file], strpointer, length
2568 \c         writefile [file], "hello", 13, 10
2569
2570 In the first, \c{strpointer} is used as the address of an
2571 already-declared string, and \c{length} is used as its length; in
2572 the second, a string is given to the macro, which therefore declares
2573 it itself and works out the address and length for itself.
2574
2575 Note the use of \c{%if} inside the \c{%ifstr}: this is to detect
2576 whether the macro was passed two arguments (so the string would be a
2577 single string constant, and \c{db %2} would be adequate) or more (in
2578 which case, all but the first two would be lumped together into
2579 \c{%3}, and \c{db %2,%3} would be required).
2580
2581 \I\c{%ifnid}\I\c{%elifid}\I\c{%elifnid}\I\c{%ifnnum}\I\c{%elifnum}
2582 \I\c{%elifnnum}\I\c{%ifnstr}\I\c{%elifstr}\I\c{%elifnstr}
2583 The usual \c{%elifXXX}, \c{%ifnXXX} and \c{%elifnXXX} versions exist
2584 for each of \c{%ifid}, \c{%ifnum} and \c{%ifstr}.
2585
2586
2587 \S{pperror} \i\c{%error}: Reporting \i{User-Defined Errors}
2588
2589 The preprocessor directive \c{%error} will cause NASM to report an
2590 error if it occurs in assembled code. So if other users are going to
2591 try to assemble your source files, you can ensure that they define
2592 the right macros by means of code like this:
2593
2594 \c %ifdef SOME_MACRO
2595 \c     ; do some setup
2596 \c %elifdef SOME_OTHER_MACRO
2597 \c     ; do some different setup
2598 \c %else
2599 \c     %error Neither SOME_MACRO nor SOME_OTHER_MACRO was defined.
2600 \c %endif
2601
2602 Then any user who fails to understand the way your code is supposed
2603 to be assembled will be quickly warned of their mistake, rather than
2604 having to wait until the program crashes on being run and then not
2605 knowing what went wrong.
2606
2607
2608 \H{rep} \i{Preprocessor Loops}\I{repeating code}: \i\c{%rep}
2609
2610 NASM's \c{TIMES} prefix, though useful, cannot be used to invoke a
2611 multi-line macro multiple times, because it is processed by NASM
2612 after macros have already been expanded. Therefore NASM provides
2613 another form of loop, this time at the preprocessor level: \c{%rep}.
2614
2615 The directives \c{%rep} and \i\c{%endrep} (\c{%rep} takes a numeric
2616 argument, which can be an expression; \c{%endrep} takes no
2617 arguments) can be used to enclose a chunk of code, which is then
2618 replicated as many times as specified by the preprocessor:
2619
2620 \c %assign i 0
2621 \c %rep    64
2622 \c         inc     word [table+2*i]
2623 \c %assign i i+1
2624 \c %endrep
2625
2626 This will generate a sequence of 64 \c{INC} instructions,
2627 incrementing every word of memory from \c{[table]} to
2628 \c{[table+126]}.
2629
2630 For more complex termination conditions, or to break out of a repeat
2631 loop part way along, you can use the \i\c{%exitrep} directive to
2632 terminate the loop, like this:
2633
2634 \c fibonacci:
2635 \c %assign i 0
2636 \c %assign j 1
2637 \c %rep 100
2638 \c %if j > 65535
2639 \c     %exitrep
2640 \c %endif
2641 \c         dw j
2642 \c %assign k j+i
2643 \c %assign i j
2644 \c %assign j k
2645 \c %endrep
2646 \c
2647 \c fib_number equ ($-fibonacci)/2
2648
2649 This produces a list of all the Fibonacci numbers that will fit in
2650 16 bits. Note that a maximum repeat count must still be given to
2651 \c{%rep}. This is to prevent the possibility of NASM getting into an
2652 infinite loop in the preprocessor, which (on multitasking or
2653 multi-user systems) would typically cause all the system memory to
2654 be gradually used up and other applications to start crashing.
2655
2656
2657 \H{include} \i{Including Other Files}
2658
2659 Using, once again, a very similar syntax to the C preprocessor,
2660 NASM's preprocessor lets you include other source files into your
2661 code. This is done by the use of the \i\c{%include} directive:
2662
2663 \c %include "macros.mac"
2664
2665 will include the contents of the file \c{macros.mac} into the source
2666 file containing the \c{%include} directive.
2667
2668 Include files are \I{searching for include files}searched for in the
2669 current directory (the directory you're in when you run NASM, as
2670 opposed to the location of the NASM executable or the location of
2671 the source file), plus any directories specified on the NASM command
2672 line using the \c{-i} option.
2673
2674 The standard C idiom for preventing a file being included more than
2675 once is just as applicable in NASM: if the file \c{macros.mac} has
2676 the form
2677
2678 \c %ifndef MACROS_MAC
2679 \c     %define MACROS_MAC
2680 \c     ; now define some macros
2681 \c %endif
2682
2683 then including the file more than once will not cause errors,
2684 because the second time the file is included nothing will happen
2685 because the macro \c{MACROS_MAC} will already be defined.
2686
2687 You can force a file to be included even if there is no \c{%include}
2688 directive that explicitly includes it, by using the \i\c{-p} option
2689 on the NASM command line (see \k{opt-p}).
2690
2691
2692 \H{ctxstack} The \i{Context Stack}
2693
2694 Having labels that are local to a macro definition is sometimes not
2695 quite powerful enough: sometimes you want to be able to share labels
2696 between several macro calls. An example might be a \c{REPEAT} ...
2697 \c{UNTIL} loop, in which the expansion of the \c{REPEAT} macro
2698 would need to be able to refer to a label which the \c{UNTIL} macro
2699 had defined. However, for such a macro you would also want to be
2700 able to nest these loops.
2701
2702 NASM provides this level of power by means of a \e{context stack}.
2703 The preprocessor maintains a stack of \e{contexts}, each of which is
2704 characterised by a name. You add a new context to the stack using
2705 the \i\c{%push} directive, and remove one using \i\c{%pop}. You can
2706 define labels that are local to a particular context on the stack.
2707
2708
2709 \S{pushpop} \i\c{%push} and \i\c{%pop}: \I{creating
2710 contexts}\I{removing contexts}Creating and Removing Contexts
2711
2712 The \c{%push} directive is used to create a new context and place it
2713 on the top of the context stack. \c{%push} requires one argument,
2714 which is the name of the context. For example:
2715
2716 \c %push    foobar
2717
2718 This pushes a new context called \c{foobar} on the stack. You can
2719 have several contexts on the stack with the same name: they can
2720 still be distinguished.
2721
2722 The directive \c{%pop}, requiring no arguments, removes the top
2723 context from the context stack and destroys it, along with any
2724 labels associated with it.
2725
2726
2727 \S{ctxlocal} \i{Context-Local Labels}
2728
2729 Just as the usage \c{%%foo} defines a label which is local to the
2730 particular macro call in which it is used, the usage \I{%$}\c{%$foo}
2731 is used to define a label which is local to the context on the top
2732 of the context stack. So the \c{REPEAT} and \c{UNTIL} example given
2733 above could be implemented by means of:
2734
2735 \c %macro repeat 0
2736 \c
2737 \c     %push   repeat
2738 \c     %$begin:
2739 \c
2740 \c %endmacro
2741 \c
2742 \c %macro until 1
2743 \c
2744 \c         j%-1    %$begin
2745 \c     %pop
2746 \c
2747 \c %endmacro
2748
2749 and invoked by means of, for example,
2750
2751 \c         mov     cx,string
2752 \c         repeat
2753 \c         add     cx,3
2754 \c         scasb
2755 \c         until   e
2756
2757 which would scan every fourth byte of a string in search of the byte
2758 in \c{AL}.
2759
2760 If you need to define, or access, labels local to the context
2761 \e{below} the top one on the stack, you can use \I{%$$}\c{%$$foo}, or
2762 \c{%$$$foo} for the context below that, and so on.
2763
2764
2765 \S{ctxdefine} \i{Context-Local Single-Line Macros}
2766
2767 NASM also allows you to define single-line macros which are local to
2768 a particular context, in just the same way:
2769
2770 \c %define %$localmac 3
2771
2772 will define the single-line macro \c{%$localmac} to be local to the
2773 top context on the stack. Of course, after a subsequent \c{%push},
2774 it can then still be accessed by the name \c{%$$localmac}.
2775
2776
2777 \S{ctxrepl} \i\c{%repl}: \I{renaming contexts}Renaming a Context
2778
2779 If you need to change the name of the top context on the stack (in
2780 order, for example, to have it respond differently to \c{%ifctx}),
2781 you can execute a \c{%pop} followed by a \c{%push}; but this will
2782 have the side effect of destroying all context-local labels and
2783 macros associated with the context that was just popped.
2784
2785 NASM provides the directive \c{%repl}, which \e{replaces} a context
2786 with a different name, without touching the associated macros and
2787 labels. So you could replace the destructive code
2788
2789 \c %pop
2790 \c %push   newname
2791
2792 with the non-destructive version \c{%repl newname}.
2793
2794
2795 \S{blockif} Example Use of the \i{Context Stack}: \i{Block IFs}
2796
2797 This example makes use of almost all the context-stack features,
2798 including the conditional-assembly construct \i\c{%ifctx}, to
2799 implement a block IF statement as a set of macros.
2800
2801 \c %macro if 1
2802 \c
2803 \c     %push if
2804 \c     j%-1  %$ifnot
2805 \c
2806 \c %endmacro
2807 \c
2808 \c %macro else 0
2809 \c
2810 \c   %ifctx if
2811 \c         %repl   else
2812 \c         jmp     %$ifend
2813 \c         %$ifnot:
2814 \c   %else
2815 \c         %error  "expected `if' before `else'"
2816 \c   %endif
2817 \c
2818 \c %endmacro
2819 \c
2820 \c %macro endif 0
2821 \c
2822 \c   %ifctx if
2823 \c         %$ifnot:
2824 \c         %pop
2825 \c   %elifctx      else
2826 \c         %$ifend:
2827 \c         %pop
2828 \c   %else
2829 \c         %error  "expected `if' or `else' before `endif'"
2830 \c   %endif
2831 \c
2832 \c %endmacro
2833
2834 This code is more robust than the \c{REPEAT} and \c{UNTIL} macros
2835 given in \k{ctxlocal}, because it uses conditional assembly to check
2836 that the macros are issued in the right order (for example, not
2837 calling \c{endif} before \c{if}) and issues a \c{%error} if they're
2838 not.
2839
2840 In addition, the \c{endif} macro has to be able to cope with the two
2841 distinct cases of either directly following an \c{if}, or following
2842 an \c{else}. It achieves this, again, by using conditional assembly
2843 to do different things depending on whether the context on top of
2844 the stack is \c{if} or \c{else}.
2845
2846 The \c{else} macro has to preserve the context on the stack, in
2847 order to have the \c{%$ifnot} referred to by the \c{if} macro be the
2848 same as the one defined by the \c{endif} macro, but has to change
2849 the context's name so that \c{endif} will know there was an
2850 intervening \c{else}. It does this by the use of \c{%repl}.
2851
2852 A sample usage of these macros might look like:
2853
2854 \c         cmp     ax,bx
2855 \c
2856 \c         if ae
2857 \c                cmp     bx,cx
2858 \c
2859 \c                if ae
2860 \c                        mov     ax,cx
2861 \c                else
2862 \c                        mov     ax,bx
2863 \c                endif
2864 \c
2865 \c         else
2866 \c                cmp     ax,cx
2867 \c
2868 \c                if ae
2869 \c                        mov     ax,cx
2870 \c                endif
2871 \c
2872 \c         endif
2873
2874 The block-\c{IF} macros handle nesting quite happily, by means of
2875 pushing another context, describing the inner \c{if}, on top of the
2876 one describing the outer \c{if}; thus \c{else} and \c{endif} always
2877 refer to the last unmatched \c{if} or \c{else}.
2878
2879
2880 \H{stdmac} \i{Standard Macros}
2881
2882 NASM defines a set of standard macros, which are already defined
2883 when it starts to process any source file. If you really need a
2884 program to be assembled with no pre-defined macros, you can use the
2885 \i\c{%clear} directive to empty the preprocessor of everything.
2886
2887 Most \i{user-level assembler directives} (see \k{directive}) are
2888 implemented as macros which invoke primitive directives; these are
2889 described in \k{directive}. The rest of the standard macro set is
2890 described here.
2891
2892
2893 \S{stdmacver} \i\c{__NASM_MAJOR__}, \i\c{__NASM_MINOR__},
2894 \i\c{__NASM_SUBMINOR__} and \i\c{___NASM_PATCHLEVEL__}: \i{NASM Version}
2895
2896 The single-line macros \c{__NASM_MAJOR__}, \c{__NASM_MINOR__},
2897 \c{__NASM_SUBMINOR__} and \c{___NASM_PATCHLEVEL__} expand to the
2898 major, minor, subminor and patch level parts of the \i{version
2899 number of NASM} being used. So, under NASM 0.98.32p1 for
2900 example, \c{__NASM_MAJOR__} would be defined to be 0, \c{__NASM_MINOR__}
2901 would be defined as 98, \c{__NASM_SUBMINOR__} would be defined to 32,
2902 and \c{___NASM_PATCHLEVEL__} would be defined as 1.
2903
2904
2905 \S{stdmacverid} \i\c{__NASM_VERSION_ID__}: \i{NASM Version ID}
2906
2907 The single-line macro \c{__NASM_VERSION_ID__} expands to a dword integer
2908 representing the full version number of the version of nasm being used.
2909 The value is the equivalent to \c{__NASM_MAJOR__}, \c{__NASM_MINOR__},
2910 \c{__NASM_SUBMINOR__} and \c{___NASM_PATCHLEVEL__} concatenated to
2911 produce a single doubleword. Hence, for 0.98.32p1, the returned number
2912 would be equivalent to:
2913
2914 \c         dd      0x00622001
2915
2916 or
2917
2918 \c         db      1,32,98,0
2919
2920 Note that the above lines are generate exactly the same code, the second
2921 line is used just to give an indication of the order that the separate
2922 values will be present in memory.
2923
2924
2925 \S{stdmacverstr} \i\c{__NASM_VER__}: \i{NASM Version string}
2926
2927 The single-line macro \c{__NASM_VER__} expands to a string which defines
2928 the version number of nasm being used. So, under NASM 0.98.32 for example,
2929
2930 \c         db      __NASM_VER__
2931
2932 would expand to
2933
2934 \c         db      "0.98.32"
2935
2936
2937 \S{fileline} \i\c{__FILE__} and \i\c{__LINE__}: File Name and Line Number
2938
2939 Like the C preprocessor, NASM allows the user to find out the file
2940 name and line number containing the current instruction. The macro
2941 \c{__FILE__} expands to a string constant giving the name of the
2942 current input file (which may change through the course of assembly
2943 if \c{%include} directives are used), and \c{__LINE__} expands to a
2944 numeric constant giving the current line number in the input file.
2945
2946 These macros could be used, for example, to communicate debugging
2947 information to a macro, since invoking \c{__LINE__} inside a macro
2948 definition (either single-line or multi-line) will return the line
2949 number of the macro \e{call}, rather than \e{definition}. So to
2950 determine where in a piece of code a crash is occurring, for
2951 example, one could write a routine \c{stillhere}, which is passed a
2952 line number in \c{EAX} and outputs something like `line 155: still
2953 here'. You could then write a macro
2954
2955 \c %macro  notdeadyet 0
2956 \c
2957 \c         push    eax
2958 \c         mov     eax,__LINE__
2959 \c         call    stillhere
2960 \c         pop     eax
2961 \c
2962 \c %endmacro
2963
2964 and then pepper your code with calls to \c{notdeadyet} until you
2965 find the crash point.
2966
2967
2968 \S{struc} \i\c{STRUC} and \i\c{ENDSTRUC}: \i{Declaring Structure} Data Types
2969
2970 The core of NASM contains no intrinsic means of defining data
2971 structures; instead, the preprocessor is sufficiently powerful that
2972 data structures can be implemented as a set of macros. The macros
2973 \c{STRUC} and \c{ENDSTRUC} are used to define a structure data type.
2974
2975 \c{STRUC} takes one parameter, which is the name of the data type.
2976 This name is defined as a symbol with the value zero, and also has
2977 the suffix \c{_size} appended to it and is then defined as an
2978 \c{EQU} giving the size of the structure. Once \c{STRUC} has been
2979 issued, you are defining the structure, and should define fields
2980 using the \c{RESB} family of pseudo-instructions, and then invoke
2981 \c{ENDSTRUC} to finish the definition.
2982
2983 For example, to define a structure called \c{mytype} containing a
2984 longword, a word, a byte and a string of bytes, you might code
2985
2986 \c struc   mytype
2987 \c
2988 \c   mt_long:      resd    1
2989 \c   mt_word:      resw    1
2990 \c   mt_byte:      resb    1
2991 \c   mt_str:       resb    32
2992 \c
2993 \c endstruc
2994
2995 The above code defines six symbols: \c{mt_long} as 0 (the offset
2996 from the beginning of a \c{mytype} structure to the longword field),
2997 \c{mt_word} as 4, \c{mt_byte} as 6, \c{mt_str} as 7, \c{mytype_size}
2998 as 39, and \c{mytype} itself as zero.
2999
3000 The reason why the structure type name is defined at zero is a side
3001 effect of allowing structures to work with the local label
3002 mechanism: if your structure members tend to have the same names in
3003 more than one structure, you can define the above structure like this:
3004
3005 \c struc mytype
3006 \c
3007 \c   .long:        resd    1
3008 \c   .word:        resw    1
3009 \c   .byte:        resb    1
3010 \c   .str:         resb    32
3011 \c
3012 \c endstruc
3013
3014 This defines the offsets to the structure fields as \c{mytype.long},
3015 \c{mytype.word}, \c{mytype.byte} and \c{mytype.str}.
3016
3017 NASM, since it has no \e{intrinsic} structure support, does not
3018 support any form of period notation to refer to the elements of a
3019 structure once you have one (except the above local-label notation),
3020 so code such as \c{mov ax,[mystruc.mt_word]} is not valid.
3021 \c{mt_word} is a constant just like any other constant, so the
3022 correct syntax is \c{mov ax,[mystruc+mt_word]} or \c{mov
3023 ax,[mystruc+mytype.word]}.
3024
3025
3026 \S{istruc} \i\c{ISTRUC}, \i\c{AT} and \i\c{IEND}: Declaring
3027 \i{Instances of Structures}
3028
3029 Having defined a structure type, the next thing you typically want
3030 to do is to declare instances of that structure in your data
3031 segment. NASM provides an easy way to do this in the \c{ISTRUC}
3032 mechanism. To declare a structure of type \c{mytype} in a program,
3033 you code something like this:
3034
3035 \c mystruc:
3036 \c     istruc mytype
3037 \c
3038 \c         at mt_long, dd      123456
3039 \c         at mt_word, dw      1024
3040 \c         at mt_byte, db      'x'
3041 \c         at mt_str,  db      'hello, world', 13, 10, 0
3042 \c
3043 \c     iend
3044
3045 The function of the \c{AT} macro is to make use of the \c{TIMES}
3046 prefix to advance the assembly position to the correct point for the
3047 specified structure field, and then to declare the specified data.
3048 Therefore the structure fields must be declared in the same order as
3049 they were specified in the structure definition.
3050
3051 If the data to go in a structure field requires more than one source
3052 line to specify, the remaining source lines can easily come after
3053 the \c{AT} line. For example:
3054
3055 \c         at mt_str,  db      123,134,145,156,167,178,189
3056 \c                     db      190,100,0
3057
3058 Depending on personal taste, you can also omit the code part of the
3059 \c{AT} line completely, and start the structure field on the next
3060 line:
3061
3062 \c         at mt_str
3063 \c                 db      'hello, world'
3064 \c                 db      13,10,0
3065
3066
3067 \S{align} \i\c{ALIGN} and \i\c{ALIGNB}: Data Alignment
3068
3069 The \c{ALIGN} and \c{ALIGNB} macros provides a convenient way to
3070 align code or data on a word, longword, paragraph or other boundary.
3071 (Some assemblers call this directive \i\c{EVEN}.) The syntax of the
3072 \c{ALIGN} and \c{ALIGNB} macros is
3073
3074 \c         align   4               ; align on 4-byte boundary
3075 \c         align   16              ; align on 16-byte boundary
3076 \c         align   8,db 0          ; pad with 0s rather than NOPs
3077 \c         align   4,resb 1        ; align to 4 in the BSS
3078 \c         alignb  4               ; equivalent to previous line
3079
3080 Both macros require their first argument to be a power of two; they
3081 both compute the number of additional bytes required to bring the
3082 length of the current section up to a multiple of that power of two,
3083 and then apply the \c{TIMES} prefix to their second argument to
3084 perform the alignment.
3085
3086 If the second argument is not specified, the default for \c{ALIGN}
3087 is \c{NOP}, and the default for \c{ALIGNB} is \c{RESB 1}. So if the
3088 second argument is specified, the two macros are equivalent.
3089 Normally, you can just use \c{ALIGN} in code and data sections and
3090 \c{ALIGNB} in BSS sections, and never need the second argument
3091 except for special purposes.
3092
3093 \c{ALIGN} and \c{ALIGNB}, being simple macros, perform no error
3094 checking: they cannot warn you if their first argument fails to be a
3095 power of two, or if their second argument generates more than one
3096 byte of code. In each of these cases they will silently do the wrong
3097 thing.
3098
3099 \c{ALIGNB} (or \c{ALIGN} with a second argument of \c{RESB 1}) can
3100 be used within structure definitions:
3101
3102 \c struc mytype2
3103 \c
3104 \c   mt_byte:
3105 \c         resb 1
3106 \c         alignb 2
3107 \c   mt_word:
3108 \c         resw 1
3109 \c         alignb 4
3110 \c   mt_long:
3111 \c         resd 1
3112 \c   mt_str:
3113 \c         resb 32
3114 \c
3115 \c endstruc
3116
3117 This will ensure that the structure members are sensibly aligned
3118 relative to the base of the structure.
3119
3120 A final caveat: \c{ALIGN} and \c{ALIGNB} work relative to the
3121 beginning of the \e{section}, not the beginning of the address space
3122 in the final executable. Aligning to a 16-byte boundary when the
3123 section you're in is only guaranteed to be aligned to a 4-byte
3124 boundary, for example, is a waste of effort. Again, NASM does not
3125 check that the section's alignment characteristics are sensible for
3126 the use of \c{ALIGN} or \c{ALIGNB}.
3127
3128
3129 \H{tasmcompat} \i{TASM Compatible Preprocessor Directives}
3130
3131 The following preprocessor directives may only be used when TASM
3132 compatibility is turned on using the \c{-t} command line switch
3133 (This switch is described in \k{opt-t}.)
3134
3135 \b\c{%arg}  (see \k{arg})
3136
3137 \b\c{%stacksize}  (see \k{stacksize})
3138
3139 \b\c{%local}  (see \k{local})
3140
3141
3142 \S{arg} \i\c{%arg} Directive
3143
3144 The \c{%arg} directive is used to simplify the handling of
3145 parameters passed on the stack. Stack based parameter passing
3146 is used by many high level languages, including C, C++ and Pascal.
3147
3148 While NASM comes with macros which attempt to duplicate this
3149 functionality (see \k{16cmacro}), the syntax is not particularly
3150 convenient to use and is not TASM compatible. Here is an example
3151 which shows the use of \c{%arg} without any external macros:
3152
3153 \c some_function:
3154 \c
3155 \c     %push     mycontext        ; save the current context
3156 \c     %stacksize large           ; tell NASM to use bp
3157 \c     %arg      i:word, j_ptr:word
3158 \c
3159 \c         mov     ax,[i]
3160 \c         mov     bx,[j_ptr]
3161 \c         add     ax,[bx]
3162 \c         ret
3163 \c
3164 \c     %pop                       ; restore original context
3165
3166 This is similar to the procedure defined in \k{16cmacro} and adds
3167 the value in i to the value pointed to by j_ptr and returns the
3168 sum in the ax register. See \k{pushpop} for an explanation of
3169 \c{push} and \c{pop} and the use of context stacks.
3170
3171
3172 \S{stacksize} \i\c{%stacksize} Directive
3173
3174 The \c{%stacksize} directive is used in conjunction with the
3175 \c{%arg} (see \k{arg}) and the \c{%local} (see \k{local}) directives.
3176 It tells NASM the default size to use for subsequent \c{%arg} and
3177 \c{%local} directives. The \c{%stacksize} directive takes one
3178 required argument which is one of \c{flat}, \c{large} or \c{small}.
3179
3180 \c %stacksize flat
3181
3182 This form causes NASM to use stack-based parameter addressing
3183 relative to \c{ebp} and it assumes that a near form of call was used
3184 to get to this label (i.e. that \c{eip} is on the stack).
3185
3186 \c %stacksize large
3187
3188 This form uses \c{bp} to do stack-based parameter addressing and
3189 assumes that a far form of call was used to get to this address
3190 (i.e. that \c{ip} and \c{cs} are on the stack).
3191
3192 \c %stacksize small
3193
3194 This form also uses \c{bp} to address stack parameters, but it is
3195 different from \c{large} because it also assumes that the old value
3196 of bp is pushed onto the stack (i.e. it expects an \c{ENTER}
3197 instruction). In other words, it expects that \c{bp}, \c{ip} and
3198 \c{cs} are on the top of the stack, underneath any local space which
3199 may have been allocated by \c{ENTER}. This form is probably most
3200 useful when used in combination with the \c{%local} directive
3201 (see \k{local}).
3202
3203
3204 \S{local} \i\c{%local} Directive
3205
3206 The \c{%local} directive is used to simplify the use of local
3207 temporary stack variables allocated in a stack frame. Automatic
3208 local variables in C are an example of this kind of variable. The
3209 \c{%local} directive is most useful when used with the \c{%stacksize}
3210 (see \k{stacksize} and is also compatible with the \c{%arg} directive
3211 (see \k{arg}). It allows simplified reference to variables on the
3212 stack which have been allocated typically by using the \c{ENTER}
3213 instruction (see \k{insENTER} for a description of that instruction).
3214 An example of its use is the following:
3215
3216 \c silly_swap:
3217 \c
3218 \c     %push mycontext             ; save the current context
3219 \c     %stacksize small            ; tell NASM to use bp
3220 \c     %assign %$localsize 0       ; see text for explanation
3221 \c     %local old_ax:word, old_dx:word
3222 \c
3223 \c         enter   %$localsize,0   ; see text for explanation
3224 \c         mov     [old_ax],ax     ; swap ax & bx
3225 \c         mov     [old_dx],dx     ; and swap dx & cx
3226 \c         mov     ax,bx
3227 \c         mov     dx,cx
3228 \c         mov     bx,[old_ax]
3229 \c         mov     cx,[old_dx]
3230 \c         leave                   ; restore old bp
3231 \c         ret                     ;
3232 \c
3233 \c     %pop                        ; restore original context
3234
3235 The \c{%$localsize} variable is used internally by the
3236 \c{%local} directive and \e{must} be defined within the
3237 current context before the \c{%local} directive may be used.
3238 Failure to do so will result in one expression syntax error for
3239 each \c{%local} variable declared. It then may be used in
3240 the construction of an appropriately sized ENTER instruction
3241 as shown in the example.
3242
3243 \H{otherpreproc} \i{Other Preprocessor Directives}
3244
3245 NASM also has preprocessor directives which allow access to
3246 information from external sources. Currently they include:
3247
3248 The following preprocessor directive is supported to allow NASM to
3249 correctly handle output of the cpp C language preprocessor.
3250
3251 \b\c{%line} enables NAsM to correctly handle the output of the cpp
3252 C language preprocessor (see \k{line}).
3253
3254 \b\c{%!} enables NASM to read in the value of an environment variable,
3255 which can then be used in your program (see \k{getenv}).
3256
3257 \S{line} \i\c{%line} Directive
3258
3259 The \c{%line} directive is used to notify NASM that the input line
3260 corresponds to a specific line number in another file.  Typically
3261 this other file would be an original source file, with the current
3262 NASM input being the output of a pre-processor.  The \c{%line}
3263 directive allows NASM to output messages which indicate the line
3264 number of the original source file, instead of the file that is being
3265 read by NASM.
3266
3267 This preprocessor directive is not generally of use to programmers,
3268 by may be of interest to preprocessor authors.  The usage of the
3269 \c{%line} preprocessor directive is as follows:
3270
3271 \c %line nnn[+mmm] [filename]
3272
3273 In this directive, \c{nnn} indentifies the line of the original source
3274 file which this line corresponds to.  \c{mmm} is an optional parameter
3275 which specifies a line increment value; each line of the input file
3276 read in is considered to correspond to \c{mmm} lines of the original
3277 source file.  Finally, \c{filename} is an optional parameter which
3278 specifies the file name of the original source file.
3279
3280 After reading a \c{%line} preprocessor directive, NASM will report
3281 all file name and line numbers relative to the values specified
3282 therein.
3283
3284
3285 \S{getenv} \i\c{%!}\c{<env>}: Read an environment variable.
3286
3287 The \c{%!<env>} directive makes it possible to read the value of an
3288 environment variable at assembly time. This could, for example, be used
3289 to store the contents of an environment variable into a string, which
3290 could be used at some other point in your code.
3291
3292 For example, suppose that you have an environment variable \c{FOO}, and
3293 you want the contents of \c{FOO} to be embedded in your program. You
3294 could do that as follows:
3295
3296 \c %define FOO    %!FOO
3297 \c %define quote   '
3298 \c
3299 \c tmpstr  db      quote FOO quote
3300
3301 At the time of writing, this will generate an "unterminated string"
3302 warning at the time of defining "quote", and it will add a space
3303 before and after the string that is read in. I was unable to find
3304 a simple workaround (although a workaround can be created using a
3305 multi-line macro), so I believe that you will need to either learn how
3306 to create more complex macros, or allow for the extra spaces if you
3307 make use of this feature in that way.
3308
3309
3310 \C{directive} \i{Assembler Directives}
3311
3312 NASM, though it attempts to avoid the bureaucracy of assemblers like
3313 MASM and TASM, is nevertheless forced to support a \e{few}
3314 directives. These are described in this chapter.
3315
3316 NASM's directives come in two types: \I{user-level
3317 directives}\e{user-level} directives and \I{primitive
3318 directives}\e{primitive} directives. Typically, each directive has a
3319 user-level form and a primitive form. In almost all cases, we
3320 recommend that users use the user-level forms of the directives,
3321 which are implemented as macros which call the primitive forms.
3322
3323 Primitive directives are enclosed in square brackets; user-level
3324 directives are not.
3325
3326 In addition to the universal directives described in this chapter,
3327 each object file format can optionally supply extra directives in
3328 order to control particular features of that file format. These
3329 \I{format-specific directives}\e{format-specific} directives are
3330 documented along with the formats that implement them, in \k{outfmt}.
3331
3332
3333 \H{bits} \i\c{BITS}: Specifying Target \i{Processor Mode}
3334
3335 The \c{BITS} directive specifies whether NASM should generate code
3336 \I{16-bit mode, versus 32-bit mode}designed to run on a processor
3337 operating in 16-bit mode, or code designed to run on a processor
3338 operating in 32-bit mode. The syntax is \c{BITS 16} or \c{BITS 32}.
3339
3340 In most cases, you should not need to use \c{BITS} explicitly. The
3341 \c{aout}, \c{coff}, \c{elf} and \c{win32} object formats, which are
3342 designed for use in 32-bit operating systems, all cause NASM to
3343 select 32-bit mode by default. The \c{obj} object format allows you
3344 to specify each segment you define as either \c{USE16} or \c{USE32},
3345 and NASM will set its operating mode accordingly, so the use of the
3346 \c{BITS} directive is once again unnecessary.
3347
3348 The most likely reason for using the \c{BITS} directive is to write
3349 32-bit code in a flat binary file; this is because the \c{bin}
3350 output format defaults to 16-bit mode in anticipation of it being
3351 used most frequently to write DOS \c{.COM} programs, DOS \c{.SYS}
3352 device drivers and boot loader software.
3353
3354 You do \e{not} need to specify \c{BITS 32} merely in order to use
3355 32-bit instructions in a 16-bit DOS program; if you do, the
3356 assembler will generate incorrect code because it will be writing
3357 code targeted at a 32-bit platform, to be run on a 16-bit one.
3358
3359 When NASM is in \c{BITS 16} state, instructions which use 32-bit
3360 data are prefixed with an 0x66 byte, and those referring to 32-bit
3361 addresses have an 0x67 prefix. In \c{BITS 32} state, the reverse is
3362 true: 32-bit instructions require no prefixes, whereas instructions
3363 using 16-bit data need an 0x66 and those working on 16-bit addresses
3364 need an 0x67.
3365
3366 The \c{BITS} directive has an exactly equivalent primitive form,
3367 \c{[BITS 16]} and \c{[BITS 32]}. The user-level form is a macro
3368 which has no function other than to call the primitive form.
3369
3370
3371 \S{USE16 & USE32} \i\c{USE16} & \i\c{USE32}: Aliases for BITS
3372
3373 The `\c{USE16}' and `\c{USE32}' directives can be used in place of
3374 `\c{BITS 16}' and `\c{BITS 32}', for compatibility with other assemblers.
3375
3376
3377 \H{section} \i\c{SECTION} or \i\c{SEGMENT}: Changing and \i{Defining
3378 Sections}
3379
3380 \I{changing sections}\I{switching between sections}The \c{SECTION}
3381 directive (\c{SEGMENT} is an exactly equivalent synonym) changes
3382 which section of the output file the code you write will be
3383 assembled into. In some object file formats, the number and names of
3384 sections are fixed; in others, the user may make up as many as they
3385 wish. Hence \c{SECTION} may sometimes give an error message, or may
3386 define a new section, if you try to switch to a section that does
3387 not (yet) exist.
3388
3389 The Unix object formats, and the \c{bin} object format, all support
3390 the \i{standardised section names} \c{.text}, \c{.data} and \c{.bss}
3391 for the code, data and uninitialised-data sections. The \c{obj}
3392 format, by contrast, does not recognise these section names as being
3393 special, and indeed will strip off the leading period of any section
3394 name that has one.
3395
3396
3397 \S{sectmac} The \i\c{__SECT__} Macro
3398
3399 The \c{SECTION} directive is unusual in that its user-level form
3400 functions differently from its primitive form. The primitive form,
3401 \c{[SECTION xyz]}, simply switches the current target section to the
3402 one given. The user-level form, \c{SECTION xyz}, however, first
3403 defines the single-line macro \c{__SECT__} to be the primitive
3404 \c{[SECTION]} directive which it is about to issue, and then issues
3405 it. So the user-level directive
3406
3407 \c         SECTION .text
3408
3409 expands to the two lines
3410
3411 \c %define __SECT__        [SECTION .text]
3412 \c         [SECTION .text]
3413
3414 Users may find it useful to make use of this in their own macros.
3415 For example, the \c{writefile} macro defined in \k{mlmacgre} can be
3416 usefully rewritten in the following more sophisticated form:
3417
3418 \c %macro  writefile 2+
3419 \c
3420 \c         [section .data]
3421 \c
3422 \c   %%str:        db      %2
3423 \c   %%endstr:
3424 \c
3425 \c         __SECT__
3426 \c
3427 \c         mov     dx,%%str
3428 \c         mov     cx,%%endstr-%%str
3429 \c         mov     bx,%1
3430 \c         mov     ah,0x40
3431 \c         int     0x21
3432 \c
3433 \c %endmacro
3434
3435 This form of the macro, once passed a string to output, first
3436 switches temporarily to the data section of the file, using the
3437 primitive form of the \c{SECTION} directive so as not to modify
3438 \c{__SECT__}. It then declares its string in the data section, and
3439 then invokes \c{__SECT__} to switch back to \e{whichever} section
3440 the user was previously working in. It thus avoids the need, in the
3441 previous version of the macro, to include a \c{JMP} instruction to
3442 jump over the data, and also does not fail if, in a complicated
3443 \c{OBJ} format module, the user could potentially be assembling the
3444 code in any of several separate code sections.
3445
3446
3447 \H{absolute} \i\c{ABSOLUTE}: Defining Absolute Labels
3448
3449 The \c{ABSOLUTE} directive can be thought of as an alternative form
3450 of \c{SECTION}: it causes the subsequent code to be directed at no
3451 physical section, but at the hypothetical section starting at the
3452 given absolute address. The only instructions you can use in this
3453 mode are the \c{RESB} family.
3454
3455 \c{ABSOLUTE} is used as follows:
3456
3457 \c absolute 0x1A
3458 \c
3459 \c     kbuf_chr    resw    1
3460 \c     kbuf_free   resw    1
3461 \c     kbuf        resw    16
3462
3463 This example describes a section of the PC BIOS data area, at
3464 segment address 0x40: the above code defines \c{kbuf_chr} to be
3465 0x1A, \c{kbuf_free} to be 0x1C, and \c{kbuf} to be 0x1E.
3466
3467 The user-level form of \c{ABSOLUTE}, like that of \c{SECTION},
3468 redefines the \i\c{__SECT__} macro when it is invoked.
3469
3470 \i\c{STRUC} and \i\c{ENDSTRUC} are defined as macros which use
3471 \c{ABSOLUTE} (and also \c{__SECT__}).
3472
3473 \c{ABSOLUTE} doesn't have to take an absolute constant as an
3474 argument: it can take an expression (actually, a \i{critical
3475 expression}: see \k{crit}) and it can be a value in a segment. For
3476 example, a TSR can re-use its setup code as run-time BSS like this:
3477
3478 \c         org     100h               ; it's a .COM program
3479 \c
3480 \c         jmp     setup              ; setup code comes last
3481 \c
3482 \c         ; the resident part of the TSR goes here
3483 \c setup:
3484 \c         ; now write the code that installs the TSR here
3485 \c
3486 \c absolute setup
3487 \c
3488 \c runtimevar1     resw    1
3489 \c runtimevar2     resd    20
3490 \c
3491 \c tsr_end:
3492
3493 This defines some variables `on top of' the setup code, so that
3494 after the setup has finished running, the space it took up can be
3495 re-used as data storage for the running TSR. The symbol `tsr_end'
3496 can be used to calculate the total size of the part of the TSR that
3497 needs to be made resident.
3498
3499
3500 \H{extern} \i\c{EXTERN}: \i{Importing Symbols} from Other Modules
3501
3502 \c{EXTERN} is similar to the MASM directive \c{EXTRN} and the C
3503 keyword \c{extern}: it is used to declare a symbol which is not
3504 defined anywhere in the module being assembled, but is assumed to be
3505 defined in some other module and needs to be referred to by this
3506 one. Not every object-file format can support external variables:
3507 the \c{bin} format cannot.
3508
3509 The \c{EXTERN} directive takes as many arguments as you like. Each
3510 argument is the name of a symbol:
3511
3512 \c extern  _printf
3513 \c extern  _sscanf,_fscanf
3514
3515 Some object-file formats provide extra features to the \c{EXTERN}
3516 directive. In all cases, the extra features are used by suffixing a
3517 colon to the symbol name followed by object-format specific text.
3518 For example, the \c{obj} format allows you to declare that the
3519 default segment base of an external should be the group \c{dgroup}
3520 by means of the directive
3521
3522 \c extern  _variable:wrt dgroup
3523
3524 The primitive form of \c{EXTERN} differs from the user-level form
3525 only in that it can take only one argument at a time: the support
3526 for multiple arguments is implemented at the preprocessor level.
3527
3528 You can declare the same variable as \c{EXTERN} more than once: NASM
3529 will quietly ignore the second and later redeclarations. You can't
3530 declare a variable as \c{EXTERN} as well as something else, though.
3531
3532
3533 \H{global} \i\c{GLOBAL}: \i{Exporting Symbols} to Other Modules
3534
3535 \c{GLOBAL} is the other end of \c{EXTERN}: if one module declares a
3536 symbol as \c{EXTERN} and refers to it, then in order to prevent
3537 linker errors, some other module must actually \e{define} the
3538 symbol and declare it as \c{GLOBAL}. Some assemblers use the name
3539 \i\c{PUBLIC} for this purpose.
3540
3541 The \c{GLOBAL} directive applying to a symbol must appear \e{before}
3542 the definition of the symbol.
3543
3544 \c{GLOBAL} uses the same syntax as \c{EXTERN}, except that it must
3545 refer to symbols which \e{are} defined in the same module as the
3546 \c{GLOBAL} directive. For example:
3547
3548 \c global _main
3549 \c _main:
3550 \c         ; some code
3551
3552 \c{GLOBAL}, like \c{EXTERN}, allows object formats to define private
3553 extensions by means of a colon. The \c{elf} object format, for
3554 example, lets you specify whether global data items are functions or
3555 data:
3556
3557 \c global  hashlookup:function, hashtable:data
3558
3559 Like \c{EXTERN}, the primitive form of \c{GLOBAL} differs from the
3560 user-level form only in that it can take only one argument at a
3561 time.
3562
3563
3564 \H{common} \i\c{COMMON}: Defining Common Data Areas
3565
3566 The \c{COMMON} directive is used to declare \i\e{common variables}.
3567 A common variable is much like a global variable declared in the
3568 uninitialised data section, so that
3569
3570 \c common  intvar  4
3571
3572 is similar in function to
3573
3574 \c global  intvar
3575 \c section .bss
3576 \c
3577 \c intvar  resd    1
3578
3579 The difference is that if more than one module defines the same
3580 common variable, then at link time those variables will be
3581 \e{merged}, and references to \c{intvar} in all modules will point
3582 at the same piece of memory.
3583
3584 Like \c{GLOBAL} and \c{EXTERN}, \c{COMMON} supports object-format
3585 specific extensions. For example, the \c{obj} format allows common
3586 variables to be NEAR or FAR, and the \c{elf} format allows you to
3587 specify the alignment requirements of a common variable:
3588
3589 \c common  commvar  4:near  ; works in OBJ
3590 \c common  intarray 100:4   ; works in ELF: 4 byte aligned
3591
3592 Once again, like \c{EXTERN} and \c{GLOBAL}, the primitive form of
3593 \c{COMMON} differs from the user-level form only in that it can take
3594 only one argument at a time.
3595
3596
3597 \H{CPU} \i\c{CPU}: Defining CPU Dependencies
3598
3599 The \i\c{CPU} directive restricts assembly to those instructions which
3600 are available on the specified CPU.
3601
3602 Options are:
3603
3604 \b\c{CPU 8086}          Assemble only 8086 instruction set
3605
3606 \b\c{CPU 186}           Assemble instructions up to the 80186 instruction set
3607
3608 \b\c{CPU 286}           Assemble instructions up to the 286 instruction set
3609
3610 \b\c{CPU 386}           Assemble instructions up to the 386 instruction set
3611
3612 \b\c{CPU 486}           486 instruction set
3613
3614 \b\c{CPU 586}           Pentium instruction set
3615
3616 \b\c{CPU PENTIUM}       Same as 586
3617
3618 \b\c{CPU 686}           P6 instruction set
3619
3620 \b\c{CPU PPRO}          Same as 686
3621
3622 \b\c{CPU P2}            Same as 686
3623
3624 \b\c{CPU P3}            Pentium III and Katmai instruction sets
3625
3626 \b\c{CPU KATMAI}        Same as P3
3627
3628 \b\c{CPU P4}            Pentium 4 (Willamette) instruction set
3629
3630 \b\c{CPU WILLAMETTE}    Same as P4
3631
3632 \b\c{CPU IA64}          IA64 CPU (in x86 mode) instruction set
3633
3634 All options are case insensitive.  All instructions will be selected
3635 only if they apply to the selected CPU or lower.  By default, all
3636 instructions are available.
3637
3638
3639 \C{outfmt} \i{Output Formats}
3640
3641 NASM is a portable assembler, designed to be able to compile on any
3642 ANSI C-supporting platform and produce output to run on a variety of
3643 Intel x86 operating systems. For this reason, it has a large number
3644 of available output formats, selected using the \i\c{-f} option on
3645 the NASM \i{command line}. Each of these formats, along with its
3646 extensions to the base NASM syntax, is detailed in this chapter.
3647
3648 As stated in \k{opt-o}, NASM chooses a \i{default name} for your
3649 output file based on the input file name and the chosen output
3650 format. This will be generated by removing the \i{extension}
3651 (\c{.asm}, \c{.s}, or whatever you like to use) from the input file
3652 name, and substituting an extension defined by the output format.
3653 The extensions are given with each format below.
3654
3655
3656 \H{binfmt} \i\c{bin}: \i{Flat-Form Binary}\I{pure binary} Output
3657
3658 The \c{bin} format does not produce object files: it generates
3659 nothing in the output file except the code you wrote. Such `pure
3660 binary' files are used by \i{MS-DOS}: \i\c{.COM} executables and
3661 \i\c{.SYS} device drivers are pure binary files. Pure binary output
3662 is also useful for \i{operating system} and \i{boot loader}
3663 development.
3664
3665 The \c{bin} format supports \i{multiple section names}. For details of
3666 how nasm handles sections in the \c{bin} format, see \k{multisec}.
3667
3668 Using the \c{bin} format puts NASM by default into 16-bit mode (see
3669 \k{bits}). In order to use \c{bin} to write 32-bit code such as an
3670 OS kernel, you need to explicitly issue the \I\c{BITS}\c{BITS 32}
3671 directive.
3672
3673 \c{bin} has no default output file name extension: instead, it
3674 leaves your file name as it is once the original extension has been
3675 removed. Thus, the default is for NASM to assemble \c{binprog.asm}
3676 into a binary file called \c{binprog}.
3677
3678
3679 \S{org} \i\c{ORG}: Binary File \i{Program Origin}
3680
3681 The \c{bin} format provides an additional directive to the list
3682 given in \k{directive}: \c{ORG}. The function of the \c{ORG}
3683 directive is to specify the origin address which NASM will assume
3684 the program begins at when it is loaded into memory.
3685
3686 For example, the following code will generate the longword
3687 \c{0x00000104}:
3688
3689 \c         org     0x100
3690 \c         dd      label
3691 \c label:
3692
3693 Unlike the \c{ORG} directive provided by MASM-compatible assemblers,
3694 which allows you to jump around in the object file and overwrite
3695 code you have already generated, NASM's \c{ORG} does exactly what
3696 the directive says: \e{origin}. Its sole function is to specify one
3697 offset which is added to all internal address references within the
3698 section; it does not permit any of the trickery that MASM's version
3699 does. See \k{proborg} for further comments.
3700
3701
3702 \S{binseg} \c{bin} Extensions to the \c{SECTION}
3703 Directive\I{SECTION, bin extensions to}
3704
3705 The \c{bin} output format extends the \c{SECTION} (or \c{SEGMENT})
3706 directive to allow you to specify the alignment requirements of
3707 segments. This is done by appending the \i\c{ALIGN} qualifier to the
3708 end of the section-definition line. For example,
3709
3710 \c section .data   align=16
3711
3712 switches to the section \c{.data} and also specifies that it must be
3713 aligned on a 16-byte boundary.
3714
3715 The parameter to \c{ALIGN} specifies how many low bits of the
3716 section start address must be forced to zero. The alignment value
3717 given may be any power of two.\I{section alignment, in
3718 bin}\I{segment alignment, in bin}\I{alignment, in bin sections}
3719
3720
3721 \S{multisec} \c{Multisection}\I{bin, multisection} support for the BIN format.
3722
3723 The \c{bin} format allows the use of multiple sections, which are
3724 ordered according to a few basic rules.
3725
3726 \b Any code which comes before an explicit \c{SECTION} directive
3727 is directed by default into the \c{.text} section.
3728
3729 \b If a \c{.text} section is not given an \c{ORG} statement, it is
3730 allocated \c{ORG 0} by default.
3731
3732 \b Sections which have an \c{ORG} statement, explicit or implicit,
3733 are placed in the order of the \c{ORG} statement. The code is padded
3734 with 0s to give the correct offsets within the output file.
3735
3736 \b If a section has multiple \c{ORG} statements, the last \c{ORG} statement
3737 is applied to the entire section, without affecting the order in
3738 which the separate parts of the section are put together at assembly
3739 time.
3740
3741 \b Sections without an \c{ORG} statement will be placed after those which
3742 do have one, and they will be placed in the order that they are first
3743 declared.
3744
3745 \b The \c{.data} section does not follow any special rules, unlike the
3746 \c{.text} and \c{.bss} sections.
3747
3748 \b The \c{.bss} section will be placed after all other sections.
3749
3750 \b All sections are aligned on dword boundaries, unless a higher level
3751 of alignment has been specified.
3752
3753 \b Sections cannot overlap.
3754
3755
3756 \H{objfmt} \i\c{obj}: \i{Microsoft OMF}\I{OMF} Object Files
3757
3758 The \c{obj} file format (NASM calls it \c{obj} rather than \c{omf}
3759 for historical reasons) is the one produced by \i{MASM} and
3760 \i{TASM}, which is typically fed to 16-bit DOS linkers to produce
3761 \i\c{.EXE} files. It is also the format used by \i{OS/2}.
3762
3763 \c{obj} provides a default output file-name extension of \c{.obj}.
3764
3765 \c{obj} is not exclusively a 16-bit format, though: NASM has full
3766 support for the 32-bit extensions to the format. In particular,
3767 32-bit \c{obj} format files are used by \i{Borland's Win32
3768 compilers}, instead of using Microsoft's newer \i\c{win32} object
3769 file format.
3770
3771 The \c{obj} format does not define any special segment names: you
3772 can call your segments anything you like. Typical names for segments
3773 in \c{obj} format files are \c{CODE}, \c{DATA} and \c{BSS}.
3774
3775 If your source file contains code before specifying an explicit
3776 \c{SEGMENT} directive, then NASM will invent its own segment called
3777 \i\c{__NASMDEFSEG} for you.
3778
3779 When you define a segment in an \c{obj} file, NASM defines the
3780 segment name as a symbol as well, so that you can access the segment
3781 address of the segment. So, for example:
3782
3783 \c segment data
3784 \c
3785 \c dvar:   dw      1234
3786 \c
3787 \c segment code
3788 \c
3789 \c function:
3790 \c         mov     ax,data         ; get segment address of data
3791 \c         mov     ds,ax           ; and move it into DS
3792 \c         inc     word [dvar]     ; now this reference will work
3793 \c         ret
3794
3795 The \c{obj} format also enables the use of the \i\c{SEG} and
3796 \i\c{WRT} operators, so that you can write code which does things
3797 like
3798
3799 \c extern  foo
3800 \c
3801 \c       mov   ax,seg foo            ; get preferred segment of foo
3802 \c       mov   ds,ax
3803 \c       mov   ax,data               ; a different segment
3804 \c       mov   es,ax
3805 \c       mov   ax,[ds:foo]           ; this accesses `foo'
3806 \c       mov   [es:foo wrt data],bx  ; so does this
3807
3808
3809 \S{objseg} \c{obj} Extensions to the \c{SEGMENT}
3810 Directive\I{SEGMENT, obj extensions to}
3811
3812 The \c{obj} output format extends the \c{SEGMENT} (or \c{SECTION})
3813 directive to allow you to specify various properties of the segment
3814 you are defining. This is done by appending extra qualifiers to the
3815 end of the segment-definition line. For example,
3816
3817 \c segment code private align=16
3818
3819 defines the segment \c{code}, but also declares it to be a private
3820 segment, and requires that the portion of it described in this code
3821 module must be aligned on a 16-byte boundary.
3822
3823 The available qualifiers are:
3824
3825 \b \i\c{PRIVATE}, \i\c{PUBLIC}, \i\c{COMMON} and \i\c{STACK} specify
3826 the combination characteristics of the segment. \c{PRIVATE} segments
3827 do not get combined with any others by the linker; \c{PUBLIC} and
3828 \c{STACK} segments get concatenated together at link time; and
3829 \c{COMMON} segments all get overlaid on top of each other rather
3830 than stuck end-to-end.
3831
3832 \b \i\c{ALIGN} is used, as shown above, to specify how many low bits
3833 of the segment start address must be forced to zero. The alignment
3834 value given may be any power of two from 1 to 4096; in reality, the
3835 only values supported are 1, 2, 4, 16, 256 and 4096, so if 8 is
3836 specified it will be rounded up to 16, and 32, 64 and 128 will all
3837 be rounded up to 256, and so on. Note that alignment to 4096-byte
3838 boundaries is a \i{PharLap} extension to the format and may not be
3839 supported by all linkers.\I{section alignment, in OBJ}\I{segment
3840 alignment, in OBJ}\I{alignment, in OBJ sections}
3841
3842 \b \i\c{CLASS} can be used to specify the segment class; this feature
3843 indicates to the linker that segments of the same class should be
3844 placed near each other in the output file. The class name can be any
3845 word, e.g. \c{CLASS=CODE}.
3846
3847 \b \i\c{OVERLAY}, like \c{CLASS}, is specified with an arbitrary word
3848 as an argument, and provides overlay information to an
3849 overlay-capable linker.
3850
3851 \b Segments can be declared as \i\c{USE16} or \i\c{USE32}, which has
3852 the effect of recording the choice in the object file and also
3853 ensuring that NASM's default assembly mode when assembling in that
3854 segment is 16-bit or 32-bit respectively.
3855
3856 \b When writing \i{OS/2} object files, you should declare 32-bit
3857 segments as \i\c{FLAT}, which causes the default segment base for
3858 anything in the segment to be the special group \c{FLAT}, and also
3859 defines the group if it is not already defined.
3860
3861 \b The \c{obj} file format also allows segments to be declared as
3862 having a pre-defined absolute segment address, although no linkers
3863 are currently known to make sensible use of this feature;
3864 nevertheless, NASM allows you to declare a segment such as
3865 \c{SEGMENT SCREEN ABSOLUTE=0xB800} if you need to. The \i\c{ABSOLUTE}
3866 and \c{ALIGN} keywords are mutually exclusive.
3867
3868 NASM's default segment attributes are \c{PUBLIC}, \c{ALIGN=1}, no
3869 class, no overlay, and \c{USE16}.
3870
3871
3872 \S{group} \i\c{GROUP}: Defining Groups of Segments\I{segments, groups of}
3873
3874 The \c{obj} format also allows segments to be grouped, so that a
3875 single segment register can be used to refer to all the segments in
3876 a group. NASM therefore supplies the \c{GROUP} directive, whereby
3877 you can code
3878
3879 \c segment data
3880 \c
3881 \c         ; some data
3882 \c
3883 \c segment bss
3884 \c
3885 \c         ; some uninitialised data
3886 \c
3887 \c group dgroup data bss
3888
3889 which will define a group called \c{dgroup} to contain the segments
3890 \c{data} and \c{bss}. Like \c{SEGMENT}, \c{GROUP} causes the group
3891 name to be defined as a symbol, so that you can refer to a variable
3892 \c{var} in the \c{data} segment as \c{var wrt data} or as \c{var wrt
3893 dgroup}, depending on which segment value is currently in your
3894 segment register.
3895
3896 If you just refer to \c{var}, however, and \c{var} is declared in a
3897 segment which is part of a group, then NASM will default to giving
3898 you the offset of \c{var} from the beginning of the \e{group}, not
3899 the \e{segment}. Therefore \c{SEG var}, also, will return the group
3900 base rather than the segment base.
3901
3902 NASM will allow a segment to be part of more than one group, but
3903 will generate a warning if you do this. Variables declared in a
3904 segment which is part of more than one group will default to being
3905 relative to the first group that was defined to contain the segment.
3906
3907 A group does not have to contain any segments; you can still make
3908 \c{WRT} references to a group which does not contain the variable
3909 you are referring to. OS/2, for example, defines the special group
3910 \c{FLAT} with no segments in it.
3911
3912
3913 \S{uppercase} \i\c{UPPERCASE}: Disabling Case Sensitivity in Output
3914
3915 Although NASM itself is \i{case sensitive}, some OMF linkers are
3916 not; therefore it can be useful for NASM to output single-case
3917 object files. The \c{UPPERCASE} format-specific directive causes all
3918 segment, group and symbol names that are written to the object file
3919 to be forced to upper case just before being written. Within a
3920 source file, NASM is still case-sensitive; but the object file can
3921 be written entirely in upper case if desired.
3922
3923 \c{UPPERCASE} is used alone on a line; it requires no parameters.
3924
3925
3926 \S{import} \i\c{IMPORT}: Importing DLL Symbols\I{DLL symbols,
3927 importing}\I{symbols, importing from DLLs}
3928
3929 The \c{IMPORT} format-specific directive defines a symbol to be
3930 imported from a DLL, for use if you are writing a DLL's \i{import
3931 library} in NASM. You still need to declare the symbol as \c{EXTERN}
3932 as well as using the \c{IMPORT} directive.
3933
3934 The \c{IMPORT} directive takes two required parameters, separated by
3935 white space, which are (respectively) the name of the symbol you
3936 wish to import and the name of the library you wish to import it
3937 from. For example:
3938
3939 \c     import  WSAStartup wsock32.dll
3940
3941 A third optional parameter gives the name by which the symbol is
3942 known in the library you are importing it from, in case this is not
3943 the same as the name you wish the symbol to be known by to your code
3944 once you have imported it. For example:
3945
3946 \c     import  asyncsel wsock32.dll WSAAsyncSelect
3947
3948
3949 \S{export} \i\c{EXPORT}: Exporting DLL Symbols\I{DLL symbols,
3950 exporting}\I{symbols, exporting from DLLs}
3951
3952 The \c{EXPORT} format-specific directive defines a global symbol to
3953 be exported as a DLL symbol, for use if you are writing a DLL in
3954 NASM. You still need to declare the symbol as \c{GLOBAL} as well as
3955 using the \c{EXPORT} directive.
3956
3957 \c{EXPORT} takes one required parameter, which is the name of the
3958 symbol you wish to export, as it was defined in your source file. An
3959 optional second parameter (separated by white space from the first)
3960 gives the \e{external} name of the symbol: the name by which you
3961 wish the symbol to be known to programs using the DLL. If this name
3962 is the same as the internal name, you may leave the second parameter
3963 off.
3964
3965 Further parameters can be given to define attributes of the exported
3966 symbol. These parameters, like the second, are separated by white
3967 space. If further parameters are given, the external name must also
3968 be specified, even if it is the same as the internal name. The
3969 available attributes are:
3970
3971 \b \c{resident} indicates that the exported name is to be kept
3972 resident by the system loader. This is an optimisation for
3973 frequently used symbols imported by name.
3974
3975 \b \c{nodata} indicates that the exported symbol is a function which
3976 does not make use of any initialised data.
3977
3978 \b \c{parm=NNN}, where \c{NNN} is an integer, sets the number of
3979 parameter words for the case in which the symbol is a call gate
3980 between 32-bit and 16-bit segments.
3981
3982 \b An attribute which is just a number indicates that the symbol
3983 should be exported with an identifying number (ordinal), and gives
3984 the desired number.
3985
3986 For example:
3987
3988 \c     export  myfunc
3989 \c     export  myfunc TheRealMoreFormalLookingFunctionName
3990 \c     export  myfunc myfunc 1234  ; export by ordinal
3991 \c     export  myfunc myfunc resident parm=23 nodata
3992
3993
3994 \S{dotdotstart} \i\c{..start}: Defining the \i{Program Entry
3995 Point}
3996
3997 \c{OMF} linkers require exactly one of the object files being linked to
3998 define the program entry point, where execution will begin when the
3999 program is run. If the object file that defines the entry point is
4000 assembled using NASM, you specify the entry point by declaring the
4001 special symbol \c{..start} at the point where you wish execution to
4002 begin.
4003
4004
4005 \S{objextern} \c{obj} Extensions to the \c{EXTERN}
4006 Directive\I{EXTERN, obj extensions to}
4007
4008 If you declare an external symbol with the directive
4009
4010 \c     extern  foo
4011
4012 then references such as \c{mov ax,foo} will give you the offset of
4013 \c{foo} from its preferred segment base (as specified in whichever
4014 module \c{foo} is actually defined in). So to access the contents of
4015 \c{foo} you will usually need to do something like
4016
4017 \c         mov     ax,seg foo      ; get preferred segment base
4018 \c         mov     es,ax           ; move it into ES
4019 \c         mov     ax,[es:foo]     ; and use offset `foo' from it
4020
4021 This is a little unwieldy, particularly if you know that an external
4022 is going to be accessible from a given segment or group, say
4023 \c{dgroup}. So if \c{DS} already contained \c{dgroup}, you could
4024 simply code
4025
4026 \c         mov     ax,[foo wrt dgroup]
4027
4028 However, having to type this every time you want to access \c{foo}
4029 can be a pain; so NASM allows you to declare \c{foo} in the
4030 alternative form
4031
4032 \c     extern  foo:wrt dgroup
4033
4034 This form causes NASM to pretend that the preferred segment base of
4035 \c{foo} is in fact \c{dgroup}; so the expression \c{seg foo} will
4036 now return \c{dgroup}, and the expression \c{foo} is equivalent to
4037 \c{foo wrt dgroup}.
4038
4039 This \I{default-WRT mechanism}default-\c{WRT} mechanism can be used
4040 to make externals appear to be relative to any group or segment in
4041 your program. It can also be applied to common variables: see
4042 \k{objcommon}.
4043
4044
4045 \S{objcommon} \c{obj} Extensions to the \c{COMMON}
4046 Directive\I{COMMON, obj extensions to}
4047
4048 The \c{obj} format allows common variables to be either near\I{near
4049 common variables} or far\I{far common variables}; NASM allows you to
4050 specify which your variables should be by the use of the syntax
4051
4052 \c common  nearvar 2:near   ; `nearvar' is a near common
4053 \c common  farvar  10:far   ; and `farvar' is far
4054
4055 Far common variables may be greater in size than 64Kb, and so the
4056 OMF specification says that they are declared as a number of
4057 \e{elements} of a given size. So a 10-byte far common variable could
4058 be declared as ten one-byte elements, five two-byte elements, two
4059 five-byte elements or one ten-byte element.
4060
4061 Some \c{OMF} linkers require the \I{element size, in common
4062 variables}\I{common variables, element size}element size, as well as
4063 the variable size, to match when resolving common variables declared
4064 in more than one module. Therefore NASM must allow you to specify
4065 the element size on your far common variables. This is done by the
4066 following syntax:
4067
4068 \c common  c_5by2  10:far 5        ; two five-byte elements
4069 \c common  c_2by5  10:far 2        ; five two-byte elements
4070
4071 If no element size is specified, the default is 1. Also, the \c{FAR}
4072 keyword is not required when an element size is specified, since
4073 only far commons may have element sizes at all. So the above
4074 declarations could equivalently be
4075
4076 \c common  c_5by2  10:5            ; two five-byte elements
4077 \c common  c_2by5  10:2            ; five two-byte elements
4078
4079 In addition to these extensions, the \c{COMMON} directive in \c{obj}
4080 also supports default-\c{WRT} specification like \c{EXTERN} does
4081 (explained in \k{objextern}). So you can also declare things like
4082
4083 \c common  foo     10:wrt dgroup
4084 \c common  bar     16:far 2:wrt data
4085 \c common  baz     24:wrt data:6
4086
4087
4088 \H{win32fmt} \i\c{win32}: Microsoft Win32 Object Files
4089
4090 The \c{win32} output format generates Microsoft Win32 object files,
4091 suitable for passing to Microsoft linkers such as \i{Visual C++}.
4092 Note that Borland Win32 compilers do not use this format, but use
4093 \c{obj} instead (see \k{objfmt}).
4094
4095 \c{win32} provides a default output file-name extension of \c{.obj}.
4096
4097 Note that although Microsoft say that Win32 object files follow the
4098 \c{COFF} (Common Object File Format) standard, the object files produced
4099 by Microsoft Win32 compilers are not compatible with COFF linkers
4100 such as DJGPP's, and vice versa. This is due to a difference of
4101 opinion over the precise semantics of PC-relative relocations. To
4102 produce COFF files suitable for DJGPP, use NASM's \c{coff} output
4103 format; conversely, the \c{coff} format does not produce object
4104 files that Win32 linkers can generate correct output from.
4105
4106
4107 \S{win32sect} \c{win32} Extensions to the \c{SECTION}
4108 Directive\I{SECTION, win32 extensions to}
4109
4110 Like the \c{obj} format, \c{win32} allows you to specify additional
4111 information on the \c{SECTION} directive line, to control the type
4112 and properties of sections you declare. Section types and properties
4113 are generated automatically by NASM for the \i{standard section names}
4114 \c{.text}, \c{.data} and \c{.bss}, but may still be overridden by
4115 these qualifiers.
4116
4117 The available qualifiers are:
4118
4119 \b \c{code}, or equivalently \c{text}, defines the section to be a
4120 code section. This marks the section as readable and executable, but
4121 not writable, and also indicates to the linker that the type of the
4122 section is code.
4123
4124 \b \c{data} and \c{bss} define the section to be a data section,
4125 analogously to \c{code}. Data sections are marked as readable and
4126 writable, but not executable. \c{data} declares an initialised data
4127 section, whereas \c{bss} declares an uninitialised data section.
4128
4129 \b \c{rdata} declares an initialised data section that is readable
4130 but not writable. Microsoft compilers use this section to place
4131 constants in it.
4132
4133 \b \c{info} defines the section to be an \i{informational section},
4134 which is not included in the executable file by the linker, but may
4135 (for example) pass information \e{to} the linker. For example,
4136 declaring an \c{info}-type section called \i\c{.drectve} causes the
4137 linker to interpret the contents of the section as command-line
4138 options.
4139
4140 \b \c{align=}, used with a trailing number as in \c{obj}, gives the
4141 \I{section alignment, in win32}\I{alignment, in win32
4142 sections}alignment requirements of the section. The maximum you may
4143 specify is 64: the Win32 object file format contains no means to
4144 request a greater section alignment than this. If alignment is not
4145 explicitly specified, the defaults are 16-byte alignment for code
4146 sections, 8-byte alignment for rdata sections and 4-byte alignment
4147 for data (and BSS) sections.
4148 Informational sections get a default alignment of 1 byte (no
4149 alignment), though the value does not matter.
4150
4151 The defaults assumed by NASM if you do not specify the above
4152 qualifiers are:
4153
4154 \c section .text    code  align=16
4155 \c section .data    data  align=4
4156 \c section .rdata   rdata align=8
4157 \c section .bss     bss   align=4
4158
4159 Any other section name is treated by default like \c{.text}.
4160
4161
4162 \H{cofffmt} \i\c{coff}: \i{Common Object File Format}
4163
4164 The \c{coff} output type produces \c{COFF} object files suitable for
4165 linking with the \i{DJGPP} linker.
4166
4167 \c{coff} provides a default output file-name extension of \c{.o}.
4168
4169 The \c{coff} format supports the same extensions to the \c{SECTION}
4170 directive as \c{win32} does, except that the \c{align} qualifier and
4171 the \c{info} section type are not supported.
4172
4173
4174 \H{elffmt} \i\c{elf}: \I{ELF}\I{linux, elf}\i{Executable and Linkable
4175 Format} Object Files
4176
4177 The \c{elf} output format generates \c{ELF32} (Executable and Linkable
4178 Format) object files, as used by Linux as well as \i{Unix System V},
4179 including \i{Solaris x86}, \i{UnixWare} and \i{SCO Unix}. \c{elf}
4180 provides a default output file-name extension of \c{.o}.
4181
4182
4183 \S{elfsect} \c{elf} Extensions to the \c{SECTION}
4184 Directive\I{SECTION, elf extensions to}
4185
4186 Like the \c{obj} format, \c{elf} allows you to specify additional
4187 information on the \c{SECTION} directive line, to control the type
4188 and properties of sections you declare. Section types and properties
4189 are generated automatically by NASM for the \i{standard section
4190 names} \i\c{.text}, \i\c{.data} and \i\c{.bss}, but may still be
4191 overridden by these qualifiers.
4192
4193 The available qualifiers are:
4194
4195 \b \i\c{alloc} defines the section to be one which is loaded into
4196 memory when the program is run. \i\c{noalloc} defines it to be one
4197 which is not, such as an informational or comment section.
4198
4199 \b \i\c{exec} defines the section to be one which should have execute
4200 permission when the program is run. \i\c{noexec} defines it as one
4201 which should not.
4202
4203 \b \i\c{write} defines the section to be one which should be writable
4204 when the program is run. \i\c{nowrite} defines it as one which should
4205 not.
4206
4207 \b \i\c{progbits} defines the section to be one with explicit contents
4208 stored in the object file: an ordinary code or data section, for
4209 example, \i\c{nobits} defines the section to be one with no explicit
4210 contents given, such as a BSS section.
4211
4212 \b \c{align=}, used with a trailing number as in \c{obj}, gives the
4213 \I{section alignment, in elf}\I{alignment, in elf sections}alignment
4214 requirements of the section.
4215
4216 The defaults assumed by NASM if you do not specify the above
4217 qualifiers are:
4218
4219 \c section .text    progbits  alloc  exec    nowrite  align=16
4220 \c section .rodata  progbits  alloc  noexec  nowrite  align=4
4221 \c section .data    progbits  alloc  noexec  write    align=4
4222 \c section .bss     nobits    alloc  noexec  write    align=4
4223 \c section other    progbits  alloc  noexec  nowrite  align=1
4224
4225 (Any section name other than \c{.text}, \c{.rodata}, \c{.data} and
4226 \c{.bss} is treated by default like \c{other} in the above code.)
4227
4228
4229 \S{elfwrt} \i{Position-Independent Code}\I{PIC}: \c{elf} Special
4230 Symbols and \i\c{WRT}
4231
4232 The \c{ELF} specification contains enough features to allow
4233 position-independent code (PIC) to be written, which makes \i{ELF
4234 shared libraries} very flexible. However, it also means NASM has to
4235 be able to generate a variety of strange relocation types in ELF
4236 object files, if it is to be an assembler which can write PIC.
4237
4238 Since \c{ELF} does not support segment-base references, the \c{WRT}
4239 operator is not used for its normal purpose; therefore NASM's
4240 \c{elf} output format makes use of \c{WRT} for a different purpose,
4241 namely the PIC-specific \I{relocations, PIC-specific}relocation
4242 types.
4243
4244 \c{elf} defines five special symbols which you can use as the
4245 right-hand side of the \c{WRT} operator to obtain PIC relocation
4246 types. They are \i\c{..gotpc}, \i\c{..gotoff}, \i\c{..got},
4247 \i\c{..plt} and \i\c{..sym}. Their functions are summarised here:
4248
4249 \b Referring to the symbol marking the global offset table base
4250 using \c{wrt ..gotpc} will end up giving the distance from the
4251 beginning of the current section to the global offset table.
4252 (\i\c{_GLOBAL_OFFSET_TABLE_} is the standard symbol name used to
4253 refer to the \i{GOT}.) So you would then need to add \i\c{$$} to the
4254 result to get the real address of the GOT.
4255
4256 \b Referring to a location in one of your own sections using \c{wrt
4257 ..gotoff} will give the distance from the beginning of the GOT to
4258 the specified location, so that adding on the address of the GOT
4259 would give the real address of the location you wanted.
4260
4261 \b Referring to an external or global symbol using \c{wrt ..got}
4262 causes the linker to build an entry \e{in} the GOT containing the
4263 address of the symbol, and the reference gives the distance from the
4264 beginning of the GOT to the entry; so you can add on the address of
4265 the GOT, load from the resulting address, and end up with the
4266 address of the symbol.
4267
4268 \b Referring to a procedure name using \c{wrt ..plt} causes the
4269 linker to build a \i{procedure linkage table} entry for the symbol,
4270 and the reference gives the address of the \i{PLT} entry. You can
4271 only use this in contexts which would generate a PC-relative
4272 relocation normally (i.e. as the destination for \c{CALL} or
4273 \c{JMP}), since ELF contains no relocation type to refer to PLT
4274 entries absolutely.
4275
4276 \b Referring to a symbol name using \c{wrt ..sym} causes NASM to
4277 write an ordinary relocation, but instead of making the relocation
4278 relative to the start of the section and then adding on the offset
4279 to the symbol, it will write a relocation record aimed directly at
4280 the symbol in question. The distinction is a necessary one due to a
4281 peculiarity of the dynamic linker.
4282
4283 A fuller explanation of how to use these relocation types to write
4284 shared libraries entirely in NASM is given in \k{picdll}.
4285
4286
4287 \S{elfglob} \c{elf} Extensions to the \c{GLOBAL} Directive\I{GLOBAL,
4288 elf extensions to}\I{GLOBAL, aoutb extensions to}
4289
4290 \c{ELF} object files can contain more information about a global symbol
4291 than just its address: they can contain the \I{symbol sizes,
4292 specifying}\I{size, of symbols}size of the symbol and its \I{symbol
4293 types, specifying}\I{type, of symbols}type as well. These are not
4294 merely debugger conveniences, but are actually necessary when the
4295 program being written is a \i{shared library}. NASM therefore
4296 supports some extensions to the \c{GLOBAL} directive, allowing you
4297 to specify these features.
4298
4299 You can specify whether a global variable is a function or a data
4300 object by suffixing the name with a colon and the word
4301 \i\c{function} or \i\c{data}. (\i\c{object} is a synonym for
4302 \c{data}.) For example:
4303
4304 \c global   hashlookup:function, hashtable:data
4305
4306 exports the global symbol \c{hashlookup} as a function and
4307 \c{hashtable} as a data object.
4308
4309 You can also specify the size of the data associated with the
4310 symbol, as a numeric expression (which may involve labels, and even
4311 forward references) after the type specifier. Like this:
4312
4313 \c global  hashtable:data (hashtable.end - hashtable)
4314 \c
4315 \c hashtable:
4316 \c         db this,that,theother  ; some data here
4317 \c .end:
4318
4319 This makes NASM automatically calculate the length of the table and
4320 place that information into the \c{ELF} symbol table.
4321
4322 Declaring the type and size of global symbols is necessary when
4323 writing shared library code. For more information, see
4324 \k{picglobal}.
4325
4326
4327 \S{elfcomm} \c{elf} Extensions to the \c{COMMON} Directive
4328 \I{COMMON, elf extensions to}
4329
4330 \c{ELF} also allows you to specify alignment requirements \I{common
4331 variables, alignment in elf}\I{alignment, of elf common variables}on
4332 common variables. This is done by putting a number (which must be a
4333 power of two) after the name and size of the common variable,
4334 separated (as usual) by a colon. For example, an array of
4335 doublewords would benefit from 4-byte alignment:
4336
4337 \c common  dwordarray 128:4
4338
4339 This declares the total size of the array to be 128 bytes, and
4340 requires that it be aligned on a 4-byte boundary.
4341
4342
4343 \S{elf16} 16-bit code and ELF
4344 \I{ELF, 16-bit code and}
4345
4346 The \c{ELF32} specification doesn't provide relocations for 8- and
4347 16-bit values, but the GNU \c{ld} linker adds these as an extension.
4348 NASM can generate GNU-compatible relocations, to allow 16-bit code to
4349 be linked as ELF using GNU \c{ld}. If NASM is used with the
4350 \c{-w+gnu-elf-extensions} option, a warning is issued when one of
4351 these relocations is generated.
4352
4353 \H{aoutfmt} \i\c{aout}: Linux \I{a.out, Linux version}\I{linux, a.out}\c{a.out} Object Files
4354
4355 The \c{aout} format generates \c{a.out} object files, in the form used
4356 by early Linux systems (current Linux systems use ELF, see
4357 \k{elffmt}.) These differ from other \c{a.out} object files in that
4358 the magic number in the first four bytes of the file is
4359 different; also, some implementations of \c{a.out}, for example
4360 NetBSD's, support position-independent code, which Linux's
4361 implementation does not.
4362
4363 \c{a.out} provides a default output file-name extension of \c{.o}.
4364
4365 \c{a.out} is a very simple object format. It supports no special
4366 directives, no special symbols, no use of \c{SEG} or \c{WRT}, and no
4367 extensions to any standard directives. It supports only the three
4368 \i{standard section names} \i\c{.text}, \i\c{.data} and \i\c{.bss}.
4369
4370
4371 \H{aoutfmt} \i\c{aoutb}: \i{NetBSD}/\i{FreeBSD}/\i{OpenBSD}
4372 \I{a.out, BSD version}\c{a.out} Object Files
4373
4374 The \c{aoutb} format generates \c{a.out} object files, in the form
4375 used by the various free \c{BSD Unix} clones, \c{NetBSD}, \c{FreeBSD}
4376 and \c{OpenBSD}. For simple object files, this object format is exactly
4377 the same as \c{aout} except for the magic number in the first four bytes
4378 of the file. However, the \c{aoutb} format supports
4379 \I{PIC}\i{position-independent code} in the same way as the \c{elf}
4380 format, so you can use it to write \c{BSD} \i{shared libraries}.
4381
4382 \c{aoutb} provides a default output file-name extension of \c{.o}.
4383
4384 \c{aoutb} supports no special directives, no special symbols, and
4385 only the three \i{standard section names} \i\c{.text}, \i\c{.data}
4386 and \i\c{.bss}. However, it also supports the same use of \i\c{WRT} as
4387 \c{elf} does, to provide position-independent code relocation types.
4388 See \k{elfwrt} for full documentation of this feature.
4389
4390 \c{aoutb} also supports the same extensions to the \c{GLOBAL}
4391 directive as \c{elf} does: see \k{elfglob} for documentation of
4392 this.
4393
4394
4395 \H{as86fmt} \c{as86}: \i{Minix}/Linux\I{linux, as86} \i\c{as86} Object Files
4396
4397 The Minix/Linux 16-bit assembler \c{as86} has its own non-standard
4398 object file format. Although its companion linker \i\c{ld86} produces
4399 something close to ordinary \c{a.out} binaries as output, the object
4400 file format used to communicate between \c{as86} and \c{ld86} is not
4401 itself \c{a.out}.
4402
4403 NASM supports this format, just in case it is useful, as \c{as86}.
4404 \c{as86} provides a default output file-name extension of \c{.o}.
4405
4406 \c{as86} is a very simple object format (from the NASM user's point
4407 of view). It supports no special directives, no special symbols, no
4408 use of \c{SEG} or \c{WRT}, and no extensions to any standard
4409 directives. It supports only the three \i{standard section names}
4410 \i\c{.text}, \i\c{.data} and \i\c{.bss}.
4411
4412
4413 \H{rdffmt} \I{RDOFF}\i\c{rdf}: \i{Relocatable Dynamic Object File
4414 Format}
4415
4416 The \c{rdf} output format produces \c{RDOFF} object files. \c{RDOFF}
4417 (Relocatable Dynamic Object File Format) is a home-grown object-file
4418 format, designed alongside NASM itself and reflecting in its file
4419 format the internal structure of the assembler.
4420
4421 \c{RDOFF} is not used by any well-known operating systems. Those
4422 writing their own systems, however, may well wish to use \c{RDOFF}
4423 as their object format, on the grounds that it is designed primarily
4424 for simplicity and contains very little file-header bureaucracy.
4425
4426 The Unix NASM archive, and the DOS archive which includes sources,
4427 both contain an \I{rdoff subdirectory}\c{rdoff} subdirectory holding
4428 a set of RDOFF utilities: an RDF linker, an \c{RDF} static-library
4429 manager, an RDF file dump utility, and a program which will load and
4430 execute an RDF executable under Linux.
4431
4432 \c{rdf} supports only the \i{standard section names} \i\c{.text},
4433 \i\c{.data} and \i\c{.bss}.
4434
4435
4436 \S{rdflib} Requiring a Library: The \i\c{LIBRARY} Directive
4437
4438 \c{RDOFF} contains a mechanism for an object file to demand a given
4439 library to be linked to the module, either at load time or run time.
4440 This is done by the \c{LIBRARY} directive, which takes one argument
4441 which is the name of the module:
4442
4443 \c     library  mylib.rdl
4444
4445
4446 \S{rdfmod} Specifying a Module Name: The \i\c{MODULE} Directive
4447
4448 Special \c{RDOFF} header record is used to store the name of the module.
4449 It can be used, for example, by run-time loader to perform dynamic
4450 linking. \c{MODULE} directive takes one argument which is the name
4451 of current module:
4452
4453 \c     module  mymodname
4454
4455 Note that when you statically link modules and tell linker to strip
4456 the symbols from output file, all module names will be stripped too.
4457 To avoid it, you should start module names with \I{$, prefix}\c{$}, like:
4458
4459 \c     module  $kernel.core
4460
4461
4462 \S{rdfglob} \c{rdf} Extensions to the \c{GLOBAL} directive\I{GLOBAL,
4463 rdf extensions to}
4464
4465 \c{RDOFF} global symbols can contain additional information needed by
4466 the static linker. You can mark a global symbol as exported, thus
4467 telling the linker do not strip it from target executable or library
4468 file. Like in \c{ELF}, you can also specify whether an exported symbol
4469 is a procedure (function) or data object.
4470
4471 Suffixing the name with a colon and the word \i\c{export} you make the
4472 symbol exported:
4473
4474 \c     global  sys_open:export
4475
4476 To specify that exported symbol is a procedure (function), you add the
4477 word \i\c{proc} or \i\c{function} after declaration:
4478
4479 \c     global  sys_open:export proc
4480
4481 Similarly, to specify exported data object, add the word \i\c{data}
4482 or \i\c{object} to the directive:
4483
4484 \c     global  kernel_ticks:export data
4485
4486
4487 \H{dbgfmt} \i\c{dbg}: Debugging Format
4488
4489 The \c{dbg} output format is not built into NASM in the default
4490 configuration. If you are building your own NASM executable from the
4491 sources, you can define \i\c{OF_DBG} in \c{outform.h} or on the
4492 compiler command line, and obtain the \c{dbg} output format.
4493
4494 The \c{dbg} format does not output an object file as such; instead,
4495 it outputs a text file which contains a complete list of all the
4496 transactions between the main body of NASM and the output-format
4497 back end module. It is primarily intended to aid people who want to
4498 write their own output drivers, so that they can get a clearer idea
4499 of the various requests the main program makes of the output driver,
4500 and in what order they happen.
4501
4502 For simple files, one can easily use the \c{dbg} format like this:
4503
4504 \c nasm -f dbg filename.asm
4505
4506 which will generate a diagnostic file called \c{filename.dbg}.
4507 However, this will not work well on files which were designed for a
4508 different object format, because each object format defines its own
4509 macros (usually user-level forms of directives), and those macros
4510 will not be defined in the \c{dbg} format. Therefore it can be
4511 useful to run NASM twice, in order to do the preprocessing with the
4512 native object format selected:
4513
4514 \c nasm -e -f rdf -o rdfprog.i rdfprog.asm
4515 \c nasm -a -f dbg rdfprog.i
4516
4517 This preprocesses \c{rdfprog.asm} into \c{rdfprog.i}, keeping the
4518 \c{rdf} object format selected in order to make sure RDF special
4519 directives are converted into primitive form correctly. Then the
4520 preprocessed source is fed through the \c{dbg} format to generate
4521 the final diagnostic output.
4522
4523 This workaround will still typically not work for programs intended
4524 for \c{obj} format, because the \c{obj} \c{SEGMENT} and \c{GROUP}
4525 directives have side effects of defining the segment and group names
4526 as symbols; \c{dbg} will not do this, so the program will not
4527 assemble. You will have to work around that by defining the symbols
4528 yourself (using \c{EXTERN}, for example) if you really need to get a
4529 \c{dbg} trace of an \c{obj}-specific source file.
4530
4531 \c{dbg} accepts any section name and any directives at all, and logs
4532 them all to its output file.
4533
4534
4535 \C{16bit} Writing 16-bit Code (DOS, Windows 3/3.1)
4536
4537 This chapter attempts to cover some of the common issues encountered
4538 when writing 16-bit code to run under \c{MS-DOS} or \c{Windows 3.x}. It
4539 covers how to link programs to produce \c{.EXE} or \c{.COM} files,
4540 how to write \c{.SYS} device drivers, and how to interface assembly
4541 language code with 16-bit C compilers and with Borland Pascal.
4542
4543
4544 \H{exefiles} Producing \i\c{.EXE} Files
4545
4546 Any large program written under DOS needs to be built as a \c{.EXE}
4547 file: only \c{.EXE} files have the necessary internal structure
4548 required to span more than one 64K segment. \i{Windows} programs,
4549 also, have to be built as \c{.EXE} files, since Windows does not
4550 support the \c{.COM} format.
4551
4552 In general, you generate \c{.EXE} files by using the \c{obj} output
4553 format to produce one or more \i\c{.OBJ} files, and then linking
4554 them together using a linker. However, NASM also supports the direct
4555 generation of simple DOS \c{.EXE} files using the \c{bin} output
4556 format (by using \c{DB} and \c{DW} to construct the \c{.EXE} file
4557 header), and a macro package is supplied to do this. Thanks to
4558 Yann Guidon for contributing the code for this.
4559
4560 NASM may also support \c{.EXE} natively as another output format in
4561 future releases.
4562
4563
4564 \S{objexe} Using the \c{obj} Format To Generate \c{.EXE} Files
4565
4566 This section describes the usual method of generating \c{.EXE} files
4567 by linking \c{.OBJ} files together.
4568
4569 Most 16-bit programming language packages come with a suitable
4570 linker; if you have none of these, there is a free linker called
4571 \i{VAL}\I{linker, free}, available in \c{LZH} archive format from
4572 \W{ftp://x2ftp.oulu.fi/pub/msdos/programming/lang/}\i\c{x2ftp.oulu.fi}.
4573 An LZH archiver can be found at
4574 \W{ftp://ftp.simtel.net/pub/simtelnet/msdos/arcers}\i\c{ftp.simtel.net}.
4575 There is another `free' linker (though this one doesn't come with
4576 sources) called \i{FREELINK}, available from
4577 \W{http://www.pcorner.com/tpc/old/3-101.html}\i\c{www.pcorner.com}.
4578 A third, \i\c{djlink}, written by DJ Delorie, is available at
4579 \W{http://www.delorie.com/djgpp/16bit/djlink/}\i\c{www.delorie.com}.
4580 A fourth linker, \i\c{ALINK}, written by Anthony A.J. Williams, is
4581 available at \W{http://alink.sourceforge.net}\i\c{alink.sourceforge.net}.
4582
4583 When linking several \c{.OBJ} files into a \c{.EXE} file, you should
4584 ensure that exactly one of them has a start point defined (using the
4585 \I{program entry point}\i\c{..start} special symbol defined by the
4586 \c{obj} format: see \k{dotdotstart}). If no module defines a start
4587 point, the linker will not know what value to give the entry-point
4588 field in the output file header; if more than one defines a start
4589 point, the linker will not know \e{which} value to use.
4590
4591 An example of a NASM source file which can be assembled to a
4592 \c{.OBJ} file and linked on its own to a \c{.EXE} is given here. It
4593 demonstrates the basic principles of defining a stack, initialising
4594 the segment registers, and declaring a start point. This file is
4595 also provided in the \I{test subdirectory}\c{test} subdirectory of
4596 the NASM archives, under the name \c{objexe.asm}.
4597
4598 \c segment code
4599 \c
4600 \c ..start:
4601 \c         mov     ax,data
4602 \c         mov     ds,ax
4603 \c         mov     ax,stack
4604 \c         mov     ss,ax
4605 \c         mov     sp,stacktop
4606
4607 This initial piece of code sets up \c{DS} to point to the data
4608 segment, and initialises \c{SS} and \c{SP} to point to the top of
4609 the provided stack. Notice that interrupts are implicitly disabled
4610 for one instruction after a move into \c{SS}, precisely for this
4611 situation, so that there's no chance of an interrupt occurring
4612 between the loads of \c{SS} and \c{SP} and not having a stack to
4613 execute on.
4614
4615 Note also that the special symbol \c{..start} is defined at the
4616 beginning of this code, which means that will be the entry point
4617 into the resulting executable file.
4618
4619 \c         mov     dx,hello
4620 \c         mov     ah,9
4621 \c         int     0x21
4622
4623 The above is the main program: load \c{DS:DX} with a pointer to the
4624 greeting message (\c{hello} is implicitly relative to the segment
4625 \c{data}, which was loaded into \c{DS} in the setup code, so the
4626 full pointer is valid), and call the DOS print-string function.
4627
4628 \c         mov     ax,0x4c00
4629 \c         int     0x21
4630
4631 This terminates the program using another DOS system call.
4632
4633 \c segment data
4634 \c
4635 \c hello:  db      'hello, world', 13, 10, '$'
4636
4637 The data segment contains the string we want to display.
4638
4639 \c segment stack stack
4640 \c         resb 64
4641 \c stacktop:
4642
4643 The above code declares a stack segment containing 64 bytes of
4644 uninitialised stack space, and points \c{stacktop} at the top of it.
4645 The directive \c{segment stack stack} defines a segment \e{called}
4646 \c{stack}, and also of \e{type} \c{STACK}. The latter is not
4647 necessary to the correct running of the program, but linkers are
4648 likely to issue warnings or errors if your program has no segment of
4649 type \c{STACK}.
4650
4651 The above file, when assembled into a \c{.OBJ} file, will link on
4652 its own to a valid \c{.EXE} file, which when run will print `hello,
4653 world' and then exit.
4654
4655
4656 \S{binexe} Using the \c{bin} Format To Generate \c{.EXE} Files
4657
4658 The \c{.EXE} file format is simple enough that it's possible to
4659 build a \c{.EXE} file by writing a pure-binary program and sticking
4660 a 32-byte header on the front. This header is simple enough that it
4661 can be generated using \c{DB} and \c{DW} commands by NASM itself, so
4662 that you can use the \c{bin} output format to directly generate
4663 \c{.EXE} files.
4664
4665 Included in the NASM archives, in the \I{misc subdirectory}\c{misc}
4666 subdirectory, is a file \i\c{exebin.mac} of macros. It defines three
4667 macros: \i\c{EXE_begin}, \i\c{EXE_stack} and \i\c{EXE_end}.
4668
4669 To produce a \c{.EXE} file using this method, you should start by
4670 using \c{%include} to load the \c{exebin.mac} macro package into
4671 your source file. You should then issue the \c{EXE_begin} macro call
4672 (which takes no arguments) to generate the file header data. Then
4673 write code as normal for the \c{bin} format - you can use all three
4674 standard sections \c{.text}, \c{.data} and \c{.bss}. At the end of
4675 the file you should call the \c{EXE_end} macro (again, no arguments),
4676 which defines some symbols to mark section sizes, and these symbols
4677 are referred to in the header code generated by \c{EXE_begin}.
4678
4679 In this model, the code you end up writing starts at \c{0x100}, just
4680 like a \c{.COM} file - in fact, if you strip off the 32-byte header
4681 from the resulting \c{.EXE} file, you will have a valid \c{.COM}
4682 program. All the segment bases are the same, so you are limited to a
4683 64K program, again just like a \c{.COM} file. Note that an \c{ORG}
4684 directive is issued by the \c{EXE_begin} macro, so you should not
4685 explicitly issue one of your own.
4686
4687 You can't directly refer to your segment base value, unfortunately,
4688 since this would require a relocation in the header, and things
4689 would get a lot more complicated. So you should get your segment
4690 base by copying it out of \c{CS} instead.
4691
4692 On entry to your \c{.EXE} file, \c{SS:SP} are already set up to
4693 point to the top of a 2Kb stack. You can adjust the default stack
4694 size of 2Kb by calling the \c{EXE_stack} macro. For example, to
4695 change the stack size of your program to 64 bytes, you would call
4696 \c{EXE_stack 64}.
4697
4698 A sample program which generates a \c{.EXE} file in this way is
4699 given in the \c{test} subdirectory of the NASM archive, as
4700 \c{binexe.asm}.
4701
4702
4703 \H{comfiles} Producing \i\c{.COM} Files
4704
4705 While large DOS programs must be written as \c{.EXE} files, small
4706 ones are often better written as \c{.COM} files. \c{.COM} files are
4707 pure binary, and therefore most easily produced using the \c{bin}
4708 output format.
4709
4710
4711 \S{combinfmt} Using the \c{bin} Format To Generate \c{.COM} Files
4712
4713 \c{.COM} files expect to be loaded at offset \c{100h} into their
4714 segment (though the segment may change). Execution then begins at
4715 \I\c{ORG}\c{100h}, i.e. right at the start of the program. So to
4716 write a \c{.COM} program, you would create a source file looking
4717 like
4718
4719 \c         org 100h
4720 \c
4721 \c section .text
4722 \c
4723 \c start:
4724 \c         ; put your code here
4725 \c
4726 \c section .data
4727 \c
4728 \c         ; put data items here
4729 \c
4730 \c section .bss
4731 \c
4732 \c         ; put uninitialised data here
4733
4734 The \c{bin} format puts the \c{.text} section first in the file, so
4735 you can declare data or BSS items before beginning to write code if
4736 you want to and the code will still end up at the front of the file
4737 where it belongs.
4738
4739 The BSS (uninitialised data) section does not take up space in the
4740 \c{.COM} file itself: instead, addresses of BSS items are resolved
4741 to point at space beyond the end of the file, on the grounds that
4742 this will be free memory when the program is run. Therefore you
4743 should not rely on your BSS being initialised to all zeros when you
4744 run.
4745
4746 To assemble the above program, you should use a command line like
4747
4748 \c nasm myprog.asm -fbin -o myprog.com
4749
4750 The \c{bin} format would produce a file called \c{myprog} if no
4751 explicit output file name were specified, so you have to override it
4752 and give the desired file name.
4753
4754
4755 \S{comobjfmt} Using the \c{obj} Format To Generate \c{.COM} Files
4756
4757 If you are writing a \c{.COM} program as more than one module, you
4758 may wish to assemble several \c{.OBJ} files and link them together
4759 into a \c{.COM} program. You can do this, provided you have a linker
4760 capable of outputting \c{.COM} files directly (\i{TLINK} does this),
4761 or alternatively a converter program such as \i\c{EXE2BIN} to
4762 transform the \c{.EXE} file output from the linker into a \c{.COM}
4763 file.
4764
4765 If you do this, you need to take care of several things:
4766
4767 \b The first object file containing code should start its code
4768 segment with a line like \c{RESB 100h}. This is to ensure that the
4769 code begins at offset \c{100h} relative to the beginning of the code
4770 segment, so that the linker or converter program does not have to
4771 adjust address references within the file when generating the
4772 \c{.COM} file. Other assemblers use an \i\c{ORG} directive for this
4773 purpose, but \c{ORG} in NASM is a format-specific directive to the
4774 \c{bin} output format, and does not mean the same thing as it does
4775 in MASM-compatible assemblers.
4776
4777 \b You don't need to define a stack segment.
4778
4779 \b All your segments should be in the same group, so that every time
4780 your code or data references a symbol offset, all offsets are
4781 relative to the same segment base. This is because, when a \c{.COM}
4782 file is loaded, all the segment registers contain the same value.
4783
4784
4785 \H{sysfiles} Producing \i\c{.SYS} Files
4786
4787 \i{MS-DOS device drivers} - \c{.SYS} files - are pure binary files,
4788 similar to \c{.COM} files, except that they start at origin zero
4789 rather than \c{100h}. Therefore, if you are writing a device driver
4790 using the \c{bin} format, you do not need the \c{ORG} directive,
4791 since the default origin for \c{bin} is zero. Similarly, if you are
4792 using \c{obj}, you do not need the \c{RESB 100h} at the start of
4793 your code segment.
4794
4795 \c{.SYS} files start with a header structure, containing pointers to
4796 the various routines inside the driver which do the work. This
4797 structure should be defined at the start of the code segment, even
4798 though it is not actually code.
4799
4800 For more information on the format of \c{.SYS} files, and the data
4801 which has to go in the header structure, a list of books is given in
4802 the Frequently Asked Questions list for the newsgroup
4803 \W{news:comp.os.msdos.programmer}\i\c{comp.os.msdos.programmer}.
4804
4805
4806 \H{16c} Interfacing to 16-bit C Programs
4807
4808 This section covers the basics of writing assembly routines that
4809 call, or are called from, C programs. To do this, you would
4810 typically write an assembly module as a \c{.OBJ} file, and link it
4811 with your C modules to produce a \i{mixed-language program}.
4812
4813
4814 \S{16cunder} External Symbol Names
4815
4816 \I{C symbol names}\I{underscore, in C symbols}C compilers have the
4817 convention that the names of all global symbols (functions or data)
4818 they define are formed by prefixing an underscore to the name as it
4819 appears in the C program. So, for example, the function a C
4820 programmer thinks of as \c{printf} appears to an assembly language
4821 programmer as \c{_printf}. This means that in your assembly
4822 programs, you can define symbols without a leading underscore, and
4823 not have to worry about name clashes with C symbols.
4824
4825 If you find the underscores inconvenient, you can define macros to
4826 replace the \c{GLOBAL} and \c{EXTERN} directives as follows:
4827
4828 \c %macro  cglobal 1
4829 \c
4830 \c   global  _%1
4831 \c   %define %1 _%1
4832 \c
4833 \c %endmacro
4834 \c
4835 \c %macro  cextern 1
4836 \c
4837 \c   extern  _%1
4838 \c   %define %1 _%1
4839 \c
4840 \c %endmacro
4841
4842 (These forms of the macros only take one argument at a time; a
4843 \c{%rep} construct could solve this.)
4844
4845 If you then declare an external like this:
4846
4847 \c cextern printf
4848
4849 then the macro will expand it as
4850
4851 \c extern  _printf
4852 \c %define printf _printf
4853
4854 Thereafter, you can reference \c{printf} as if it was a symbol, and
4855 the preprocessor will put the leading underscore on where necessary.
4856
4857 The \c{cglobal} macro works similarly. You must use \c{cglobal}
4858 before defining the symbol in question, but you would have had to do
4859 that anyway if you used \c{GLOBAL}.
4860
4861
4862 \S{16cmodels} \i{Memory Models}
4863
4864 NASM contains no mechanism to support the various C memory models
4865 directly; you have to keep track yourself of which one you are
4866 writing for. This means you have to keep track of the following
4867 things:
4868
4869 \b In models using a single code segment (tiny, small and compact),
4870 functions are near. This means that function pointers, when stored
4871 in data segments or pushed on the stack as function arguments, are
4872 16 bits long and contain only an offset field (the \c{CS} register
4873 never changes its value, and always gives the segment part of the
4874 full function address), and that functions are called using ordinary
4875 near \c{CALL} instructions and return using \c{RETN} (which, in
4876 NASM, is synonymous with \c{RET} anyway). This means both that you
4877 should write your own routines to return with \c{RETN}, and that you
4878 should call external C routines with near \c{CALL} instructions.
4879
4880 \b In models using more than one code segment (medium, large and
4881 huge), functions are far. This means that function pointers are 32
4882 bits long (consisting of a 16-bit offset followed by a 16-bit
4883 segment), and that functions are called using \c{CALL FAR} (or
4884 \c{CALL seg:offset}) and return using \c{RETF}. Again, you should
4885 therefore write your own routines to return with \c{RETF} and use
4886 \c{CALL FAR} to call external routines.
4887
4888 \b In models using a single data segment (tiny, small and medium),
4889 data pointers are 16 bits long, containing only an offset field (the
4890 \c{DS} register doesn't change its value, and always gives the
4891 segment part of the full data item address).
4892
4893 \b In models using more than one data segment (compact, large and
4894 huge), data pointers are 32 bits long, consisting of a 16-bit offset
4895 followed by a 16-bit segment. You should still be careful not to
4896 modify \c{DS} in your routines without restoring it afterwards, but
4897 \c{ES} is free for you to use to access the contents of 32-bit data
4898 pointers you are passed.
4899
4900 \b The huge memory model allows single data items to exceed 64K in
4901 size. In all other memory models, you can access the whole of a data
4902 item just by doing arithmetic on the offset field of the pointer you
4903 are given, whether a segment field is present or not; in huge model,
4904 you have to be more careful of your pointer arithmetic.
4905
4906 \b In most memory models, there is a \e{default} data segment, whose
4907 segment address is kept in \c{DS} throughout the program. This data
4908 segment is typically the same segment as the stack, kept in \c{SS},
4909 so that functions' local variables (which are stored on the stack)
4910 and global data items can both be accessed easily without changing
4911 \c{DS}. Particularly large data items are typically stored in other
4912 segments. However, some memory models (though not the standard
4913 ones, usually) allow the assumption that \c{SS} and \c{DS} hold the
4914 same value to be removed. Be careful about functions' local
4915 variables in this latter case.
4916
4917 In models with a single code segment, the segment is called
4918 \i\c{_TEXT}, so your code segment must also go by this name in order
4919 to be linked into the same place as the main code segment. In models
4920 with a single data segment, or with a default data segment, it is
4921 called \i\c{_DATA}.
4922
4923
4924 \S{16cfunc} Function Definitions and Function Calls
4925
4926 \I{functions, C calling convention}The \i{C calling convention} in
4927 16-bit programs is as follows. In the following description, the
4928 words \e{caller} and \e{callee} are used to denote the function
4929 doing the calling and the function which gets called.
4930
4931 \b The caller pushes the function's parameters on the stack, one
4932 after another, in reverse order (right to left, so that the first
4933 argument specified to the function is pushed last).
4934
4935 \b The caller then executes a \c{CALL} instruction to pass control
4936 to the callee. This \c{CALL} is either near or far depending on the
4937 memory model.
4938
4939 \b The callee receives control, and typically (although this is not
4940 actually necessary, in functions which do not need to access their
4941 parameters) starts by saving the value of \c{SP} in \c{BP} so as to
4942 be able to use \c{BP} as a base pointer to find its parameters on
4943 the stack. However, the caller was probably doing this too, so part
4944 of the calling convention states that \c{BP} must be preserved by
4945 any C function. Hence the callee, if it is going to set up \c{BP} as
4946 a \i\e{frame pointer}, must push the previous value first.
4947
4948 \b The callee may then access its parameters relative to \c{BP}.
4949 The word at \c{[BP]} holds the previous value of \c{BP} as it was
4950 pushed; the next word, at \c{[BP+2]}, holds the offset part of the
4951 return address, pushed implicitly by \c{CALL}. In a small-model
4952 (near) function, the parameters start after that, at \c{[BP+4]}; in
4953 a large-model (far) function, the segment part of the return address
4954 lives at \c{[BP+4]}, and the parameters begin at \c{[BP+6]}. The
4955 leftmost parameter of the function, since it was pushed last, is
4956 accessible at this offset from \c{BP}; the others follow, at
4957 successively greater offsets. Thus, in a function such as \c{printf}
4958 which takes a variable number of parameters, the pushing of the
4959 parameters in reverse order means that the function knows where to
4960 find its first parameter, which tells it the number and type of the
4961 remaining ones.
4962
4963 \b The callee may also wish to decrease \c{SP} further, so as to
4964 allocate space on the stack for local variables, which will then be
4965 accessible at negative offsets from \c{BP}.
4966
4967 \b The callee, if it wishes to return a value to the caller, should
4968 leave the value in \c{AL}, \c{AX} or \c{DX:AX} depending on the size
4969 of the value. Floating-point results are sometimes (depending on the
4970 compiler) returned in \c{ST0}.
4971
4972 \b Once the callee has finished processing, it restores \c{SP} from
4973 \c{BP} if it had allocated local stack space, then pops the previous
4974 value of \c{BP}, and returns via \c{RETN} or \c{RETF} depending on
4975 memory model.
4976
4977 \b When the caller regains control from the callee, the function
4978 parameters are still on the stack, so it typically adds an immediate
4979 constant to \c{SP} to remove them (instead of executing a number of
4980 slow \c{POP} instructions). Thus, if a function is accidentally
4981 called with the wrong number of parameters due to a prototype
4982 mismatch, the stack will still be returned to a sensible state since
4983 the caller, which \e{knows} how many parameters it pushed, does the
4984 removing.
4985
4986 It is instructive to compare this calling convention with that for
4987 Pascal programs (described in \k{16bpfunc}). Pascal has a simpler
4988 convention, since no functions have variable numbers of parameters.
4989 Therefore the callee knows how many parameters it should have been
4990 passed, and is able to deallocate them from the stack itself by
4991 passing an immediate argument to the \c{RET} or \c{RETF}
4992 instruction, so the caller does not have to do it. Also, the
4993 parameters are pushed in left-to-right order, not right-to-left,
4994 which means that a compiler can give better guarantees about
4995 sequence points without performance suffering.
4996
4997 Thus, you would define a function in C style in the following way.
4998 The following example is for small model:
4999
5000 \c global  _myfunc
5001 \c
5002 \c _myfunc:
5003 \c         push    bp
5004 \c         mov     bp,sp
5005 \c         sub     sp,0x40         ; 64 bytes of local stack space
5006 \c         mov     bx,[bp+4]       ; first parameter to function
5007 \c
5008 \c         ; some more code
5009 \c
5010 \c         mov     sp,bp           ; undo "sub sp,0x40" above
5011 \c         pop     bp
5012 \c         ret
5013
5014 For a large-model function, you would replace \c{RET} by \c{RETF},
5015 and look for the first parameter at \c{[BP+6]} instead of
5016 \c{[BP+4]}. Of course, if one of the parameters is a pointer, then
5017 the offsets of \e{subsequent} parameters will change depending on
5018 the memory model as well: far pointers take up four bytes on the
5019 stack when passed as a parameter, whereas near pointers take up two.
5020
5021 At the other end of the process, to call a C function from your
5022 assembly code, you would do something like this:
5023
5024 \c extern  _printf
5025 \c
5026 \c       ; and then, further down...
5027 \c
5028 \c       push    word [myint]        ; one of my integer variables
5029 \c       push    word mystring       ; pointer into my data segment
5030 \c       call    _printf
5031 \c       add     sp,byte 4           ; `byte' saves space
5032 \c
5033 \c       ; then those data items...
5034 \c
5035 \c segment _DATA
5036 \c
5037 \c myint         dw    1234
5038 \c mystring      db    'This number -> %d <- should be 1234',10,0
5039
5040 This piece of code is the small-model assembly equivalent of the C
5041 code
5042
5043 \c     int myint = 1234;
5044 \c     printf("This number -> %d <- should be 1234\n", myint);
5045
5046 In large model, the function-call code might look more like this. In
5047 this example, it is assumed that \c{DS} already holds the segment
5048 base of the segment \c{_DATA}. If not, you would have to initialise
5049 it first.
5050
5051 \c       push    word [myint]
5052 \c       push    word seg mystring   ; Now push the segment, and...
5053 \c       push    word mystring       ; ... offset of "mystring"
5054 \c       call    far _printf
5055 \c       add    sp,byte 6
5056
5057 The integer value still takes up one word on the stack, since large
5058 model does not affect the size of the \c{int} data type. The first
5059 argument (pushed last) to \c{printf}, however, is a data pointer,
5060 and therefore has to contain a segment and offset part. The segment
5061 should be stored second in memory, and therefore must be pushed
5062 first. (Of course, \c{PUSH DS} would have been a shorter instruction
5063 than \c{PUSH WORD SEG mystring}, if \c{DS} was set up as the above
5064 example assumed.) Then the actual call becomes a far call, since
5065 functions expect far calls in large model; and \c{SP} has to be
5066 increased by 6 rather than 4 afterwards to make up for the extra
5067 word of parameters.
5068
5069
5070 \S{16cdata} Accessing Data Items
5071
5072 To get at the contents of C variables, or to declare variables which
5073 C can access, you need only declare the names as \c{GLOBAL} or
5074 \c{EXTERN}. (Again, the names require leading underscores, as stated
5075 in \k{16cunder}.) Thus, a C variable declared as \c{int i} can be
5076 accessed from assembler as
5077
5078 \c extern _i
5079 \c
5080 \c         mov ax,[_i]
5081
5082 And to declare your own integer variable which C programs can access
5083 as \c{extern int j}, you do this (making sure you are assembling in
5084 the \c{_DATA} segment, if necessary):
5085
5086 \c global  _j
5087 \c
5088 \c _j      dw      0
5089
5090 To access a C array, you need to know the size of the components of
5091 the array. For example, \c{int} variables are two bytes long, so if
5092 a C program declares an array as \c{int a[10]}, you can access
5093 \c{a[3]} by coding \c{mov ax,[_a+6]}. (The byte offset 6 is obtained
5094 by multiplying the desired array index, 3, by the size of the array
5095 element, 2.) The sizes of the C base types in 16-bit compilers are:
5096 1 for \c{char}, 2 for \c{short} and \c{int}, 4 for \c{long} and
5097 \c{float}, and 8 for \c{double}.
5098
5099 To access a C \i{data structure}, you need to know the offset from
5100 the base of the structure to the field you are interested in. You
5101 can either do this by converting the C structure definition into a
5102 NASM structure definition (using \i\c{STRUC}), or by calculating the
5103 one offset and using just that.
5104
5105 To do either of these, you should read your C compiler's manual to
5106 find out how it organises data structures. NASM gives no special
5107 alignment to structure members in its own \c{STRUC} macro, so you
5108 have to specify alignment yourself if the C compiler generates it.
5109 Typically, you might find that a structure like
5110
5111 \c struct {
5112 \c     char c;
5113 \c     int i;
5114 \c } foo;
5115
5116 might be four bytes long rather than three, since the \c{int} field
5117 would be aligned to a two-byte boundary. However, this sort of
5118 feature tends to be a configurable option in the C compiler, either
5119 using command-line options or \c{#pragma} lines, so you have to find
5120 out how your own compiler does it.
5121
5122
5123 \S{16cmacro} \i\c{c16.mac}: Helper Macros for the 16-bit C Interface
5124
5125 Included in the NASM archives, in the \I{misc subdirectory}\c{misc}
5126 directory, is a file \c{c16.mac} of macros. It defines three macros:
5127 \i\c{proc}, \i\c{arg} and \i\c{endproc}. These are intended to be
5128 used for C-style procedure definitions, and they automate a lot of
5129 the work involved in keeping track of the calling convention.
5130
5131 (An alternative, TASM compatible form of \c{arg} is also now built
5132 into NASM's preprocessor. See \k{tasmcompat} for details.)
5133
5134 An example of an assembly function using the macro set is given
5135 here:
5136
5137 \c proc    _nearproc
5138 \c
5139 \c %$i     arg
5140 \c %$j     arg
5141 \c         mov     ax,[bp + %$i]
5142 \c         mov     bx,[bp + %$j]
5143 \c         add     ax,[bx]
5144 \c
5145 \c endproc
5146
5147 This defines \c{_nearproc} to be a procedure taking two arguments,
5148 the first (\c{i}) an integer and the second (\c{j}) a pointer to an
5149 integer. It returns \c{i + *j}.
5150
5151 Note that the \c{arg} macro has an \c{EQU} as the first line of its
5152 expansion, and since the label before the macro call gets prepended
5153 to the first line of the expanded macro, the \c{EQU} works, defining
5154 \c{%$i} to be an offset from \c{BP}. A context-local variable is
5155 used, local to the context pushed by the \c{proc} macro and popped
5156 by the \c{endproc} macro, so that the same argument name can be used
5157 in later procedures. Of course, you don't \e{have} to do that.
5158
5159 The macro set produces code for near functions (tiny, small and
5160 compact-model code) by default. You can have it generate far
5161 functions (medium, large and huge-model code) by means of coding
5162 \I\c{FARCODE}\c{%define FARCODE}. This changes the kind of return
5163 instruction generated by \c{endproc}, and also changes the starting
5164 point for the argument offsets. The macro set contains no intrinsic
5165 dependency on whether data pointers are far or not.
5166
5167 \c{arg} can take an optional parameter, giving the size of the
5168 argument. If no size is given, 2 is assumed, since it is likely that
5169 many function parameters will be of type \c{int}.
5170
5171 The large-model equivalent of the above function would look like this:
5172
5173 \c %define FARCODE
5174 \c
5175 \c proc    _farproc
5176 \c
5177 \c %$i     arg
5178 \c %$j     arg     4
5179 \c         mov     ax,[bp + %$i]
5180 \c         mov     bx,[bp + %$j]
5181 \c         mov     es,[bp + %$j + 2]
5182 \c         add     ax,[bx]
5183 \c
5184 \c endproc
5185
5186 This makes use of the argument to the \c{arg} macro to define a
5187 parameter of size 4, because \c{j} is now a far pointer. When we
5188 load from \c{j}, we must load a segment and an offset.
5189
5190
5191 \H{16bp} Interfacing to \i{Borland Pascal} Programs
5192
5193 Interfacing to Borland Pascal programs is similar in concept to
5194 interfacing to 16-bit C programs. The differences are:
5195
5196 \b The leading underscore required for interfacing to C programs is
5197 not required for Pascal.
5198
5199 \b The memory model is always large: functions are far, data
5200 pointers are far, and no data item can be more than 64K long.
5201 (Actually, some functions are near, but only those functions that
5202 are local to a Pascal unit and never called from outside it. All
5203 assembly functions that Pascal calls, and all Pascal functions that
5204 assembly routines are able to call, are far.) However, all static
5205 data declared in a Pascal program goes into the default data
5206 segment, which is the one whose segment address will be in \c{DS}
5207 when control is passed to your assembly code. The only things that
5208 do not live in the default data segment are local variables (they
5209 live in the stack segment) and dynamically allocated variables. All
5210 data \e{pointers}, however, are far.
5211
5212 \b The function calling convention is different - described below.
5213
5214 \b Some data types, such as strings, are stored differently.
5215
5216 \b There are restrictions on the segment names you are allowed to
5217 use - Borland Pascal will ignore code or data declared in a segment
5218 it doesn't like the name of. The restrictions are described below.
5219
5220
5221 \S{16bpfunc} The Pascal Calling Convention
5222
5223 \I{functions, Pascal calling convention}\I{Pascal calling
5224 convention}The 16-bit Pascal calling convention is as follows. In
5225 the following description, the words \e{caller} and \e{callee} are
5226 used to denote the function doing the calling and the function which
5227 gets called.
5228
5229 \b The caller pushes the function's parameters on the stack, one
5230 after another, in normal order (left to right, so that the first
5231 argument specified to the function is pushed first).
5232
5233 \b The caller then executes a far \c{CALL} instruction to pass
5234 control to the callee.
5235
5236 \b The callee receives control, and typically (although this is not
5237 actually necessary, in functions which do not need to access their
5238 parameters) starts by saving the value of \c{SP} in \c{BP} so as to
5239 be able to use \c{BP} as a base pointer to find its parameters on
5240 the stack. However, the caller was probably doing this too, so part
5241 of the calling convention states that \c{BP} must be preserved by
5242 any function. Hence the callee, if it is going to set up \c{BP} as a
5243 \i{frame pointer}, must push the previous value first.
5244
5245 \b The callee may then access its parameters relative to \c{BP}.
5246 The word at \c{[BP]} holds the previous value of \c{BP} as it was
5247 pushed. The next word, at \c{[BP+2]}, holds the offset part of the
5248 return address, and the next one at \c{[BP+4]} the segment part. The
5249 parameters begin at \c{[BP+6]}. The rightmost parameter of the
5250 function, since it was pushed last, is accessible at this offset
5251 from \c{BP}; the others follow, at successively greater offsets.
5252
5253 \b The callee may also wish to decrease \c{SP} further, so as to
5254 allocate space on the stack for local variables, which will then be
5255 accessible at negative offsets from \c{BP}.
5256
5257 \b The callee, if it wishes to return a value to the caller, should
5258 leave the value in \c{AL}, \c{AX} or \c{DX:AX} depending on the size
5259 of the value. Floating-point results are returned in \c{ST0}.
5260 Results of type \c{Real} (Borland's own custom floating-point data
5261 type, not handled directly by the FPU) are returned in \c{DX:BX:AX}.
5262 To return a result of type \c{String}, the caller pushes a pointer
5263 to a temporary string before pushing the parameters, and the callee
5264 places the returned string value at that location. The pointer is
5265 not a parameter, and should not be removed from the stack by the
5266 \c{RETF} instruction.
5267
5268 \b Once the callee has finished processing, it restores \c{SP} from
5269 \c{BP} if it had allocated local stack space, then pops the previous
5270 value of \c{BP}, and returns via \c{RETF}. It uses the form of
5271 \c{RETF} with an immediate parameter, giving the number of bytes
5272 taken up by the parameters on the stack. This causes the parameters
5273 to be removed from the stack as a side effect of the return
5274 instruction.
5275
5276 \b When the caller regains control from the callee, the function
5277 parameters have already been removed from the stack, so it needs to
5278 do nothing further.
5279
5280 Thus, you would define a function in Pascal style, taking two
5281 \c{Integer}-type parameters, in the following way:
5282
5283 \c global  myfunc
5284 \c
5285 \c myfunc: push    bp
5286 \c         mov     bp,sp
5287 \c         sub     sp,0x40         ; 64 bytes of local stack space
5288 \c         mov     bx,[bp+8]       ; first parameter to function
5289 \c         mov     bx,[bp+6]       ; second parameter to function
5290 \c
5291 \c         ; some more code
5292 \c
5293 \c         mov     sp,bp           ; undo "sub sp,0x40" above
5294 \c         pop     bp
5295 \c         retf    4               ; total size of params is 4
5296
5297 At the other end of the process, to call a Pascal function from your
5298 assembly code, you would do something like this:
5299
5300 \c extern  SomeFunc
5301 \c
5302 \c        ; and then, further down...
5303 \c
5304 \c        push   word seg mystring   ; Now push the segment, and...
5305 \c        push   word mystring       ; ... offset of "mystring"
5306 \c        push   word [myint]        ; one of my variables
5307 \c        call   far SomeFunc
5308
5309 This is equivalent to the Pascal code
5310
5311 \c procedure SomeFunc(String: PChar; Int: Integer);
5312 \c     SomeFunc(@mystring, myint);
5313
5314
5315 \S{16bpseg} Borland Pascal \I{segment names, Borland Pascal}Segment
5316 Name Restrictions
5317
5318 Since Borland Pascal's internal unit file format is completely
5319 different from \c{OBJ}, it only makes a very sketchy job of actually
5320 reading and understanding the various information contained in a
5321 real \c{OBJ} file when it links that in. Therefore an object file
5322 intended to be linked to a Pascal program must obey a number of
5323 restrictions:
5324
5325 \b Procedures and functions must be in a segment whose name is
5326 either \c{CODE}, \c{CSEG}, or something ending in \c{_TEXT}.
5327
5328 \b Initialised data must be in a segment whose name is either
5329 \c{CONST} or something ending in \c{_DATA}.
5330
5331 \b Uninitialised data must be in a segment whose name is either
5332 \c{DATA}, \c{DSEG}, or something ending in \c{_BSS}.
5333
5334 \b Any other segments in the object file are completely ignored.
5335 \c{GROUP} directives and segment attributes are also ignored.
5336
5337
5338 \S{16bpmacro} Using \i\c{c16.mac} With Pascal Programs
5339
5340 The \c{c16.mac} macro package, described in \k{16cmacro}, can also
5341 be used to simplify writing functions to be called from Pascal
5342 programs, if you code \I\c{PASCAL}\c{%define PASCAL}. This
5343 definition ensures that functions are far (it implies
5344 \i\c{FARCODE}), and also causes procedure return instructions to be
5345 generated with an operand.
5346
5347 Defining \c{PASCAL} does not change the code which calculates the
5348 argument offsets; you must declare your function's arguments in
5349 reverse order. For example:
5350
5351 \c %define PASCAL
5352 \c
5353 \c proc    _pascalproc
5354 \c
5355 \c %$j     arg 4
5356 \c %$i     arg
5357 \c         mov     ax,[bp + %$i]
5358 \c         mov     bx,[bp + %$j]
5359 \c         mov     es,[bp + %$j + 2]
5360 \c         add     ax,[bx]
5361 \c
5362 \c endproc
5363
5364 This defines the same routine, conceptually, as the example in
5365 \k{16cmacro}: it defines a function taking two arguments, an integer
5366 and a pointer to an integer, which returns the sum of the integer
5367 and the contents of the pointer. The only difference between this
5368 code and the large-model C version is that \c{PASCAL} is defined
5369 instead of \c{FARCODE}, and that the arguments are declared in
5370 reverse order.
5371
5372
5373 \C{32bit} Writing 32-bit Code (Unix, Win32, DJGPP)
5374
5375 This chapter attempts to cover some of the common issues involved
5376 when writing 32-bit code, to run under \i{Win32} or Unix, or to be
5377 linked with C code generated by a Unix-style C compiler such as
5378 \i{DJGPP}. It covers how to write assembly code to interface with
5379 32-bit C routines, and how to write position-independent code for
5380 shared libraries.
5381
5382 Almost all 32-bit code, and in particular all code running under
5383 \c{Win32}, \c{DJGPP} or any of the PC Unix variants, runs in \I{flat
5384 memory model}\e{flat} memory model. This means that the segment registers
5385 and paging have already been set up to give you the same 32-bit 4Gb
5386 address space no matter what segment you work relative to, and that
5387 you should ignore all segment registers completely. When writing
5388 flat-model application code, you never need to use a segment
5389 override or modify any segment register, and the code-section
5390 addresses you pass to \c{CALL} and \c{JMP} live in the same address
5391 space as the data-section addresses you access your variables by and
5392 the stack-section addresses you access local variables and procedure
5393 parameters by. Every address is 32 bits long and contains only an
5394 offset part.
5395
5396
5397 \H{32c} Interfacing to 32-bit C Programs
5398
5399 A lot of the discussion in \k{16c}, about interfacing to 16-bit C
5400 programs, still applies when working in 32 bits. The absence of
5401 memory models or segmentation worries simplifies things a lot.
5402
5403
5404 \S{32cunder} External Symbol Names
5405
5406 Most 32-bit C compilers share the convention used by 16-bit
5407 compilers, that the names of all global symbols (functions or data)
5408 they define are formed by prefixing an underscore to the name as it
5409 appears in the C program. However, not all of them do: the \c{ELF}
5410 specification states that C symbols do \e{not} have a leading
5411 underscore on their assembly-language names.
5412
5413 The older Linux \c{a.out} C compiler, all \c{Win32} compilers,
5414 \c{DJGPP}, and \c{NetBSD} and \c{FreeBSD}, all use the leading
5415 underscore; for these compilers, the macros \c{cextern} and
5416 \c{cglobal}, as given in \k{16cunder}, will still work. For \c{ELF},
5417 though, the leading underscore should not be used.
5418
5419
5420 \S{32cfunc} Function Definitions and Function Calls
5421
5422 \I{functions, C calling convention}The \i{C calling convention}The C
5423 calling convention in 32-bit programs is as follows. In the
5424 following description, the words \e{caller} and \e{callee} are used
5425 to denote the function doing the calling and the function which gets
5426 called.
5427
5428 \b The caller pushes the function's parameters on the stack, one
5429 after another, in reverse order (right to left, so that the first
5430 argument specified to the function is pushed last).
5431
5432 \b The caller then executes a near \c{CALL} instruction to pass
5433 control to the callee.
5434
5435 \b The callee receives control, and typically (although this is not
5436 actually necessary, in functions which do not need to access their
5437 parameters) starts by saving the value of \c{ESP} in \c{EBP} so as
5438 to be able to use \c{EBP} as a base pointer to find its parameters
5439 on the stack. However, the caller was probably doing this too, so
5440 part of the calling convention states that \c{EBP} must be preserved
5441 by any C function. Hence the callee, if it is going to set up
5442 \c{EBP} as a \i{frame pointer}, must push the previous value first.
5443
5444 \b The callee may then access its parameters relative to \c{EBP}.
5445 The doubleword at \c{[EBP]} holds the previous value of \c{EBP} as
5446 it was pushed; the next doubleword, at \c{[EBP+4]}, holds the return
5447 address, pushed implicitly by \c{CALL}. The parameters start after
5448 that, at \c{[EBP+8]}. The leftmost parameter of the function, since
5449 it was pushed last, is accessible at this offset from \c{EBP}; the
5450 others follow, at successively greater offsets. Thus, in a function
5451 such as \c{printf} which takes a variable number of parameters, the
5452 pushing of the parameters in reverse order means that the function
5453 knows where to find its first parameter, which tells it the number
5454 and type of the remaining ones.
5455
5456 \b The callee may also wish to decrease \c{ESP} further, so as to
5457 allocate space on the stack for local variables, which will then be
5458 accessible at negative offsets from \c{EBP}.
5459
5460 \b The callee, if it wishes to return a value to the caller, should
5461 leave the value in \c{AL}, \c{AX} or \c{EAX} depending on the size
5462 of the value. Floating-point results are typically returned in
5463 \c{ST0}.
5464
5465 \b Once the callee has finished processing, it restores \c{ESP} from
5466 \c{EBP} if it had allocated local stack space, then pops the previous
5467 value of \c{EBP}, and returns via \c{RET} (equivalently, \c{RETN}).
5468
5469 \b When the caller regains control from the callee, the function
5470 parameters are still on the stack, so it typically adds an immediate
5471 constant to \c{ESP} to remove them (instead of executing a number of
5472 slow \c{POP} instructions). Thus, if a function is accidentally
5473 called with the wrong number of parameters due to a prototype
5474 mismatch, the stack will still be returned to a sensible state since
5475 the caller, which \e{knows} how many parameters it pushed, does the
5476 removing.
5477
5478 There is an alternative calling convention used by Win32 programs
5479 for Windows API calls, and also for functions called \e{by} the
5480 Windows API such as window procedures: they follow what Microsoft
5481 calls the \c{__stdcall} convention. This is slightly closer to the
5482 Pascal convention, in that the callee clears the stack by passing a
5483 parameter to the \c{RET} instruction. However, the parameters are
5484 still pushed in right-to-left order.
5485
5486 Thus, you would define a function in C style in the following way:
5487
5488 \c global  _myfunc
5489 \c
5490 \c _myfunc:
5491 \c         push    ebp
5492 \c         mov     ebp,esp
5493 \c         sub     esp,0x40        ; 64 bytes of local stack space
5494 \c         mov     ebx,[ebp+8]     ; first parameter to function
5495 \c
5496 \c         ; some more code
5497 \c
5498 \c         leave                   ; mov esp,ebp / pop ebp
5499 \c         ret
5500
5501 At the other end of the process, to call a C function from your
5502 assembly code, you would do something like this:
5503
5504 \c extern  _printf
5505 \c
5506 \c         ; and then, further down...
5507 \c
5508 \c         push    dword [myint]   ; one of my integer variables
5509 \c         push    dword mystring  ; pointer into my data segment
5510 \c         call    _printf
5511 \c         add     esp,byte 8      ; `byte' saves space
5512 \c
5513 \c         ; then those data items...
5514 \c
5515 \c segment _DATA
5516 \c
5517 \c myint       dd   1234
5518 \c mystring    db   'This number -> %d <- should be 1234',10,0
5519
5520 This piece of code is the assembly equivalent of the C code
5521
5522 \c     int myint = 1234;
5523 \c     printf("This number -> %d <- should be 1234\n", myint);
5524
5525
5526 \S{32cdata} Accessing Data Items
5527
5528 To get at the contents of C variables, or to declare variables which
5529 C can access, you need only declare the names as \c{GLOBAL} or
5530 \c{EXTERN}. (Again, the names require leading underscores, as stated
5531 in \k{32cunder}.) Thus, a C variable declared as \c{int i} can be
5532 accessed from assembler as
5533
5534 \c           extern _i
5535 \c           mov eax,[_i]
5536
5537 And to declare your own integer variable which C programs can access
5538 as \c{extern int j}, you do this (making sure you are assembling in
5539 the \c{_DATA} segment, if necessary):
5540
5541 \c           global _j
5542 \c _j        dd 0
5543
5544 To access a C array, you need to know the size of the components of
5545 the array. For example, \c{int} variables are four bytes long, so if
5546 a C program declares an array as \c{int a[10]}, you can access
5547 \c{a[3]} by coding \c{mov ax,[_a+12]}. (The byte offset 12 is obtained
5548 by multiplying the desired array index, 3, by the size of the array
5549 element, 4.) The sizes of the C base types in 32-bit compilers are:
5550 1 for \c{char}, 2 for \c{short}, 4 for \c{int}, \c{long} and
5551 \c{float}, and 8 for \c{double}. Pointers, being 32-bit addresses,
5552 are also 4 bytes long.
5553
5554 To access a C \i{data structure}, you need to know the offset from
5555 the base of the structure to the field you are interested in. You
5556 can either do this by converting the C structure definition into a
5557 NASM structure definition (using \c{STRUC}), or by calculating the
5558 one offset and using just that.
5559
5560 To do either of these, you should read your C compiler's manual to
5561 find out how it organises data structures. NASM gives no special
5562 alignment to structure members in its own \i\c{STRUC} macro, so you
5563 have to specify alignment yourself if the C compiler generates it.
5564 Typically, you might find that a structure like
5565
5566 \c struct {
5567 \c     char c;
5568 \c     int i;
5569 \c } foo;
5570
5571 might be eight bytes long rather than five, since the \c{int} field
5572 would be aligned to a four-byte boundary. However, this sort of
5573 feature is sometimes a configurable option in the C compiler, either
5574 using command-line options or \c{#pragma} lines, so you have to find
5575 out how your own compiler does it.
5576
5577
5578 \S{32cmacro} \i\c{c32.mac}: Helper Macros for the 32-bit C Interface
5579
5580 Included in the NASM archives, in the \I{misc directory}\c{misc}
5581 directory, is a file \c{c32.mac} of macros. It defines three macros:
5582 \i\c{proc}, \i\c{arg} and \i\c{endproc}. These are intended to be
5583 used for C-style procedure definitions, and they automate a lot of
5584 the work involved in keeping track of the calling convention.
5585
5586 An example of an assembly function using the macro set is given
5587 here:
5588
5589 \c proc    _proc32
5590 \c
5591 \c %$i     arg
5592 \c %$j     arg
5593 \c         mov     eax,[ebp + %$i]
5594 \c         mov     ebx,[ebp + %$j]
5595 \c         add     eax,[ebx]
5596 \c
5597 \c endproc
5598
5599 This defines \c{_proc32} to be a procedure taking two arguments, the
5600 first (\c{i}) an integer and the second (\c{j}) a pointer to an
5601 integer. It returns \c{i + *j}.
5602
5603 Note that the \c{arg} macro has an \c{EQU} as the first line of its
5604 expansion, and since the label before the macro call gets prepended
5605 to the first line of the expanded macro, the \c{EQU} works, defining
5606 \c{%$i} to be an offset from \c{BP}. A context-local variable is
5607 used, local to the context pushed by the \c{proc} macro and popped
5608 by the \c{endproc} macro, so that the same argument name can be used
5609 in later procedures. Of course, you don't \e{have} to do that.
5610
5611 \c{arg} can take an optional parameter, giving the size of the
5612 argument. If no size is given, 4 is assumed, since it is likely that
5613 many function parameters will be of type \c{int} or pointers.
5614
5615
5616 \H{picdll} Writing NetBSD/FreeBSD/OpenBSD and Linux/ELF \i{Shared
5617 Libraries}
5618
5619 \c{ELF} replaced the older \c{a.out} object file format under Linux
5620 because it contains support for \i{position-independent code}
5621 (\i{PIC}), which makes writing shared libraries much easier. NASM
5622 supports the \c{ELF} position-independent code features, so you can
5623 write Linux \c{ELF} shared libraries in NASM.
5624
5625 \i{NetBSD}, and its close cousins \i{FreeBSD} and \i{OpenBSD}, take
5626 a different approach by hacking PIC support into the \c{a.out}
5627 format. NASM supports this as the \i\c{aoutb} output format, so you
5628 can write \i{BSD} shared libraries in NASM too.
5629
5630 The operating system loads a PIC shared library by memory-mapping
5631 the library file at an arbitrarily chosen point in the address space
5632 of the running process. The contents of the library's code section
5633 must therefore not depend on where it is loaded in memory.
5634
5635 Therefore, you cannot get at your variables by writing code like
5636 this:
5637
5638 \c         mov     eax,[myvar]             ; WRONG
5639
5640 Instead, the linker provides an area of memory called the
5641 \i\e{global offset table}, or \i{GOT}; the GOT is situated at a
5642 constant distance from your library's code, so if you can find out
5643 where your library is loaded (which is typically done using a
5644 \c{CALL} and \c{POP} combination), you can obtain the address of the
5645 GOT, and you can then load the addresses of your variables out of
5646 linker-generated entries in the GOT.
5647
5648 The \e{data} section of a PIC shared library does not have these
5649 restrictions: since the data section is writable, it has to be
5650 copied into memory anyway rather than just paged in from the library
5651 file, so as long as it's being copied it can be relocated too. So
5652 you can put ordinary types of relocation in the data section without
5653 too much worry (but see \k{picglobal} for a caveat).
5654
5655
5656 \S{picgot} Obtaining the Address of the GOT
5657
5658 Each code module in your shared library should define the GOT as an
5659 external symbol:
5660
5661 \c extern  _GLOBAL_OFFSET_TABLE_   ; in ELF
5662 \c extern  __GLOBAL_OFFSET_TABLE_  ; in BSD a.out
5663
5664 At the beginning of any function in your shared library which plans
5665 to access your data or BSS sections, you must first calculate the
5666 address of the GOT. This is typically done by writing the function
5667 in this form:
5668
5669 \c func:   push    ebp
5670 \c         mov     ebp,esp
5671 \c         push    ebx
5672 \c         call    .get_GOT
5673 \c .get_GOT:
5674 \c         pop     ebx
5675 \c         add     ebx,_GLOBAL_OFFSET_TABLE_+$$-.get_GOT wrt ..gotpc
5676 \c
5677 \c         ; the function body comes here
5678 \c
5679 \c         mov     ebx,[ebp-4]
5680 \c         mov     esp,ebp
5681 \c         pop     ebp
5682 \c         ret
5683
5684 (For BSD, again, the symbol \c{_GLOBAL_OFFSET_TABLE} requires a
5685 second leading underscore.)
5686
5687 The first two lines of this function are simply the standard C
5688 prologue to set up a stack frame, and the last three lines are
5689 standard C function epilogue. The third line, and the fourth to last
5690 line, save and restore the \c{EBX} register, because PIC shared
5691 libraries use this register to store the address of the GOT.
5692
5693 The interesting bit is the \c{CALL} instruction and the following
5694 two lines. The \c{CALL} and \c{POP} combination obtains the address
5695 of the label \c{.get_GOT}, without having to know in advance where
5696 the program was loaded (since the \c{CALL} instruction is encoded
5697 relative to the current position). The \c{ADD} instruction makes use
5698 of one of the special PIC relocation types: \i{GOTPC relocation}.
5699 With the \i\c{WRT ..gotpc} qualifier specified, the symbol
5700 referenced (here \c{_GLOBAL_OFFSET_TABLE_}, the special symbol
5701 assigned to the GOT) is given as an offset from the beginning of the
5702 section. (Actually, \c{ELF} encodes it as the offset from the operand
5703 field of the \c{ADD} instruction, but NASM simplifies this
5704 deliberately, so you do things the same way for both \c{ELF} and
5705 \c{BSD}.) So the instruction then \e{adds} the beginning of the section,
5706 to get the real address of the GOT, and subtracts the value of
5707 \c{.get_GOT} which it knows is in \c{EBX}. Therefore, by the time
5708 that instruction has finished, \c{EBX} contains the address of the GOT.
5709
5710 If you didn't follow that, don't worry: it's never necessary to
5711 obtain the address of the GOT by any other means, so you can put
5712 those three instructions into a macro and safely ignore them:
5713
5714 \c %macro  get_GOT 0
5715 \c
5716 \c         call    %%getgot
5717 \c   %%getgot:
5718 \c         pop     ebx
5719 \c         add     ebx,_GLOBAL_OFFSET_TABLE_+$$-%%getgot wrt ..gotpc
5720 \c
5721 \c %endmacro
5722
5723 \S{piclocal} Finding Your Local Data Items
5724
5725 Having got the GOT, you can then use it to obtain the addresses of
5726 your data items. Most variables will reside in the sections you have
5727 declared; they can be accessed using the \I{GOTOFF
5728 relocation}\c{..gotoff} special \I\c{WRT ..gotoff}\c{WRT} type. The
5729 way this works is like this:
5730
5731 \c         lea     eax,[ebx+myvar wrt ..gotoff]
5732
5733 The expression \c{myvar wrt ..gotoff} is calculated, when the shared
5734 library is linked, to be the offset to the local variable \c{myvar}
5735 from the beginning of the GOT. Therefore, adding it to \c{EBX} as
5736 above will place the real address of \c{myvar} in \c{EAX}.
5737
5738 If you declare variables as \c{GLOBAL} without specifying a size for
5739 them, they are shared between code modules in the library, but do
5740 not get exported from the library to the program that loaded it.
5741 They will still be in your ordinary data and BSS sections, so you
5742 can access them in the same way as local variables, using the above
5743 \c{..gotoff} mechanism.
5744
5745 Note that due to a peculiarity of the way BSD \c{a.out} format
5746 handles this relocation type, there must be at least one non-local
5747 symbol in the same section as the address you're trying to access.
5748
5749
5750 \S{picextern} Finding External and Common Data Items
5751
5752 If your library needs to get at an external variable (external to
5753 the \e{library}, not just to one of the modules within it), you must
5754 use the \I{GOT relocations}\I\c{WRT ..got}\c{..got} type to get at
5755 it. The \c{..got} type, instead of giving you the offset from the
5756 GOT base to the variable, gives you the offset from the GOT base to
5757 a GOT \e{entry} containing the address of the variable. The linker
5758 will set up this GOT entry when it builds the library, and the
5759 dynamic linker will place the correct address in it at load time. So
5760 to obtain the address of an external variable \c{extvar} in \c{EAX},
5761 you would code
5762
5763 \c         mov     eax,[ebx+extvar wrt ..got]
5764
5765 This loads the address of \c{extvar} out of an entry in the GOT. The
5766 linker, when it builds the shared library, collects together every
5767 relocation of type \c{..got}, and builds the GOT so as to ensure it
5768 has every necessary entry present.
5769
5770 Common variables must also be accessed in this way.
5771
5772
5773 \S{picglobal} Exporting Symbols to the Library User
5774
5775 If you want to export symbols to the user of the library, you have
5776 to declare whether they are functions or data, and if they are data,
5777 you have to give the size of the data item. This is because the
5778 dynamic linker has to build \I{PLT}\i{procedure linkage table}
5779 entries for any exported functions, and also moves exported data
5780 items away from the library's data section in which they were
5781 declared.
5782
5783 So to export a function to users of the library, you must use
5784
5785 \c global  func:function           ; declare it as a function
5786 \c
5787 \c func:   push    ebp
5788 \c
5789 \c         ; etc.
5790
5791 And to export a data item such as an array, you would have to code
5792
5793 \c global  array:data array.end-array      ; give the size too
5794 \c
5795 \c array:  resd    128
5796 \c .end:
5797
5798 Be careful: If you export a variable to the library user, by
5799 declaring it as \c{GLOBAL} and supplying a size, the variable will
5800 end up living in the data section of the main program, rather than
5801 in your library's data section, where you declared it. So you will
5802 have to access your own global variable with the \c{..got} mechanism
5803 rather than \c{..gotoff}, as if it were external (which,
5804 effectively, it has become).
5805
5806 Equally, if you need to store the address of an exported global in
5807 one of your data sections, you can't do it by means of the standard
5808 sort of code:
5809
5810 \c dataptr:        dd      global_data_item        ; WRONG
5811
5812 NASM will interpret this code as an ordinary relocation, in which
5813 \c{global_data_item} is merely an offset from the beginning of the
5814 \c{.data} section (or whatever); so this reference will end up
5815 pointing at your data section instead of at the exported global
5816 which resides elsewhere.
5817
5818 Instead of the above code, then, you must write
5819
5820 \c dataptr:        dd      global_data_item wrt ..sym
5821
5822 which makes use of the special \c{WRT} type \I\c{WRT ..sym}\c{..sym}
5823 to instruct NASM to search the symbol table for a particular symbol
5824 at that address, rather than just relocating by section base.
5825
5826 Either method will work for functions: referring to one of your
5827 functions by means of
5828
5829 \c funcptr:        dd      my_function
5830
5831 will give the user the address of the code you wrote, whereas
5832
5833 \c funcptr:        dd      my_function wrt .sym
5834
5835 will give the address of the procedure linkage table for the
5836 function, which is where the calling program will \e{believe} the
5837 function lives. Either address is a valid way to call the function.
5838
5839
5840 \S{picproc} Calling Procedures Outside the Library
5841
5842 Calling procedures outside your shared library has to be done by
5843 means of a \i\e{procedure linkage table}, or \i{PLT}. The PLT is
5844 placed at a known offset from where the library is loaded, so the
5845 library code can make calls to the PLT in a position-independent
5846 way. Within the PLT there is code to jump to offsets contained in
5847 the GOT, so function calls to other shared libraries or to routines
5848 in the main program can be transparently passed off to their real
5849 destinations.
5850
5851 To call an external routine, you must use another special PIC
5852 relocation type, \I{PLT relocations}\i\c{WRT ..plt}. This is much
5853 easier than the GOT-based ones: you simply replace calls such as
5854 \c{CALL printf} with the PLT-relative version \c{CALL printf WRT
5855 ..plt}.
5856
5857
5858 \S{link} Generating the Library File
5859
5860 Having written some code modules and assembled them to \c{.o} files,
5861 you then generate your shared library with a command such as
5862
5863 \c ld -shared -o library.so module1.o module2.o       # for ELF
5864 \c ld -Bshareable -o library.so module1.o module2.o   # for BSD
5865
5866 For ELF, if your shared library is going to reside in system
5867 directories such as \c{/usr/lib} or \c{/lib}, it is usually worth
5868 using the \i\c{-soname} flag to the linker, to store the final
5869 library file name, with a version number, into the library:
5870
5871 \c ld -shared -soname library.so.1 -o library.so.1.2 *.o
5872
5873 You would then copy \c{library.so.1.2} into the library directory,
5874 and create \c{library.so.1} as a symbolic link to it.
5875
5876
5877 \C{mixsize} Mixing 16 and 32 Bit Code
5878
5879 This chapter tries to cover some of the issues, largely related to
5880 unusual forms of addressing and jump instructions, encountered when
5881 writing operating system code such as protected-mode initialisation
5882 routines, which require code that operates in mixed segment sizes,
5883 such as code in a 16-bit segment trying to modify data in a 32-bit
5884 one, or jumps between different-size segments.
5885
5886
5887 \H{mixjump} Mixed-Size Jumps\I{jumps, mixed-size}
5888
5889 \I{operating system, writing}\I{writing operating systems}The most
5890 common form of \i{mixed-size instruction} is the one used when
5891 writing a 32-bit OS: having done your setup in 16-bit mode, such as
5892 loading the kernel, you then have to boot it by switching into
5893 protected mode and jumping to the 32-bit kernel start address. In a
5894 fully 32-bit OS, this tends to be the \e{only} mixed-size
5895 instruction you need, since everything before it can be done in pure
5896 16-bit code, and everything after it can be pure 32-bit.
5897
5898 This jump must specify a 48-bit far address, since the target
5899 segment is a 32-bit one. However, it must be assembled in a 16-bit
5900 segment, so just coding, for example,
5901
5902 \c         jmp     0x1234:0x56789ABC       ; wrong!
5903
5904 will not work, since the offset part of the address will be
5905 truncated to \c{0x9ABC} and the jump will be an ordinary 16-bit far
5906 one.
5907
5908 The Linux kernel setup code gets round the inability of \c{as86} to
5909 generate the required instruction by coding it manually, using
5910 \c{DB} instructions. NASM can go one better than that, by actually
5911 generating the right instruction itself. Here's how to do it right:
5912
5913 \c         jmp     dword 0x1234:0x56789ABC         ; right
5914
5915 \I\c{JMP DWORD}The \c{DWORD} prefix (strictly speaking, it should
5916 come \e{after} the colon, since it is declaring the \e{offset} field
5917 to be a doubleword; but NASM will accept either form, since both are
5918 unambiguous) forces the offset part to be treated as far, in the
5919 assumption that you are deliberately writing a jump from a 16-bit
5920 segment to a 32-bit one.
5921
5922 You can do the reverse operation, jumping from a 32-bit segment to a
5923 16-bit one, by means of the \c{WORD} prefix:
5924
5925 \c         jmp     word 0x8765:0x4321      ; 32 to 16 bit
5926
5927 If the \c{WORD} prefix is specified in 16-bit mode, or the \c{DWORD}
5928 prefix in 32-bit mode, they will be ignored, since each is
5929 explicitly forcing NASM into a mode it was in anyway.
5930
5931
5932 \H{mixaddr} Addressing Between Different-Size Segments\I{addressing,
5933 mixed-size}\I{mixed-size addressing}
5934
5935 If your OS is mixed 16 and 32-bit, or if you are writing a DOS
5936 extender, you are likely to have to deal with some 16-bit segments
5937 and some 32-bit ones. At some point, you will probably end up
5938 writing code in a 16-bit segment which has to access data in a
5939 32-bit segment, or vice versa.
5940
5941 If the data you are trying to access in a 32-bit segment lies within
5942 the first 64K of the segment, you may be able to get away with using
5943 an ordinary 16-bit addressing operation for the purpose; but sooner
5944 or later, you will want to do 32-bit addressing from 16-bit mode.
5945
5946 The easiest way to do this is to make sure you use a register for
5947 the address, since any effective address containing a 32-bit
5948 register is forced to be a 32-bit address. So you can do
5949
5950 \c         mov     eax,offset_into_32_bit_segment_specified_by_fs
5951 \c         mov     dword [fs:eax],0x11223344
5952
5953 This is fine, but slightly cumbersome (since it wastes an
5954 instruction and a register) if you already know the precise offset
5955 you are aiming at. The x86 architecture does allow 32-bit effective
5956 addresses to specify nothing but a 4-byte offset, so why shouldn't
5957 NASM be able to generate the best instruction for the purpose?
5958
5959 It can. As in \k{mixjump}, you need only prefix the address with the
5960 \c{DWORD} keyword, and it will be forced to be a 32-bit address:
5961
5962 \c         mov     dword [fs:dword my_offset],0x11223344
5963
5964 Also as in \k{mixjump}, NASM is not fussy about whether the
5965 \c{DWORD} prefix comes before or after the segment override, so
5966 arguably a nicer-looking way to code the above instruction is
5967
5968 \c         mov     dword [dword fs:my_offset],0x11223344
5969
5970 Don't confuse the \c{DWORD} prefix \e{outside} the square brackets,
5971 which controls the size of the data stored at the address, with the
5972 one \c{inside} the square brackets which controls the length of the
5973 address itself. The two can quite easily be different:
5974
5975 \c         mov     word [dword 0x12345678],0x9ABC
5976
5977 This moves 16 bits of data to an address specified by a 32-bit
5978 offset.
5979
5980 You can also specify \c{WORD} or \c{DWORD} prefixes along with the
5981 \c{FAR} prefix to indirect far jumps or calls. For example:
5982
5983 \c         call    dword far [fs:word 0x4321]
5984
5985 This instruction contains an address specified by a 16-bit offset;
5986 it loads a 48-bit far pointer from that (16-bit segment and 32-bit
5987 offset), and calls that address.
5988
5989
5990 \H{mixother} Other Mixed-Size Instructions
5991
5992 The other way you might want to access data might be using the
5993 string instructions (\c{LODSx}, \c{STOSx} and so on) or the
5994 \c{XLATB} instruction. These instructions, since they take no
5995 parameters, might seem to have no easy way to make them perform
5996 32-bit addressing when assembled in a 16-bit segment.
5997
5998 This is the purpose of NASM's \i\c{a16} and \i\c{a32} prefixes. If
5999 you are coding \c{LODSB} in a 16-bit segment but it is supposed to
6000 be accessing a string in a 32-bit segment, you should load the
6001 desired address into \c{ESI} and then code
6002
6003 \c         a32     lodsb
6004
6005 The prefix forces the addressing size to 32 bits, meaning that
6006 \c{LODSB} loads from \c{[DS:ESI]} instead of \c{[DS:SI]}. To access
6007 a string in a 16-bit segment when coding in a 32-bit one, the
6008 corresponding \c{a16} prefix can be used.
6009
6010 The \c{a16} and \c{a32} prefixes can be applied to any instruction
6011 in NASM's instruction table, but most of them can generate all the
6012 useful forms without them. The prefixes are necessary only for
6013 instructions with implicit addressing: \c{CMPSx} (\k{insCMPSB}),
6014 \c{SCASx} (\k{insSCASB}), \c{LODSx} (\k{insLODSB}), \c{STOSx}
6015 (\k{insSTOSB}), \c{MOVSx} (\k{insMOVSB}), \c{INSx} (\k{insINSB}),
6016 \c{OUTSx} (\k{insOUTSB}), and \c{XLATB} (\k{insXLATB}). Also, the
6017 various push and pop instructions (\c{PUSHA} and \c{POPF} as well as
6018 the more usual \c{PUSH} and \c{POP}) can accept \c{a16} or \c{a32}
6019 prefixes to force a particular one of \c{SP} or \c{ESP} to be used
6020 as a stack pointer, in case the stack segment in use is a different
6021 size from the code segment.
6022
6023 \c{PUSH} and \c{POP}, when applied to segment registers in 32-bit
6024 mode, also have the slightly odd behaviour that they push and pop 4
6025 bytes at a time, of which the top two are ignored and the bottom two
6026 give the value of the segment register being manipulated. To force
6027 the 16-bit behaviour of segment-register push and pop instructions,
6028 you can use the operand-size prefix \i\c{o16}:
6029
6030 \c         o16 push    ss
6031 \c         o16 push    ds
6032
6033 This code saves a doubleword of stack space by fitting two segment
6034 registers into the space which would normally be consumed by pushing
6035 one.
6036
6037 (You can also use the \i\c{o32} prefix to force the 32-bit behaviour
6038 when in 16-bit mode, but this seems less useful.)
6039
6040
6041 \C{trouble} Troubleshooting
6042
6043 This chapter describes some of the common problems that users have
6044 been known to encounter with NASM, and answers them. It also gives
6045 instructions for reporting bugs in NASM if you find a difficulty
6046 that isn't listed here.
6047
6048
6049 \H{problems} Common Problems
6050
6051 \S{inefficient} NASM Generates \i{Inefficient Code}
6052
6053 I get a lot of `bug' reports about NASM generating inefficient, or
6054 even `wrong', code on instructions such as \c{ADD ESP,8}. This is a
6055 deliberate design feature, connected to predictability of output:
6056 NASM, on seeing \c{ADD ESP,8}, will generate the form of the
6057 instruction which leaves room for a 32-bit offset. You need to code
6058 \I\c{BYTE}\c{ADD ESP,BYTE 8} if you want the space-efficient
6059 form of the instruction. This isn't a bug: at worst it's a
6060 misfeature, and that's a matter of opinion only.
6061
6062
6063 \S{jmprange} My Jumps are Out of Range\I{out of range, jumps}
6064
6065 Similarly, people complain that when they issue \i{conditional
6066 jumps} (which are \c{SHORT} by default) that try to jump too far,
6067 NASM reports `short jump out of range' instead of making the jumps
6068 longer.
6069
6070 This, again, is partly a predictability issue, but in fact has a
6071 more practical reason as well. NASM has no means of being told what
6072 type of processor the code it is generating will be run on; so it
6073 cannot decide for itself that it should generate \i\c{Jcc NEAR} type
6074 instructions, because it doesn't know that it's working for a 386 or
6075 above. Alternatively, it could replace the out-of-range short
6076 \c{JNE} instruction with a very short \c{JE} instruction that jumps
6077 over a \c{JMP NEAR}; this is a sensible solution for processors
6078 below a 386, but hardly efficient on processors which have good
6079 branch prediction \e{and} could have used \c{JNE NEAR} instead. So,
6080 once again, it's up to the user, not the assembler, to decide what
6081 instructions should be generated.
6082
6083
6084 \S{proborg} \i\c{ORG} Doesn't Work
6085
6086 People writing \i{boot sector} programs in the \c{bin} format often
6087 complain that \c{ORG} doesn't work the way they'd like: in order to
6088 place the \c{0xAA55} signature word at the end of a 512-byte boot
6089 sector, people who are used to MASM tend to code
6090
6091 \c         ORG 0
6092 \c
6093 \c         ; some boot sector code
6094 \c
6095 \c         ORG 510
6096 \c         DW 0xAA55
6097
6098 This is not the intended use of the \c{ORG} directive in NASM, and
6099 will not work. The correct way to solve this problem in NASM is to
6100 use the \i\c{TIMES} directive, like this:
6101
6102 \c         ORG 0
6103 \c
6104 \c         ; some boot sector code
6105 \c
6106 \c         TIMES 510-($-$$) DB 0
6107 \c         DW 0xAA55
6108
6109 The \c{TIMES} directive will insert exactly enough zero bytes into
6110 the output to move the assembly point up to 510. This method also
6111 has the advantage that if you accidentally fill your boot sector too
6112 full, NASM will catch the problem at assembly time and report it, so
6113 you won't end up with a boot sector that you have to disassemble to
6114 find out what's wrong with it.
6115
6116
6117 \S{probtimes} \i\c{TIMES} Doesn't Work
6118
6119 The other common problem with the above code is people who write the
6120 \c{TIMES} line as
6121
6122 \c         TIMES 510-$ DB 0
6123
6124 by reasoning that \c{$} should be a pure number, just like 510, so
6125 the difference between them is also a pure number and can happily be
6126 fed to \c{TIMES}.
6127
6128 NASM is a \e{modular} assembler: the various component parts are
6129 designed to be easily separable for re-use, so they don't exchange
6130 information unnecessarily. In consequence, the \c{bin} output
6131 format, even though it has been told by the \c{ORG} directive that
6132 the \c{.text} section should start at 0, does not pass that
6133 information back to the expression evaluator. So from the
6134 evaluator's point of view, \c{$} isn't a pure number: it's an offset
6135 from a section base. Therefore the difference between \c{$} and 510
6136 is also not a pure number, but involves a section base. Values
6137 involving section bases cannot be passed as arguments to \c{TIMES}.
6138
6139 The solution, as in the previous section, is to code the \c{TIMES}
6140 line in the form
6141
6142 \c         TIMES 510-($-$$) DB 0
6143
6144 in which \c{$} and \c{$$} are offsets from the same section base,
6145 and so their difference is a pure number. This will solve the
6146 problem and generate sensible code.
6147
6148
6149 \H{bugs} \i{Bugs}\I{reporting bugs}
6150
6151 We have never yet released a version of NASM with any \e{known}
6152 bugs. That doesn't usually stop there being plenty we didn't know
6153 about, though. Any that you find should be reported firstly via the
6154 \i\c{bugtracker} at
6155 \W{https://sourceforge.net/projects/nasm/}\c{https://sourceforge.net/projects/nasm/}
6156 (click on "Bugs"), or if that fails then through one of the
6157 contacts in \k{contact}.
6158
6159 Please read \k{qstart} first, and don't report the bug if it's
6160 listed in there as a deliberate feature. (If you think the feature
6161 is badly thought out, feel free to send us reasons why you think it
6162 should be changed, but don't just send us mail saying `This is a
6163 bug' if the documentation says we did it on purpose.) Then read
6164 \k{problems}, and don't bother reporting the bug if it's listed
6165 there.
6166
6167 If you do report a bug, \e{please} give us all of the following
6168 information:
6169
6170 \b What operating system you're running NASM under. DOS, Linux,
6171 NetBSD, Win16, Win32, VMS (I'd be impressed), whatever.
6172
6173 \b If you're running NASM under DOS or Win32, tell us whether you've
6174 compiled your own executable from the DOS source archive, or whether
6175 you were using the standard distribution binaries out of the
6176 archive. If you were using a locally built executable, try to
6177 reproduce the problem using one of the standard binaries, as this
6178 will make it easier for us to reproduce your problem prior to fixing
6179 it.
6180
6181 \b Which version of NASM you're using, and exactly how you invoked
6182 it. Give us the precise command line, and the contents of the
6183 \c{NASMENV} environment variable if any.
6184
6185 \b Which versions of any supplementary programs you're using, and
6186 how you invoked them. If the problem only becomes visible at link
6187 time, tell us what linker you're using, what version of it you've
6188 got, and the exact linker command line. If the problem involves
6189 linking against object files generated by a compiler, tell us what
6190 compiler, what version, and what command line or options you used.
6191 (If you're compiling in an IDE, please try to reproduce the problem
6192 with the command-line version of the compiler.)
6193
6194 \b If at all possible, send us a NASM source file which exhibits the
6195 problem. If this causes copyright problems (e.g. you can only
6196 reproduce the bug in restricted-distribution code) then bear in mind
6197 the following two points: firstly, we guarantee that any source code
6198 sent to us for the purposes of debugging NASM will be used \e{only}
6199 for the purposes of debugging NASM, and that we will delete all our
6200 copies of it as soon as we have found and fixed the bug or bugs in
6201 question; and secondly, we would prefer \e{not} to be mailed large
6202 chunks of code anyway. The smaller the file, the better. A
6203 three-line sample file that does nothing useful \e{except}
6204 demonstrate the problem is much easier to work with than a
6205 fully fledged ten-thousand-line program. (Of course, some errors
6206 \e{do} only crop up in large files, so this may not be possible.)
6207
6208 \b A description of what the problem actually \e{is}. `It doesn't
6209 work' is \e{not} a helpful description! Please describe exactly what
6210 is happening that shouldn't be, or what isn't happening that should.
6211 Examples might be: `NASM generates an error message saying Line 3
6212 for an error that's actually on Line 5'; `NASM generates an error
6213 message that I believe it shouldn't be generating at all'; `NASM
6214 fails to generate an error message that I believe it \e{should} be
6215 generating'; `the object file produced from this source code crashes
6216 my linker'; `the ninth byte of the output file is 66 and I think it
6217 should be 77 instead'.
6218
6219 \b If you believe the output file from NASM to be faulty, send it to
6220 us. That allows us to determine whether our own copy of NASM
6221 generates the same file, or whether the problem is related to
6222 portability issues between our development platforms and yours. We
6223 can handle binary files mailed to us as MIME attachments, uuencoded,
6224 and even BinHex. Alternatively, we may be able to provide an FTP
6225 site you can upload the suspect files to; but mailing them is easier
6226 for us.
6227
6228 \b Any other information or data files that might be helpful. If,
6229 for example, the problem involves NASM failing to generate an object
6230 file while TASM can generate an equivalent file without trouble,
6231 then send us \e{both} object files, so we can see what TASM is doing
6232 differently from us.
6233
6234
6235 \A{ndisasm} \i{Ndisasm}
6236
6237                   The Netwide Disassembler, NDISASM
6238
6239 \H{ndisintro} Introduction
6240
6241
6242 The Netwide Disassembler is a small companion program to the Netwide
6243 Assembler, NASM. It seemed a shame to have an x86 assembler,
6244 complete with a full instruction table, and not make as much use of
6245 it as possible, so here's a disassembler which shares the
6246 instruction table (and some other bits of code) with NASM.
6247
6248 The Netwide Disassembler does nothing except to produce
6249 disassemblies of \e{binary} source files. NDISASM does not have any
6250 understanding of object file formats, like \c{objdump}, and it will
6251 not understand \c{DOS .EXE} files like \c{debug} will. It just
6252 disassembles.
6253
6254
6255 \H{ndisstart} Getting Started: Installation
6256
6257 See \k{install} for installation instructions. NDISASM, like NASM,
6258 has a \c{man page} which you may want to put somewhere useful, if you
6259 are on a Unix system.
6260
6261
6262 \H{ndisrun} Running NDISASM
6263
6264 To disassemble a file, you will typically use a command of the form
6265
6266 \c        ndisasm [-b16 | -b32] filename
6267
6268 NDISASM can disassemble 16-bit code or 32-bit code equally easily,
6269 provided of course that you remember to specify which it is to work
6270 with. If no \i\c{-b} switch is present, NDISASM works in 16-bit mode by
6271 default. The \i\c{-u} switch (for USE32) also invokes 32-bit mode.
6272
6273 Two more command line options are \i\c{-r} which reports the version
6274 number of NDISASM you are running, and \i\c{-h} which gives a short
6275 summary of command line options.
6276
6277
6278 \S{ndiscom} COM Files: Specifying an Origin
6279
6280 To disassemble a \c{DOS .COM} file correctly, a disassembler must assume
6281 that the first instruction in the file is loaded at address \c{0x100},
6282 rather than at zero. NDISASM, which assumes by default that any file
6283 you give it is loaded at zero, will therefore need to be informed of
6284 this.
6285
6286 The \i\c{-o} option allows you to declare a different origin for the
6287 file you are disassembling. Its argument may be expressed in any of
6288 the NASM numeric formats: decimal by default, if it begins with `\c{$}'
6289 or `\c{0x}' or ends in `\c{H}' it's \c{hex}, if it ends in `\c{Q}' it's
6290 \c{octal}, and if it ends in `\c{B}' it's \c{binary}.
6291
6292 Hence, to disassemble a \c{.COM} file:
6293
6294 \c        ndisasm -o100h filename.com
6295
6296 will do the trick.
6297
6298
6299 \S{ndissync} Code Following Data: Synchronisation
6300
6301 Suppose you are disassembling a file which contains some data which
6302 isn't machine code, and \e{then} contains some machine code. NDISASM
6303 will faithfully plough through the data section, producing machine
6304 instructions wherever it can (although most of them will look
6305 bizarre, and some may have unusual prefixes, e.g. `\c{FS OR AX,0x240A}'),
6306 and generating `DB' instructions ever so often if it's totally stumped.
6307 Then it will reach the code section.
6308
6309 Supposing NDISASM has just finished generating a strange machine
6310 instruction from part of the data section, and its file position is
6311 now one byte \e{before} the beginning of the code section. It's
6312 entirely possible that another spurious instruction will get
6313 generated, starting with the final byte of the data section, and
6314 then the correct first instruction in the code section will not be
6315 seen because the starting point skipped over it. This isn't really
6316 ideal.
6317
6318 To avoid this, you can specify a `\i\c{synchronisation}' point, or indeed
6319 as many synchronisation points as you like (although NDISASM can
6320 only handle 8192 sync points internally). The definition of a sync
6321 point is this: NDISASM guarantees to hit sync points exactly during
6322 disassembly. If it is thinking about generating an instruction which
6323 would cause it to jump over a sync point, it will discard that
6324 instruction and output a `\c{db}' instead. So it \e{will} start
6325 disassembly exactly from the sync point, and so you \e{will} see all
6326 the instructions in your code section.
6327
6328 Sync points are specified using the \i\c{-s} option: they are measured
6329 in terms of the program origin, not the file position. So if you
6330 want to synchronise after 32 bytes of a \c{.COM} file, you would have to
6331 do
6332
6333 \c        ndisasm -o100h -s120h file.com
6334
6335 rather than
6336
6337 \c        ndisasm -o100h -s20h file.com
6338
6339 As stated above, you can specify multiple sync markers if you need
6340 to, just by repeating the \c{-s} option.
6341
6342
6343 \S{ndisisync} Mixed Code and Data: Automatic (Intelligent) Synchronisation
6344 \I\c{auto-sync}
6345
6346 Suppose you are disassembling the boot sector of a \c{DOS} floppy (maybe
6347 it has a virus, and you need to understand the virus so that you
6348 know what kinds of damage it might have done you). Typically, this
6349 will contain a \c{JMP} instruction, then some data, then the rest of the
6350 code. So there is a very good chance of NDISASM being \e{misaligned}
6351 when the data ends and the code begins. Hence a sync point is
6352 needed.
6353
6354 On the other hand, why should you have to specify the sync point
6355 manually? What you'd do in order to find where the sync point would
6356 be, surely, would be to read the \c{JMP} instruction, and then to use
6357 its target address as a sync point. So can NDISASM do that for you?
6358
6359 The answer, of course, is yes: using either of the synonymous
6360 switches \i\c{-a} (for automatic sync) or \i\c{-i} (for intelligent
6361 sync) will enable \c{auto-sync} mode. Auto-sync mode automatically
6362 generates a sync point for any forward-referring PC-relative jump or
6363 call instruction that NDISASM encounters. (Since NDISASM is one-pass,
6364 if it encounters a PC-relative jump whose target has already been
6365 processed, there isn't much it can do about it...)
6366
6367 Only PC-relative jumps are processed, since an absolute jump is
6368 either through a register (in which case NDISASM doesn't know what
6369 the register contains) or involves a segment address (in which case
6370 the target code isn't in the same segment that NDISASM is working
6371 in, and so the sync point can't be placed anywhere useful).
6372
6373 For some kinds of file, this mechanism will automatically put sync
6374 points in all the right places, and save you from having to place
6375 any sync points manually. However, it should be stressed that
6376 auto-sync mode is \e{not} guaranteed to catch all the sync points, and
6377 you may still have to place some manually.
6378
6379 Auto-sync mode doesn't prevent you from declaring manual sync
6380 points: it just adds automatically generated ones to the ones you
6381 provide. It's perfectly feasible to specify \c{-i} \e{and} some \c{-s}
6382 options.
6383
6384 Another caveat with auto-sync mode is that if, by some unpleasant
6385 fluke, something in your data section should disassemble to a
6386 PC-relative call or jump instruction, NDISASM may obediently place a
6387 sync point in a totally random place, for example in the middle of
6388 one of the instructions in your code section. So you may end up with
6389 a wrong disassembly even if you use auto-sync. Again, there isn't
6390 much I can do about this. If you have problems, you'll have to use
6391 manual sync points, or use the \c{-k} option (documented below) to
6392 suppress disassembly of the data area.
6393
6394
6395 \S{ndisother} Other Options
6396
6397 The \i\c{-e} option skips a header on the file, by ignoring the first N
6398 bytes. This means that the header is \e{not} counted towards the
6399 disassembly offset: if you give \c{-e10 -o10}, disassembly will start
6400 at byte 10 in the file, and this will be given offset 10, not 20.
6401
6402 The \i\c{-k} option is provided with two comma-separated numeric
6403 arguments, the first of which is an assembly offset and the second
6404 is a number of bytes to skip. This \e{will} count the skipped bytes
6405 towards the assembly offset: its use is to suppress disassembly of a
6406 data section which wouldn't contain anything you wanted to see
6407 anyway.
6408
6409
6410 \H{ndisbugs} Bugs and Improvements
6411
6412 There are no known bugs. However, any you find, with patches if
6413 possible, should be sent to \W{mailto:jules@dsf.org.uk}\c{jules@dsf.org.uk}
6414 or \W{mailto:anakin@pobox.com}\c{anakin@pobox.com}, or to the
6415 developer's site at
6416 \W{https://sourceforge.net/projects/nasm/}\c{https://sourceforge.net/projects/nasm/}
6417 and we'll try to fix them. Feel free to send contributions and
6418 new features as well.
6419
6420 Future plans include awareness of which processors certain
6421 instructions will run on, and marking of instructions that are too
6422 advanced for some processor (or are \c{FPU} instructions, or are
6423 undocumented opcodes, or are privileged protected-mode instructions,
6424 or whatever).
6425
6426 That's All Folks!
6427
6428 I hope NDISASM is of some use to somebody. Including me. :-)
6429
6430 I don't recommend taking NDISASM apart to see how an efficient
6431 disassembler works, because as far as I know, it isn't an efficient
6432 one anyway. You have been warned.
6433
6434
6435 \A{iref} x86 Instruction Reference
6436
6437 This appendix provides a complete list of the machine instructions
6438 which NASM will assemble, and a short description of the function of
6439 each one.
6440
6441 It is not intended to be exhaustive documentation on the fine
6442 details of the instructions' function, such as which exceptions they
6443 can trigger: for such documentation, you should go to Intel's Web
6444 site, \W{http://developer.intel.com/design/Pentium4/manuals/}\c{http://developer.intel.com/design/Pentium4/manuals/}.
6445
6446 Instead, this appendix is intended primarily to provide
6447 documentation on the way the instructions may be used within NASM.
6448 For example, looking up \c{LOOP} will tell you that NASM allows
6449 \c{CX} or \c{ECX} to be specified as an optional second argument to
6450 the \c{LOOP} instruction, to enforce which of the two possible
6451 counter registers should be used if the default is not the one
6452 desired.
6453
6454 The instructions are not quite listed in alphabetical order, since
6455 groups of instructions with similar functions are lumped together in
6456 the same entry. Most of them don't move very far from their
6457 alphabetic position because of this.
6458
6459
6460 \H{iref-opr} Key to Operand Specifications
6461
6462 The instruction descriptions in this appendix specify their operands
6463 using the following notation:
6464
6465 \b Registers: \c{reg8} denotes an 8-bit \i{general purpose
6466 register}, \c{reg16} denotes a 16-bit general purpose register, and
6467 \c{reg32} a 32-bit one. \c{fpureg} denotes one of the eight FPU
6468 stack registers, \c{mmxreg} denotes one of the eight 64-bit MMX
6469 registers, and \c{segreg} denotes a segment register. In addition,
6470 some registers (such as \c{AL}, \c{DX} or
6471 \c{ECX}) may be specified explicitly.
6472
6473 \b Immediate operands: \c{imm} denotes a generic \i{immediate operand}.
6474 \c{imm8}, \c{imm16} and \c{imm32} are used when the operand is
6475 intended to be a specific size. For some of these instructions, NASM
6476 needs an explicit specifier: for example, \c{ADD ESP,16} could be
6477 interpreted as either \c{ADD r/m32,imm32} or \c{ADD r/m32,imm8}.
6478 NASM chooses the former by default, and so you must specify \c{ADD
6479 ESP,BYTE 16} for the latter.
6480
6481 \b Memory references: \c{mem} denotes a generic \i{memory reference};
6482 \c{mem8}, \c{mem16}, \c{mem32}, \c{mem64} and \c{mem80} are used
6483 when the operand needs to be a specific size. Again, a specifier is
6484 needed in some cases: \c{DEC [address]} is ambiguous and will be
6485 rejected by NASM. You must specify \c{DEC BYTE [address]}, \c{DEC
6486 WORD [address]} or \c{DEC DWORD [address]} instead.
6487
6488 \b \i{Restricted memory references}: one form of the \c{MOV}
6489 instruction allows a memory address to be specified \e{without}
6490 allowing the normal range of register combinations and effective
6491 address processing. This is denoted by \c{memoffs8}, \c{memoffs16}
6492 and \c{memoffs32}.
6493
6494 \b Register or memory choices: many instructions can accept either a
6495 register \e{or} a memory reference as an operand. \c{r/m8} is a
6496 shorthand for \c{reg8/mem8}; similarly \c{r/m16} and \c{r/m32}.
6497 \c{r/m64} is MMX-related, and is a shorthand for \c{mmxreg/mem64}.
6498
6499
6500 \H{iref-opc} Key to Opcode Descriptions
6501
6502 This appendix also provides the opcodes which NASM will generate for
6503 each form of each instruction. The opcodes are listed in the
6504 following way:
6505
6506 \b A hex number, such as \c{3F}, indicates a fixed byte containing
6507 that number.
6508
6509 \b A hex number followed by \c{+r}, such as \c{C8+r}, indicates that
6510 one of the operands to the instruction is a register, and the
6511 `register value' of that register should be added to the hex number
6512 to produce the generated byte. For example, EDX has register value
6513 2, so the code \c{C8+r}, when the register operand is EDX, generates
6514 the hex byte \c{CA}. Register values for specific registers are
6515 given in \k{iref-rv}.
6516
6517 \b A hex number followed by \c{+cc}, such as \c{40+cc}, indicates
6518 that the instruction name has a condition code suffix, and the
6519 numeric representation of the condition code should be added to the
6520 hex number to produce the generated byte. For example, the code
6521 \c{40+cc}, when the instruction contains the \c{NE} condition,
6522 generates the hex byte \c{45}. Condition codes and their numeric
6523 representations are given in \k{iref-cc}.
6524
6525 \b A slash followed by a digit, such as \c{/2}, indicates that one
6526 of the operands to the instruction is a memory address or register
6527 (denoted \c{mem} or \c{r/m}, with an optional size). This is to be
6528 encoded as an effective address, with a \i{ModR/M byte}, an optional
6529 \i{SIB byte}, and an optional displacement, and the spare (register)
6530 field of the ModR/M byte should be the digit given (which will be
6531 from 0 to 7, so it fits in three bits). The encoding of effective
6532 addresses is given in \k{iref-ea}.
6533
6534 \b The code \c{/r} combines the above two: it indicates that one of
6535 the operands is a memory address or \c{r/m}, and another is a
6536 register, and that an effective address should be generated with the
6537 spare (register) field in the ModR/M byte being equal to the
6538 `register value' of the register operand. The encoding of effective
6539 addresses is given in \k{iref-ea}; register values are given in
6540 \k{iref-rv}.
6541
6542 \b The codes \c{ib}, \c{iw} and \c{id} indicate that one of the
6543 operands to the instruction is an immediate value, and that this is
6544 to be encoded as a byte, little-endian word or little-endian
6545 doubleword respectively.
6546
6547 \b The codes \c{rb}, \c{rw} and \c{rd} indicate that one of the
6548 operands to the instruction is an immediate value, and that the
6549 \e{difference} between this value and the address of the end of the
6550 instruction is to be encoded as a byte, word or doubleword
6551 respectively. Where the form \c{rw/rd} appears, it indicates that
6552 either \c{rw} or \c{rd} should be used according to whether assembly
6553 is being performed in \c{BITS 16} or \c{BITS 32} state respectively.
6554
6555 \b The codes \c{ow} and \c{od} indicate that one of the operands to
6556 the instruction is a reference to the contents of a memory address
6557 specified as an immediate value: this encoding is used in some forms
6558 of the \c{MOV} instruction in place of the standard
6559 effective-address mechanism. The displacement is encoded as a word
6560 or doubleword. Again, \c{ow/od} denotes that \c{ow} or \c{od} should
6561 be chosen according to the \c{BITS} setting.
6562
6563 \b The codes \c{o16} and \c{o32} indicate that the given form of the
6564 instruction should be assembled with operand size 16 or 32 bits. In
6565 other words, \c{o16} indicates a \c{66} prefix in \c{BITS 32} state,
6566 but generates no code in \c{BITS 16} state; and \c{o32} indicates a
6567 \c{66} prefix in \c{BITS 16} state but generates nothing in \c{BITS
6568 32}.
6569
6570 \b The codes \c{a16} and \c{a32}, similarly to \c{o16} and \c{o32},
6571 indicate the address size of the given form of the instruction.
6572 Where this does not match the \c{BITS} setting, a \c{67} prefix is
6573 required.
6574
6575
6576 \S{iref-rv} Register Values
6577
6578 Where an instruction requires a register value, it is already
6579 implicit in the encoding of the rest of the instruction what type of
6580 register is intended: an 8-bit general-purpose register, a segment
6581 register, a debug register, an MMX register, or whatever. Therefore
6582 there is no problem with registers of different types sharing an
6583 encoding value.
6584
6585 The encodings for the various classes of register are:
6586
6587 \b 8-bit general registers: \c{AL} is 0, \c{CL} is 1, \c{DL} is 2,
6588 \c{BL} is 3, \c{AH} is 4, \c{CH} is 5, \c{DH} is 6, and \c{BH} is
6589 7.
6590
6591 \b 16-bit general registers: \c{AX} is 0, \c{CX} is 1, \c{DX} is 2,
6592 \c{BX} is 3, \c{SP} is 4, \c{BP} is 5, \c{SI} is 6, and \c{DI} is 7.
6593
6594 \b 32-bit general registers: \c{EAX} is 0, \c{ECX} is 1, \c{EDX} is
6595 2, \c{EBX} is 3, \c{ESP} is 4, \c{EBP} is 5, \c{ESI} is 6, and
6596 \c{EDI} is 7.
6597
6598 \b \i{Segment registers}: \c{ES} is 0, \c{CS} is 1, \c{SS} is 2, \c{DS}
6599 is 3, \c{FS} is 4, and \c{GS} is 5.
6600
6601 \b \I{floating-point, registers}Floating-point registers: \c{ST0}
6602 is 0, \c{ST1} is 1, \c{ST2} is 2, \c{ST3} is 3, \c{ST4} is 4,
6603 \c{ST5} is 5, \c{ST6} is 6, and \c{ST7} is 7.
6604
6605 \b 64-bit \i{MMX registers}: \c{MM0} is 0, \c{MM1} is 1, \c{MM2} is 2,
6606 \c{MM3} is 3, \c{MM4} is 4, \c{MM5} is 5, \c{MM6} is 6, and \c{MM7}
6607 is 7.
6608
6609 \b \i{Control registers}: \c{CR0} is 0, \c{CR2} is 2, \c{CR3} is 3,
6610 and \c{CR4} is 4.
6611
6612 \b \i{Debug registers}: \c{DR0} is 0, \c{DR1} is 1, \c{DR2} is 2,
6613 \c{DR3} is 3, \c{DR6} is 6, and \c{DR7} is 7.
6614
6615 \b \i{Test registers}: \c{TR3} is 3, \c{TR4} is 4, \c{TR5} is 5,
6616 \c{TR6} is 6, and \c{TR7} is 7.
6617
6618 (Note that wherever a register name contains a number, that number
6619 is also the register value for that register.)
6620
6621
6622 \S{iref-cc} \i{Condition Codes}
6623
6624 The available condition codes are given here, along with their
6625 numeric representations as part of opcodes. Many of these condition
6626 codes have synonyms, so several will be listed at a time.
6627
6628 In the following descriptions, the word `either', when applied to two
6629 possible trigger conditions, is used to mean `either or both'. If
6630 `either but not both' is meant, the phrase `exactly one of' is used.
6631
6632 \b \c{O} is 0 (trigger if the overflow flag is set); \c{NO} is 1.
6633
6634 \b \c{B}, \c{C} and \c{NAE} are 2 (trigger if the carry flag is
6635 set); \c{AE}, \c{NB} and \c{NC} are 3.
6636
6637 \b \c{E} and \c{Z} are 4 (trigger if the zero flag is set); \c{NE}
6638 and \c{NZ} are 5.
6639
6640 \b \c{BE} and \c{NA} are 6 (trigger if either of the carry or zero
6641 flags is set); \c{A} and \c{NBE} are 7.
6642
6643 \b \c{S} is 8 (trigger if the sign flag is set); \c{NS} is 9.
6644
6645 \b \c{P} and \c{PE} are 10 (trigger if the parity flag is set);
6646 \c{NP} and \c{PO} are 11.
6647
6648 \b \c{L} and \c{NGE} are 12 (trigger if exactly one of the sign and
6649 overflow flags is set); \c{GE} and \c{NL} are 13.
6650
6651 \b \c{LE} and \c{NG} are 14 (trigger if either the zero flag is set,
6652 or exactly one of the sign and overflow flags is set); \c{G} and
6653 \c{NLE} are 15.
6654
6655 Note that in all cases, the sense of a condition code may be
6656 reversed by changing the low bit of the numeric representation.
6657
6658 For details of when an instruction sets each of the status flags,
6659 see the individual instruction, plus the Status Flags reference
6660 in \k{iref-Flags}
6661
6662
6663 \S{iref-SSE-cc} \i{SSE Condition Predicates}
6664
6665 The condition predicates for SSE comparison instructions are the
6666 codes used as part of the opcode, to determine what form of
6667 comparison is being carried out. In each case, the imm8 value is
6668 the final byte of the opcode encoding, and the predicate is the
6669 code used as part of the mnemonic for the instruction (equivalent
6670 to the "cc" in an integer instruction that used a condition code).
6671 The instructions that use this will give details of what the various
6672 mnemonics are, this table is used to help you work out details of what
6673 is happening.
6674
6675 \c Predi-  imm8  Description Relation where:   Emula- Result   QNaN
6676 \c  cate  Encod-             A Is 1st Operand  tion   if NaN   Signal
6677 \c         ing               B Is 2nd Operand         Operand  Invalid
6678 \c
6679 \c EQ     000B   equal       A = B                    False     No
6680 \c
6681 \c LT     001B   less-than   A < B                    False     Yes
6682 \c
6683 \c LE     010B   less-than-  A <= B                   False     Yes
6684 \c                or-equal
6685 \c
6686 \c ---    ----   greater     A > B             Swap   False     Yes
6687 \c               than                          Operands,
6688 \c                                             Use LT
6689 \c
6690 \c ---    ----   greater-    A >= B            Swap   False     Yes
6691 \c               than-or-equal                 Operands,
6692 \c                                             Use LE
6693 \c
6694 \c UNORD  011B   unordered   A, B = Unordered         True      No
6695 \c
6696 \c NEQ    100B   not-equal   A != B                   True      No
6697 \c
6698 \c NLT    101B   not-less-   NOT(A < B)               True      Yes
6699 \c               than
6700 \c
6701 \c NLE    110B   not-less-   NOT(A <= B)              True      Yes
6702 \c               than-or-
6703 \c               equal
6704 \c
6705 \c ---    ----   not-greater NOT(A > B)        Swap   True      Yes
6706 \c               than                          Operands,
6707 \c                                             Use NLT
6708 \c
6709 \c ---    ----   not-greater NOT(A >= B)       Swap   True      Yes
6710 \c               than-                         Operands,
6711 \c               or-equal                      Use NLE
6712 \c
6713 \c ORD    111B   ordered      A , B = Ordered         False     No
6714
6715 The unordered relationship is true when at least one of the two
6716 values being compared is a NaN or in an unsupported format.
6717
6718 Note that the comparisons which are listed as not having a predicate
6719 or encoding can only be achieved through software emulation, as
6720 described in the "emulation" column. Note in particular that an
6721 instruction such as \c{greater-than} is not the same as \c{NLE}, as,
6722 unlike with the \c{CMP} instruction, it has to take into account the
6723 possibility of one operand containing a NaN or an unsupported numeric
6724 format.
6725
6726
6727 \S{iref-Flags} \i{Status Flags}
6728
6729 The status flags provide some information about the result of the
6730 arithmetic instructions. This information can be used by conditional
6731 instructions (such a \c{Jcc} and \c{CMOVcc}) as well as by some of
6732 the other instructions (such as \c{ADC} and \c{INTO}).
6733
6734 There are 6 status flags:
6735
6736 \c CF - Carry flag.
6737
6738 Set if an arithmetic operation generates a
6739 carry or a borrow out of the most-significant bit of the result;
6740 cleared otherwise. This flag indicates an overflow condition for
6741 unsigned-integer arithmetic. It is also used in multiple-precision
6742 arithmetic.
6743
6744 \c PF - Parity flag.
6745
6746 Set if the least-significant byte of the result contains an even
6747 number of 1 bits; cleared otherwise.
6748
6749 \c AF - Adjust flag.
6750
6751 Set if an arithmetic operation generates a carry or a borrow
6752 out of bit 3 of the result; cleared otherwise. This flag is used
6753 in binary-coded decimal (BCD) arithmetic.
6754
6755 \c ZF - Zero flag.
6756
6757 Set if the result is zero; cleared otherwise.
6758
6759 \c SF - Sign flag.
6760
6761 Set equal to the most-significant bit of the result, which is the
6762 sign bit of a signed integer. (0 indicates a positive value and 1
6763 indicates a negative value.)
6764
6765 \c OF - Overflow flag.
6766
6767 Set if the integer result is too large a positive number or too
6768 small a negative number (excluding the sign-bit) to fit in the
6769 destination operand; cleared otherwise. This flag indicates an
6770 overflow condition for signed-integer (two's complement) arithmetic.
6771
6772
6773 \S{iref-ea} Effective Address Encoding: \i{ModR/M} and \i{SIB}
6774
6775 An \i{effective address} is encoded in up to three parts: a ModR/M
6776 byte, an optional SIB byte, and an optional byte, word or doubleword
6777 displacement field.
6778
6779 The ModR/M byte consists of three fields: the \c{mod} field, ranging
6780 from 0 to 3, in the upper two bits of the byte, the \c{r/m} field,
6781 ranging from 0 to 7, in the lower three bits, and the spare
6782 (register) field in the middle (bit 3 to bit 5). The spare field is
6783 not relevant to the effective address being encoded, and either
6784 contains an extension to the instruction opcode or the register
6785 value of another operand.
6786
6787 The ModR/M system can be used to encode a direct register reference
6788 rather than a memory access. This is always done by setting the
6789 \c{mod} field to 3 and the \c{r/m} field to the register value of
6790 the register in question (it must be a general-purpose register, and
6791 the size of the register must already be implicit in the encoding of
6792 the rest of the instruction). In this case, the SIB byte and
6793 displacement field are both absent.
6794
6795 In 16-bit addressing mode (either \c{BITS 16} with no \c{67} prefix,
6796 or \c{BITS 32} with a \c{67} prefix), the SIB byte is never used.
6797 The general rules for \c{mod} and \c{r/m} (there is an exception,
6798 given below) are:
6799
6800 \b The \c{mod} field gives the length of the displacement field: 0
6801 means no displacement, 1 means one byte, and 2 means two bytes.
6802
6803 \b The \c{r/m} field encodes the combination of registers to be
6804 added to the displacement to give the accessed address: 0 means
6805 \c{BX+SI}, 1 means \c{BX+DI}, 2 means \c{BP+SI}, 3 means \c{BP+DI},
6806 4 means \c{SI} only, 5 means \c{DI} only, 6 means \c{BP} only, and 7
6807 means \c{BX} only.
6808
6809 However, there is a special case:
6810
6811 \b If \c{mod} is 0 and \c{r/m} is 6, the effective address encoded
6812 is not \c{[BP]} as the above rules would suggest, but instead
6813 \c{[disp16]}: the displacement field is present and is two bytes
6814 long, and no registers are added to the displacement.
6815
6816 Therefore the effective address \c{[BP]} cannot be encoded as
6817 efficiently as \c{[BX]}; so if you code \c{[BP]} in a program, NASM
6818 adds a notional 8-bit zero displacement, and sets \c{mod} to 1,
6819 \c{r/m} to 6, and the one-byte displacement field to 0.
6820
6821 In 32-bit addressing mode (either \c{BITS 16} with a \c{67} prefix,
6822 or \c{BITS 32} with no \c{67} prefix) the general rules (again,
6823 there are exceptions) for \c{mod} and \c{r/m} are:
6824
6825 \b The \c{mod} field gives the length of the displacement field: 0
6826 means no displacement, 1 means one byte, and 2 means four bytes.
6827
6828 \b If only one register is to be added to the displacement, and it
6829 is not \c{ESP}, the \c{r/m} field gives its register value, and the
6830 SIB byte is absent. If the \c{r/m} field is 4 (which would encode
6831 \c{ESP}), the SIB byte is present and gives the combination and
6832 scaling of registers to be added to the displacement.
6833
6834 If the SIB byte is present, it describes the combination of
6835 registers (an optional base register, and an optional index register
6836 scaled by multiplication by 1, 2, 4 or 8) to be added to the
6837 displacement. The SIB byte is divided into the \c{scale} field, in
6838 the top two bits, the \c{index} field in the next three, and the
6839 \c{base} field in the bottom three. The general rules are:
6840
6841 \b The \c{base} field encodes the register value of the base
6842 register.
6843
6844 \b The \c{index} field encodes the register value of the index
6845 register, unless it is 4, in which case no index register is used
6846 (so \c{ESP} cannot be used as an index register).
6847
6848 \b The \c{scale} field encodes the multiplier by which the index
6849 register is scaled before adding it to the base and displacement: 0
6850 encodes a multiplier of 1, 1 encodes 2, 2 encodes 4 and 3 encodes 8.
6851
6852 The exceptions to the 32-bit encoding rules are:
6853
6854 \b If \c{mod} is 0 and \c{r/m} is 5, the effective address encoded
6855 is not \c{[EBP]} as the above rules would suggest, but instead
6856 \c{[disp32]}: the displacement field is present and is four bytes
6857 long, and no registers are added to the displacement.
6858
6859 \b If \c{mod} is 0, \c{r/m} is 4 (meaning the SIB byte is present)
6860 and \c{base} is 4, the effective address encoded is not
6861 \c{[EBP+index]} as the above rules would suggest, but instead
6862 \c{[disp32+index]}: the displacement field is present and is four
6863 bytes long, and there is no base register (but the index register is
6864 still processed in the normal way).
6865
6866
6867 \H{iref-flg} Key to Instruction Flags
6868
6869 Given along with each instruction in this appendix is a set of
6870 flags, denoting the type of the instruction. The types are as follows:
6871
6872 \b \c{8086}, \c{186}, \c{286}, \c{386}, \c{486}, \c{PENT} and \c{P6}
6873 denote the lowest processor type that supports the instruction. Most
6874 instructions run on all processors above the given type; those that
6875 do not are documented. The Pentium II contains no additional
6876 instructions beyond the P6 (Pentium Pro); from the point of view of
6877 its instruction set, it can be thought of as a P6 with MMX
6878 capability.
6879
6880 \b \c{3DNOW} indicates that the instruction is a 3DNow! one, and will
6881 run on the AMD K6-2 and later processors. ATHLON extensions to the
6882 3DNow! instruction set are documented as such.
6883
6884 \b \c{CYRIX} indicates that the instruction is specific to Cyrix
6885 processors, for example the extra MMX instructions in the Cyrix
6886 extended MMX instruction set.
6887
6888 \b \c{FPU} indicates that the instruction is a floating-point one,
6889 and will only run on machines with a coprocessor (automatically
6890 including 486DX, Pentium and above).
6891
6892 \b \c{KATMAI} indicates that the instruction was introduced as part
6893 of the Katmai New Instruction set. These instructions are available
6894 on the Pentium III and later processors. Those which are not
6895 specifically SSE instructions are also available on the AMD Athlon.
6896
6897 \b \c{MMX} indicates that the instruction is an MMX one, and will
6898 run on MMX-capable Pentium processors and the Pentium II.
6899
6900 \b \c{PRIV} indicates that the instruction is a protected-mode
6901 management instruction. Many of these may only be used in protected
6902 mode, or only at privilege level zero.
6903
6904 \b \c{SSE} and \c{SSE2} indicate that the instruction is a Streaming
6905 SIMD Extension instruction. These instructions operate on multiple
6906 values in a single operation. SSE was introduced with the Pentium III
6907 and SSE2 was introduced with the Pentium 4.
6908
6909 \b \c{UNDOC} indicates that the instruction is an undocumented one,
6910 and not part of the official Intel Architecture; it may or may not
6911 be supported on any given machine.
6912
6913 \b \c{WILLAMETTE} indicates that the instruction was introduced as
6914 part of the new instruction set in the Pentium 4 and Intel Xeon
6915 processors. These instructions are also known as SSE2 instructions.
6916
6917
6918 \H{iref-inst} x86 Instruction Set
6919
6920
6921 \S{insAAA} \i\c{AAA}, \i\c{AAS}, \i\c{AAM}, \i\c{AAD}: ASCII
6922 Adjustments
6923
6924 \c AAA                           ; 37                   [8086]
6925
6926 \c AAS                           ; 3F                   [8086]
6927
6928 \c AAD                           ; D5 0A                [8086]
6929 \c AAD imm                       ; D5 ib                [8086]
6930
6931 \c AAM                           ; D4 0A                [8086]
6932 \c AAM imm                       ; D4 ib                [8086]
6933
6934 These instructions are used in conjunction with the add, subtract,
6935 multiply and divide instructions to perform binary-coded decimal
6936 arithmetic in \e{unpacked} (one BCD digit per byte - easy to
6937 translate to and from \c{ASCII}, hence the instruction names) form.
6938 There are also packed BCD instructions \c{DAA} and \c{DAS}: see
6939 \k{insDAA}.
6940
6941 \b \c{AAA} (ASCII Adjust After Addition) should be used after a
6942 one-byte \c{ADD} instruction whose destination was the \c{AL}
6943 register: by means of examining the value in the low nibble of
6944 \c{AL} and also the auxiliary carry flag \c{AF}, it determines
6945 whether the addition has overflowed, and adjusts it (and sets
6946 the carry flag) if so. You can add long BCD strings together
6947 by doing \c{ADD}/\c{AAA} on the low digits, then doing
6948 \c{ADC}/\c{AAA} on each subsequent digit.
6949
6950 \b \c{AAS} (ASCII Adjust AL After Subtraction) works similarly to
6951 \c{AAA}, but is for use after \c{SUB} instructions rather than
6952 \c{ADD}.
6953
6954 \b \c{AAM} (ASCII Adjust AX After Multiply) is for use after you
6955 have multiplied two decimal digits together and left the result
6956 in \c{AL}: it divides \c{AL} by ten and stores the quotient in
6957 \c{AH}, leaving the remainder in \c{AL}. The divisor 10 can be
6958 changed by specifying an operand to the instruction: a particularly
6959 handy use of this is \c{AAM 16}, causing the two nibbles in \c{AL}
6960 to be separated into \c{AH} and \c{AL}.
6961
6962 \b \c{AAD} (ASCII Adjust AX Before Division) performs the inverse
6963 operation to \c{AAM}: it multiplies \c{AH} by ten, adds it to
6964 \c{AL}, and sets \c{AH} to zero. Again, the multiplier 10 can
6965 be changed.
6966
6967
6968 \S{insADC} \i\c{ADC}: Add with Carry
6969
6970 \c ADC r/m8,reg8                 ; 10 /r                [8086]
6971 \c ADC r/m16,reg16               ; o16 11 /r            [8086]
6972 \c ADC r/m32,reg32               ; o32 11 /r            [386]
6973
6974 \c ADC reg8,r/m8                 ; 12 /r                [8086]
6975 \c ADC reg16,r/m16               ; o16 13 /r            [8086]
6976 \c ADC reg32,r/m32               ; o32 13 /r            [386]
6977
6978 \c ADC r/m8,imm8                 ; 80 /2 ib             [8086]
6979 \c ADC r/m16,imm16               ; o16 81 /2 iw         [8086]
6980 \c ADC r/m32,imm32               ; o32 81 /2 id         [386]
6981
6982 \c ADC r/m16,imm8                ; o16 83 /2 ib         [8086]
6983 \c ADC r/m32,imm8                ; o32 83 /2 ib         [386]
6984
6985 \c ADC AL,imm8                   ; 14 ib                [8086]
6986 \c ADC AX,imm16                  ; o16 15 iw            [8086]
6987 \c ADC EAX,imm32                 ; o32 15 id            [386]
6988
6989 \c{ADC} performs integer addition: it adds its two operands
6990 together, plus the value of the carry flag, and leaves the result in
6991 its destination (first) operand. The destination operand can be a
6992 register or a memory location. The source operand can be a register,
6993 a memory location or an immediate value.
6994
6995 The flags are set according to the result of the operation: in
6996 particular, the carry flag is affected and can be used by a
6997 subsequent \c{ADC} instruction.
6998
6999 In the forms with an 8-bit immediate second operand and a longer
7000 first operand, the second operand is considered to be signed, and is
7001 sign-extended to the length of the first operand. In these cases,
7002 the \c{BYTE} qualifier is necessary to force NASM to generate this
7003 form of the instruction.
7004
7005 To add two numbers without also adding the contents of the carry
7006 flag, use \c{ADD} (\k{insADD}).
7007
7008
7009 \S{insADD} \i\c{ADD}: Add Integers
7010
7011 \c ADD r/m8,reg8                 ; 00 /r                [8086]
7012 \c ADD r/m16,reg16               ; o16 01 /r            [8086]
7013 \c ADD r/m32,reg32               ; o32 01 /r            [386]
7014
7015 \c ADD reg8,r/m8                 ; 02 /r                [8086]
7016 \c ADD reg16,r/m16               ; o16 03 /r            [8086]
7017 \c ADD reg32,r/m32               ; o32 03 /r            [386]
7018
7019 \c ADD r/m8,imm8                 ; 80 /0 ib             [8086]
7020 \c ADD r/m16,imm16               ; o16 81 /0 iw         [8086]
7021 \c ADD r/m32,imm32               ; o32 81 /0 id         [386]
7022
7023 \c ADD r/m16,imm8                ; o16 83 /0 ib         [8086]
7024 \c ADD r/m32,imm8                ; o32 83 /0 ib         [386]
7025
7026 \c ADD AL,imm8                   ; 04 ib                [8086]
7027 \c ADD AX,imm16                  ; o16 05 iw            [8086]
7028 \c ADD EAX,imm32                 ; o32 05 id            [386]
7029
7030 \c{ADD} performs integer addition: it adds its two operands
7031 together, and leaves the result in its destination (first) operand.
7032 The destination operand can be a register or a memory location.
7033 The source operand can be a register, a memory location or an
7034 immediate value.
7035
7036 The flags are set according to the result of the operation: in
7037 particular, the carry flag is affected and can be used by a
7038 subsequent \c{ADC} instruction.
7039
7040 In the forms with an 8-bit immediate second operand and a longer
7041 first operand, the second operand is considered to be signed, and is
7042 sign-extended to the length of the first operand. In these cases,
7043 the \c{BYTE} qualifier is necessary to force NASM to generate this
7044 form of the instruction.
7045
7046
7047 \S{insADDPD} \i\c{ADDPD}: ADD Packed Double-Precision FP Values
7048
7049 \c ADDPD xmm1,xmm2/mem128        ; 66 0F 58 /r     [WILLAMETTE,SSE2]
7050
7051 \c{ADDPD} performs addition on each of two packed double-precision
7052 FP value pairs.
7053
7054 \c    dst[0-63]   := dst[0-63]   + src[0-63],
7055 \c    dst[64-127] := dst[64-127] + src[64-127].
7056
7057 The destination is an \c{XMM} register. The source operand can be
7058 either an \c{XMM} register or a 128-bit memory location.
7059
7060
7061 \S{insADDPS} \i\c{ADDPS}: ADD Packed Single-Precision FP Values
7062
7063 \c ADDPS xmm1,xmm2/mem128        ; 0F 58 /r        [KATMAI,SSE]
7064
7065 \c{ADDPS} performs addition on each of four packed single-precision
7066 FP value pairs
7067
7068 \c    dst[0-31]   := dst[0-31]   + src[0-31],
7069 \c    dst[32-63]  := dst[32-63]  + src[32-63],
7070 \c    dst[64-95]  := dst[64-95]  + src[64-95],
7071 \c    dst[96-127] := dst[96-127] + src[96-127].
7072
7073 The destination is an \c{XMM} register. The source operand can be
7074 either an \c{XMM} register or a 128-bit memory location.
7075
7076
7077 \S{insADDSD} \i\c{ADDSD}: ADD Scalar Double-Precision FP Values
7078
7079 \c ADDSD xmm1,xmm2/mem64         ; F2 0F 58 /r     [KATMAI,SSE]
7080
7081 \c{ADDSD} adds the low double-precision FP values from the source
7082 and destination operands and stores the double-precision FP result
7083 in the destination operand.
7084
7085 \c    dst[0-63]   := dst[0-63] + src[0-63],
7086 \c    dst[64-127) remains unchanged.
7087
7088 The destination is an \c{XMM} register. The source operand can be
7089 either an \c{XMM} register or a 64-bit memory location.
7090
7091
7092 \S{insADDSS} \i\c{ADDSS}: ADD Scalar Single-Precision FP Values
7093
7094 \c ADDSS xmm1,xmm2/mem32         ; F3 0F 58 /r     [WILLAMETTE,SSE2]
7095
7096 \c{ADDSS} adds the low single-precision FP values from the source
7097 and destination operands and stores the single-precision FP result
7098 in the destination operand.
7099
7100 \c    dst[0-31]   := dst[0-31] + src[0-31],
7101 \c    dst[32-127] remains unchanged.
7102
7103 The destination is an \c{XMM} register. The source operand can be
7104 either an \c{XMM} register or a 32-bit memory location.
7105
7106
7107 \S{insAND} \i\c{AND}: Bitwise AND
7108
7109 \c AND r/m8,reg8                 ; 20 /r                [8086]
7110 \c AND r/m16,reg16               ; o16 21 /r            [8086]
7111 \c AND r/m32,reg32               ; o32 21 /r            [386]
7112
7113 \c AND reg8,r/m8                 ; 22 /r                [8086]
7114 \c AND reg16,r/m16               ; o16 23 /r            [8086]
7115 \c AND reg32,r/m32               ; o32 23 /r            [386]
7116
7117 \c AND r/m8,imm8                 ; 80 /4 ib             [8086]
7118 \c AND r/m16,imm16               ; o16 81 /4 iw         [8086]
7119 \c AND r/m32,imm32               ; o32 81 /4 id         [386]
7120
7121 \c AND r/m16,imm8                ; o16 83 /4 ib         [8086]
7122 \c AND r/m32,imm8                ; o32 83 /4 ib         [386]
7123
7124 \c AND AL,imm8                   ; 24 ib                [8086]
7125 \c AND AX,imm16                  ; o16 25 iw            [8086]
7126 \c AND EAX,imm32                 ; o32 25 id            [386]
7127
7128 \c{AND} performs a bitwise AND operation between its two operands
7129 (i.e. each bit of the result is 1 if and only if the corresponding
7130 bits of the two inputs were both 1), and stores the result in the
7131 destination (first) operand. The destination operand can be a
7132 register or a memory location. The source operand can be a register,
7133 a memory location or an immediate value.
7134
7135 In the forms with an 8-bit immediate second operand and a longer
7136 first operand, the second operand is considered to be signed, and is
7137 sign-extended to the length of the first operand. In these cases,
7138 the \c{BYTE} qualifier is necessary to force NASM to generate this
7139 form of the instruction.
7140
7141 The \c{MMX} instruction \c{PAND} (see \k{insPAND}) performs the same
7142 operation on the 64-bit \c{MMX} registers.
7143
7144
7145 \S{insANDNPD} \i\c{ANDNPD}: Bitwise Logical AND NOT of
7146 Packed Double-Precision FP Values
7147
7148 \c ANDNPD xmm1,xmm2/mem128       ; 66 0F 55 /r     [WILLAMETTE,SSE2]
7149
7150 \c{ANDNPD} inverts the bits of the two double-precision
7151 floating-point values in the destination register, and then
7152 performs a logical AND between the two double-precision
7153 floating-point values in the source operand and the temporary
7154 inverted result, storing the result in the destination register.
7155
7156 \c    dst[0-63]   := src[0-63]   AND NOT dst[0-63],
7157 \c    dst[64-127] := src[64-127] AND NOT dst[64-127].
7158
7159 The destination is an \c{XMM} register. The source operand can be
7160 either an \c{XMM} register or a 128-bit memory location.
7161
7162
7163 \S{insANDNPS} \i\c{ANDNPS}: Bitwise Logical AND NOT of
7164 Packed Single-Precision FP Values
7165
7166 \c ANDNPS xmm1,xmm2/mem128       ; 0F 55 /r        [KATMAI,SSE]
7167
7168 \c{ANDNPS} inverts the bits of the four single-precision
7169 floating-point values in the destination register, and then
7170 performs a logical AND between the four single-precision
7171 floating-point values in the source operand and the temporary
7172 inverted result, storing the result in the destination register.
7173
7174 \c    dst[0-31]   := src[0-31]   AND NOT dst[0-31],
7175 \c    dst[32-63]  := src[32-63]  AND NOT dst[32-63],
7176 \c    dst[64-95]  := src[64-95]  AND NOT dst[64-95],
7177 \c    dst[96-127] := src[96-127] AND NOT dst[96-127].
7178
7179 The destination is an \c{XMM} register. The source operand can be
7180 either an \c{XMM} register or a 128-bit memory location.
7181
7182
7183 \S{insANDPD} \i\c{ANDPD}: Bitwise Logical AND For Single FP
7184
7185 \c ANDPD xmm1,xmm2/mem128        ; 66 0F 54 /r     [WILLAMETTE,SSE2]
7186
7187 \c{ANDPD} performs a bitwise logical AND of the two double-precision
7188 floating point values in the source and destination operand, and
7189 stores the result in the destination register.
7190
7191 \c    dst[0-63]   := src[0-63]   AND dst[0-63],
7192 \c    dst[64-127] := src[64-127] AND dst[64-127].
7193
7194 The destination is an \c{XMM} register. The source operand can be
7195 either an \c{XMM} register or a 128-bit memory location.
7196
7197
7198 \S{insANDPS} \i\c{ANDPS}: Bitwise Logical AND For Single FP
7199
7200 \c ANDPS xmm1,xmm2/mem128        ; 0F 54 /r        [KATMAI,SSE]
7201
7202 \c{ANDPS} performs a bitwise logical AND of the four single-precision
7203 floating point values in the source and destination operand, and
7204 stores the result in the destination register.
7205
7206 \c    dst[0-31]   := src[0-31]   AND dst[0-31],
7207 \c    dst[32-63]  := src[32-63]  AND dst[32-63],
7208 \c    dst[64-95]  := src[64-95]  AND dst[64-95],
7209 \c    dst[96-127] := src[96-127] AND dst[96-127].
7210
7211 The destination is an \c{XMM} register. The source operand can be
7212 either an \c{XMM} register or a 128-bit memory location.
7213
7214
7215 \S{insARPL} \i\c{ARPL}: Adjust RPL Field of Selector
7216
7217 \c ARPL r/m16,reg16              ; 63 /r                [286,PRIV]
7218
7219 \c{ARPL} expects its two word operands to be segment selectors. It
7220 adjusts the \i\c{RPL} (requested privilege level - stored in the bottom
7221 two bits of the selector) field of the destination (first) operand
7222 to ensure that it is no less (i.e. no more privileged than) the \c{RPL}
7223 field of the source operand. The zero flag is set if and only if a
7224 change had to be made.
7225
7226
7227 \S{insBOUND} \i\c{BOUND}: Check Array Index against Bounds
7228
7229 \c BOUND reg16,mem               ; o16 62 /r            [186]
7230 \c BOUND reg32,mem               ; o32 62 /r            [386]
7231
7232 \c{BOUND} expects its second operand to point to an area of memory
7233 containing two signed values of the same size as its first operand
7234 (i.e. two words for the 16-bit form; two doublewords for the 32-bit
7235 form). It performs two signed comparisons: if the value in the
7236 register passed as its first operand is less than the first of the
7237 in-memory values, or is greater than or equal to the second, it
7238 throws a \c{BR} exception. Otherwise, it does nothing.
7239
7240
7241 \S{insBSF} \i\c{BSF}, \i\c{BSR}: Bit Scan
7242
7243 \c BSF reg16,r/m16               ; o16 0F BC /r         [386]
7244 \c BSF reg32,r/m32               ; o32 0F BC /r         [386]
7245
7246 \c BSR reg16,r/m16               ; o16 0F BD /r         [386]
7247 \c BSR reg32,r/m32               ; o32 0F BD /r         [386]
7248
7249 \b \c{BSF} searches for the least significant set bit in its source
7250 (second) operand, and if it finds one, stores the index in
7251 its destination (first) operand. If no set bit is found, the
7252 contents of the destination operand are undefined. If the source
7253 operand is zero, the zero flag is set.
7254
7255 \b \c{BSR} performs the same function, but searches from the top
7256 instead, so it finds the most significant set bit.
7257
7258 Bit indices are from 0 (least significant) to 15 or 31 (most
7259 significant). The destination operand can only be a register.
7260 The source operand can be a register or a memory location.
7261
7262
7263 \S{insBSWAP} \i\c{BSWAP}: Byte Swap
7264
7265 \c BSWAP reg32                   ; o32 0F C8+r          [486]
7266
7267 \c{BSWAP} swaps the order of the four bytes of a 32-bit register:
7268 bits 0-7 exchange places with bits 24-31, and bits 8-15 swap with
7269 bits 16-23. There is no explicit 16-bit equivalent: to byte-swap
7270 \c{AX}, \c{BX}, \c{CX} or \c{DX}, \c{XCHG} can be used. When \c{BSWAP}
7271 is used with a 16-bit register, the result is undefined.
7272
7273
7274 \S{insBT} \i\c{BT}, \i\c{BTC}, \i\c{BTR}, \i\c{BTS}: Bit Test
7275
7276 \c BT r/m16,reg16                ; o16 0F A3 /r         [386]
7277 \c BT r/m32,reg32                ; o32 0F A3 /r         [386]
7278 \c BT r/m16,imm8                 ; o16 0F BA /4 ib      [386]
7279 \c BT r/m32,imm8                 ; o32 0F BA /4 ib      [386]
7280
7281 \c BTC r/m16,reg16               ; o16 0F BB /r         [386]
7282 \c BTC r/m32,reg32               ; o32 0F BB /r         [386]
7283 \c BTC r/m16,imm8                ; o16 0F BA /7 ib      [386]
7284 \c BTC r/m32,imm8                ; o32 0F BA /7 ib      [386]
7285
7286 \c BTR r/m16,reg16               ; o16 0F B3 /r         [386]
7287 \c BTR r/m32,reg32               ; o32 0F B3 /r         [386]
7288 \c BTR r/m16,imm8                ; o16 0F BA /6 ib      [386]
7289 \c BTR r/m32,imm8                ; o32 0F BA /6 ib      [386]
7290
7291 \c BTS r/m16,reg16               ; o16 0F AB /r         [386]
7292 \c BTS r/m32,reg32               ; o32 0F AB /r         [386]
7293 \c BTS r/m16,imm                 ; o16 0F BA /5 ib      [386]
7294 \c BTS r/m32,imm                 ; o32 0F BA /5 ib      [386]
7295
7296 These instructions all test one bit of their first operand, whose
7297 index is given by the second operand, and store the value of that
7298 bit into the carry flag. Bit indices are from 0 (least significant)
7299 to 15 or 31 (most significant).
7300
7301 In addition to storing the original value of the bit into the carry
7302 flag, \c{BTR} also resets (clears) the bit in the operand itself.
7303 \c{BTS} sets the bit, and \c{BTC} complements the bit. \c{BT} does
7304 not modify its operands.
7305
7306 The destination can be a register or a memory location. The source can
7307 be a register or an immediate value.
7308
7309 If the destination operand is a register, the bit offset should be
7310 in the range 0-15 (for 16-bit operands) or 0-31 (for 32-bit operands).
7311 An immediate value outside these ranges will be taken modulo 16/32
7312 by the processor.
7313
7314 If the destination operand is a memory location, then an immediate
7315 bit offset follows the same rules as for a register. If the bit offset
7316 is in a register, then it can be anything within the signed range of
7317 the register used (ie, for a 32-bit operand, it can be (-2^31) to (2^31 - 1)
7318
7319
7320 \S{insCALL} \i\c{CALL}: Call Subroutine
7321
7322 \c CALL imm                      ; E8 rw/rd             [8086]
7323 \c CALL imm:imm16                ; o16 9A iw iw         [8086]
7324 \c CALL imm:imm32                ; o32 9A id iw         [386]
7325 \c CALL FAR mem16                ; o16 FF /3            [8086]
7326 \c CALL FAR mem32                ; o32 FF /3            [386]
7327 \c CALL r/m16                    ; o16 FF /2            [8086]
7328 \c CALL r/m32                    ; o32 FF /2            [386]
7329
7330 \c{CALL} calls a subroutine, by means of pushing the current
7331 instruction pointer (\c{IP}) and optionally \c{CS} as well on the
7332 stack, and then jumping to a given address.
7333
7334 \c{CS} is pushed as well as \c{IP} if and only if the call is a far
7335 call, i.e. a destination segment address is specified in the
7336 instruction. The forms involving two colon-separated arguments are
7337 far calls; so are the \c{CALL FAR mem} forms.
7338
7339 The immediate \i{near call} takes one of two forms (\c{call imm16/imm32},
7340 determined by the current segment size limit. For 16-bit operands,
7341 you would use \c{CALL 0x1234}, and for 32-bit operands you would use
7342 \c{CALL 0x12345678}. The value passed as an operand is a relative offset.
7343
7344 You can choose between the two immediate \i{far call} forms
7345 (\c{CALL imm:imm}) by the use of the \c{WORD} and \c{DWORD} keywords:
7346 \c{CALL WORD 0x1234:0x5678}) or \c{CALL DWORD 0x1234:0x56789abc}.
7347
7348 The \c{CALL FAR mem} forms execute a far call by loading the
7349 destination address out of memory. The address loaded consists of 16
7350 or 32 bits of offset (depending on the operand size), and 16 bits of
7351 segment. The operand size may be overridden using \c{CALL WORD FAR
7352 mem} or \c{CALL DWORD FAR mem}.
7353
7354 The \c{CALL r/m} forms execute a \i{near call} (within the same
7355 segment), loading the destination address out of memory or out of a
7356 register. The keyword \c{NEAR} may be specified, for clarity, in
7357 these forms, but is not necessary. Again, operand size can be
7358 overridden using \c{CALL WORD mem} or \c{CALL DWORD mem}.
7359
7360 As a convenience, NASM does not require you to call a far procedure
7361 symbol by coding the cumbersome \c{CALL SEG routine:routine}, but
7362 instead allows the easier synonym \c{CALL FAR routine}.
7363
7364 The \c{CALL r/m} forms given above are near calls; NASM will accept
7365 the \c{NEAR} keyword (e.g. \c{CALL NEAR [address]}), even though it
7366 is not strictly necessary.
7367
7368
7369 \S{insCBW} \i\c{CBW}, \i\c{CWD}, \i\c{CDQ}, \i\c{CWDE}: Sign Extensions
7370
7371 \c CBW                           ; o16 98               [8086]
7372 \c CWDE                          ; o32 98               [386]
7373
7374 \c CWD                           ; o16 99               [8086]
7375 \c CDQ                           ; o32 99               [386]
7376
7377 All these instructions sign-extend a short value into a longer one,
7378 by replicating the top bit of the original value to fill the
7379 extended one.
7380
7381 \c{CBW} extends \c{AL} into \c{AX} by repeating the top bit of
7382 \c{AL} in every bit of \c{AH}. \c{CWDE} extends \c{AX} into
7383 \c{EAX}. \c{CWD} extends \c{AX} into \c{DX:AX} by repeating
7384 the top bit of \c{AX} throughout \c{DX}, and \c{CDQ} extends
7385 \c{EAX} into \c{EDX:EAX}.
7386
7387
7388 \S{insCLC} \i\c{CLC}, \i\c{CLD}, \i\c{CLI}, \i\c{CLTS}: Clear Flags
7389
7390 \c CLC                           ; F8                   [8086]
7391 \c CLD                           ; FC                   [8086]
7392 \c CLI                           ; FA                   [8086]
7393 \c CLTS                          ; 0F 06                [286,PRIV]
7394
7395 These instructions clear various flags. \c{CLC} clears the carry
7396 flag; \c{CLD} clears the direction flag; \c{CLI} clears the
7397 interrupt flag (thus disabling interrupts); and \c{CLTS} clears the
7398 task-switched (\c{TS}) flag in \c{CR0}.
7399
7400 To set the carry, direction, or interrupt flags, use the \c{STC},
7401 \c{STD} and \c{STI} instructions (\k{insSTC}). To invert the carry
7402 flag, use \c{CMC} (\k{insCMC}).
7403
7404
7405 \S{insCLFLUSH} \i\c{CLFLUSH}: Flush Cache Line
7406
7407 \c CLFLUSH mem                   ; 0F AE /7        [WILLAMETTE,SSE2]
7408
7409 \c{CLFLUSH} invalidates the cache line that contains the linear address
7410 specified by the source operand from all levels of the processor cache
7411 hierarchy (data and instruction). If, at any level of the cache
7412 hierarchy, the line is inconsistent with memory (dirty) it is written
7413 to memory before invalidation. The source operand points to a
7414 byte-sized memory location.
7415
7416 Although \c{CLFLUSH} is flagged \c{SSE2} and above, it may not be
7417 present on all processors which have \c{SSE2} support, and it may be
7418 supported on other processors; the \c{CPUID} instruction (\k{insCPUID})
7419 will return a bit which indicates support for the \c{CLFLUSH} instruction.
7420
7421
7422 \S{insCMC} \i\c{CMC}: Complement Carry Flag
7423
7424 \c CMC                           ; F5                   [8086]
7425
7426 \c{CMC} changes the value of the carry flag: if it was 0, it sets it
7427 to 1, and vice versa.
7428
7429
7430 \S{insCMOVcc} \i\c{CMOVcc}: Conditional Move
7431
7432 \c CMOVcc reg16,r/m16            ; o16 0F 40+cc /r      [P6]
7433 \c CMOVcc reg32,r/m32            ; o32 0F 40+cc /r      [P6]
7434
7435 \c{CMOV} moves its source (second) operand into its destination
7436 (first) operand if the given condition code is satisfied; otherwise
7437 it does nothing.
7438
7439 For a list of condition codes, see \k{iref-cc}.
7440
7441 Although the \c{CMOV} instructions are flagged \c{P6} and above, they
7442 may not be supported by all Pentium Pro processors; the \c{CPUID}
7443 instruction (\k{insCPUID}) will return a bit which indicates whether
7444 conditional moves are supported.
7445
7446
7447 \S{insCMP} \i\c{CMP}: Compare Integers
7448
7449 \c CMP r/m8,reg8                 ; 38 /r                [8086]
7450 \c CMP r/m16,reg16               ; o16 39 /r            [8086]
7451 \c CMP r/m32,reg32               ; o32 39 /r            [386]
7452
7453 \c CMP reg8,r/m8                 ; 3A /r                [8086]
7454 \c CMP reg16,r/m16               ; o16 3B /r            [8086]
7455 \c CMP reg32,r/m32               ; o32 3B /r            [386]
7456
7457 \c CMP r/m8,imm8                 ; 80 /0 ib             [8086]
7458 \c CMP r/m16,imm16               ; o16 81 /0 iw         [8086]
7459 \c CMP r/m32,imm32               ; o32 81 /0 id         [386]
7460
7461 \c CMP r/m16,imm8                ; o16 83 /0 ib         [8086]
7462 \c CMP r/m32,imm8                ; o32 83 /0 ib         [386]
7463
7464 \c CMP AL,imm8                   ; 3C ib                [8086]
7465 \c CMP AX,imm16                  ; o16 3D iw            [8086]
7466 \c CMP EAX,imm32                 ; o32 3D id            [386]
7467
7468 \c{CMP} performs a `mental' subtraction of its second operand from
7469 its first operand, and affects the flags as if the subtraction had
7470 taken place, but does not store the result of the subtraction
7471 anywhere.
7472
7473 In the forms with an 8-bit immediate second operand and a longer
7474 first operand, the second operand is considered to be signed, and is
7475 sign-extended to the length of the first operand. In these cases,
7476 the \c{BYTE} qualifier is necessary to force NASM to generate this
7477 form of the instruction.
7478
7479 The destination operand can be a register or a memory location. The
7480 source can be a register, memory location or an immediate value of
7481 the same size as the destination.
7482
7483
7484 \S{insCMPccPD} \i\c{CMPccPD}: Packed Double-Precision FP Compare
7485 \I\c{CMPEQPD} \I\c{CMPLTPD} \I\c{CMPLEPD} \I\c{CMPUNORDPD}
7486 \I\c{CMPNEQPD} \I\c{CMPNLTPD} \I\c{CMPNLEPD} \I\c{CMPORDPD}
7487
7488 \c CMPPD xmm1,xmm2/mem128,imm8   ; 66 0F C2 /r ib  [WILLAMETTE,SSE2]
7489
7490 \c CMPEQPD xmm1,xmm2/mem128      ; 66 0F C2 /r 00  [WILLAMETTE,SSE2]
7491 \c CMPLTPD xmm1,xmm2/mem128      ; 66 0F C2 /r 01  [WILLAMETTE,SSE2]
7492 \c CMPLEPD xmm1,xmm2/mem128      ; 66 0F C2 /r 02  [WILLAMETTE,SSE2]
7493 \c CMPUNORDPD xmm1,xmm2/mem128   ; 66 0F C2 /r 03  [WILLAMETTE,SSE2]
7494 \c CMPNEQPD xmm1,xmm2/mem128     ; 66 0F C2 /r 04  [WILLAMETTE,SSE2]
7495 \c CMPNLTPD xmm1,xmm2/mem128     ; 66 0F C2 /r 05  [WILLAMETTE,SSE2]
7496 \c CMPNLEPD xmm1,xmm2/mem128     ; 66 0F C2 /r 06  [WILLAMETTE,SSE2]
7497 \c CMPORDPD xmm1,xmm2/mem128     ; 66 0F C2 /r 07  [WILLAMETTE,SSE2]
7498
7499 The \c{CMPccPD} instructions compare the two packed double-precision
7500 FP values in the source and destination operands, and returns the
7501 result of the comparison in the destination register. The result of
7502 each comparison is a quadword mask of all 1s (comparison true) or
7503 all 0s (comparison false).
7504
7505 The destination is an \c{XMM} register. The source can be either an
7506 \c{XMM} register or a 128-bit memory location.
7507
7508 The third operand is an 8-bit immediate value, of which the low 3
7509 bits define the type of comparison. For ease of programming, the
7510 8 two-operand pseudo-instructions are provided, with the third
7511 operand already filled in. The \I{Condition Predicates}
7512 \c{Condition Predicates} are:
7513
7514 \c EQ     0   Equal
7515 \c LT     1   Less-than
7516 \c LE     2   Less-than-or-equal
7517 \c UNORD  3   Unordered
7518 \c NE     4   Not-equal
7519 \c NLT    5   Not-less-than
7520 \c NLE    6   Not-less-than-or-equal
7521 \c ORD    7   Ordered
7522
7523 For more details of the comparison predicates, and details of how
7524 to emulate the "greater-than" equivalents, see \k{iref-SSE-cc}
7525
7526
7527 \S{insCMPccPS} \i\c{CMPccPS}: Packed Single-Precision FP Compare
7528 \I\c{CMPEQPS} \I\c{CMPLTPS} \I\c{CMPLEPS} \I\c{CMPUNORDPS}
7529 \I\c{CMPNEQPS} \I\c{CMPNLTPS} \I\c{CMPNLEPS} \I\c{CMPORDPS}
7530
7531 \c CMPPS xmm1,xmm2/mem128,imm8   ; 0F C2 /r ib     [KATMAI,SSE]
7532
7533 \c CMPEQPS xmm1,xmm2/mem128      ; 0F C2 /r 00     [KATMAI,SSE]
7534 \c CMPLTPS xmm1,xmm2/mem128      ; 0F C2 /r 01     [KATMAI,SSE]
7535 \c CMPLEPS xmm1,xmm2/mem128      ; 0F C2 /r 02     [KATMAI,SSE]
7536 \c CMPUNORDPS xmm1,xmm2/mem128   ; 0F C2 /r 03     [KATMAI,SSE]
7537 \c CMPNEQPS xmm1,xmm2/mem128     ; 0F C2 /r 04     [KATMAI,SSE]
7538 \c CMPNLTPS xmm1,xmm2/mem128     ; 0F C2 /r 05     [KATMAI,SSE]
7539 \c CMPNLEPS xmm1,xmm2/mem128     ; 0F C2 /r 06     [KATMAI,SSE]
7540 \c CMPORDPS xmm1,xmm2/mem128     ; 0F C2 /r 07     [KATMAI,SSE]
7541
7542 The \c{CMPccPS} instructions compare the two packed single-precision
7543 FP values in the source and destination operands, and returns the
7544 result of the comparison in the destination register. The result of
7545 each comparison is a doubleword mask of all 1s (comparison true) or
7546 all 0s (comparison false).
7547
7548 The destination is an \c{XMM} register. The source can be either an
7549 \c{XMM} register or a 128-bit memory location.
7550
7551 The third operand is an 8-bit immediate value, of which the low 3
7552 bits define the type of comparison. For ease of programming, the
7553 8 two-operand pseudo-instructions are provided, with the third
7554 operand already filled in. The \I{Condition Predicates}
7555 \c{Condition Predicates} are:
7556
7557 \c EQ     0   Equal
7558 \c LT     1   Less-than
7559 \c LE     2   Less-than-or-equal
7560 \c UNORD  3   Unordered
7561 \c NE     4   Not-equal
7562 \c NLT    5   Not-less-than
7563 \c NLE    6   Not-less-than-or-equal
7564 \c ORD    7   Ordered
7565
7566 For more details of the comparison predicates, and details of how
7567 to emulate the "greater-than" equivalents, see \k{iref-SSE-cc}
7568
7569
7570 \S{insCMPSB} \i\c{CMPSB}, \i\c{CMPSW}, \i\c{CMPSD}: Compare Strings
7571
7572 \c CMPSB                         ; A6                   [8086]
7573 \c CMPSW                         ; o16 A7               [8086]
7574 \c CMPSD                         ; o32 A7               [386]
7575
7576 \c{CMPSB} compares the byte at \c{[DS:SI]} or \c{[DS:ESI]} with the
7577 byte at \c{[ES:DI]} or \c{[ES:EDI]}, and sets the flags accordingly.
7578 It then increments or decrements (depending on the direction flag:
7579 increments if the flag is clear, decrements if it is set) \c{SI} and
7580 \c{DI} (or \c{ESI} and \c{EDI}).
7581
7582 The registers used are \c{SI} and \c{DI} if the address size is 16
7583 bits, and \c{ESI} and \c{EDI} if it is 32 bits. If you need to use
7584 an address size not equal to the current \c{BITS} setting, you can
7585 use an explicit \i\c{a16} or \i\c{a32} prefix.
7586
7587 The segment register used to load from \c{[SI]} or \c{[ESI]} can be
7588 overridden by using a segment register name as a prefix (for
7589 example, \c{ES CMPSB}). The use of \c{ES} for the load from \c{[DI]}
7590 or \c{[EDI]} cannot be overridden.
7591
7592 \c{CMPSW} and \c{CMPSD} work in the same way, but they compare a
7593 word or a doubleword instead of a byte, and increment or decrement
7594 the addressing registers by 2 or 4 instead of 1.
7595
7596 The \c{REPE} and \c{REPNE} prefixes (equivalently, \c{REPZ} and
7597 \c{REPNZ}) may be used to repeat the instruction up to \c{CX} (or
7598 \c{ECX} - again, the address size chooses which) times until the
7599 first unequal or equal byte is found.
7600
7601
7602 \S{insCMPccSD} \i\c{CMPccSD}: Scalar Double-Precision FP Compare
7603 \I\c{CMPEQSD} \I\c{CMPLTSD} \I\c{CMPLESD} \I\c{CMPUNORDSD}
7604 \I\c{CMPNEQSD} \I\c{CMPNLTSD} \I\c{CMPNLESD} \I\c{CMPORDSD}
7605
7606 \c CMPSD xmm1,xmm2/mem64,imm8    ; F2 0F C2 /r ib  [WILLAMETTE,SSE2]
7607
7608 \c CMPEQSD xmm1,xmm2/mem64       ; F2 0F C2 /r 00  [WILLAMETTE,SSE2]
7609 \c CMPLTSD xmm1,xmm2/mem64       ; F2 0F C2 /r 01  [WILLAMETTE,SSE2]
7610 \c CMPLESD xmm1,xmm2/mem64       ; F2 0F C2 /r 02  [WILLAMETTE,SSE2]
7611 \c CMPUNORDSD xmm1,xmm2/mem64    ; F2 0F C2 /r 03  [WILLAMETTE,SSE2]
7612 \c CMPNEQSD xmm1,xmm2/mem64      ; F2 0F C2 /r 04  [WILLAMETTE,SSE2]
7613 \c CMPNLTSD xmm1,xmm2/mem64      ; F2 0F C2 /r 05  [WILLAMETTE,SSE2]
7614 \c CMPNLESD xmm1,xmm2/mem64      ; F2 0F C2 /r 06  [WILLAMETTE,SSE2]
7615 \c CMPORDSD xmm1,xmm2/mem64      ; F2 0F C2 /r 07  [WILLAMETTE,SSE2]
7616
7617 The \c{CMPccSD} instructions compare the low-order double-precision
7618 FP values in the source and destination operands, and returns the
7619 result of the comparison in the destination register. The result of
7620 each comparison is a quadword mask of all 1s (comparison true) or
7621 all 0s (comparison false).
7622
7623 The destination is an \c{XMM} register. The source can be either an
7624 \c{XMM} register or a 128-bit memory location.
7625
7626 The third operand is an 8-bit immediate value, of which the low 3
7627 bits define the type of comparison. For ease of programming, the
7628 8 two-operand pseudo-instructions are provided, with the third
7629 operand already filled in. The \I{Condition Predicates}
7630 \c{Condition Predicates} are:
7631
7632 \c EQ     0   Equal
7633 \c LT     1   Less-than
7634 \c LE     2   Less-than-or-equal
7635 \c UNORD  3   Unordered
7636 \c NE     4   Not-equal
7637 \c NLT    5   Not-less-than
7638 \c NLE    6   Not-less-than-or-equal
7639 \c ORD    7   Ordered
7640
7641 For more details of the comparison predicates, and details of how
7642 to emulate the "greater-than" equivalents, see \k{iref-SSE-cc}
7643
7644
7645 \S{insCMPccSS} \i\c{CMPccSS}: Scalar Single-Precision FP Compare
7646 \I\c{CMPEQSS} \I\c{CMPLTSS} \I\c{CMPLESS} \I\c{CMPUNORDSS}
7647 \I\c{CMPNEQSS} \I\c{CMPNLTSS} \I\c{CMPNLESS} \I\c{CMPORDSS}
7648
7649 \c CMPSS xmm1,xmm2/mem32,imm8    ; F3 0F C2 /r ib  [KATMAI,SSE]
7650
7651 \c CMPEQSS xmm1,xmm2/mem32       ; F3 0F C2 /r 00  [KATMAI,SSE]
7652 \c CMPLTSS xmm1,xmm2/mem32       ; F3 0F C2 /r 01  [KATMAI,SSE]
7653 \c CMPLESS xmm1,xmm2/mem32       ; F3 0F C2 /r 02  [KATMAI,SSE]
7654 \c CMPUNORDSS xmm1,xmm2/mem32    ; F3 0F C2 /r 03  [KATMAI,SSE]
7655 \c CMPNEQSS xmm1,xmm2/mem32      ; F3 0F C2 /r 04  [KATMAI,SSE]
7656 \c CMPNLTSS xmm1,xmm2/mem32      ; F3 0F C2 /r 05  [KATMAI,SSE]
7657 \c CMPNLESS xmm1,xmm2/mem32      ; F3 0F C2 /r 06  [KATMAI,SSE]
7658 \c CMPORDSS xmm1,xmm2/mem32      ; F3 0F C2 /r 07  [KATMAI,SSE]
7659
7660 The \c{CMPccSS} instructions compare the low-order single-precision
7661 FP values in the source and destination operands, and returns the
7662 result of the comparison in the destination register. The result of
7663 each comparison is a doubleword mask of all 1s (comparison true) or
7664 all 0s (comparison false).
7665
7666 The destination is an \c{XMM} register. The source can be either an
7667 \c{XMM} register or a 128-bit memory location.
7668
7669 The third operand is an 8-bit immediate value, of which the low 3
7670 bits define the type of comparison. For ease of programming, the
7671 8 two-operand pseudo-instructions are provided, with the third
7672 operand already filled in. The \I{Condition Predicates}
7673 \c{Condition Predicates} are:
7674
7675 \c EQ     0   Equal
7676 \c LT     1   Less-than
7677 \c LE     2   Less-than-or-equal
7678 \c UNORD  3   Unordered
7679 \c NE     4   Not-equal
7680 \c NLT    5   Not-less-than
7681 \c NLE    6   Not-less-than-or-equal
7682 \c ORD    7   Ordered
7683
7684 For more details of the comparison predicates, and details of how
7685 to emulate the "greater-than" equivalents, see \k{iref-SSE-cc}
7686
7687
7688 \S{insCMPXCHG} \i\c{CMPXCHG}, \i\c{CMPXCHG486}: Compare and Exchange
7689
7690 \c CMPXCHG r/m8,reg8             ; 0F B0 /r             [PENT]
7691 \c CMPXCHG r/m16,reg16           ; o16 0F B1 /r         [PENT]
7692 \c CMPXCHG r/m32,reg32           ; o32 0F B1 /r         [PENT]
7693
7694 \c CMPXCHG486 r/m8,reg8          ; 0F A6 /r             [486,UNDOC]
7695 \c CMPXCHG486 r/m16,reg16        ; o16 0F A7 /r         [486,UNDOC]
7696 \c CMPXCHG486 r/m32,reg32        ; o32 0F A7 /r         [486,UNDOC]
7697
7698 These two instructions perform exactly the same operation; however,
7699 apparently some (not all) 486 processors support it under a
7700 non-standard opcode, so NASM provides the undocumented
7701 \c{CMPXCHG486} form to generate the non-standard opcode.
7702
7703 \c{CMPXCHG} compares its destination (first) operand to the value in
7704 \c{AL}, \c{AX} or \c{EAX} (depending on the operand size of the
7705 instruction). If they are equal, it copies its source (second)
7706 operand into the destination and sets the zero flag. Otherwise, it
7707 clears the zero flag and copies the destination register to AL, AX or EAX.
7708
7709 The destination can be either a register or a memory location. The
7710 source is a register.
7711
7712 \c{CMPXCHG} is intended to be used for atomic operations in
7713 multitasking or multiprocessor environments. To safely update a
7714 value in shared memory, for example, you might load the value into
7715 \c{EAX}, load the updated value into \c{EBX}, and then execute the
7716 instruction \c{LOCK CMPXCHG [value],EBX}. If \c{value} has not
7717 changed since being loaded, it is updated with your desired new
7718 value, and the zero flag is set to let you know it has worked. (The
7719 \c{LOCK} prefix prevents another processor doing anything in the
7720 middle of this operation: it guarantees atomicity.) However, if
7721 another processor has modified the value in between your load and
7722 your attempted store, the store does not happen, and you are
7723 notified of the failure by a cleared zero flag, so you can go round
7724 and try again.
7725
7726
7727 \S{insCMPXCHG8B} \i\c{CMPXCHG8B}: Compare and Exchange Eight Bytes
7728
7729 \c CMPXCHG8B mem                 ; 0F C7 /1             [PENT]
7730
7731 This is a larger and more unwieldy version of \c{CMPXCHG}: it
7732 compares the 64-bit (eight-byte) value stored at \c{[mem]} with the
7733 value in \c{EDX:EAX}. If they are equal, it sets the zero flag and
7734 stores \c{ECX:EBX} into the memory area. If they are unequal, it
7735 clears the zero flag and stores the memory contents into \c{EDX:EAX}.
7736
7737 \c{CMPXCHG8B} can be used with the \c{LOCK} prefix, to allow atomic
7738 execution. This is useful in multi-processor and multi-tasking
7739 environments.
7740
7741
7742 \S{insCOMISD} \i\c{COMISD}: Scalar Ordered Double-Precision FP Compare and Set EFLAGS
7743
7744 \c COMISD xmm1,xmm2/mem64        ; 66 0F 2F /r     [WILLAMETTE,SSE2]
7745
7746 \c{COMISD} compares the low-order double-precision FP value in the
7747 two source operands. ZF, PF and CF are set according to the result.
7748 OF, AF and AF are cleared. The unordered result is returned if either
7749 source is a NaN (QNaN or SNaN).
7750
7751 The destination operand is an \c{XMM} register. The source can be either
7752 an \c{XMM} register or a memory location.
7753
7754 The flags are set according to the following rules:
7755
7756 \c    Result          Flags        Values
7757
7758 \c    UNORDERED:      ZF,PF,CF <-- 111;
7759 \c    GREATER_THAN:   ZF,PF,CF <-- 000;
7760 \c    LESS_THAN:      ZF,PF,CF <-- 001;
7761 \c    EQUAL:          ZF,PF,CF <-- 100;
7762
7763
7764 \S{insCOMISS} \i\c{COMISS}: Scalar Ordered Single-Precision FP Compare and Set EFLAGS
7765
7766 \c COMISS xmm1,xmm2/mem32        ; 66 0F 2F /r     [KATMAI,SSE]
7767
7768 \c{COMISS} compares the low-order single-precision FP value in the
7769 two source operands. ZF, PF and CF are set according to the result.
7770 OF, AF and AF are cleared. The unordered result is returned if either
7771 source is a NaN (QNaN or SNaN).
7772
7773 The destination operand is an \c{XMM} register. The source can be either
7774 an \c{XMM} register or a memory location.
7775
7776 The flags are set according to the following rules:
7777
7778 \c    Result          Flags        Values
7779
7780 \c    UNORDERED:      ZF,PF,CF <-- 111;
7781 \c    GREATER_THAN:   ZF,PF,CF <-- 000;
7782 \c    LESS_THAN:      ZF,PF,CF <-- 001;
7783 \c    EQUAL:          ZF,PF,CF <-- 100;
7784
7785
7786 \S{insCPUID} \i\c{CPUID}: Get CPU Identification Code
7787
7788 \c CPUID                         ; 0F A2                [PENT]
7789
7790 \c{CPUID} returns various information about the processor it is
7791 being executed on. It fills the four registers \c{EAX}, \c{EBX},
7792 \c{ECX} and \c{EDX} with information, which varies depending on the
7793 input contents of \c{EAX}.
7794
7795 \c{CPUID} also acts as a barrier to serialise instruction execution:
7796 executing the \c{CPUID} instruction guarantees that all the effects
7797 (memory modification, flag modification, register modification) of
7798 previous instructions have been completed before the next
7799 instruction gets fetched.
7800
7801 The information returned is as follows:
7802
7803 \b If \c{EAX} is zero on input, \c{EAX} on output holds the maximum
7804 acceptable input value of \c{EAX}, and \c{EBX:EDX:ECX} contain the
7805 string \c{"GenuineIntel"} (or not, if you have a clone processor).
7806 That is to say, \c{EBX} contains \c{"Genu"} (in NASM's own sense of
7807 character constants, described in \k{chrconst}), \c{EDX} contains
7808 \c{"ineI"} and \c{ECX} contains \c{"ntel"}.
7809
7810 \b If \c{EAX} is one on input, \c{EAX} on output contains version
7811 information about the processor, and \c{EDX} contains a set of
7812 feature flags, showing the presence and absence of various features.
7813 For example, bit 8 is set if the \c{CMPXCHG8B} instruction
7814 (\k{insCMPXCHG8B}) is supported, bit 15 is set if the conditional
7815 move instructions (\k{insCMOVcc} and \k{insFCMOVB}) are supported,
7816 and bit 23 is set if \c{MMX} instructions are supported.
7817
7818 \b If \c{EAX} is two on input, \c{EAX}, \c{EBX}, \c{ECX} and \c{EDX}
7819 all contain information about caches and TLBs (Translation Lookahead
7820 Buffers).
7821
7822 For more information on the data returned from \c{CPUID}, see the
7823 documentation from Intel and other processor manufacturers.
7824
7825
7826 \S{insCVTDQ2PD} \i\c{CVTDQ2PD}:
7827 Packed Signed INT32 to Packed Double-Precision FP Conversion
7828
7829 \c CVTDQ2PD xmm1,xmm2/mem64      ; F3 0F E6 /r     [WILLAMETTE,SSE2]
7830
7831 \c{CVTDQ2PD} converts two packed signed doublewords from the source
7832 operand to two packed double-precision FP values in the destination
7833 operand.
7834
7835 The destination operand is an \c{XMM} register. The source can be
7836 either an \c{XMM} register or a 64-bit memory location. If the
7837 source is a register, the packed integers are in the low quadword.
7838
7839
7840 \S{insCVTDQ2PS} \i\c{CVTDQ2PS}:
7841 Packed Signed INT32 to Packed Single-Precision FP Conversion
7842
7843 \c CVTDQ2PS xmm1,xmm2/mem128     ; 0F 5B /r        [WILLAMETTE,SSE2]
7844
7845 \c{CVTDQ2PS} converts four packed signed doublewords from the source
7846 operand to four packed single-precision FP values in the destination
7847 operand.
7848
7849 The destination operand is an \c{XMM} register. The source can be
7850 either an \c{XMM} register or a 128-bit memory location.
7851
7852 For more details of this instruction, see the Intel Processor manuals.
7853
7854
7855 \S{insCVTPD2DQ} \i\c{CVTPD2DQ}:
7856 Packed Double-Precision FP to Packed Signed INT32 Conversion
7857
7858 \c CVTPD2DQ xmm1,xmm2/mem128     ; F2 0F E6 /r     [WILLAMETTE,SSE2]
7859
7860 \c{CVTPD2DQ} converts two packed double-precision FP values from the
7861 source operand to two packed signed doublewords in the low quadword
7862 of the destination operand. The high quadword of the destination is
7863 set to all 0s.
7864
7865 The destination operand is an \c{XMM} register. The source can be
7866 either an \c{XMM} register or a 128-bit memory location.
7867
7868 For more details of this instruction, see the Intel Processor manuals.
7869
7870
7871 \S{insCVTPD2PI} \i\c{CVTPD2PI}:
7872 Packed Double-Precision FP to Packed Signed INT32 Conversion
7873
7874 \c CVTPD2PI mm,xmm/mem128        ; 66 0F 2D /r     [WILLAMETTE,SSE2]
7875
7876 \c{CVTPD2PI} converts two packed double-precision FP values from the
7877 source operand to two packed signed doublewords in the destination
7878 operand.
7879
7880 The destination operand is an \c{MMX} register. The source can be
7881 either an \c{XMM} register or a 128-bit memory location.
7882
7883 For more details of this instruction, see the Intel Processor manuals.
7884
7885
7886 \S{insCVTPD2PS} \i\c{CVTPD2PS}:
7887 Packed Double-Precision FP to Packed Single-Precision FP Conversion
7888
7889 \c CVTPD2PS xmm1,xmm2/mem128     ; 66 0F 5A /r     [WILLAMETTE,SSE2]
7890
7891 \c{CVTPD2PS} converts two packed double-precision FP values from the
7892 source operand to two packed single-precision FP values in the low
7893 quadword of the destination operand. The high quadword of the
7894 destination is set to all 0s.
7895
7896 The destination operand is an \c{XMM} register. The source can be
7897 either an \c{XMM} register or a 128-bit memory location.
7898
7899 For more details of this instruction, see the Intel Processor manuals.
7900
7901
7902 \S{insCVTPI2PD} \i\c{CVTPI2PD}:
7903 Packed Signed INT32 to Packed Double-Precision FP Conversion
7904
7905 \c CVTPI2PD xmm,mm/mem64         ; 66 0F 2A /r     [WILLAMETTE,SSE2]
7906
7907 \c{CVTPI2PD} converts two packed signed doublewords from the source
7908 operand to two packed double-precision FP values in the destination
7909 operand.
7910
7911 The destination operand is an \c{XMM} register. The source can be
7912 either an \c{MMX} register or a 64-bit memory location.
7913
7914 For more details of this instruction, see the Intel Processor manuals.
7915
7916
7917 \S{insCVTPI2PS} \i\c{CVTPI2PS}:
7918 Packed Signed INT32 to Packed Single-FP Conversion
7919
7920 \c CVTPI2PS xmm,mm/mem64         ; 0F 2A /r        [KATMAI,SSE]
7921
7922 \c{CVTPI2PS} converts two packed signed doublewords from the source
7923 operand to two packed single-precision FP values in the low quadword
7924 of the destination operand. The high quadword of the destination
7925 remains unchanged.
7926
7927 The destination operand is an \c{XMM} register. The source can be
7928 either an \c{MMX} register or a 64-bit memory location.
7929
7930 For more details of this instruction, see the Intel Processor manuals.
7931
7932
7933 \S{insCVTPS2DQ} \i\c{CVTPS2DQ}:
7934 Packed Single-Precision FP to Packed Signed INT32 Conversion
7935
7936 \c CVTPS2DQ xmm1,xmm2/mem128     ; 66 0F 5B /r     [WILLAMETTE,SSE2]
7937
7938 \c{CVTPS2DQ} converts four packed single-precision FP values from the
7939 source operand to four packed signed doublewords in the destination operand.
7940
7941 The destination operand is an \c{XMM} register. The source can be
7942 either an \c{XMM} register or a 128-bit memory location.
7943
7944 For more details of this instruction, see the Intel Processor manuals.
7945
7946
7947 \S{insCVTPS2PD} \i\c{CVTPS2PD}:
7948 Packed Single-Precision FP to Packed Double-Precision FP Conversion
7949
7950 \c CVTPS2PD xmm1,xmm2/mem64      ; 0F 5A /r        [WILLAMETTE,SSE2]
7951
7952 \c{CVTPS2PD} converts two packed single-precision FP values from the
7953 source operand to two packed double-precision FP values in the destination
7954 operand.
7955
7956 The destination operand is an \c{XMM} register. The source can be
7957 either an \c{XMM} register or a 64-bit memory location. If the source
7958 is a register, the input values are in the low quadword.
7959
7960 For more details of this instruction, see the Intel Processor manuals.
7961
7962
7963 \S{insCVTPS2PI} \i\c{CVTPS2PI}:
7964 Packed Single-Precision FP to Packed Signed INT32 Conversion
7965
7966 \c CVTPS2PI mm,xmm/mem64         ; 0F 2D /r        [KATMAI,SSE]
7967
7968 \c{CVTPS2PI} converts two packed single-precision FP values from
7969 the source operand to two packed signed doublewords in the destination
7970 operand.
7971
7972 The destination operand is an \c{MMX} register. The source can be
7973 either an \c{XMM} register or a 64-bit memory location. If the
7974 source is a register, the input values are in the low quadword.
7975
7976 For more details of this instruction, see the Intel Processor manuals.
7977
7978
7979 \S{insCVTSD2SI} \i\c{CVTSD2SI}:
7980 Scalar Double-Precision FP to Signed INT32 Conversion
7981
7982 \c CVTSD2SI reg32,xmm/mem64      ; F2 0F 2D /r     [WILLAMETTE,SSE2]
7983
7984 \c{CVTSD2SI} converts a double-precision FP value from the source
7985 operand to a signed doubleword in the destination operand.
7986
7987 The destination operand is a general purpose register. The source can be
7988 either an \c{XMM} register or a 64-bit memory location. If the
7989 source is a register, the input value is in the low quadword.
7990
7991 For more details of this instruction, see the Intel Processor manuals.
7992
7993
7994 \S{insCVTSD2SS} \i\c{CVTSD2SS}:
7995 Scalar Double-Precision FP to Scalar Single-Precision FP Conversion
7996
7997 \c CVTSD2SS xmm1,xmm2/mem64      ; F2 0F 5A /r     [KATMAI,SSE]
7998
7999 \c{CVTSD2SS} converts a double-precision FP value from the source
8000 operand to a single-precision FP value in the low doubleword of the
8001 destination operand. The upper 3 doublewords are left unchanged.
8002
8003 The destination operand is an \c{XMM} register. The source can be
8004 either an \c{XMM} register or a 64-bit memory location. If the
8005 source is a register, the input value is in the low quadword.
8006
8007 For more details of this instruction, see the Intel Processor manuals.
8008
8009
8010 \S{insCVTSI2SD} \i\c{CVTSI2SD}:
8011 Signed INT32 to Scalar Double-Precision FP Conversion
8012
8013 \c CVTSI2SD xmm,r/m32            ; F2 0F 2A /r     [WILLAMETTE,SSE2]
8014
8015 \c{CVTSI2SD} converts a signed doubleword from the source operand to
8016 a double-precision FP value in the low quadword of the destination
8017 operand. The high quadword is left unchanged.
8018
8019 The destination operand is an \c{XMM} register. The source can be either
8020 a general purpose register or a 32-bit memory location.
8021
8022 For more details of this instruction, see the Intel Processor manuals.
8023
8024
8025 \S{insCVTSI2SS} \i\c{CVTSI2SS}:
8026 Signed INT32 to Scalar Single-Precision FP Conversion
8027
8028 \c CVTSI2SS xmm,r/m32            ; F3 0F 2A /r     [KATMAI,SSE]
8029
8030 \c{CVTSI2SS} converts a signed doubleword from the source operand to a
8031 single-precision FP value in the low doubleword of the destination operand.
8032 The upper 3 doublewords are left unchanged.
8033
8034 The destination operand is an \c{XMM} register. The source can be either
8035 a general purpose register or a 32-bit memory location.
8036
8037 For more details of this instruction, see the Intel Processor manuals.
8038
8039
8040 \S{insCVTSS2SD} \i\c{CVTSS2SD}:
8041 Scalar Single-Precision FP to Scalar Double-Precision FP Conversion
8042
8043 \c CVTSS2SD xmm1,xmm2/mem32      ; F3 0F 5A /r     [WILLAMETTE,SSE2]
8044
8045 \c{CVTSS2SD} converts a single-precision FP value from the source operand
8046 to a double-precision FP value in the low quadword of the destination
8047 operand. The upper quadword is left unchanged.
8048
8049 The destination operand is an \c{XMM} register. The source can be either
8050 an \c{XMM} register or a 32-bit memory location. If the source is a
8051 register, the input value is contained in the low doubleword.
8052
8053 For more details of this instruction, see the Intel Processor manuals.
8054
8055
8056 \S{insCVTSS2SI} \i\c{CVTSS2SI}:
8057 Scalar Single-Precision FP to Signed INT32 Conversion
8058
8059 \c CVTSS2SI reg32,xmm/mem32      ; F3 0F 2D /r     [KATMAI,SSE]
8060
8061 \c{CVTSS2SI} converts a single-precision FP value from the source
8062 operand to a signed doubleword in the destination operand.
8063
8064 The destination operand is a general purpose register. The source can be
8065 either an \c{XMM} register or a 32-bit memory location. If the
8066 source is a register, the input value is in the low doubleword.
8067
8068 For more details of this instruction, see the Intel Processor manuals.
8069
8070
8071 \S{insCVTTPD2DQ} \i\c{CVTTPD2DQ}:
8072 Packed Double-Precision FP to Packed Signed INT32 Conversion with Truncation
8073
8074 \c CVTTPD2DQ xmm1,xmm2/mem128    ; 66 0F E6 /r     [WILLAMETTE,SSE2]
8075
8076 \c{CVTTPD2DQ} converts two packed double-precision FP values in the source
8077 operand to two packed single-precision FP values in the destination operand.
8078 If the result is inexact, it is truncated (rounded toward zero). The high
8079 quadword is set to all 0s.
8080
8081 The destination operand is an \c{XMM} register. The source can be
8082 either an \c{XMM} register or a 128-bit memory location.
8083
8084 For more details of this instruction, see the Intel Processor manuals.
8085
8086
8087 \S{insCVTTPD2PI} \i\c{CVTTPD2PI}:
8088 Packed Double-Precision FP to Packed Signed INT32 Conversion with Truncation
8089
8090 \c CVTTPD2PI mm,xmm/mem128        ; 66 0F 2C /r     [WILLAMETTE,SSE2]
8091
8092 \c{CVTTPD2PI} converts two packed double-precision FP values in the source
8093 operand to two packed single-precision FP values in the destination operand.
8094 If the result is inexact, it is truncated (rounded toward zero).
8095
8096 The destination operand is an \c{MMX} register. The source can be
8097 either an \c{XMM} register or a 128-bit memory location.
8098
8099 For more details of this instruction, see the Intel Processor manuals.
8100
8101
8102 \S{insCVTTPS2DQ} \i\c{CVTTPS2DQ}:
8103 Packed Single-Precision FP to Packed Signed INT32 Conversion with Truncation
8104
8105 \c CVTTPS2DQ xmm1,xmm2/mem128    ; F3 0F 5B /r     [WILLAMETTE,SSE2]
8106
8107 \c{CVTTPS2DQ} converts four packed single-precision FP values in the source
8108 operand to four packed signed doublewords in the destination operand.
8109 If the result is inexact, it is truncated (rounded toward zero).
8110
8111 The destination operand is an \c{XMM} register. The source can be
8112 either an \c{XMM} register or a 128-bit memory location.
8113
8114 For more details of this instruction, see the Intel Processor manuals.
8115
8116
8117 \S{insCVTTPS2PI} \i\c{CVTTPS2PI}:
8118 Packed Single-Precision FP to Packed Signed INT32 Conversion with Truncation
8119
8120 \c CVTTPS2PI mm,xmm/mem64         ; 0F 2C /r       [KATMAI,SSE]
8121
8122 \c{CVTTPS2PI} converts two packed single-precision FP values in the source
8123 operand to two packed signed doublewords in the destination operand.
8124 If the result is inexact, it is truncated (rounded toward zero). If
8125 the source is a register, the input values are in the low quadword.
8126
8127 The destination operand is an \c{MMX} register. The source can be
8128 either an \c{XMM} register or a 64-bit memory location. If the source
8129 is a register, the input value is in the low quadword.
8130
8131 For more details of this instruction, see the Intel Processor manuals.
8132
8133
8134 \S{insCVTTSD2SI} \i\c{CVTTSD2SI}:
8135 Scalar Double-Precision FP to Signed INT32 Conversion with Truncation
8136
8137 \c CVTTSD2SI reg32,xmm/mem64      ; F2 0F 2C /r    [WILLAMETTE,SSE2]
8138
8139 \c{CVTTSD2SI} converts a double-precision FP value in the source operand
8140 to a signed doubleword in the destination operand. If the result is
8141 inexact, it is truncated (rounded toward zero).
8142
8143 The destination operand is a general purpose register. The source can be
8144 either an \c{XMM} register or a 64-bit memory location. If the source is a
8145 register, the input value is in the low quadword.
8146
8147 For more details of this instruction, see the Intel Processor manuals.
8148
8149
8150 \S{insCVTTSS2SI} \i\c{CVTTSS2SI}:
8151 Scalar Single-Precision FP to Signed INT32 Conversion with Truncation
8152
8153 \c CVTTSD2SI reg32,xmm/mem32      ; F3 0F 2C /r    [KATMAI,SSE]
8154
8155 \c{CVTTSS2SI} converts a single-precision FP value in the source operand
8156 to a signed doubleword in the destination operand. If the result is
8157 inexact, it is truncated (rounded toward zero).
8158
8159 The destination operand is a general purpose register. The source can be
8160 either an \c{XMM} register or a 32-bit memory location. If the source is a
8161 register, the input value is in the low doubleword.
8162
8163 For more details of this instruction, see the Intel Processor manuals.
8164
8165
8166 \S{insDAA} \i\c{DAA}, \i\c{DAS}: Decimal Adjustments
8167
8168 \c DAA                           ; 27                   [8086]
8169 \c DAS                           ; 2F                   [8086]
8170
8171 These instructions are used in conjunction with the add and subtract
8172 instructions to perform binary-coded decimal arithmetic in
8173 \e{packed} (one BCD digit per nibble) form. For the unpacked
8174 equivalents, see \k{insAAA}.
8175
8176 \c{DAA} should be used after a one-byte \c{ADD} instruction whose
8177 destination was the \c{AL} register: by means of examining the value
8178 in the \c{AL} and also the auxiliary carry flag \c{AF}, it
8179 determines whether either digit of the addition has overflowed, and
8180 adjusts it (and sets the carry and auxiliary-carry flags) if so. You
8181 can add long BCD strings together by doing \c{ADD}/\c{DAA} on the
8182 low two digits, then doing \c{ADC}/\c{DAA} on each subsequent pair
8183 of digits.
8184
8185 \c{DAS} works similarly to \c{DAA}, but is for use after \c{SUB}
8186 instructions rather than \c{ADD}.
8187
8188
8189 \S{insDEC} \i\c{DEC}: Decrement Integer
8190
8191 \c DEC reg16                     ; o16 48+r             [8086]
8192 \c DEC reg32                     ; o32 48+r             [386]
8193 \c DEC r/m8                      ; FE /1                [8086]
8194 \c DEC r/m16                     ; o16 FF /1            [8086]
8195 \c DEC r/m32                     ; o32 FF /1            [386]
8196
8197 \c{DEC} subtracts 1 from its operand. It does \e{not} affect the
8198 carry flag: to affect the carry flag, use \c{SUB something,1} (see
8199 \k{insSUB}). \c{DEC} affects all the other flags according to the result.
8200
8201 This instruction can be used with a \c{LOCK} prefix to allow atomic
8202 execution.
8203
8204 See also \c{INC} (\k{insINC}).
8205
8206
8207 \S{insDIV} \i\c{DIV}: Unsigned Integer Divide
8208
8209 \c DIV r/m8                      ; F6 /6                [8086]
8210 \c DIV r/m16                     ; o16 F7 /6            [8086]
8211 \c DIV r/m32                     ; o32 F7 /6            [386]
8212
8213 \c{DIV} performs unsigned integer division. The explicit operand
8214 provided is the divisor; the dividend and destination operands are
8215 implicit, in the following way:
8216
8217 \b For \c{DIV r/m8}, \c{AX} is divided by the given operand; the
8218 quotient is stored in \c{AL} and the remainder in \c{AH}.
8219
8220 \b For \c{DIV r/m16}, \c{DX:AX} is divided by the given operand; the
8221 quotient is stored in \c{AX} and the remainder in \c{DX}.
8222
8223 \b For \c{DIV r/m32}, \c{EDX:EAX} is divided by the given operand;
8224 the quotient is stored in \c{EAX} and the remainder in \c{EDX}.
8225
8226 Signed integer division is performed by the \c{IDIV} instruction:
8227 see \k{insIDIV}.
8228
8229
8230 \S{insDIVPD} \i\c{DIVPD}: Packed Double-Precision FP Divide
8231
8232 \c DIVPD xmm1,xmm2/mem128        ; 66 0F 5E /r     [WILLAMETTE,SSE2]
8233
8234 \c{DIVPD} divides the two packed double-precision FP values in
8235 the destination operand by the two packed double-precision FP
8236 values in the source operand, and stores the packed double-precision
8237 results in the destination register.
8238
8239 The destination is an \c{XMM} register. The source operand can be
8240 either an \c{XMM} register or a 128-bit memory location.
8241
8242 \c    dst[0-63]   := dst[0-63]   / src[0-63],
8243 \c    dst[64-127] := dst[64-127] / src[64-127].
8244
8245
8246 \S{insDIVPS} \i\c{DIVPS}: Packed Single-Precision FP Divide
8247
8248 \c DIVPS xmm1,xmm2/mem128        ; 0F 5E /r        [KATMAI,SSE]
8249
8250 \c{DIVPS} divides the four packed single-precision FP values in
8251 the destination operand by the four packed single-precision FP
8252 values in the source operand, and stores the packed single-precision
8253 results in the destination register.
8254
8255 The destination is an \c{XMM} register. The source operand can be
8256 either an \c{XMM} register or a 128-bit memory location.
8257
8258 \c    dst[0-31]   := dst[0-31]   / src[0-31],
8259 \c    dst[32-63]  := dst[32-63]  / src[32-63],
8260 \c    dst[64-95]  := dst[64-95]  / src[64-95],
8261 \c    dst[96-127] := dst[96-127] / src[96-127].
8262
8263
8264 \S{insDIVSD} \i\c{DIVSD}: Scalar Double-Precision FP Divide
8265
8266 \c DIVSD xmm1,xmm2/mem64         ; F2 0F 5E /r     [WILLAMETTE,SSE2]
8267
8268 \c{DIVSD} divides the low-order double-precision FP value in the
8269 destination operand by the low-order double-precision FP value in
8270 the source operand, and stores the double-precision result in the
8271 destination register.
8272
8273 The destination is an \c{XMM} register. The source operand can be
8274 either an \c{XMM} register or a 64-bit memory location.
8275
8276 \c    dst[0-63]   := dst[0-63] / src[0-63],
8277 \c    dst[64-127] remains unchanged.
8278
8279
8280 \S{insDIVSS} \i\c{DIVSS}: Scalar Single-Precision FP Divide
8281
8282 \c DIVSS xmm1,xmm2/mem32         ; F3 0F 5E /r     [KATMAI,SSE]
8283
8284 \c{DIVSS} divides the low-order single-precision FP value in the
8285 destination operand by the low-order single-precision FP value in
8286 the source operand, and stores the single-precision result in the
8287 destination register.
8288
8289 The destination is an \c{XMM} register. The source operand can be
8290 either an \c{XMM} register or a 32-bit memory location.
8291
8292 \c    dst[0-31]   := dst[0-31] / src[0-31],
8293 \c    dst[32-127] remains unchanged.
8294
8295
8296 \S{insEMMS} \i\c{EMMS}: Empty MMX State
8297
8298 \c EMMS                          ; 0F 77                [PENT,MMX]
8299
8300 \c{EMMS} sets the FPU tag word (marking which floating-point registers
8301 are available) to all ones, meaning all registers are available for
8302 the FPU to use. It should be used after executing \c{MMX} instructions
8303 and before executing any subsequent floating-point operations.
8304
8305
8306 \S{insENTER} \i\c{ENTER}: Create Stack Frame
8307
8308 \c ENTER imm,imm                 ; C8 iw ib             [186]
8309
8310 \c{ENTER} constructs a \i\c{stack frame} for a high-level language
8311 procedure call. The first operand (the \c{iw} in the opcode
8312 definition above refers to the first operand) gives the amount of
8313 stack space to allocate for local variables; the second (the \c{ib}
8314 above) gives the nesting level of the procedure (for languages like
8315 Pascal, with nested procedures).
8316
8317 The function of \c{ENTER}, with a nesting level of zero, is
8318 equivalent to
8319
8320 \c           PUSH EBP            ; or PUSH BP         in 16 bits
8321 \c           MOV EBP,ESP         ; or MOV BP,SP       in 16 bits
8322 \c           SUB ESP,operand1    ; or SUB SP,operand1 in 16 bits
8323
8324 This creates a stack frame with the procedure parameters accessible
8325 upwards from \c{EBP}, and local variables accessible downwards from
8326 \c{EBP}.
8327
8328 With a nesting level of one, the stack frame created is 4 (or 2)
8329 bytes bigger, and the value of the final frame pointer \c{EBP} is
8330 accessible in memory at \c{[EBP-4]}.
8331
8332 This allows \c{ENTER}, when called with a nesting level of two, to
8333 look at the stack frame described by the \e{previous} value of
8334 \c{EBP}, find the frame pointer at offset -4 from that, and push it
8335 along with its new frame pointer, so that when a level-two procedure
8336 is called from within a level-one procedure, \c{[EBP-4]} holds the
8337 frame pointer of the most recent level-one procedure call and
8338 \c{[EBP-8]} holds that of the most recent level-two call. And so on,
8339 for nesting levels up to 31.
8340
8341 Stack frames created by \c{ENTER} can be destroyed by the \c{LEAVE}
8342 instruction: see \k{insLEAVE}.
8343
8344
8345 \S{insF2XM1} \i\c{F2XM1}: Calculate 2**X-1
8346
8347 \c F2XM1                         ; D9 F0                [8086,FPU]
8348
8349 \c{F2XM1} raises 2 to the power of \c{ST0}, subtracts one, and
8350 stores the result back into \c{ST0}. The initial contents of \c{ST0}
8351 must be a number in the range -1.0 to +1.0.
8352
8353
8354 \S{insFABS} \i\c{FABS}: Floating-Point Absolute Value
8355
8356 \c FABS                          ; D9 E1                [8086,FPU]
8357
8358 \c{FABS} computes the absolute value of \c{ST0},by clearing the sign
8359 bit, and stores the result back in \c{ST0}.
8360
8361
8362 \S{insFADD} \i\c{FADD}, \i\c{FADDP}: Floating-Point Addition
8363
8364 \c FADD mem32                    ; D8 /0                [8086,FPU]
8365 \c FADD mem64                    ; DC /0                [8086,FPU]
8366
8367 \c FADD fpureg                   ; D8 C0+r              [8086,FPU]
8368 \c FADD ST0,fpureg               ; D8 C0+r              [8086,FPU]
8369
8370 \c FADD TO fpureg                ; DC C0+r              [8086,FPU]
8371 \c FADD fpureg,ST0               ; DC C0+r              [8086,FPU]
8372
8373 \c FADDP fpureg                  ; DE C0+r              [8086,FPU]
8374 \c FADDP fpureg,ST0              ; DE C0+r              [8086,FPU]
8375
8376 \b \c{FADD}, given one operand, adds the operand to \c{ST0} and stores
8377 the result back in \c{ST0}. If the operand has the \c{TO} modifier,
8378 the result is stored in the register given rather than in \c{ST0}.
8379
8380 \b \c{FADDP} performs the same function as \c{FADD TO}, but pops the
8381 register stack after storing the result.
8382
8383 The given two-operand forms are synonyms for the one-operand forms.
8384
8385 To add an integer value to \c{ST0}, use the c{FIADD} instruction
8386 (\k{insFIADD})
8387
8388
8389 \S{insFBLD} \i\c{FBLD}, \i\c{FBSTP}: BCD Floating-Point Load and Store
8390
8391 \c FBLD mem80                    ; DF /4                [8086,FPU]
8392 \c FBSTP mem80                   ; DF /6                [8086,FPU]
8393
8394 \c{FBLD} loads an 80-bit (ten-byte) packed binary-coded decimal
8395 number from the given memory address, converts it to a real, and
8396 pushes it on the register stack. \c{FBSTP} stores the value of
8397 \c{ST0}, in packed BCD, at the given address and then pops the
8398 register stack.
8399
8400
8401 \S{insFCHS} \i\c{FCHS}: Floating-Point Change Sign
8402
8403 \c FCHS                          ; D9 E0                [8086,FPU]
8404
8405 \c{FCHS} negates the number in \c{ST0}, by inverting the sign bit:
8406 negative numbers become positive, and vice versa.
8407
8408
8409 \S{insFCLEX} \i\c{FCLEX}, \c{FNCLEX}: Clear Floating-Point Exceptions
8410
8411 \c FCLEX                         ; 9B DB E2             [8086,FPU]
8412 \c FNCLEX                        ; DB E2                [8086,FPU]
8413
8414 \c{FCLEX} clears any floating-point exceptions which may be pending.
8415 \c{FNCLEX} does the same thing but doesn't wait for previous
8416 floating-point operations (including the \e{handling} of pending
8417 exceptions) to finish first.
8418
8419
8420 \S{insFCMOVB} \i\c{FCMOVcc}: Floating-Point Conditional Move
8421
8422 \c FCMOVB fpureg                 ; DA C0+r              [P6,FPU]
8423 \c FCMOVB ST0,fpureg             ; DA C0+r              [P6,FPU]
8424
8425 \c FCMOVE fpureg                 ; DA C8+r              [P6,FPU]
8426 \c FCMOVE ST0,fpureg             ; DA C8+r              [P6,FPU]
8427
8428 \c FCMOVBE fpureg                ; DA D0+r              [P6,FPU]
8429 \c FCMOVBE ST0,fpureg            ; DA D0+r              [P6,FPU]
8430
8431 \c FCMOVU fpureg                 ; DA D8+r              [P6,FPU]
8432 \c FCMOVU ST0,fpureg             ; DA D8+r              [P6,FPU]
8433
8434 \c FCMOVNB fpureg                ; DB C0+r              [P6,FPU]
8435 \c FCMOVNB ST0,fpureg            ; DB C0+r              [P6,FPU]
8436
8437 \c FCMOVNE fpureg                ; DB C8+r              [P6,FPU]
8438 \c FCMOVNE ST0,fpureg            ; DB C8+r              [P6,FPU]
8439
8440 \c FCMOVNBE fpureg               ; DB D0+r              [P6,FPU]
8441 \c FCMOVNBE ST0,fpureg           ; DB D0+r              [P6,FPU]
8442
8443 \c FCMOVNU fpureg                ; DB D8+r              [P6,FPU]
8444 \c FCMOVNU ST0,fpureg            ; DB D8+r              [P6,FPU]
8445
8446 The \c{FCMOV} instructions perform conditional move operations: each
8447 of them moves the contents of the given register into \c{ST0} if its
8448 condition is satisfied, and does nothing if not.
8449
8450 The conditions are not the same as the standard condition codes used
8451 with conditional jump instructions. The conditions \c{B}, \c{BE},
8452 \c{NB}, \c{NBE}, \c{E} and \c{NE} are exactly as normal, but none of
8453 the other standard ones are supported. Instead, the condition \c{U}
8454 and its counterpart \c{NU} are provided; the \c{U} condition is
8455 satisfied if the last two floating-point numbers compared were
8456 \e{unordered}, i.e. they were not equal but neither one could be
8457 said to be greater than the other, for example if they were NaNs.
8458 (The flag state which signals this is the setting of the parity
8459 flag: so the \c{U} condition is notionally equivalent to \c{PE}, and
8460 \c{NU} is equivalent to \c{PO}.)
8461
8462 The \c{FCMOV} conditions test the main processor's status flags, not
8463 the FPU status flags, so using \c{FCMOV} directly after \c{FCOM}
8464 will not work. Instead, you should either use \c{FCOMI} which writes
8465 directly to the main CPU flags word, or use \c{FSTSW} to extract the
8466 FPU flags.
8467
8468 Although the \c{FCMOV} instructions are flagged \c{P6} above, they
8469 may not be supported by all Pentium Pro processors; the \c{CPUID}
8470 instruction (\k{insCPUID}) will return a bit which indicates whether
8471 conditional moves are supported.
8472
8473
8474 \S{insFCOM} \i\c{FCOM}, \i\c{FCOMP}, \i\c{FCOMPP}, \i\c{FCOMI},
8475 \i\c{FCOMIP}: Floating-Point Compare
8476
8477 \c FCOM mem32                    ; D8 /2                [8086,FPU]
8478 \c FCOM mem64                    ; DC /2                [8086,FPU]
8479 \c FCOM fpureg                   ; D8 D0+r              [8086,FPU]
8480 \c FCOM ST0,fpureg               ; D8 D0+r              [8086,FPU]
8481
8482 \c FCOMP mem32                   ; D8 /3                [8086,FPU]
8483 \c FCOMP mem64                   ; DC /3                [8086,FPU]
8484 \c FCOMP fpureg                  ; D8 D8+r              [8086,FPU]
8485 \c FCOMP ST0,fpureg              ; D8 D8+r              [8086,FPU]
8486
8487 \c FCOMPP                        ; DE D9                [8086,FPU]
8488
8489 \c FCOMI fpureg                  ; DB F0+r              [P6,FPU]
8490 \c FCOMI ST0,fpureg              ; DB F0+r              [P6,FPU]
8491
8492 \c FCOMIP fpureg                 ; DF F0+r              [P6,FPU]
8493 \c FCOMIP ST0,fpureg             ; DF F0+r              [P6,FPU]
8494
8495 \c{FCOM} compares \c{ST0} with the given operand, and sets the FPU
8496 flags accordingly. \c{ST0} is treated as the left-hand side of the
8497 comparison, so that the carry flag is set (for a `less-than' result)
8498 if \c{ST0} is less than the given operand.
8499
8500 \c{FCOMP} does the same as \c{FCOM}, but pops the register stack
8501 afterwards. \c{FCOMPP} compares \c{ST0} with \c{ST1} and then pops
8502 the register stack twice.
8503
8504 \c{FCOMI} and \c{FCOMIP} work like the corresponding forms of
8505 \c{FCOM} and \c{FCOMP}, but write their results directly to the CPU
8506 flags register rather than the FPU status word, so they can be
8507 immediately followed by conditional jump or conditional move
8508 instructions.
8509
8510 The \c{FCOM} instructions differ from the \c{FUCOM} instructions
8511 (\k{insFUCOM}) only in the way they handle quiet NaNs: \c{FUCOM}
8512 will handle them silently and set the condition code flags to an
8513 `unordered' result, whereas \c{FCOM} will generate an exception.
8514
8515
8516 \S{insFCOS} \i\c{FCOS}: Cosine
8517
8518 \c FCOS                          ; D9 FF                [386,FPU]
8519
8520 \c{FCOS} computes the cosine of \c{ST0} (in radians), and stores the
8521 result in \c{ST0}. The absolute value of \c{ST0} must be less than 2**63.
8522
8523 See also \c{FSINCOS} (\k{insFSIN}).
8524
8525
8526 \S{insFDECSTP} \i\c{FDECSTP}: Decrement Floating-Point Stack Pointer
8527
8528 \c FDECSTP                       ; D9 F6                [8086,FPU]
8529
8530 \c{FDECSTP} decrements the `top' field in the floating-point status
8531 word. This has the effect of rotating the FPU register stack by one,
8532 as if the contents of \c{ST7} had been pushed on the stack. See also
8533 \c{FINCSTP} (\k{insFINCSTP}).
8534
8535
8536 \S{insFDISI} \i\c{FxDISI}, \i\c{FxENI}: Disable and Enable Floating-Point Interrupts
8537
8538 \c FDISI                         ; 9B DB E1             [8086,FPU]
8539 \c FNDISI                        ; DB E1                [8086,FPU]
8540
8541 \c FENI                          ; 9B DB E0             [8086,FPU]
8542 \c FNENI                         ; DB E0                [8086,FPU]
8543
8544 \c{FDISI} and \c{FENI} disable and enable floating-point interrupts.
8545 These instructions are only meaningful on original 8087 processors:
8546 the 287 and above treat them as no-operation instructions.
8547
8548 \c{FNDISI} and \c{FNENI} do the same thing as \c{FDISI} and \c{FENI}
8549 respectively, but without waiting for the floating-point processor
8550 to finish what it was doing first.
8551
8552
8553 \S{insFDIV} \i\c{FDIV}, \i\c{FDIVP}, \i\c{FDIVR}, \i\c{FDIVRP}: Floating-Point Division
8554
8555 \c FDIV mem32                    ; D8 /6                [8086,FPU]
8556 \c FDIV mem64                    ; DC /6                [8086,FPU]
8557
8558 \c FDIV fpureg                   ; D8 F0+r              [8086,FPU]
8559 \c FDIV ST0,fpureg               ; D8 F0+r              [8086,FPU]
8560
8561 \c FDIV TO fpureg                ; DC F8+r              [8086,FPU]
8562 \c FDIV fpureg,ST0               ; DC F8+r              [8086,FPU]
8563
8564 \c FDIVR mem32                   ; D8 /0                [8086,FPU]
8565 \c FDIVR mem64                   ; DC /0                [8086,FPU]
8566
8567 \c FDIVR fpureg                  ; D8 F8+r              [8086,FPU]
8568 \c FDIVR ST0,fpureg              ; D8 F8+r              [8086,FPU]
8569
8570 \c FDIVR TO fpureg               ; DC F0+r              [8086,FPU]
8571 \c FDIVR fpureg,ST0              ; DC F0+r              [8086,FPU]
8572
8573 \c FDIVP fpureg                  ; DE F8+r              [8086,FPU]
8574 \c FDIVP fpureg,ST0              ; DE F8+r              [8086,FPU]
8575
8576 \c FDIVRP fpureg                 ; DE F0+r              [8086,FPU]
8577 \c FDIVRP fpureg,ST0             ; DE F0+r              [8086,FPU]
8578
8579 \b \c{FDIV} divides \c{ST0} by the given operand and stores the result
8580 back in \c{ST0}, unless the \c{TO} qualifier is given, in which case
8581 it divides the given operand by \c{ST0} and stores the result in the
8582 operand.
8583
8584 \b \c{FDIVR} does the same thing, but does the division the other way
8585 up: so if \c{TO} is not given, it divides the given operand by
8586 \c{ST0} and stores the result in \c{ST0}, whereas if \c{TO} is given
8587 it divides \c{ST0} by its operand and stores the result in the
8588 operand.
8589
8590 \b \c{FDIVP} operates like \c{FDIV TO}, but pops the register stack
8591 once it has finished.
8592
8593 \b \c{FDIVRP} operates like \c{FDIVR TO}, but pops the register stack
8594 once it has finished.
8595
8596 For FP/Integer divisions, see \c{FIDIV} (\k{insFIDIV}).
8597
8598
8599 \S{insFEMMS} \i\c{FEMMS}: Faster Enter/Exit of the MMX or floating-point state
8600
8601 \c FEMMS                         ; 0F 0E           [PENT,3DNOW]
8602
8603 \c{FEMMS} can be used in place of the \c{EMMS} instruction on
8604 processors which support the 3DNow! instruction set. Following
8605 execution of \c{FEMMS}, the state of the \c{MMX/FP} registers
8606 is undefined, and this allows a faster context switch between
8607 \c{FP} and \c{MMX} instructions. The \c{FEMMS} instruction can
8608 also be used \e{before} executing \c{MMX} instructions
8609
8610
8611 \S{insFFREE} \i\c{FFREE}: Flag Floating-Point Register as Unused
8612
8613 \c FFREE fpureg                  ; DD C0+r              [8086,FPU]
8614 \c FFREEP fpureg                 ; DF C0+r              [286,FPU,UNDOC]
8615
8616 \c{FFREE} marks the given register as being empty.
8617
8618 \c{FFREEP} marks the given register as being empty, and then
8619 pops the register stack.
8620
8621
8622 \S{insFIADD} \i\c{FIADD}: Floating-Point/Integer Addition
8623
8624 \c FIADD mem16                   ; DE /0                [8086,FPU]
8625 \c FIADD mem32                   ; DA /0                [8086,FPU]
8626
8627 \c{FIADD} adds the 16-bit or 32-bit integer stored in the given
8628 memory location to \c{ST0}, storing the result in \c{ST0}.
8629
8630
8631 \S{insFICOM} \i\c{FICOM}, \i\c{FICOMP}: Floating-Point/Integer Compare
8632
8633 \c FICOM mem16                   ; DE /2                [8086,FPU]
8634 \c FICOM mem32                   ; DA /2                [8086,FPU]
8635
8636 \c FICOMP mem16                  ; DE /3                [8086,FPU]
8637 \c FICOMP mem32                  ; DA /3                [8086,FPU]
8638
8639 \c{FICOM} compares \c{ST0} with the 16-bit or 32-bit integer stored
8640 in the given memory location, and sets the FPU flags accordingly.
8641 \c{FICOMP} does the same, but pops the register stack afterwards.
8642
8643
8644 \S{insFIDIV} \i\c{FIDIV}, \i\c{FIDIVR}: Floating-Point/Integer Division
8645
8646 \c FIDIV mem16                   ; DE /6                [8086,FPU]
8647 \c FIDIV mem32                   ; DA /6                [8086,FPU]
8648
8649 \c FIDIVR mem16                  ; DE /7                [8086,FPU]
8650 \c FIDIVR mem32                  ; DA /7                [8086,FPU]
8651
8652 \c{FIDIV} divides \c{ST0} by the 16-bit or 32-bit integer stored in
8653 the given memory location, and stores the result in \c{ST0}.
8654 \c{FIDIVR} does the division the other way up: it divides the
8655 integer by \c{ST0}, but still stores the result in \c{ST0}.
8656
8657
8658 \S{insFILD} \i\c{FILD}, \i\c{FIST}, \i\c{FISTP}: Floating-Point/Integer Conversion
8659
8660 \c FILD mem16                    ; DF /0                [8086,FPU]
8661 \c FILD mem32                    ; DB /0                [8086,FPU]
8662 \c FILD mem64                    ; DF /5                [8086,FPU]
8663
8664 \c FIST mem16                    ; DF /2                [8086,FPU]
8665 \c FIST mem32                    ; DB /2                [8086,FPU]
8666
8667 \c FISTP mem16                   ; DF /3                [8086,FPU]
8668 \c FISTP mem32                   ; DB /3                [8086,FPU]
8669 \c FISTP mem64                   ; DF /7                [8086,FPU]
8670
8671 \c{FILD} loads an integer out of a memory location, converts it to a
8672 real, and pushes it on the FPU register stack. \c{FIST} converts
8673 \c{ST0} to an integer and stores that in memory; \c{FISTP} does the
8674 same as \c{FIST}, but pops the register stack afterwards.
8675
8676
8677 \S{insFIMUL} \i\c{FIMUL}: Floating-Point/Integer Multiplication
8678
8679 \c FIMUL mem16                   ; DE /1                [8086,FPU]
8680 \c FIMUL mem32                   ; DA /1                [8086,FPU]
8681
8682 \c{FIMUL} multiplies \c{ST0} by the 16-bit or 32-bit integer stored
8683 in the given memory location, and stores the result in \c{ST0}.
8684
8685
8686 \S{insFINCSTP} \i\c{FINCSTP}: Increment Floating-Point Stack Pointer
8687
8688 \c FINCSTP                       ; D9 F7                [8086,FPU]
8689
8690 \c{FINCSTP} increments the `top' field in the floating-point status
8691 word. This has the effect of rotating the FPU register stack by one,
8692 as if the register stack had been popped; however, unlike the
8693 popping of the stack performed by many FPU instructions, it does not
8694 flag the new \c{ST7} (previously \c{ST0}) as empty. See also
8695 \c{FDECSTP} (\k{insFDECSTP}).
8696
8697
8698 \S{insFINIT} \i\c{FINIT}, \i\c{FNINIT}: Initialise Floating-Point Unit
8699
8700 \c FINIT                         ; 9B DB E3             [8086,FPU]
8701 \c FNINIT                        ; DB E3                [8086,FPU]
8702
8703 \c{FINIT} initialises the FPU to its default state. It flags all
8704 registers as empty, without actually change their values, clears
8705 the top of stack pointer. \c{FNINIT} does the same, without first
8706 waiting for pending exceptions to clear.
8707
8708
8709 \S{insFISUB} \i\c{FISUB}: Floating-Point/Integer Subtraction
8710
8711 \c FISUB mem16                   ; DE /4                [8086,FPU]
8712 \c FISUB mem32                   ; DA /4                [8086,FPU]
8713
8714 \c FISUBR mem16                  ; DE /5                [8086,FPU]
8715 \c FISUBR mem32                  ; DA /5                [8086,FPU]
8716
8717 \c{FISUB} subtracts the 16-bit or 32-bit integer stored in the given
8718 memory location from \c{ST0}, and stores the result in \c{ST0}.
8719 \c{FISUBR} does the subtraction the other way round, i.e. it
8720 subtracts \c{ST0} from the given integer, but still stores the
8721 result in \c{ST0}.
8722
8723
8724 \S{insFLD} \i\c{FLD}: Floating-Point Load
8725
8726 \c FLD mem32                     ; D9 /0                [8086,FPU]
8727 \c FLD mem64                     ; DD /0                [8086,FPU]
8728 \c FLD mem80                     ; DB /5                [8086,FPU]
8729 \c FLD fpureg                    ; D9 C0+r              [8086,FPU]
8730
8731 \c{FLD} loads a floating-point value out of the given register or
8732 memory location, and pushes it on the FPU register stack.
8733
8734
8735 \S{insFLD1} \i\c{FLDxx}: Floating-Point Load Constants
8736
8737 \c FLD1                          ; D9 E8                [8086,FPU]
8738 \c FLDL2E                        ; D9 EA                [8086,FPU]
8739 \c FLDL2T                        ; D9 E9                [8086,FPU]
8740 \c FLDLG2                        ; D9 EC                [8086,FPU]
8741 \c FLDLN2                        ; D9 ED                [8086,FPU]
8742 \c FLDPI                         ; D9 EB                [8086,FPU]
8743 \c FLDZ                          ; D9 EE                [8086,FPU]
8744
8745 These instructions push specific standard constants on the FPU
8746 register stack.
8747
8748 \c  Instruction    Constant pushed
8749
8750 \c  FLD1           1
8751 \c  FLDL2E         base-2 logarithm of e
8752 \c  FLDL2T         base-2 log of 10
8753 \c  FLDLG2         base-10 log of 2
8754 \c  FLDLN2         base-e log of 2
8755 \c  FLDPI          pi
8756 \c  FLDZ           zero
8757
8758
8759 \S{insFLDCW} \i\c{FLDCW}: Load Floating-Point Control Word
8760
8761 \c FLDCW mem16                   ; D9 /5                [8086,FPU]
8762
8763 \c{FLDCW} loads a 16-bit value out of memory and stores it into the
8764 FPU control word (governing things like the rounding mode, the
8765 precision, and the exception masks). See also \c{FSTCW}
8766 (\k{insFSTCW}). If exceptions are enabled and you don't want to
8767 generate one, use \c{FCLEX} or \c{FNCLEX} (\k{insFCLEX}) before
8768 loading the new control word.
8769
8770
8771 \S{insFLDENV} \i\c{FLDENV}: Load Floating-Point Environment
8772
8773 \c FLDENV mem                    ; D9 /4                [8086,FPU]
8774
8775 \c{FLDENV} loads the FPU operating environment (control word, status
8776 word, tag word, instruction pointer, data pointer and last opcode)
8777 from memory. The memory area is 14 or 28 bytes long, depending on
8778 the CPU mode at the time. See also \c{FSTENV} (\k{insFSTENV}).
8779
8780
8781 \S{insFMUL} \i\c{FMUL}, \i\c{FMULP}: Floating-Point Multiply
8782
8783 \c FMUL mem32                    ; D8 /1                [8086,FPU]
8784 \c FMUL mem64                    ; DC /1                [8086,FPU]
8785
8786 \c FMUL fpureg                   ; D8 C8+r              [8086,FPU]
8787 \c FMUL ST0,fpureg               ; D8 C8+r              [8086,FPU]
8788
8789 \c FMUL TO fpureg                ; DC C8+r              [8086,FPU]
8790 \c FMUL fpureg,ST0               ; DC C8+r              [8086,FPU]
8791
8792 \c FMULP fpureg                  ; DE C8+r              [8086,FPU]
8793 \c FMULP fpureg,ST0              ; DE C8+r              [8086,FPU]
8794
8795 \c{FMUL} multiplies \c{ST0} by the given operand, and stores the
8796 result in \c{ST0}, unless the \c{TO} qualifier is used in which case
8797 it stores the result in the operand. \c{FMULP} performs the same
8798 operation as \c{FMUL TO}, and then pops the register stack.
8799
8800
8801 \S{insFNOP} \i\c{FNOP}: Floating-Point No Operation
8802
8803 \c FNOP                          ; D9 D0                [8086,FPU]
8804
8805 \c{FNOP} does nothing.
8806
8807
8808 \S{insFPATAN} \i\c{FPATAN}, \i\c{FPTAN}: Arctangent and Tangent
8809
8810 \c FPATAN                        ; D9 F3                [8086,FPU]
8811 \c FPTAN                         ; D9 F2                [8086,FPU]
8812
8813 \c{FPATAN} computes the arctangent, in radians, of the result of
8814 dividing \c{ST1} by \c{ST0}, stores the result in \c{ST1}, and pops
8815 the register stack. It works like the C \c{atan2} function, in that
8816 changing the sign of both \c{ST0} and \c{ST1} changes the output
8817 value by pi (so it performs true rectangular-to-polar coordinate
8818 conversion, with \c{ST1} being the Y coordinate and \c{ST0} being
8819 the X coordinate, not merely an arctangent).
8820
8821 \c{FPTAN} computes the tangent of the value in \c{ST0} (in radians),
8822 and stores the result back into \c{ST0}.
8823
8824 The absolute value of \c{ST0} must be less than 2**63.
8825
8826
8827 \S{insFPREM} \i\c{FPREM}, \i\c{FPREM1}: Floating-Point Partial Remainder
8828
8829 \c FPREM                         ; D9 F8                [8086,FPU]
8830 \c FPREM1                        ; D9 F5                [386,FPU]
8831
8832 These instructions both produce the remainder obtained by dividing
8833 \c{ST0} by \c{ST1}. This is calculated, notionally, by dividing
8834 \c{ST0} by \c{ST1}, rounding the result to an integer, multiplying
8835 by \c{ST1} again, and computing the value which would need to be
8836 added back on to the result to get back to the original value in
8837 \c{ST0}.
8838
8839 The two instructions differ in the way the notional round-to-integer
8840 operation is performed. \c{FPREM} does it by rounding towards zero,
8841 so that the remainder it returns always has the same sign as the
8842 original value in \c{ST0}; \c{FPREM1} does it by rounding to the
8843 nearest integer, so that the remainder always has at most half the
8844 magnitude of \c{ST1}.
8845
8846 Both instructions calculate \e{partial} remainders, meaning that
8847 they may not manage to provide the final result, but might leave
8848 intermediate results in \c{ST0} instead. If this happens, they will
8849 set the C2 flag in the FPU status word; therefore, to calculate a
8850 remainder, you should repeatedly execute \c{FPREM} or \c{FPREM1}
8851 until C2 becomes clear.
8852
8853
8854 \S{insFRNDINT} \i\c{FRNDINT}: Floating-Point Round to Integer
8855
8856 \c FRNDINT                       ; D9 FC                [8086,FPU]
8857
8858 \c{FRNDINT} rounds the contents of \c{ST0} to an integer, according
8859 to the current rounding mode set in the FPU control word, and stores
8860 the result back in \c{ST0}.
8861
8862
8863 \S{insFRSTOR} \i\c{FSAVE}, \i\c{FRSTOR}: Save/Restore Floating-Point State
8864
8865 \c FSAVE mem                     ; 9B DD /6             [8086,FPU]
8866 \c FNSAVE mem                    ; DD /6                [8086,FPU]
8867
8868 \c FRSTOR mem                    ; DD /4                [8086,FPU]
8869
8870 \c{FSAVE} saves the entire floating-point unit state, including all
8871 the information saved by \c{FSTENV} (\k{insFSTENV}) plus the
8872 contents of all the registers, to a 94 or 108 byte area of memory
8873 (depending on the CPU mode). \c{FRSTOR} restores the floating-point
8874 state from the same area of memory.
8875
8876 \c{FNSAVE} does the same as \c{FSAVE}, without first waiting for
8877 pending floating-point exceptions to clear.
8878
8879
8880 \S{insFSCALE} \i\c{FSCALE}: Scale Floating-Point Value by Power of Two
8881
8882 \c FSCALE                        ; D9 FD                [8086,FPU]
8883
8884 \c{FSCALE} scales a number by a power of two: it rounds \c{ST1}
8885 towards zero to obtain an integer, then multiplies \c{ST0} by two to
8886 the power of that integer, and stores the result in \c{ST0}.
8887
8888
8889 \S{insFSETPM} \i\c{FSETPM}: Set Protected Mode
8890
8891 \c FSETPM                        ; DB E4                [286,FPU]
8892
8893 This instruction initialises protected mode on the 287 floating-point
8894 coprocessor. It is only meaningful on that processor: the 387 and
8895 above treat the instruction as a no-operation.
8896
8897
8898 \S{insFSIN} \i\c{FSIN}, \i\c{FSINCOS}: Sine and Cosine
8899
8900 \c FSIN                          ; D9 FE                [386,FPU]
8901 \c FSINCOS                       ; D9 FB                [386,FPU]
8902
8903 \c{FSIN} calculates the sine of \c{ST0} (in radians) and stores the
8904 result in \c{ST0}. \c{FSINCOS} does the same, but then pushes the
8905 cosine of the same value on the register stack, so that the sine
8906 ends up in \c{ST1} and the cosine in \c{ST0}. \c{FSINCOS} is faster
8907 than executing \c{FSIN} and \c{FCOS} (see \k{insFCOS}) in succession.
8908
8909 The absolute value of \c{ST0} must be less than 2**63.
8910
8911
8912 \S{insFSQRT} \i\c{FSQRT}: Floating-Point Square Root
8913
8914 \c FSQRT                         ; D9 FA                [8086,FPU]
8915
8916 \c{FSQRT} calculates the square root of \c{ST0} and stores the
8917 result in \c{ST0}.
8918
8919
8920 \S{insFST} \i\c{FST}, \i\c{FSTP}: Floating-Point Store
8921
8922 \c FST mem32                     ; D9 /2                [8086,FPU]
8923 \c FST mem64                     ; DD /2                [8086,FPU]
8924 \c FST fpureg                    ; DD D0+r              [8086,FPU]
8925
8926 \c FSTP mem32                    ; D9 /3                [8086,FPU]
8927 \c FSTP mem64                    ; DD /3                [8086,FPU]
8928 \c FSTP mem80                    ; DB /7                [8086,FPU]
8929 \c FSTP fpureg                   ; DD D8+r              [8086,FPU]
8930
8931 \c{FST} stores the value in \c{ST0} into the given memory location
8932 or other FPU register. \c{FSTP} does the same, but then pops the
8933 register stack.
8934
8935
8936 \S{insFSTCW} \i\c{FSTCW}: Store Floating-Point Control Word
8937
8938 \c FSTCW mem16                   ; 9B D9 /7             [8086,FPU]
8939 \c FNSTCW mem16                  ; D9 /7                [8086,FPU]
8940
8941 \c{FSTCW} stores the \c{FPU} control word (governing things like the
8942 rounding mode, the precision, and the exception masks) into a 2-byte
8943 memory area. See also \c{FLDCW} (\k{insFLDCW}).
8944
8945 \c{FNSTCW} does the same thing as \c{FSTCW}, without first waiting
8946 for pending floating-point exceptions to clear.
8947
8948
8949 \S{insFSTENV} \i\c{FSTENV}: Store Floating-Point Environment
8950
8951 \c FSTENV mem                    ; 9B D9 /6             [8086,FPU]
8952 \c FNSTENV mem                   ; D9 /6                [8086,FPU]
8953
8954 \c{FSTENV} stores the \c{FPU} operating environment (control word,
8955 status word, tag word, instruction pointer, data pointer and last
8956 opcode) into memory. The memory area is 14 or 28 bytes long,
8957 depending on the CPU mode at the time. See also \c{FLDENV}
8958 (\k{insFLDENV}).
8959
8960 \c{FNSTENV} does the same thing as \c{FSTENV}, without first waiting
8961 for pending floating-point exceptions to clear.
8962
8963
8964 \S{insFSTSW} \i\c{FSTSW}: Store Floating-Point Status Word
8965
8966 \c FSTSW mem16                   ; 9B DD /7             [8086,FPU]
8967 \c FSTSW AX                      ; 9B DF E0             [286,FPU]
8968
8969 \c FNSTSW mem16                  ; DD /7                [8086,FPU]
8970 \c FNSTSW AX                     ; DF E0                [286,FPU]
8971
8972 \c{FSTSW} stores the \c{FPU} status word into \c{AX} or into a 2-byte
8973 memory area.
8974
8975 \c{FNSTSW} does the same thing as \c{FSTSW}, without first waiting
8976 for pending floating-point exceptions to clear.
8977
8978
8979 \S{insFSUB} \i\c{FSUB}, \i\c{FSUBP}, \i\c{FSUBR}, \i\c{FSUBRP}: Floating-Point Subtract
8980
8981 \c FSUB mem32                    ; D8 /4                [8086,FPU]
8982 \c FSUB mem64                    ; DC /4                [8086,FPU]
8983
8984 \c FSUB fpureg                   ; D8 E0+r              [8086,FPU]
8985 \c FSUB ST0,fpureg               ; D8 E0+r              [8086,FPU]
8986
8987 \c FSUB TO fpureg                ; DC E8+r              [8086,FPU]
8988 \c FSUB fpureg,ST0               ; DC E8+r              [8086,FPU]
8989
8990 \c FSUBR mem32                   ; D8 /5                [8086,FPU]
8991 \c FSUBR mem64                   ; DC /5                [8086,FPU]
8992
8993 \c FSUBR fpureg                  ; D8 E8+r              [8086,FPU]
8994 \c FSUBR ST0,fpureg              ; D8 E8+r              [8086,FPU]
8995
8996 \c FSUBR TO fpureg               ; DC E0+r              [8086,FPU]
8997 \c FSUBR fpureg,ST0              ; DC E0+r              [8086,FPU]
8998
8999 \c FSUBP fpureg                  ; DE E8+r              [8086,FPU]
9000 \c FSUBP fpureg,ST0              ; DE E8+r              [8086,FPU]
9001
9002 \c FSUBRP fpureg                 ; DE E0+r              [8086,FPU]
9003 \c FSUBRP fpureg,ST0             ; DE E0+r              [8086,FPU]
9004
9005 \b \c{FSUB} subtracts the given operand from \c{ST0} and stores the
9006 result back in \c{ST0}, unless the \c{TO} qualifier is given, in
9007 which case it subtracts \c{ST0} from the given operand and stores
9008 the result in the operand.
9009
9010 \b \c{FSUBR} does the same thing, but does the subtraction the other
9011 way up: so if \c{TO} is not given, it subtracts \c{ST0} from the given
9012 operand and stores the result in \c{ST0}, whereas if \c{TO} is given
9013 it subtracts its operand from \c{ST0} and stores the result in the
9014 operand.
9015
9016 \b \c{FSUBP} operates like \c{FSUB TO}, but pops the register stack
9017 once it has finished.
9018
9019 \b \c{FSUBRP} operates like \c{FSUBR TO}, but pops the register stack
9020 once it has finished.
9021
9022
9023 \S{insFTST} \i\c{FTST}: Test \c{ST0} Against Zero
9024
9025 \c FTST                          ; D9 E4                [8086,FPU]
9026
9027 \c{FTST} compares \c{ST0} with zero and sets the FPU flags
9028 accordingly. \c{ST0} is treated as the left-hand side of the
9029 comparison, so that a `less-than' result is generated if \c{ST0} is
9030 negative.
9031
9032
9033 \S{insFUCOM} \i\c{FUCOMxx}: Floating-Point Unordered Compare
9034
9035 \c FUCOM fpureg                  ; DD E0+r              [386,FPU]
9036 \c FUCOM ST0,fpureg              ; DD E0+r              [386,FPU]
9037
9038 \c FUCOMP fpureg                 ; DD E8+r              [386,FPU]
9039 \c FUCOMP ST0,fpureg             ; DD E8+r              [386,FPU]
9040
9041 \c FUCOMPP                       ; DA E9                [386,FPU]
9042
9043 \c FUCOMI fpureg                 ; DB E8+r              [P6,FPU]
9044 \c FUCOMI ST0,fpureg             ; DB E8+r              [P6,FPU]
9045
9046 \c FUCOMIP fpureg                ; DF E8+r              [P6,FPU]
9047 \c FUCOMIP ST0,fpureg            ; DF E8+r              [P6,FPU]
9048
9049 \b \c{FUCOM} compares \c{ST0} with the given operand, and sets the
9050 FPU flags accordingly. \c{ST0} is treated as the left-hand side of
9051 the comparison, so that the carry flag is set (for a `less-than'
9052 result) if \c{ST0} is less than the given operand.
9053
9054 \b \c{FUCOMP} does the same as \c{FUCOM}, but pops the register stack
9055 afterwards. \c{FUCOMPP} compares \c{ST0} with \c{ST1} and then pops
9056 the register stack twice.
9057
9058 \b \c{FUCOMI} and \c{FUCOMIP} work like the corresponding forms of
9059 \c{FUCOM} and \c{FUCOMP}, but write their results directly to the CPU
9060 flags register rather than the FPU status word, so they can be
9061 immediately followed by conditional jump or conditional move
9062 instructions.
9063
9064 The \c{FUCOM} instructions differ from the \c{FCOM} instructions
9065 (\k{insFCOM}) only in the way they handle quiet NaNs: \c{FUCOM} will
9066 handle them silently and set the condition code flags to an
9067 `unordered' result, whereas \c{FCOM} will generate an exception.
9068
9069
9070 \S{insFXAM} \i\c{FXAM}: Examine Class of Value in \c{ST0}
9071
9072 \c FXAM                          ; D9 E5                [8086,FPU]
9073
9074 \c{FXAM} sets the FPU flags \c{C3}, \c{C2} and \c{C0} depending on
9075 the type of value stored in \c{ST0}:
9076
9077 \c  Register contents     Flags
9078
9079 \c  Unsupported format    000
9080 \c  NaN                   001
9081 \c  Finite number         010
9082 \c  Infinity              011
9083 \c  Zero                  100
9084 \c  Empty register        101
9085 \c  Denormal              110
9086
9087 Additionally, the \c{C1} flag is set to the sign of the number.
9088
9089
9090 \S{insFXCH} \i\c{FXCH}: Floating-Point Exchange
9091
9092 \c FXCH                          ; D9 C9                [8086,FPU]
9093 \c FXCH fpureg                   ; D9 C8+r              [8086,FPU]
9094 \c FXCH fpureg,ST0               ; D9 C8+r              [8086,FPU]
9095 \c FXCH ST0,fpureg               ; D9 C8+r              [8086,FPU]
9096
9097 \c{FXCH} exchanges \c{ST0} with a given FPU register. The no-operand
9098 form exchanges \c{ST0} with \c{ST1}.
9099
9100
9101 \S{insFXRSTOR} \i\c{FXRSTOR}: Restore \c{FP}, \c{MMX} and \c{SSE} State
9102
9103 \c FXRSTOR memory                ; 0F AE /1               [P6,SSE,FPU]
9104
9105 The \c{FXRSTOR} instruction reloads the \c{FPU}, \c{MMX} and \c{SSE}
9106 state (environment and registers), from the 512 byte memory area defined
9107 by the source operand. This data should have been written by a previous
9108 \c{FXSAVE}.
9109
9110
9111 \S{insFXSAVE} \i\c{FXSAVE}: Store \c{FP}, \c{MMX} and \c{SSE} State
9112
9113 \c FXSAVE memory                 ; 0F AE /0         [P6,SSE,FPU]
9114
9115 \c{FXSAVE}The FXSAVE instruction writes the current \c{FPU}, \c{MMX}
9116 and \c{SSE} technology states (environment and registers), to the
9117 512 byte memory area defined by the destination operand. It does this
9118 without checking for pending unmasked floating-point exceptions
9119 (similar to the operation of \c{FNSAVE}).
9120
9121 Unlike the \c{FSAVE/FNSAVE} instructions, the processor retains the
9122 contents of the \c{FPU}, \c{MMX} and \c{SSE} state in the processor
9123 after the state has been saved. This instruction has been optimised
9124 to maximize floating-point save performance.
9125
9126
9127 \S{insFXTRACT} \i\c{FXTRACT}: Extract Exponent and Significand
9128
9129 \c FXTRACT                       ; D9 F4                [8086,FPU]
9130
9131 \c{FXTRACT} separates the number in \c{ST0} into its exponent and
9132 significand (mantissa), stores the exponent back into \c{ST0}, and
9133 then pushes the significand on the register stack (so that the
9134 significand ends up in \c{ST0}, and the exponent in \c{ST1}).
9135
9136
9137 \S{insFYL2X} \i\c{FYL2X}, \i\c{FYL2XP1}: Compute Y times Log2(X) or Log2(X+1)
9138
9139 \c FYL2X                         ; D9 F1                [8086,FPU]
9140 \c FYL2XP1                       ; D9 F9                [8086,FPU]
9141
9142 \c{FYL2X} multiplies \c{ST1} by the base-2 logarithm of \c{ST0},
9143 stores the result in \c{ST1}, and pops the register stack (so that
9144 the result ends up in \c{ST0}). \c{ST0} must be non-zero and
9145 positive.
9146
9147 \c{FYL2XP1} works the same way, but replacing the base-2 log of
9148 \c{ST0} with that of \c{ST0} plus one. This time, \c{ST0} must have
9149 magnitude no greater than 1 minus half the square root of two.
9150
9151
9152 \S{insHLT} \i\c{HLT}: Halt Processor
9153
9154 \c HLT                           ; F4                   [8086,PRIV]
9155
9156 \c{HLT} puts the processor into a halted state, where it will
9157 perform no more operations until restarted by an interrupt or a
9158 reset.
9159
9160 On the 286 and later processors, this is a privileged instruction.
9161
9162
9163 \S{insIBTS} \i\c{IBTS}: Insert Bit String
9164
9165 \c IBTS r/m16,reg16              ; o16 0F A7 /r         [386,UNDOC]
9166 \c IBTS r/m32,reg32              ; o32 0F A7 /r         [386,UNDOC]
9167
9168 The implied operation of this instruction is:
9169
9170 \c IBTS r/m16,AX,CL,reg16
9171 \c IBTS r/m32,EAX,CL,reg32
9172
9173 Writes a bit string from the source operand to the destination.
9174 \c{CL} indicates the number of bits to be copied, from the low bits
9175 of the source. \c{(E)AX} indicates the low order bit offset in the
9176 destination that is written to. For example, if \c{CL} is set to 4
9177 and \c{AX} (for 16-bit code) is set to 5, bits 0-3 of \c{src} will
9178 be copied to bits 5-8 of \c{dst}. This instruction is very poorly
9179 documented, and I have been unable to find any official source of
9180 documentation on it.
9181
9182 \c{IBTS} is supported only on the early Intel 386s, and conflicts
9183 with the opcodes for \c{CMPXCHG486} (on early Intel 486s). NASM
9184 supports it only for completeness. Its counterpart is \c{XBTS}
9185 (see \k{insXBTS}).
9186
9187
9188 \S{insIDIV} \i\c{IDIV}: Signed Integer Divide
9189
9190 \c IDIV r/m8                     ; F6 /7                [8086]
9191 \c IDIV r/m16                    ; o16 F7 /7            [8086]
9192 \c IDIV r/m32                    ; o32 F7 /7            [386]
9193
9194 \c{IDIV} performs signed integer division. The explicit operand
9195 provided is the divisor; the dividend and destination operands
9196 are implicit, in the following way:
9197
9198 \b For \c{IDIV r/m8}, \c{AX} is divided by the given operand;
9199 the quotient is stored in \c{AL} and the remainder in \c{AH}.
9200
9201 \b For \c{IDIV r/m16}, \c{DX:AX} is divided by the given operand;
9202 the quotient is stored in \c{AX} and the remainder in \c{DX}.
9203
9204 \b For \c{IDIV r/m32}, \c{EDX:EAX} is divided by the given operand;
9205 the quotient is stored in \c{EAX} and the remainder in \c{EDX}.
9206
9207 Unsigned integer division is performed by the \c{DIV} instruction:
9208 see \k{insDIV}.
9209
9210
9211 \S{insIMUL} \i\c{IMUL}: Signed Integer Multiply
9212
9213 \c IMUL r/m8                     ; F6 /5                [8086]
9214 \c IMUL r/m16                    ; o16 F7 /5            [8086]
9215 \c IMUL r/m32                    ; o32 F7 /5            [386]
9216
9217 \c IMUL reg16,r/m16              ; o16 0F AF /r         [386]
9218 \c IMUL reg32,r/m32              ; o32 0F AF /r         [386]
9219
9220 \c IMUL reg16,imm8               ; o16 6B /r ib         [186]
9221 \c IMUL reg16,imm16              ; o16 69 /r iw         [186]
9222 \c IMUL reg32,imm8               ; o32 6B /r ib         [386]
9223 \c IMUL reg32,imm32              ; o32 69 /r id         [386]
9224
9225 \c IMUL reg16,r/m16,imm8         ; o16 6B /r ib         [186]
9226 \c IMUL reg16,r/m16,imm16        ; o16 69 /r iw         [186]
9227 \c IMUL reg32,r/m32,imm8         ; o32 6B /r ib         [386]
9228 \c IMUL reg32,r/m32,imm32        ; o32 69 /r id         [386]
9229
9230 \c{IMUL} performs signed integer multiplication. For the
9231 single-operand form, the other operand and destination are
9232 implicit, in the following way:
9233
9234 \b For \c{IMUL r/m8}, \c{AL} is multiplied by the given operand;
9235 the product is stored in \c{AX}.
9236
9237 \b For \c{IMUL r/m16}, \c{AX} is multiplied by the given operand;
9238 the product is stored in \c{DX:AX}.
9239
9240 \b For \c{IMUL r/m32}, \c{EAX} is multiplied by the given operand;
9241 the product is stored in \c{EDX:EAX}.
9242
9243 The two-operand form multiplies its two operands and stores the
9244 result in the destination (first) operand. The three-operand
9245 form multiplies its last two operands and stores the result in
9246 the first operand.
9247
9248 The two-operand form with an immediate second operand is in
9249 fact a shorthand for the three-operand form, as can be seen by
9250 examining the opcode descriptions: in the two-operand form, the
9251 code \c{/r} takes both its register and \c{r/m} parts from the
9252 same operand (the first one).
9253
9254 In the forms with an 8-bit immediate operand and another longer
9255 source operand, the immediate operand is considered to be signed,
9256 and is sign-extended to the length of the other source operand.
9257 In these cases, the \c{BYTE} qualifier is necessary to force
9258 NASM to generate this form of the instruction.
9259
9260 Unsigned integer multiplication is performed by the \c{MUL}
9261 instruction: see \k{insMUL}.
9262
9263
9264 \S{insIN} \i\c{IN}: Input from I/O Port
9265
9266 \c IN AL,imm8                    ; E4 ib                [8086]
9267 \c IN AX,imm8                    ; o16 E5 ib            [8086]
9268 \c IN EAX,imm8                   ; o32 E5 ib            [386]
9269 \c IN AL,DX                      ; EC                   [8086]
9270 \c IN AX,DX                      ; o16 ED               [8086]
9271 \c IN EAX,DX                     ; o32 ED               [386]
9272
9273 \c{IN} reads a byte, word or doubleword from the specified I/O port,
9274 and stores it in the given destination register. The port number may
9275 be specified as an immediate value if it is between 0 and 255, and
9276 otherwise must be stored in \c{DX}. See also \c{OUT} (\k{insOUT}).
9277
9278
9279 \S{insINC} \i\c{INC}: Increment Integer
9280
9281 \c INC reg16                     ; o16 40+r             [8086]
9282 \c INC reg32                     ; o32 40+r             [386]
9283 \c INC r/m8                      ; FE /0                [8086]
9284 \c INC r/m16                     ; o16 FF /0            [8086]
9285 \c INC r/m32                     ; o32 FF /0            [386]
9286
9287 \c{INC} adds 1 to its operand. It does \e{not} affect the carry
9288 flag: to affect the carry flag, use \c{ADD something,1} (see
9289 \k{insADD}). \c{INC} affects all the other flags according to the result.
9290
9291 This instruction can be used with a \c{LOCK} prefix to allow atomic execution.
9292
9293 See also \c{DEC} (\k{insDEC}).
9294
9295
9296 \S{insINSB} \i\c{INSB}, \i\c{INSW}, \i\c{INSD}: Input String from I/O Port
9297
9298 \c INSB                          ; 6C                   [186]
9299 \c INSW                          ; o16 6D               [186]
9300 \c INSD                          ; o32 6D               [386]
9301
9302 \c{INSB} inputs a byte from the I/O port specified in \c{DX} and
9303 stores it at \c{[ES:DI]} or \c{[ES:EDI]}. It then increments or
9304 decrements (depending on the direction flag: increments if the flag
9305 is clear, decrements if it is set) \c{DI} or \c{EDI}.
9306
9307 The register used is \c{DI} if the address size is 16 bits, and
9308 \c{EDI} if it is 32 bits. If you need to use an address size not
9309 equal to the current \c{BITS} setting, you can use an explicit
9310 \i\c{a16} or \i\c{a32} prefix.
9311
9312 Segment override prefixes have no effect for this instruction: the
9313 use of \c{ES} for the load from \c{[DI]} or \c{[EDI]} cannot be
9314 overridden.
9315
9316 \c{INSW} and \c{INSD} work in the same way, but they input a word or
9317 a doubleword instead of a byte, and increment or decrement the
9318 addressing register by 2 or 4 instead of 1.
9319
9320 The \c{REP} prefix may be used to repeat the instruction \c{CX} (or
9321 \c{ECX} - again, the address size chooses which) times.
9322
9323 See also \c{OUTSB}, \c{OUTSW} and \c{OUTSD} (\k{insOUTSB}).
9324
9325
9326 \S{insINT} \i\c{INT}: Software Interrupt
9327
9328 \c INT imm8                      ; CD ib                [8086]
9329
9330 \c{INT} causes a software interrupt through a specified vector
9331 number from 0 to 255.
9332
9333 The code generated by the \c{INT} instruction is always two bytes
9334 long: although there are short forms for some \c{INT} instructions,
9335 NASM does not generate them when it sees the \c{INT} mnemonic. In
9336 order to generate single-byte breakpoint instructions, use the
9337 \c{INT3} or \c{INT1} instructions (see \k{insINT1}) instead.
9338
9339
9340 \S{insINT1} \i\c{INT3}, \i\c{INT1}, \i\c{ICEBP}, \i\c{INT01}: Breakpoints
9341
9342 \c INT1                          ; F1                   [P6]
9343 \c ICEBP                         ; F1                   [P6]
9344 \c INT01                         ; F1                   [P6]
9345
9346 \c INT3                          ; CC                   [8086]
9347 \c INT03                         ; CC                   [8086]
9348
9349 \c{INT1} and \c{INT3} are short one-byte forms of the instructions
9350 \c{INT 1} and \c{INT 3} (see \k{insINT}). They perform a similar
9351 function to their longer counterparts, but take up less code space.
9352 They are used as breakpoints by debuggers.
9353
9354 \b \c{INT1}, and its alternative synonyms \c{INT01} and \c{ICEBP}, is
9355 an instruction used by in-circuit emulators (ICEs). It is present,
9356 though not documented, on some processors down to the 286, but is
9357 only documented for the Pentium Pro. \c{INT3} is the instruction
9358 normally used as a breakpoint by debuggers.
9359
9360 \b \c{INT3}, and its synonym \c{INT03}, is not precisely equivalent to
9361 \c{INT 3}: the short form, since it is designed to be used as a
9362 breakpoint, bypasses the normal \c{IOPL} checks in virtual-8086 mode,
9363 and also does not go through interrupt redirection.
9364
9365
9366 \S{insINTO} \i\c{INTO}: Interrupt if Overflow
9367
9368 \c INTO                          ; CE                   [8086]
9369
9370 \c{INTO} performs an \c{INT 4} software interrupt (see \k{insINT})
9371 if and only if the overflow flag is set.
9372
9373
9374 \S{insINVD} \i\c{INVD}: Invalidate Internal Caches
9375
9376 \c INVD                          ; 0F 08                [486]
9377
9378 \c{INVD} invalidates and empties the processor's internal caches,
9379 and causes the processor to instruct external caches to do the same.
9380 It does not write the contents of the caches back to memory first:
9381 any modified data held in the caches will be lost. To write the data
9382 back first, use \c{WBINVD} (\k{insWBINVD}).
9383
9384
9385 \S{insINVLPG} \i\c{INVLPG}: Invalidate TLB Entry
9386
9387 \c INVLPG mem                    ; 0F 01 /7             [486]
9388
9389 \c{INVLPG} invalidates the translation lookahead buffer (TLB) entry
9390 associated with the supplied memory address.
9391
9392
9393 \S{insIRET} \i\c{IRET}, \i\c{IRETW}, \i\c{IRETD}: Return from Interrupt
9394
9395 \c IRET                          ; CF                   [8086]
9396 \c IRETW                         ; o16 CF               [8086]
9397 \c IRETD                         ; o32 CF               [386]
9398
9399 \c{IRET} returns from an interrupt (hardware or software) by means
9400 of popping \c{IP} (or \c{EIP}), \c{CS} and the flags off the stack
9401 and then continuing execution from the new \c{CS:IP}.
9402
9403 \c{IRETW} pops \c{IP}, \c{CS} and the flags as 2 bytes each, taking
9404 6 bytes off the stack in total. \c{IRETD} pops \c{EIP} as 4 bytes,
9405 pops a further 4 bytes of which the top two are discarded and the
9406 bottom two go into \c{CS}, and pops the flags as 4 bytes as well,
9407 taking 12 bytes off the stack.
9408
9409 \c{IRET} is a shorthand for either \c{IRETW} or \c{IRETD}, depending
9410 on the default \c{BITS} setting at the time.
9411
9412
9413 \S{insJcc} \i\c{Jcc}: Conditional Branch
9414
9415 \c Jcc imm                       ; 70+cc rb             [8086]
9416 \c Jcc NEAR imm                  ; 0F 80+cc rw/rd       [386]
9417
9418 The \i{conditional jump} instructions execute a near (same segment)
9419 jump if and only if their conditions are satisfied. For example,
9420 \c{JNZ} jumps only if the zero flag is not set.
9421
9422 The ordinary form of the instructions has only a 128-byte range; the
9423 \c{NEAR} form is a 386 extension to the instruction set, and can
9424 span the full size of a segment. NASM will not override your choice
9425 of jump instruction: if you want \c{Jcc NEAR}, you have to use the
9426 \c{NEAR} keyword.
9427
9428 The \c{SHORT} keyword is allowed on the first form of the
9429 instruction, for clarity, but is not necessary.
9430
9431 For details of the condition codes, see \k{iref-cc}.
9432
9433
9434 \S{insJCXZ} \i\c{JCXZ}, \i\c{JECXZ}: Jump if CX/ECX Zero
9435
9436 \c JCXZ imm                      ; a16 E3 rb            [8086]
9437 \c JECXZ imm                     ; a32 E3 rb            [386]
9438
9439 \c{JCXZ} performs a short jump (with maximum range 128 bytes) if and
9440 only if the contents of the \c{CX} register is 0. \c{JECXZ} does the
9441 same thing, but with \c{ECX}.
9442
9443
9444 \S{insJMP} \i\c{JMP}: Jump
9445
9446 \c JMP imm                       ; E9 rw/rd             [8086]
9447 \c JMP SHORT imm                 ; EB rb                [8086]
9448 \c JMP imm:imm16                 ; o16 EA iw iw         [8086]
9449 \c JMP imm:imm32                 ; o32 EA id iw         [386]
9450 \c JMP FAR mem                   ; o16 FF /5            [8086]
9451 \c JMP FAR mem32                 ; o32 FF /5            [386]
9452 \c JMP r/m16                     ; o16 FF /4            [8086]
9453 \c JMP r/m32                     ; o32 FF /4            [386]
9454
9455 \c{JMP} jumps to a given address. The address may be specified as an
9456 absolute segment and offset, or as a relative jump within the
9457 current segment.
9458
9459 \c{JMP SHORT imm} has a maximum range of 128 bytes, since the
9460 displacement is specified as only 8 bits, but takes up less code
9461 space. NASM does not choose when to generate \c{JMP SHORT} for you:
9462 you must explicitly code \c{SHORT} every time you want a short jump.
9463
9464 You can choose between the two immediate \i{far jump} forms (\c{JMP
9465 imm:imm}) by the use of the \c{WORD} and \c{DWORD} keywords: \c{JMP
9466 WORD 0x1234:0x5678}) or \c{JMP DWORD 0x1234:0x56789abc}.
9467
9468 The \c{JMP FAR mem} forms execute a far jump by loading the
9469 destination address out of memory. The address loaded consists of 16
9470 or 32 bits of offset (depending on the operand size), and 16 bits of
9471 segment. The operand size may be overridden using \c{JMP WORD FAR
9472 mem} or \c{JMP DWORD FAR mem}.
9473
9474 The \c{JMP r/m} forms execute a \i{near jump} (within the same
9475 segment), loading the destination address out of memory or out of a
9476 register. The keyword \c{NEAR} may be specified, for clarity, in
9477 these forms, but is not necessary. Again, operand size can be
9478 overridden using \c{JMP WORD mem} or \c{JMP DWORD mem}.
9479
9480 As a convenience, NASM does not require you to jump to a far symbol
9481 by coding the cumbersome \c{JMP SEG routine:routine}, but instead
9482 allows the easier synonym \c{JMP FAR routine}.
9483
9484 The \c{CALL r/m} forms given above are near calls; NASM will accept
9485 the \c{NEAR} keyword (e.g. \c{CALL NEAR [address]}), even though it
9486 is not strictly necessary.
9487
9488
9489 \S{insLAHF} \i\c{LAHF}: Load AH from Flags
9490
9491 \c LAHF                          ; 9F                   [8086]
9492
9493 \c{LAHF} sets the \c{AH} register according to the contents of the
9494 low byte of the flags word.
9495
9496 The operation of \c{LAHF} is:
9497
9498 \c  AH <-- SF:ZF:0:AF:0:PF:1:CF
9499
9500 See also \c{SAHF} (\k{insSAHF}).
9501
9502
9503 \S{insLAR} \i\c{LAR}: Load Access Rights
9504
9505 \c LAR reg16,r/m16               ; o16 0F 02 /r         [286,PRIV]
9506 \c LAR reg32,r/m32               ; o32 0F 02 /r         [286,PRIV]
9507
9508 \c{LAR} takes the segment selector specified by its source (second)
9509 operand, finds the corresponding segment descriptor in the GDT or
9510 LDT, and loads the access-rights byte of the descriptor into its
9511 destination (first) operand.
9512
9513
9514 \S{insLDMXCSR} \i\c{LDMXCSR}: Load Streaming SIMD Extension
9515  Control/Status
9516
9517 \c LDMXCSR mem32                 ; 0F AE /2        [KATMAI,SSE]
9518
9519 \c{LDMXCSR} loads 32-bits of data from the specified memory location
9520 into the \c{MXCSR} control/status register. \c{MXCSR} is used to
9521 enable masked/unmasked exception handling, to set rounding modes,
9522 to set flush-to-zero mode, and to view exception status flags.
9523
9524 For details of the \c{MXCSR} register, see the Intel processor docs.
9525
9526 See also \c{STMXCSR} (\k{insSTMXCSR}
9527
9528
9529 \S{insLDS} \i\c{LDS}, \i\c{LES}, \i\c{LFS}, \i\c{LGS}, \i\c{LSS}: Load Far Pointer
9530
9531 \c LDS reg16,mem                 ; o16 C5 /r            [8086]
9532 \c LDS reg32,mem                 ; o32 C5 /r            [386]
9533
9534 \c LES reg16,mem                 ; o16 C4 /r            [8086]
9535 \c LES reg32,mem                 ; o32 C4 /r            [386]
9536
9537 \c LFS reg16,mem                 ; o16 0F B4 /r         [386]
9538 \c LFS reg32,mem                 ; o32 0F B4 /r         [386]
9539
9540 \c LGS reg16,mem                 ; o16 0F B5 /r         [386]
9541 \c LGS reg32,mem                 ; o32 0F B5 /r         [386]
9542
9543 \c LSS reg16,mem                 ; o16 0F B2 /r         [386]
9544 \c LSS reg32,mem                 ; o32 0F B2 /r         [386]
9545
9546 These instructions load an entire far pointer (16 or 32 bits of
9547 offset, plus 16 bits of segment) out of memory in one go. \c{LDS},
9548 for example, loads 16 or 32 bits from the given memory address into
9549 the given register (depending on the size of the register), then
9550 loads the \e{next} 16 bits from memory into \c{DS}. \c{LES},
9551 \c{LFS}, \c{LGS} and \c{LSS} work in the same way but use the other
9552 segment registers.
9553
9554
9555 \S{insLEA} \i\c{LEA}: Load Effective Address
9556
9557 \c LEA reg16,mem                 ; o16 8D /r            [8086]
9558 \c LEA reg32,mem                 ; o32 8D /r            [386]
9559
9560 \c{LEA}, despite its syntax, does not access memory. It calculates
9561 the effective address specified by its second operand as if it were
9562 going to load or store data from it, but instead it stores the
9563 calculated address into the register specified by its first operand.
9564 This can be used to perform quite complex calculations (e.g. \c{LEA
9565 EAX,[EBX+ECX*4+100]}) in one instruction.
9566
9567 \c{LEA}, despite being a purely arithmetic instruction which
9568 accesses no memory, still requires square brackets around its second
9569 operand, as if it were a memory reference.
9570
9571 The size of the calculation is the current \e{address} size, and the
9572 size that the result is stored as is the current \e{operand} size.
9573 If the address and operand size are not the same, then if the
9574 addressing mode was 32-bits, the low 16-bits are stored, and if the
9575 address was 16-bits, it is zero-extended to 32-bits before storing.
9576
9577
9578 \S{insLEAVE} \i\c{LEAVE}: Destroy Stack Frame
9579
9580 \c LEAVE                         ; C9                   [186]
9581
9582 \c{LEAVE} destroys a stack frame of the form created by the
9583 \c{ENTER} instruction (see \k{insENTER}). It is functionally
9584 equivalent to \c{MOV ESP,EBP} followed by \c{POP EBP} (or \c{MOV
9585 SP,BP} followed by \c{POP BP} in 16-bit mode).
9586
9587
9588 \S{insLFENCE} \i\c{LFENCE}: Load Fence
9589
9590 \c LFENCE                        ; 0F AE /5        [WILLAMETTE,SSE2]
9591
9592 \c{LFENCE} performs a serialising operation on all loads from memory
9593 that were issued before the \c{LFENCE} instruction. This guarantees that
9594 all memory reads before the \c{LFENCE} instruction are visible before any
9595 reads after the \c{LFENCE} instruction.
9596
9597 \c{LFENCE} is ordered respective to other \c{LFENCE} instruction, \c{MFENCE},
9598 any memory read and any other serialising instruction (such as \c{CPUID}).
9599
9600 Weakly ordered memory types can be used to achieve higher processor
9601 performance through such techniques as out-of-order issue and
9602 speculative reads. The degree to which a consumer of data recognizes
9603 or knows that the data is weakly ordered varies among applications
9604 and may be unknown to the producer of this data. The \c{LFENCE}
9605 instruction provides a performance-efficient way of ensuring load
9606 ordering between routines that produce weakly-ordered results and
9607 routines that consume that data.
9608
9609 \c{LFENCE} uses the following ModRM encoding:
9610
9611 \c           Mod (7:6)        = 11B
9612 \c           Reg/Opcode (5:3) = 101B
9613 \c           R/M (2:0)        = 000B
9614
9615 All other ModRM encodings are defined to be reserved, and use
9616 of these encodings risks incompatibility with future processors.
9617
9618 See also \c{SFENCE} (\k{insSFENCE}) and \c{MFENCE} (\k{insMFENCE}).
9619
9620
9621 \S{insLGDT} \i\c{LGDT}, \i\c{LIDT}, \i\c{LLDT}: Load Descriptor Tables
9622
9623 \c LGDT mem                      ; 0F 01 /2             [286,PRIV]
9624 \c LIDT mem                      ; 0F 01 /3             [286,PRIV]
9625 \c LLDT r/m16                    ; 0F 00 /2             [286,PRIV]
9626
9627 \c{LGDT} and \c{LIDT} both take a 6-byte memory area as an operand:
9628 they load a 32-bit linear address and a 16-bit size limit from that
9629 area (in the opposite order) into the \c{GDTR} (global descriptor table
9630 register) or \c{IDTR} (interrupt descriptor table register). These are
9631 the only instructions which directly use \e{linear} addresses, rather
9632 than segment/offset pairs.
9633
9634 \c{LLDT} takes a segment selector as an operand. The processor looks
9635 up that selector in the GDT and stores the limit and base address
9636 given there into the \c{LDTR} (local descriptor table register).
9637
9638 See also \c{SGDT}, \c{SIDT} and \c{SLDT} (\k{insSGDT}).
9639
9640
9641 \S{insLMSW} \i\c{LMSW}: Load/Store Machine Status Word
9642
9643 \c LMSW r/m16                    ; 0F 01 /6             [286,PRIV]
9644
9645 \c{LMSW} loads the bottom four bits of the source operand into the
9646 bottom four bits of the \c{CR0} control register (or the Machine
9647 Status Word, on 286 processors). See also \c{SMSW} (\k{insSMSW}).
9648
9649
9650 \S{insLOADALL} \i\c{LOADALL}, \i\c{LOADALL286}: Load Processor State
9651
9652 \c LOADALL                       ; 0F 07                [386,UNDOC]
9653 \c LOADALL286                    ; 0F 05                [286,UNDOC]
9654
9655 This instruction, in its two different-opcode forms, is apparently
9656 supported on most 286 processors, some 386 and possibly some 486.
9657 The opcode differs between the 286 and the 386.
9658
9659 The function of the instruction is to load all information relating
9660 to the state of the processor out of a block of memory: on the 286,
9661 this block is located implicitly at absolute address \c{0x800}, and
9662 on the 386 and 486 it is at \c{[ES:EDI]}.
9663
9664
9665 \S{insLODSB} \i\c{LODSB}, \i\c{LODSW}, \i\c{LODSD}: Load from String
9666
9667 \c LODSB                         ; AC                   [8086]
9668 \c LODSW                         ; o16 AD               [8086]
9669 \c LODSD                         ; o32 AD               [386]
9670
9671 \c{LODSB} loads a byte from \c{[DS:SI]} or \c{[DS:ESI]} into \c{AL}.
9672 It then increments or decrements (depending on the direction flag:
9673 increments if the flag is clear, decrements if it is set) \c{SI} or
9674 \c{ESI}.
9675
9676 The register used is \c{SI} if the address size is 16 bits, and
9677 \c{ESI} if it is 32 bits. If you need to use an address size not
9678 equal to the current \c{BITS} setting, you can use an explicit
9679 \i\c{a16} or \i\c{a32} prefix.
9680
9681 The segment register used to load from \c{[SI]} or \c{[ESI]} can be
9682 overridden by using a segment register name as a prefix (for
9683 example, \c{ES LODSB}).
9684
9685 \c{LODSW} and \c{LODSD} work in the same way, but they load a
9686 word or a doubleword instead of a byte, and increment or decrement
9687 the addressing registers by 2 or 4 instead of 1.
9688
9689
9690 \S{insLOOP} \i\c{LOOP}, \i\c{LOOPE}, \i\c{LOOPZ}, \i\c{LOOPNE}, \i\c{LOOPNZ}: Loop with Counter
9691
9692 \c LOOP imm                      ; E2 rb                [8086]
9693 \c LOOP imm,CX                   ; a16 E2 rb            [8086]
9694 \c LOOP imm,ECX                  ; a32 E2 rb            [386]
9695
9696 \c LOOPE imm                     ; E1 rb                [8086]
9697 \c LOOPE imm,CX                  ; a16 E1 rb            [8086]
9698 \c LOOPE imm,ECX                 ; a32 E1 rb            [386]
9699 \c LOOPZ imm                     ; E1 rb                [8086]
9700 \c LOOPZ imm,CX                  ; a16 E1 rb            [8086]
9701 \c LOOPZ imm,ECX                 ; a32 E1 rb            [386]
9702
9703 \c LOOPNE imm                    ; E0 rb                [8086]
9704 \c LOOPNE imm,CX                 ; a16 E0 rb            [8086]
9705 \c LOOPNE imm,ECX                ; a32 E0 rb            [386]
9706 \c LOOPNZ imm                    ; E0 rb                [8086]
9707 \c LOOPNZ imm,CX                 ; a16 E0 rb            [8086]
9708 \c LOOPNZ imm,ECX                ; a32 E0 rb            [386]
9709
9710 \c{LOOP} decrements its counter register (either \c{CX} or \c{ECX} -
9711 if one is not specified explicitly, the \c{BITS} setting dictates
9712 which is used) by one, and if the counter does not become zero as a
9713 result of this operation, it jumps to the given label. The jump has
9714 a range of 128 bytes.
9715
9716 \c{LOOPE} (or its synonym \c{LOOPZ}) adds the additional condition
9717 that it only jumps if the counter is nonzero \e{and} the zero flag
9718 is set. Similarly, \c{LOOPNE} (and \c{LOOPNZ}) jumps only if the
9719 counter is nonzero and the zero flag is clear.
9720
9721
9722 \S{insLSL} \i\c{LSL}: Load Segment Limit
9723
9724 \c LSL reg16,r/m16               ; o16 0F 03 /r         [286,PRIV]
9725 \c LSL reg32,r/m32               ; o32 0F 03 /r         [286,PRIV]
9726
9727 \c{LSL} is given a segment selector in its source (second) operand;
9728 it computes the segment limit value by loading the segment limit
9729 field from the associated segment descriptor in the \c{GDT} or \c{LDT}.
9730 (This involves shifting left by 12 bits if the segment limit is
9731 page-granular, and not if it is byte-granular; so you end up with a
9732 byte limit in either case.) The segment limit obtained is then
9733 loaded into the destination (first) operand.
9734
9735
9736 \S{insLTR} \i\c{LTR}: Load Task Register
9737
9738 \c LTR r/m16                     ; 0F 00 /3             [286,PRIV]
9739
9740 \c{LTR} looks up the segment base and limit in the GDT or LDT
9741 descriptor specified by the segment selector given as its operand,
9742 and loads them into the Task Register.
9743
9744
9745 \S{insMASKMOVDQU} \i\c{MASKMOVDQU}: Byte Mask Write
9746
9747 \c MASKMOVDQU xmm1,xmm2          ; 66 0F F7 /r     [WILLAMETTE,SSE2]
9748
9749 \c{MASKMOVDQU} stores data from xmm1 to the location specified by
9750 \c{ES:(E)DI}. The size of the store depends on the address-size
9751 attribute. The most significant bit in each byte of the mask
9752 register xmm2 is used to selectively write the data (0 = no write,
9753 1 = write) on a per-byte basis.
9754
9755
9756 \S{insMASKMOVQ} \i\c{MASKMOVQ}: Byte Mask Write
9757
9758 \c MASKMOVQ mm1,mm2              ; 0F F7 /r        [KATMAI,MMX]
9759
9760 \c{MASKMOVQ} stores data from mm1 to the location specified by
9761 \c{ES:(E)DI}. The size of the store depends on the address-size
9762 attribute. The most significant bit in each byte of the mask
9763 register mm2 is used to selectively write the data (0 = no write,
9764 1 = write) on a per-byte basis.
9765
9766
9767 \S{insMAXPD} \i\c{MAXPD}: Return Packed Double-Precision FP Maximum
9768
9769 \c MAXPD xmm1,xmm2/m128          ; 66 0F 5F /r     [WILLAMETTE,SSE2]
9770
9771 \c{MAXPD} performs a SIMD compare of the packed double-precision
9772 FP numbers from xmm1 and xmm2/mem, and stores the maximum values
9773 of each pair of values in xmm1. If the values being compared are
9774 both zeroes, source2 (xmm2/m128) would be returned. If source2
9775 (xmm2/m128) is an SNaN, this SNaN is forwarded unchanged to the
9776 destination (i.e., a QNaN version of the SNaN is not returned).
9777
9778
9779 \S{insMAXPS} \i\c{MAXPS}: Return Packed Single-Precision FP Maximum
9780
9781 \c MAXPS xmm1,xmm2/m128          ; 0F 5F /r        [KATMAI,SSE]
9782
9783 \c{MAXPS} performs a SIMD compare of the packed single-precision
9784 FP numbers from xmm1 and xmm2/mem, and stores the maximum values
9785 of each pair of values in xmm1. If the values being compared are
9786 both zeroes, source2 (xmm2/m128) would be returned. If source2
9787 (xmm2/m128) is an SNaN, this SNaN is forwarded unchanged to the
9788 destination (i.e., a QNaN version of the SNaN is not returned).
9789
9790
9791 \S{insMAXSD} \i\c{MAXSD}: Return Scalar Double-Precision FP Maximum
9792
9793 \c MAXSD xmm1,xmm2/m64           ; F2 0F 5F /r     [WILLAMETTE,SSE2]
9794
9795 \c{MAXSD} compares the low-order double-precision FP numbers from
9796 xmm1 and xmm2/mem, and stores the maximum value in xmm1. If the
9797 values being compared are both zeroes, source2 (xmm2/m64) would
9798 be returned. If source2 (xmm2/m64) is an SNaN, this SNaN is
9799 forwarded unchanged to the destination (i.e., a QNaN version of
9800 the SNaN is not returned). The high quadword of the destination
9801 is left unchanged.
9802
9803
9804 \S{insMAXSS} \i\c{MAXSS}: Return Scalar Single-Precision FP Maximum
9805
9806 \c MAXSS xmm1,xmm2/m32           ; F3 0F 5F /r     [KATMAI,SSE]
9807
9808 \c{MAXSS} compares the low-order single-precision FP numbers from
9809 xmm1 and xmm2/mem, and stores the maximum value in xmm1. If the
9810 values being compared are both zeroes, source2 (xmm2/m32) would
9811 be returned. If source2 (xmm2/m32) is an SNaN, this SNaN is
9812 forwarded unchanged to the destination (i.e., a QNaN version of
9813 the SNaN is not returned). The high three doublewords of the
9814 destination are left unchanged.
9815
9816
9817 \S{insMFENCE} \i\c{MFENCE}: Memory Fence
9818
9819 \c MFENCE                        ; 0F AE /6        [WILLAMETTE,SSE2]
9820
9821 \c{MFENCE} performs a serialising operation on all loads from memory
9822 and writes to memory that were issued before the \c{MFENCE} instruction.
9823 This guarantees that all memory reads and writes before the \c{MFENCE}
9824 instruction are completed before any reads and writes after the
9825 \c{MFENCE} instruction.
9826
9827 \c{MFENCE} is ordered respective to other \c{MFENCE} instructions,
9828 \c{LFENCE}, \c{SFENCE}, any memory read and any other serialising
9829 instruction (such as \c{CPUID}).
9830
9831 Weakly ordered memory types can be used to achieve higher processor
9832 performance through such techniques as out-of-order issue, speculative
9833 reads, write-combining, and write-collapsing. The degree to which a
9834 consumer of data recognizes or knows that the data is weakly ordered
9835 varies among applications and may be unknown to the producer of this
9836 data. The \c{MFENCE} instruction provides a performance-efficient way
9837 of ensuring load and store ordering between routines that produce
9838 weakly-ordered results and routines that consume that data.
9839
9840 \c{MFENCE} uses the following ModRM encoding:
9841
9842 \c           Mod (7:6)        = 11B
9843 \c           Reg/Opcode (5:3) = 110B
9844 \c           R/M (2:0)        = 000B
9845
9846 All other ModRM encodings are defined to be reserved, and use
9847 of these encodings risks incompatibility with future processors.
9848
9849 See also \c{LFENCE} (\k{insLFENCE}) and \c{SFENCE} (\k{insSFENCE}).
9850
9851
9852 \S{insMINPD} \i\c{MINPD}: Return Packed Double-Precision FP Minimum
9853
9854 \c MINPD xmm1,xmm2/m128          ; 66 0F 5D /r     [WILLAMETTE,SSE2]
9855
9856 \c{MINPD} performs a SIMD compare of the packed double-precision
9857 FP numbers from xmm1 and xmm2/mem, and stores the minimum values
9858 of each pair of values in xmm1. If the values being compared are
9859 both zeroes, source2 (xmm2/m128) would be returned. If source2
9860 (xmm2/m128) is an SNaN, this SNaN is forwarded unchanged to the
9861 destination (i.e., a QNaN version of the SNaN is not returned).
9862
9863
9864 \S{insMINPS} \i\c{MINPS}: Return Packed Single-Precision FP Minimum
9865
9866 \c MINPS xmm1,xmm2/m128          ; 0F 5D /r        [KATMAI,SSE]
9867
9868 \c{MINPS} performs a SIMD compare of the packed single-precision
9869 FP numbers from xmm1 and xmm2/mem, and stores the minimum values
9870 of each pair of values in xmm1. If the values being compared are
9871 both zeroes, source2 (xmm2/m128) would be returned. If source2
9872 (xmm2/m128) is an SNaN, this SNaN is forwarded unchanged to the
9873 destination (i.e., a QNaN version of the SNaN is not returned).
9874
9875
9876 \S{insMINSD} \i\c{MINSD}: Return Scalar Double-Precision FP Minimum
9877
9878 \c MINSD xmm1,xmm2/m64           ; F2 0F 5D /r     [WILLAMETTE,SSE2]
9879
9880 \c{MINSD} compares the low-order double-precision FP numbers from
9881 xmm1 and xmm2/mem, and stores the minimum value in xmm1. If the
9882 values being compared are both zeroes, source2 (xmm2/m64) would
9883 be returned. If source2 (xmm2/m64) is an SNaN, this SNaN is
9884 forwarded unchanged to the destination (i.e., a QNaN version of
9885 the SNaN is not returned). The high quadword of the destination
9886 is left unchanged.
9887
9888
9889 \S{insMINSS} \i\c{MINSS}: Return Scalar Single-Precision FP Minimum
9890
9891 \c MINSS xmm1,xmm2/m32           ; F3 0F 5D /r     [KATMAI,SSE]
9892
9893 \c{MINSS} compares the low-order single-precision FP numbers from
9894 xmm1 and xmm2/mem, and stores the minimum value in xmm1. If the
9895 values being compared are both zeroes, source2 (xmm2/m32) would
9896 be returned. If source2 (xmm2/m32) is an SNaN, this SNaN is
9897 forwarded unchanged to the destination (i.e., a QNaN version of
9898 the SNaN is not returned). The high three doublewords of the
9899 destination are left unchanged.
9900
9901
9902 \S{insMOV} \i\c{MOV}: Move Data
9903
9904 \c MOV r/m8,reg8                 ; 88 /r                [8086]
9905 \c MOV r/m16,reg16               ; o16 89 /r            [8086]
9906 \c MOV r/m32,reg32               ; o32 89 /r            [386]
9907 \c MOV reg8,r/m8                 ; 8A /r                [8086]
9908 \c MOV reg16,r/m16               ; o16 8B /r            [8086]
9909 \c MOV reg32,r/m32               ; o32 8B /r            [386]
9910
9911 \c MOV reg8,imm8                 ; B0+r ib              [8086]
9912 \c MOV reg16,imm16               ; o16 B8+r iw          [8086]
9913 \c MOV reg32,imm32               ; o32 B8+r id          [386]
9914 \c MOV r/m8,imm8                 ; C6 /0 ib             [8086]
9915 \c MOV r/m16,imm16               ; o16 C7 /0 iw         [8086]
9916 \c MOV r/m32,imm32               ; o32 C7 /0 id         [386]
9917
9918 \c MOV AL,memoffs8               ; A0 ow/od             [8086]
9919 \c MOV AX,memoffs16              ; o16 A1 ow/od         [8086]
9920 \c MOV EAX,memoffs32             ; o32 A1 ow/od         [386]
9921 \c MOV memoffs8,AL               ; A2 ow/od             [8086]
9922 \c MOV memoffs16,AX              ; o16 A3 ow/od         [8086]
9923 \c MOV memoffs32,EAX             ; o32 A3 ow/od         [386]
9924
9925 \c MOV r/m16,segreg              ; o16 8C /r            [8086]
9926 \c MOV r/m32,segreg              ; o32 8C /r            [386]
9927 \c MOV segreg,r/m16              ; o16 8E /r            [8086]
9928 \c MOV segreg,r/m32              ; o32 8E /r            [386]
9929
9930 \c MOV reg32,CR0/2/3/4           ; 0F 20 /r             [386]
9931 \c MOV reg32,DR0/1/2/3/6/7       ; 0F 21 /r             [386]
9932 \c MOV reg32,TR3/4/5/6/7         ; 0F 24 /r             [386]
9933 \c MOV CR0/2/3/4,reg32           ; 0F 22 /r             [386]
9934 \c MOV DR0/1/2/3/6/7,reg32       ; 0F 23 /r             [386]
9935 \c MOV TR3/4/5/6/7,reg32         ; 0F 26 /r             [386]
9936
9937 \c{MOV} copies the contents of its source (second) operand into its
9938 destination (first) operand.
9939
9940 In all forms of the \c{MOV} instruction, the two operands are the
9941 same size, except for moving between a segment register and an
9942 \c{r/m32} operand. These instructions are treated exactly like the
9943 corresponding 16-bit equivalent (so that, for example, \c{MOV
9944 DS,EAX} functions identically to \c{MOV DS,AX} but saves a prefix
9945 when in 32-bit mode), except that when a segment register is moved
9946 into a 32-bit destination, the top two bytes of the result are
9947 undefined.
9948
9949 \c{MOV} may not use \c{CS} as a destination.
9950
9951 \c{CR4} is only a supported register on the Pentium and above.
9952
9953 Test registers are supported on 386/486 processors and on some
9954 non-Intel Pentium class processors.
9955
9956
9957 \S{insMOVAPD} \i\c{MOVAPD}: Move Aligned Packed Double-Precision FP Values
9958
9959 \c MOVAPD xmm1,xmm2/mem128       ; 66 0F 28 /r     [WILLAMETTE,SSE2]
9960 \c MOVAPD xmm1/mem128,xmm2       ; 66 0F 29 /r     [WILLAMETTE,SSE2]
9961
9962 \c{MOVAPD} moves a double quadword containing 2 packed double-precision
9963 FP values from the source operand to the destination. When the source
9964 or destination operand is a memory location, it must be aligned on a
9965 16-byte boundary.
9966
9967 To move data in and out of memory locations that are not known to be on
9968 16-byte boundaries, use the \c{MOVUPD} instruction (\k{insMOVUPD}).
9969
9970
9971 \S{insMOVAPS} \i\c{MOVAPS}: Move Aligned Packed Single-Precision FP Values
9972
9973 \c MOVAPS xmm1,xmm2/mem128       ; 0F 28 /r        [KATMAI,SSE]
9974 \c MOVAPS xmm1/mem128,xmm2       ; 0F 29 /r        [KATMAI,SSE]
9975
9976 \c{MOVAPS} moves a double quadword containing 4 packed single-precision
9977 FP values from the source operand to the destination. When the source
9978 or destination operand is a memory location, it must be aligned on a
9979 16-byte boundary.
9980
9981 To move data in and out of memory locations that are not known to be on
9982 16-byte boundaries, use the \c{MOVUPS} instruction (\k{insMOVUPS}).
9983
9984
9985 \S{insMOVD} \i\c{MOVD}: Move Doubleword to/from MMX Register
9986
9987 \c MOVD mm,r/m32                 ; 0F 6E /r             [PENT,MMX]
9988 \c MOVD r/m32,mm                 ; 0F 7E /r             [PENT,MMX]
9989 \c MOVD xmm,r/m32                ; 66 0F 6E /r     [WILLAMETTE,SSE2]
9990 \c MOVD r/m32,xmm                ; 66 0F 7E /r     [WILLAMETTE,SSE2]
9991
9992 \c{MOVD} copies 32 bits from its source (second) operand into its
9993 destination (first) operand. When the destination is a 64-bit \c{MMX}
9994 register or a 128-bit \c{XMM} register, the input value is zero-extended
9995 to fill the destination register.
9996
9997
9998 \S{insMOVDQ2Q} \i\c{MOVDQ2Q}: Move Quadword from XMM to MMX register.
9999
10000 \c MOVDQ2Q mm,xmm                ; F2 OF D6 /r     [WILLAMETTE,SSE2]
10001
10002 \c{MOVDQ2Q} moves the low quadword from the source operand to the
10003 destination operand.
10004
10005
10006 \S{insMOVDQA} \i\c{MOVDQA}: Move Aligned Double Quadword
10007
10008 \c MOVDQA xmm1,xmm2/m128         ; 66 OF 6F /r     [WILLAMETTE,SSE2]
10009 \c MOVDQA xmm1/m128,xmm2         ; 66 OF 7F /r     [WILLAMETTE,SSE2]
10010
10011 \c{MOVDQA} moves a double quadword from the source operand to the
10012 destination operand. When the source or destination operand is a
10013 memory location, it must be aligned to a 16-byte boundary.
10014
10015 To move a double quadword to or from unaligned memory locations,
10016 use the \c{MOVDQU} instruction (\k{insMOVDQU}).
10017
10018
10019 \S{insMOVDQU} \i\c{MOVDQU}: Move Unaligned Double Quadword
10020
10021 \c MOVDQU xmm1,xmm2/m128         ; F3 OF 6F /r     [WILLAMETTE,SSE2]
10022 \c MOVDQU xmm1/m128,xmm2         ; F3 OF 7F /r     [WILLAMETTE,SSE2]
10023
10024 \c{MOVDQU} moves a double quadword from the source operand to the
10025 destination operand. When the source or destination operand is a
10026 memory location, the memory may be unaligned.
10027
10028 To move a double quadword to or from known aligned memory locations,
10029 use the \c{MOVDQA} instruction (\k{insMOVDQA}).
10030
10031
10032 \S{insMOVHLPS} \i\c{MOVHLPS}: Move Packed Single-Precision FP High to Low
10033
10034 \c MOVHLPS xmm1,xmm2             ; OF 12 /r        [KATMAI,SSE]
10035
10036 \c{MOVHLPS} moves the two packed single-precision FP values from the
10037 high quadword of the source register xmm2 to the low quadword of the
10038 destination register, xmm2. The upper quadword of xmm1 is left unchanged.
10039
10040 The operation of this instruction is:
10041
10042 \c    dst[0-63]   := src[64-127],
10043 \c    dst[64-127] remains unchanged.
10044
10045
10046 \S{insMOVHPD} \i\c{MOVHPD}: Move High Packed Double-Precision FP
10047
10048 \c MOVHPD xmm,m64               ; 66 OF 16 /r      [WILLAMETTE,SSE2]
10049 \c MOVHPD m64,xmm               ; 66 OF 17 /r      [WILLAMETTE,SSE2]
10050
10051 \c{MOVHPD} moves a double-precision FP value between the source and
10052 destination operands. One of the operands is a 64-bit memory location,
10053 the other is the high quadword of an \c{XMM} register.
10054
10055 The operation of this instruction is:
10056
10057 \c    mem[0-63]   := xmm[64-127];
10058
10059 or
10060
10061 \c    xmm[0-63]   remains unchanged;
10062 \c    xmm[64-127] := mem[0-63].
10063
10064
10065 \S{insMOVHPS} \i\c{MOVHPS}: Move High Packed Single-Precision FP
10066
10067 \c MOVHPS xmm,m64               ; 0F 16 /r         [KATMAI,SSE]
10068 \c MOVHPS m64,xmm               ; 0F 17 /r         [KATMAI,SSE]
10069
10070 \c{MOVHPS} moves two packed single-precision FP values between the source
10071 and destination operands. One of the operands is a 64-bit memory location,
10072 the other is the high quadword of an \c{XMM} register.
10073
10074 The operation of this instruction is:
10075
10076 \c    mem[0-63]   := xmm[64-127];
10077
10078 or
10079
10080 \c    xmm[0-63]   remains unchanged;
10081 \c    xmm[64-127] := mem[0-63].
10082
10083
10084 \S{insMOVLHPS} \i\c{MOVLHPS}: Move Packed Single-Precision FP Low to High
10085
10086 \c MOVLHPS xmm1,xmm2             ; OF 16 /r         [KATMAI,SSE]
10087
10088 \c{MOVLHPS} moves the two packed single-precision FP values from the
10089 low quadword of the source register xmm2 to the high quadword of the
10090 destination register, xmm2. The low quadword of xmm1 is left unchanged.
10091
10092 The operation of this instruction is:
10093
10094 \c    dst[0-63]   remains unchanged;
10095 \c    dst[64-127] := src[0-63].
10096
10097 \S{insMOVLPD} \i\c{MOVLPD}: Move Low Packed Double-Precision FP
10098
10099 \c MOVLPD xmm,m64                ; 66 OF 12 /r     [WILLAMETTE,SSE2]
10100 \c MOVLPD m64,xmm                ; 66 OF 13 /r     [WILLAMETTE,SSE2]
10101
10102 \c{MOVLPD} moves a double-precision FP value between the source and
10103 destination operands. One of the operands is a 64-bit memory location,
10104 the other is the low quadword of an \c{XMM} register.
10105
10106 The operation of this instruction is:
10107
10108 \c    mem(0-63)   := xmm(0-63);
10109
10110 or
10111
10112 \c    xmm(0-63)   := mem(0-63);
10113 \c    xmm(64-127) remains unchanged.
10114
10115 \S{insMOVLPS} \i\c{MOVLPS}: Move Low Packed Single-Precision FP
10116
10117 \c MOVLPS xmm,m64                ; OF 12 /r        [KATMAI,SSE]
10118 \c MOVLPS m64,xmm                ; OF 13 /r        [KATMAI,SSE]
10119
10120 \c{MOVLPS} moves two packed single-precision FP values between the source
10121 and destination operands. One of the operands is a 64-bit memory location,
10122 the other is the low quadword of an \c{XMM} register.
10123
10124 The operation of this instruction is:
10125
10126 \c    mem(0-63)   := xmm(0-63);
10127
10128 or
10129
10130 \c    xmm(0-63)   := mem(0-63);
10131 \c    xmm(64-127) remains unchanged.
10132
10133
10134 \S{insMOVMSKPD} \i\c{MOVMSKPD}: Extract Packed Double-Precision FP Sign Mask
10135
10136 \c MOVMSKPD reg32,xmm              ; 66 0F 50 /r   [WILLAMETTE,SSE2]
10137
10138 \c{MOVMSKPD} inserts a 2-bit mask in r32, formed of the most significant
10139 bits of each double-precision FP number of the source operand.
10140
10141
10142 \S{insMOVMSKPS} \i\c{MOVMSKPS}: Extract Packed Single-Precision FP Sign Mask
10143
10144 \c MOVMSKPS reg32,xmm              ; 0F 50 /r      [KATMAI,SSE]
10145
10146 \c{MOVMSKPS} inserts a 4-bit mask in r32, formed of the most significant
10147 bits of each single-precision FP number of the source operand.
10148
10149
10150 \S{insMOVNTDQ} \i\c{MOVNTDQ}: Move Double Quadword Non Temporal
10151
10152 \c MOVNTDQ m128,xmm              ; 66 0F E7 /r     [WILLAMETTE,SSE2]
10153
10154 \c{MOVNTDQ} moves the double quadword from the \c{XMM} source
10155 register to the destination memory location, using a non-temporal
10156 hint. This store instruction minimizes cache pollution.
10157
10158
10159 \S{insMOVNTI} \i\c{MOVNTI}: Move Doubleword Non Temporal
10160
10161 \c MOVNTI m32,reg32              ; 0F C3 /r        [WILLAMETTE,SSE2]
10162
10163 \c{MOVNTI} moves the doubleword in the source register
10164 to the destination memory location, using a non-temporal
10165 hint. This store instruction minimizes cache pollution.
10166
10167
10168 \S{insMOVNTPD} \i\c{MOVNTPD}: Move Aligned Four Packed Single-Precision
10169 FP Values Non Temporal
10170
10171 \c MOVNTPD m128,xmm              ; 66 0F 2B /r     [WILLAMETTE,SSE2]
10172
10173 \c{MOVNTPD} moves the double quadword from the \c{XMM} source
10174 register to the destination memory location, using a non-temporal
10175 hint. This store instruction minimizes cache pollution. The memory
10176 location must be aligned to a 16-byte boundary.
10177
10178
10179 \S{insMOVNTPS} \i\c{MOVNTPS}: Move Aligned Four Packed Single-Precision
10180 FP Values Non Temporal
10181
10182 \c MOVNTPS m128,xmm              ; 0F 2B /r        [KATMAI,SSE]
10183
10184 \c{MOVNTPS} moves the double quadword from the \c{XMM} source
10185 register to the destination memory location, using a non-temporal
10186 hint. This store instruction minimizes cache pollution. The memory
10187 location must be aligned to a 16-byte boundary.
10188
10189
10190 \S{insMOVNTQ} \i\c{MOVNTQ}: Move Quadword Non Temporal
10191
10192 \c MOVNTQ m64,mm                 ; 0F E7 /r        [KATMAI,MMX]
10193
10194 \c{MOVNTQ} moves the quadword in the \c{MMX} source register
10195 to the destination memory location, using a non-temporal
10196 hint. This store instruction minimizes cache pollution.
10197
10198
10199 \S{insMOVQ} \i\c{MOVQ}: Move Quadword to/from MMX Register
10200
10201 \c MOVQ mm1,mm2/m64               ; 0F 6F /r             [PENT,MMX]
10202 \c MOVQ mm1/m64,mm2               ; 0F 7F /r             [PENT,MMX]
10203
10204 \c MOVQ xmm1,xmm2/m64             ; F3 0F 7E /r    [WILLAMETTE,SSE2]
10205 \c MOVQ xmm1/m64,xmm2             ; 66 0F D6 /r    [WILLAMETTE,SSE2]
10206
10207 \c{MOVQ} copies 64 bits from its source (second) operand into its
10208 destination (first) operand. When the source is an \c{XMM} register,
10209 the low quadword is moved. When the destination is an \c{XMM} register,
10210 the destination is the low quadword, and the high quadword is cleared.
10211
10212
10213 \S{insMOVQ2DQ} \i\c{MOVQ2DQ}: Move Quadword from MMX to XMM register.
10214
10215 \c MOVQ2DQ xmm,mm                ; F3 OF D6 /r     [WILLAMETTE,SSE2]
10216
10217 \c{MOVQ2DQ} moves the quadword from the source operand to the low
10218 quadword of the destination operand, and clears the high quadword.
10219
10220
10221 \S{insMOVSB} \i\c{MOVSB}, \i\c{MOVSW}, \i\c{MOVSD}: Move String
10222
10223 \c MOVSB                         ; A4                   [8086]
10224 \c MOVSW                         ; o16 A5               [8086]
10225 \c MOVSD                         ; o32 A5               [386]
10226
10227 \c{MOVSB} copies the byte at \c{[DS:SI]} or \c{[DS:ESI]} to
10228 \c{[ES:DI]} or \c{[ES:EDI]}. It then increments or decrements
10229 (depending on the direction flag: increments if the flag is clear,
10230 decrements if it is set) \c{SI} and \c{DI} (or \c{ESI} and \c{EDI}).
10231
10232 The registers used are \c{SI} and \c{DI} if the address size is 16
10233 bits, and \c{ESI} and \c{EDI} if it is 32 bits. If you need to use
10234 an address size not equal to the current \c{BITS} setting, you can
10235 use an explicit \i\c{a16} or \i\c{a32} prefix.
10236
10237 The segment register used to load from \c{[SI]} or \c{[ESI]} can be
10238 overridden by using a segment register name as a prefix (for
10239 example, \c{es movsb}). The use of \c{ES} for the store to \c{[DI]}
10240 or \c{[EDI]} cannot be overridden.
10241
10242 \c{MOVSW} and \c{MOVSD} work in the same way, but they copy a word
10243 or a doubleword instead of a byte, and increment or decrement the
10244 addressing registers by 2 or 4 instead of 1.
10245
10246 The \c{REP} prefix may be used to repeat the instruction \c{CX} (or
10247 \c{ECX} - again, the address size chooses which) times.
10248
10249
10250 \S{insMOVSD} \i\c{MOVSD}: Move Scalar Double-Precision FP Value
10251
10252 \c MOVSD xmm1,xmm2/m64           ; F2 0F 10 /r     [WILLAMETTE,SSE2]
10253 \c MOVSD xmm1/m64,xmm2           ; F2 0F 11 /r     [WILLAMETTE,SSE2]
10254
10255 \c{MOVSD} moves a double-precision FP value from the source operand
10256 to the destination operand. When the source or destination is a
10257 register, the low-order FP value is read or written.
10258
10259
10260 \S{insMOVSS} \i\c{MOVSS}: Move Scalar Single-Precision FP Value
10261
10262 \c MOVSS xmm1,xmm2/m32           ; F3 0F 10 /r     [KATMAI,SSE]
10263 \c MOVSS xmm1/m32,xmm2           ; F3 0F 11 /r     [KATMAI,SSE]
10264
10265 \c{MOVSS} moves a single-precision FP value from the source operand
10266 to the destination operand. When the source or destination is a
10267 register, the low-order FP value is read or written.
10268
10269
10270 \S{insMOVSX} \i\c{MOVSX}, \i\c{MOVZX}: Move Data with Sign or Zero Extend
10271
10272 \c MOVSX reg16,r/m8              ; o16 0F BE /r         [386]
10273 \c MOVSX reg32,r/m8              ; o32 0F BE /r         [386]
10274 \c MOVSX reg32,r/m16             ; o32 0F BF /r         [386]
10275
10276 \c MOVZX reg16,r/m8              ; o16 0F B6 /r         [386]
10277 \c MOVZX reg32,r/m8              ; o32 0F B6 /r         [386]
10278 \c MOVZX reg32,r/m16             ; o32 0F B7 /r         [386]
10279
10280 \c{MOVSX} sign-extends its source (second) operand to the length of
10281 its destination (first) operand, and copies the result into the
10282 destination operand. \c{MOVZX} does the same, but zero-extends
10283 rather than sign-extending.
10284
10285
10286 \S{insMOVUPD} \i\c{MOVUPD}: Move Unaligned Packed Double-Precision FP Values
10287
10288 \c MOVUPD xmm1,xmm2/mem128       ; 66 0F 10 /r     [WILLAMETTE,SSE2]
10289 \c MOVUPD xmm1/mem128,xmm2       ; 66 0F 11 /r     [WILLAMETTE,SSE2]
10290
10291 \c{MOVUPD} moves a double quadword containing 2 packed double-precision
10292 FP values from the source operand to the destination. This instruction
10293 makes no assumptions about alignment of memory operands.
10294
10295 To move data in and out of memory locations that are known to be on 16-byte
10296 boundaries, use the \c{MOVAPD} instruction (\k{insMOVAPD}).
10297
10298
10299 \S{insMOVUPS} \i\c{MOVUPS}: Move Unaligned Packed Single-Precision FP Values
10300
10301 \c MOVUPS xmm1,xmm2/mem128       ; 0F 10 /r        [KATMAI,SSE]
10302 \c MOVUPS xmm1/mem128,xmm2       ; 0F 11 /r        [KATMAI,SSE]
10303
10304 \c{MOVUPS} moves a double quadword containing 4 packed single-precision
10305 FP values from the source operand to the destination. This instruction
10306 makes no assumptions about alignment of memory operands.
10307
10308 To move data in and out of memory locations that are known to be on 16-byte
10309 boundaries, use the \c{MOVAPS} instruction (\k{insMOVAPS}).
10310
10311
10312 \S{insMUL} \i\c{MUL}: Unsigned Integer Multiply
10313
10314 \c MUL r/m8                      ; F6 /4                [8086]
10315 \c MUL r/m16                     ; o16 F7 /4            [8086]
10316 \c MUL r/m32                     ; o32 F7 /4            [386]
10317
10318 \c{MUL} performs unsigned integer multiplication. The other operand
10319 to the multiplication, and the destination operand, are implicit, in
10320 the following way:
10321
10322 \b For \c{MUL r/m8}, \c{AL} is multiplied by the given operand; the
10323 product is stored in \c{AX}.
10324
10325 \b For \c{MUL r/m16}, \c{AX} is multiplied by the given operand;
10326 the product is stored in \c{DX:AX}.
10327
10328 \b For \c{MUL r/m32}, \c{EAX} is multiplied by the given operand;
10329 the product is stored in \c{EDX:EAX}.
10330
10331 Signed integer multiplication is performed by the \c{IMUL}
10332 instruction: see \k{insIMUL}.
10333
10334
10335 \S{insMULPD} \i\c{MULPD}: Packed Single-FP Multiply
10336
10337 \c MULPD xmm1,xmm2/mem128        ; 66 0F 59 /r     [WILLAMETTE,SSE2]
10338
10339 \c{MULPD} performs a SIMD multiply of the packed double-precision FP
10340 values in both operands, and stores the results in the destination register.
10341
10342
10343 \S{insMULPS} \i\c{MULPS}: Packed Single-FP Multiply
10344
10345 \c MULPS xmm1,xmm2/mem128        ; 0F 59 /r        [KATMAI,SSE]
10346
10347 \c{MULPS} performs a SIMD multiply of the packed single-precision FP
10348 values in both operands, and stores the results in the destination register.
10349
10350
10351 \S{insMULSD} \i\c{MULSD}: Scalar Single-FP Multiply
10352
10353 \c MULSD xmm1,xmm2/mem32         ; F2 0F 59 /r     [WILLAMETTE,SSE2]
10354
10355 \c{MULSD} multiplies the lowest double-precision FP values of both
10356 operands, and stores the result in the low quadword of xmm1.
10357
10358
10359 \S{insMULSS} \i\c{MULSS}: Scalar Single-FP Multiply
10360
10361 \c MULSS xmm1,xmm2/mem32         ; F3 0F 59 /r     [KATMAI,SSE]
10362
10363 \c{MULSS} multiplies the lowest single-precision FP values of both
10364 operands, and stores the result in the low doubleword of xmm1.
10365
10366
10367 \S{insNEG} \i\c{NEG}, \i\c{NOT}: Two's and One's Complement
10368
10369 \c NEG r/m8                      ; F6 /3                [8086]
10370 \c NEG r/m16                     ; o16 F7 /3            [8086]
10371 \c NEG r/m32                     ; o32 F7 /3            [386]
10372
10373 \c NOT r/m8                      ; F6 /2                [8086]
10374 \c NOT r/m16                     ; o16 F7 /2            [8086]
10375 \c NOT r/m32                     ; o32 F7 /2            [386]
10376
10377 \c{NEG} replaces the contents of its operand by the two's complement
10378 negation (invert all the bits and then add one) of the original
10379 value. \c{NOT}, similarly, performs one's complement (inverts all
10380 the bits).
10381
10382
10383 \S{insNOP} \i\c{NOP}: No Operation
10384
10385 \c NOP                           ; 90                   [8086]
10386
10387 \c{NOP} performs no operation. Its opcode is the same as that
10388 generated by \c{XCHG AX,AX} or \c{XCHG EAX,EAX} (depending on the
10389 processor mode; see \k{insXCHG}).
10390
10391
10392 \S{insOR} \i\c{OR}: Bitwise OR
10393
10394 \c OR r/m8,reg8                  ; 08 /r                [8086]
10395 \c OR r/m16,reg16                ; o16 09 /r            [8086]
10396 \c OR r/m32,reg32                ; o32 09 /r            [386]
10397
10398 \c OR reg8,r/m8                  ; 0A /r                [8086]
10399 \c OR reg16,r/m16                ; o16 0B /r            [8086]
10400 \c OR reg32,r/m32                ; o32 0B /r            [386]
10401
10402 \c OR r/m8,imm8                  ; 80 /1 ib             [8086]
10403 \c OR r/m16,imm16                ; o16 81 /1 iw         [8086]
10404 \c OR r/m32,imm32                ; o32 81 /1 id         [386]
10405
10406 \c OR r/m16,imm8                 ; o16 83 /1 ib         [8086]
10407 \c OR r/m32,imm8                 ; o32 83 /1 ib         [386]
10408
10409 \c OR AL,imm8                    ; 0C ib                [8086]
10410 \c OR AX,imm16                   ; o16 0D iw            [8086]
10411 \c OR EAX,imm32                  ; o32 0D id            [386]
10412
10413 \c{OR} performs a bitwise OR operation between its two operands
10414 (i.e. each bit of the result is 1 if and only if at least one of the
10415 corresponding bits of the two inputs was 1), and stores the result
10416 in the destination (first) operand.
10417
10418 In the forms with an 8-bit immediate second operand and a longer
10419 first operand, the second operand is considered to be signed, and is
10420 sign-extended to the length of the first operand. In these cases,
10421 the \c{BYTE} qualifier is necessary to force NASM to generate this
10422 form of the instruction.
10423
10424 The MMX instruction \c{POR} (see \k{insPOR}) performs the same
10425 operation on the 64-bit MMX registers.
10426
10427
10428 \S{insORPD} \i\c{ORPD}: Bit-wise Logical OR of Double-Precision FP Data
10429
10430 \c ORPD xmm1,xmm2/m128           ; 66 0F 56 /r     [WILLAMETTE,SSE2]
10431
10432 \c{ORPD} return a bit-wise logical OR between xmm1 and xmm2/mem,
10433 and stores the result in xmm1. If the source operand is a memory
10434 location, it must be aligned to a 16-byte boundary.
10435
10436
10437 \S{insORPS} \i\c{ORPS}: Bit-wise Logical OR of Single-Precision FP Data
10438
10439 \c ORPS xmm1,xmm2/m128           ; 0F 56 /r        [KATMAI,SSE]
10440
10441 \c{ORPS} return a bit-wise logical OR between xmm1 and xmm2/mem,
10442 and stores the result in xmm1. If the source operand is a memory
10443 location, it must be aligned to a 16-byte boundary.
10444
10445
10446 \S{insOUT} \i\c{OUT}: Output Data to I/O Port
10447
10448 \c OUT imm8,AL                   ; E6 ib                [8086]
10449 \c OUT imm8,AX                   ; o16 E7 ib            [8086]
10450 \c OUT imm8,EAX                  ; o32 E7 ib            [386]
10451 \c OUT DX,AL                     ; EE                   [8086]
10452 \c OUT DX,AX                     ; o16 EF               [8086]
10453 \c OUT DX,EAX                    ; o32 EF               [386]
10454
10455 \c{OUT} writes the contents of the given source register to the
10456 specified I/O port. The port number may be specified as an immediate
10457 value if it is between 0 and 255, and otherwise must be stored in
10458 \c{DX}. See also \c{IN} (\k{insIN}).
10459
10460
10461 \S{insOUTSB} \i\c{OUTSB}, \i\c{OUTSW}, \i\c{OUTSD}: Output String to I/O Port
10462
10463 \c OUTSB                         ; 6E                   [186]
10464 \c OUTSW                         ; o16 6F               [186]
10465 \c OUTSD                         ; o32 6F               [386]
10466
10467 \c{OUTSB} loads a byte from \c{[DS:SI]} or \c{[DS:ESI]} and writes
10468 it to the I/O port specified in \c{DX}. It then increments or
10469 decrements (depending on the direction flag: increments if the flag
10470 is clear, decrements if it is set) \c{SI} or \c{ESI}.
10471
10472 The register used is \c{SI} if the address size is 16 bits, and
10473 \c{ESI} if it is 32 bits. If you need to use an address size not
10474 equal to the current \c{BITS} setting, you can use an explicit
10475 \i\c{a16} or \i\c{a32} prefix.
10476
10477 The segment register used to load from \c{[SI]} or \c{[ESI]} can be
10478 overridden by using a segment register name as a prefix (for
10479 example, \c{es outsb}).
10480
10481 \c{OUTSW} and \c{OUTSD} work in the same way, but they output a
10482 word or a doubleword instead of a byte, and increment or decrement
10483 the addressing registers by 2 or 4 instead of 1.
10484
10485 The \c{REP} prefix may be used to repeat the instruction \c{CX} (or
10486 \c{ECX} - again, the address size chooses which) times.
10487
10488
10489 \S{insPACKSSDW} \i\c{PACKSSDW}, \i\c{PACKSSWB}, \i\c{PACKUSWB}: Pack Data
10490
10491 \c PACKSSDW mm1,mm2/m64          ; 0F 6B /r             [PENT,MMX]
10492 \c PACKSSWB mm1,mm2/m64          ; 0F 63 /r             [PENT,MMX]
10493 \c PACKUSWB mm1,mm2/m64          ; 0F 67 /r             [PENT,MMX]
10494
10495 \c PACKSSDW xmm1,xmm2/m128       ; 66 0F 6B /r     [WILLAMETTE,SSE2]
10496 \c PACKSSWB xmm1,xmm2/m128       ; 66 0F 63 /r     [WILLAMETTE,SSE2]
10497 \c PACKUSWB xmm1,xmm2/m128       ; 66 0F 67 /r     [WILLAMETTE,SSE2]
10498
10499 All these instructions start by combining the source and destination
10500 operands, and then splitting the result in smaller sections which it
10501 then packs into the destination register. The \c{MMX} versions pack
10502 two 64-bit operands into one 64-bit register, while the \c{SSE}
10503 versions pack two 128-bit operands into one 128-bit register.
10504
10505 \b \c{PACKSSWB} splits the combined value into words, and then reduces
10506 the words to bytes, using signed saturation. It then packs the bytes
10507 into the destination register in the same order the words were in.
10508
10509 \b \c{PACKSSDW} performs the same operation as \c{PACKSSWB}, except that
10510 it reduces doublewords to words, then packs them into the destination
10511 register.
10512
10513 \b \c{PACKUSWB} performs the same operation as \c{PACKSSWB}, except that
10514 it uses unsigned saturation when reducing the size of the elements.
10515
10516 To perform signed saturation on a number, it is replaced by the largest
10517 signed number (\c{7FFFh} or \c{7Fh}) that \e{will} fit, and if it is too
10518 small it is replaced by the smallest signed number (\c{8000h} or
10519 \c{80h}) that will fit. To perform unsigned saturation, the input is
10520 treated as unsigned, and the input is replaced by the largest unsigned
10521 number that will fit.
10522
10523
10524 \S{insPADDB} \i\c{PADDB}, \i\c{PADDW}, \i\c{PADDD}: Add Packed Integers
10525
10526 \c PADDB mm1,mm2/m64             ; 0F FC /r             [PENT,MMX]
10527 \c PADDW mm1,mm2/m64             ; 0F FD /r             [PENT,MMX]
10528 \c PADDD mm1,mm2/m64             ; 0F FE /r             [PENT,MMX]
10529
10530 \c PADDB xmm1,xmm2/m128          ; 66 0F FC /r     [WILLAMETTE,SSE2]
10531 \c PADDW xmm1,xmm2/m128          ; 66 0F FD /r     [WILLAMETTE,SSE2]
10532 \c PADDD xmm1,xmm2/m128          ; 66 0F FE /r     [WILLAMETTE,SSE2]
10533
10534 \c{PADDx} performs packed addition of the two operands, storing the
10535 result in the destination (first) operand.
10536
10537 \b \c{PADDB} treats the operands as packed bytes, and adds each byte
10538 individually;
10539
10540 \b \c{PADDW} treats the operands as packed words;
10541
10542 \b \c{PADDD} treats its operands as packed doublewords.
10543
10544 When an individual result is too large to fit in its destination, it
10545 is wrapped around and the low bits are stored, with the carry bit
10546 discarded.
10547
10548
10549 \S{insPADDQ} \i\c{PADDQ}: Add Packed Quadword Integers
10550
10551 \c PADDQ mm1,mm2/m64             ; 0F D4 /r             [PENT,MMX]
10552
10553 \c PADDQ xmm1,xmm2/m128          ; 66 0F D4 /r     [WILLAMETTE,SSE2]
10554
10555 \c{PADDQ} adds the quadwords in the source and destination operands, and
10556 stores the result in the destination register.
10557
10558 When an individual result is too large to fit in its destination, it
10559 is wrapped around and the low bits are stored, with the carry bit
10560 discarded.
10561
10562
10563 \S{insPADDSB} \i\c{PADDSB}, \i\c{PADDSW}: Add Packed Signed Integers With Saturation
10564
10565 \c PADDSB mm1,mm2/m64            ; 0F EC /r             [PENT,MMX]
10566 \c PADDSW mm1,mm2/m64            ; 0F ED /r             [PENT,MMX]
10567
10568 \c PADDSB xmm1,xmm2/m128         ; 66 0F EC /r     [WILLAMETTE,SSE2]
10569 \c PADDSW xmm1,xmm2/m128         ; 66 0F ED /r     [WILLAMETTE,SSE2]
10570
10571 \c{PADDSx} performs packed addition of the two operands, storing the
10572 result in the destination (first) operand.
10573 \c{PADDSB} treats the operands as packed bytes, and adds each byte
10574 individually; and \c{PADDSW} treats the operands as packed words.
10575
10576 When an individual result is too large to fit in its destination, a
10577 saturated value is stored. The resulting value is the value with the
10578 largest magnitude of the same sign as the result which will fit in
10579 the available space.
10580
10581
10582 \S{insPADDSIW} \i\c{PADDSIW}: MMX Packed Addition to Implicit Destination
10583
10584 \c PADDSIW mmxreg,r/m64          ; 0F 51 /r             [CYRIX,MMX]
10585
10586 \c{PADDSIW}, specific to the Cyrix extensions to the MMX instruction
10587 set, performs the same function as \c{PADDSW}, except that the result
10588 is placed in an implied register.
10589
10590 To work out the implied register, invert the lowest bit in the register
10591 number. So \c{PADDSIW MM0,MM2} would put the result in \c{MM1}, but
10592 \c{PADDSIW MM1,MM2} would put the result in \c{MM0}.
10593
10594
10595 \S{insPADDUSB} \i\c{PADDUSB}, \i\c{PADDUSW}: Add Packed Unsigned Integers With Saturation
10596
10597 \c PADDUSB mm1,mm2/m64           ; 0F DC /r             [PENT,MMX]
10598 \c PADDUSW mm1,mm2/m64           ; 0F DD /r             [PENT,MMX]
10599
10600 \c PADDUSB xmm1,xmm2/m128         ; 66 0F DC /r    [WILLAMETTE,SSE2]
10601 \c PADDUSW xmm1,xmm2/m128         ; 66 0F DD /r    [WILLAMETTE,SSE2]
10602
10603 \c{PADDUSx} performs packed addition of the two operands, storing the
10604 result in the destination (first) operand.
10605 \c{PADDUSB} treats the operands as packed bytes, and adds each byte
10606 individually; and \c{PADDUSW} treats the operands as packed words.
10607
10608 When an individual result is too large to fit in its destination, a
10609 saturated value is stored. The resulting value is the maximum value
10610 that will fit in the available space.
10611
10612
10613 \S{insPAND} \i\c{PAND}, \i\c{PANDN}: MMX Bitwise AND and AND-NOT
10614
10615 \c PAND mm1,mm2/m64              ; 0F DB /r             [PENT,MMX]
10616 \c PANDN mm1,mm2/m64             ; 0F DF /r             [PENT,MMX]
10617
10618 \c PAND xmm1,xmm2/m128           ; 66 0F DB /r     [WILLAMETTE,SSE2]
10619 \c PANDN xmm1,xmm2/m128          ; 66 0F DF /r     [WILLAMETTE,SSE2]
10620
10621
10622 \c{PAND} performs a bitwise AND operation between its two operands
10623 (i.e. each bit of the result is 1 if and only if the corresponding
10624 bits of the two inputs were both 1), and stores the result in the
10625 destination (first) operand.
10626
10627 \c{PANDN} performs the same operation, but performs a one's
10628 complement operation on the destination (first) operand first.
10629
10630
10631 \S{insPAUSE} \i\c{PAUSE}: Spin Loop Hint
10632
10633 \c PAUSE                         ; F3 90           [WILLAMETTE,SSE2]
10634
10635 \c{PAUSE} provides a hint to the processor that the following code
10636 is a spin loop. This improves processor performance by bypassing
10637 possible memory order violations. On older processors, this instruction
10638 operates as a \c{NOP}.
10639
10640
10641 \S{insPAVEB} \i\c{PAVEB}: MMX Packed Average
10642
10643 \c PAVEB mmxreg,r/m64            ; 0F 50 /r             [CYRIX,MMX]
10644
10645 \c{PAVEB}, specific to the Cyrix MMX extensions, treats its two
10646 operands as vectors of eight unsigned bytes, and calculates the
10647 average of the corresponding bytes in the operands. The resulting
10648 vector of eight averages is stored in the first operand.
10649
10650 This opcode maps to \c{MOVMSKPS r32, xmm} on processors that support
10651 the SSE instruction set.
10652
10653
10654 \S{insPAVGB} \i\c{PAVGB} \i\c{PAVGW}: Average Packed Integers
10655
10656 \c PAVGB mm1,mm2/m64             ; 0F E0 /r        [KATMAI,MMX]
10657 \c PAVGW mm1,mm2/m64             ; 0F E3 /r        [KATMAI,MMX,SM]
10658
10659 \c PAVGB xmm1,xmm2/m128          ; 66 0F E0 /r     [WILLAMETTE,SSE2]
10660 \c PAVGW xmm1,xmm2/m128          ; 66 0F E3 /r     [WILLAMETTE,SSE2]
10661
10662 \c{PAVGB} and \c{PAVGW} add the unsigned data elements of the source
10663 operand to the unsigned data elements of the destination register,
10664 then adds 1 to the temporary results. The results of the add are then
10665 each independently right-shifted by one bit position. The high order
10666 bits of each element are filled with the carry bits of the corresponding
10667 sum.
10668
10669 \b \c{PAVGB} operates on packed unsigned bytes, and
10670
10671 \b \c{PAVGW} operates on packed unsigned words.
10672
10673
10674 \S{insPAVGUSB} \i\c{PAVGUSB}: Average of unsigned packed 8-bit values
10675
10676 \c PAVGUSB mm1,mm2/m64           ; 0F 0F /r BF          [PENT,3DNOW]
10677
10678 \c{PAVGUSB} adds the unsigned data elements of the source operand to
10679 the unsigned data elements of the destination register, then adds 1
10680 to the temporary results. The results of the add are then each
10681 independently right-shifted by one bit position. The high order bits
10682 of each element are filled with the carry bits of the corresponding
10683 sum.
10684
10685 This instruction performs exactly the same operations as the \c{PAVGB}
10686 \c{MMX} instruction (\k{insPAVGB}).
10687
10688
10689 \S{insPCMPEQB} \i\c{PCMPxx}: Compare Packed Integers.
10690
10691 \c PCMPEQB mm1,mm2/m64           ; 0F 74 /r             [PENT,MMX]
10692 \c PCMPEQW mm1,mm2/m64           ; 0F 75 /r             [PENT,MMX]
10693 \c PCMPEQD mm1,mm2/m64           ; 0F 76 /r             [PENT,MMX]
10694
10695 \c PCMPGTB mm1,mm2/m64           ; 0F 64 /r             [PENT,MMX]
10696 \c PCMPGTW mm1,mm2/m64           ; 0F 65 /r             [PENT,MMX]
10697 \c PCMPGTD mm1,mm2/m64           ; 0F 66 /r             [PENT,MMX]
10698
10699 \c PCMPEQB xmm1,xmm2/m128        ; 66 0F 74 /r     [WILLAMETTE,SSE2]
10700 \c PCMPEQW xmm1,xmm2/m128        ; 66 0F 75 /r     [WILLAMETTE,SSE2]
10701 \c PCMPEQD xmm1,xmm2/m128        ; 66 0F 76 /r     [WILLAMETTE,SSE2]
10702
10703 \c PCMPGTB xmm1,xmm2/m128        ; 66 0F 64 /r     [WILLAMETTE,SSE2]
10704 \c PCMPGTW xmm1,xmm2/m128        ; 66 0F 65 /r     [WILLAMETTE,SSE2]
10705 \c PCMPGTD xmm1,xmm2/m128        ; 66 0F 66 /r     [WILLAMETTE,SSE2]
10706
10707 The \c{PCMPxx} instructions all treat their operands as vectors of
10708 bytes, words, or doublewords; corresponding elements of the source
10709 and destination are compared, and the corresponding element of the
10710 destination (first) operand is set to all zeros or all ones
10711 depending on the result of the comparison.
10712
10713 \b \c{PCMPxxB} treats the operands as vectors of bytes;
10714
10715 \b \c{PCMPxxW} treats the operands as vectors of words;
10716
10717 \b \c{PCMPxxD} treats the operands as vectors of doublewords;
10718
10719 \b \c{PCMPEQx} sets the corresponding element of the destination
10720 operand to all ones if the two elements compared are equal;
10721
10722 \b \c{PCMPGTx} sets the destination element to all ones if the element
10723 of the first (destination) operand is greater (treated as a signed
10724 integer) than that of the second (source) operand.
10725
10726
10727 \S{insPDISTIB} \i\c{PDISTIB}: MMX Packed Distance and Accumulate
10728 with Implied Register
10729
10730 \c PDISTIB mm,m64                ; 0F 54 /r             [CYRIX,MMX]
10731
10732 \c{PDISTIB}, specific to the Cyrix MMX extensions, treats its two
10733 input operands as vectors of eight unsigned bytes. For each byte
10734 position, it finds the absolute difference between the bytes in that
10735 position in the two input operands, and adds that value to the byte
10736 in the same position in the implied output register. The addition is
10737 saturated to an unsigned byte in the same way as \c{PADDUSB}.
10738
10739 To work out the implied register, invert the lowest bit in the register
10740 number. So \c{PDISTIB MM0,M64} would put the result in \c{MM1}, but
10741 \c{PDISTIB MM1,M64} would put the result in \c{MM0}.
10742
10743 Note that \c{PDISTIB} cannot take a register as its second source
10744 operand.
10745
10746 Operation:
10747
10748 \c    dstI[0-7]     := dstI[0-7]   + ABS(src0[0-7] - src1[0-7]),
10749 \c    dstI[8-15]    := dstI[8-15]  + ABS(src0[8-15] - src1[8-15]),
10750 \c    .......
10751 \c    .......
10752 \c    dstI[56-63]   := dstI[56-63] + ABS(src0[56-63] - src1[56-63]).
10753
10754
10755 \S{insPEXTRW} \i\c{PEXTRW}: Extract Word
10756
10757 \c PEXTRW reg32,mm,imm8          ; 0F C5 /r ib     [KATMAI,MMX]
10758 \c PEXTRW reg32,xmm,imm8         ; 66 0F C5 /r ib  [WILLAMETTE,SSE2]
10759
10760 \c{PEXTRW} moves the word in the source register (second operand)
10761 that is pointed to by the count operand (third operand), into the
10762 lower half of a 32-bit general purpose register. The upper half of
10763 the register is cleared to all 0s.
10764
10765 When the source operand is an \c{MMX} register, the two least
10766 significant bits of the count specify the source word. When it is
10767 an \c{SSE} register, the three least significant bits specify the
10768 word location.
10769
10770
10771 \S{insPF2ID} \i\c{PF2ID}: Packed Single-Precision FP to Integer Convert
10772
10773 \c PF2ID mm1,mm2/m64             ; 0F 0F /r 1D          [PENT,3DNOW]
10774
10775 \c{PF2ID} converts two single-precision FP values in the source operand
10776 to signed 32-bit integers, using truncation, and stores them in the
10777 destination operand. Source values that are outside the range supported
10778 by the destination are saturated to the largest absolute value of the
10779 same sign.
10780
10781
10782 \S{insPF2IW} \i\c{PF2IW}: Packed Single-Precision FP to Integer Word Convert
10783
10784 \c PF2IW mm1,mm2/m64             ; 0F 0F /r 1C          [PENT,3DNOW]
10785
10786 \c{PF2IW} converts two single-precision FP values in the source operand
10787 to signed 16-bit integers, using truncation, and stores them in the
10788 destination operand. Source values that are outside the range supported
10789 by the destination are saturated to the largest absolute value of the
10790 same sign.
10791
10792 \b In the K6-2 and K6-III, the 16-bit value is zero-extended to 32-bits
10793 before storing.
10794
10795 \b In the K6-2+, K6-III+ and Athlon processors, the value is sign-extended
10796 to 32-bits before storing.
10797
10798
10799 \S{insPFACC} \i\c{PFACC}: Packed Single-Precision FP Accumulate
10800
10801 \c PFACC mm1,mm2/m64             ; 0F 0F /r AE          [PENT,3DNOW]
10802
10803 \c{PFACC} adds the two single-precision FP values from the destination
10804 operand together, then adds the two single-precision FP values from the
10805 source operand, and places the results in the low and high doublewords
10806 of the destination operand.
10807
10808 The operation is:
10809
10810 \c    dst[0-31]   := dst[0-31] + dst[32-63],
10811 \c    dst[32-63]  := src[0-31] + src[32-63].
10812
10813
10814 \S{insPFADD} \i\c{PFADD}: Packed Single-Precision FP Addition
10815
10816 \c PFADD mm1,mm2/m64             ; 0F 0F /r 9E          [PENT,3DNOW]
10817
10818 \c{PFADD} performs addition on each of two packed single-precision
10819 FP value pairs.
10820
10821 \c    dst[0-31]   := dst[0-31]  + src[0-31],
10822 \c    dst[32-63]  := dst[32-63] + src[32-63].
10823
10824
10825 \S{insPFCMP} \i\c{PFCMPxx}: Packed Single-Precision FP Compare
10826 \I\c{PFCMPEQ} \I\c{PFCMPGE} \I\c{PFCMPGT}
10827
10828 \c PFCMPEQ mm1,mm2/m64           ; 0F 0F /r B0          [PENT,3DNOW]
10829 \c PFCMPGE mm1,mm2/m64           ; 0F 0F /r 90          [PENT,3DNOW]
10830 \c PFCMPGT mm1,mm2/m64           ; 0F 0F /r A0          [PENT,3DNOW]
10831
10832 The \c{PFCMPxx} instructions compare the packed single-point FP values
10833 in the source and destination operands, and set the destination
10834 according to the result. If the condition is true, the destination is
10835 set to all 1s, otherwise it's set to all 0s.
10836
10837 \b \c{PFCMPEQ} tests whether dst == src;
10838
10839 \b \c{PFCMPGE} tests whether dst >= src;
10840
10841 \b \c{PFCMPGT} tests whether dst >  src.
10842
10843
10844 \S{insPFMAX} \i\c{PFMAX}: Packed Single-Precision FP Maximum
10845
10846 \c PFMAX mm1,mm2/m64             ; 0F 0F /r A4          [PENT,3DNOW]
10847
10848 \c{PFMAX} returns the higher of each pair of single-precision FP values.
10849 If the higher value is zero, it is returned as positive zero.
10850
10851
10852 \S{insPFMIN} \i\c{PFMIN}: Packed Single-Precision FP Minimum
10853
10854 \c PFMIN mm1,mm2/m64             ; 0F 0F /r 94          [PENT,3DNOW]
10855
10856 \c{PFMIN} returns the lower of each pair of single-precision FP values.
10857 If the lower value is zero, it is returned as positive zero.
10858
10859
10860 \S{insPFMUL} \i\c{PFMUL}: Packed Single-Precision FP Multiply
10861
10862 \c PFMUL mm1,mm2/m64             ; 0F 0F /r B4          [PENT,3DNOW]
10863
10864 \c{PFMUL} returns the product of each pair of single-precision FP values.
10865
10866 \c    dst[0-31]  := dst[0-31]  * src[0-31],
10867 \c    dst[32-63] := dst[32-63] * src[32-63].
10868
10869
10870 \S{insPFNACC} \i\c{PFNACC}: Packed Single-Precision FP Negative Accumulate
10871
10872 \c PFNACC mm1,mm2/m64            ; 0F 0F /r 8A          [PENT,3DNOW]
10873
10874 \c{PFNACC} performs a negative accumulate of the two single-precision
10875 FP values in the source and destination registers. The result of the
10876 accumulate from the destination register is stored in the low doubleword
10877 of the destination, and the result of the source accumulate is stored in
10878 the high doubleword of the destination register.
10879
10880 The operation is:
10881
10882 \c    dst[0-31]  := dst[0-31] - dst[32-63],
10883 \c    dst[32-63] := src[0-31] - src[32-63].
10884
10885
10886 \S{insPFPNACC} \i\c{PFPNACC}: Packed Single-Precision FP Mixed Accumulate
10887
10888 \c PFPNACC mm1,mm2/m64           ; 0F 0F /r 8E          [PENT,3DNOW]
10889
10890 \c{PFPNACC} performs a positive accumulate of the two single-precision
10891 FP values in the source register and a negative accumulate of the
10892 destination register. The result of the accumulate from the destination
10893 register is stored in the low doubleword of the destination, and the
10894 result of the source accumulate is stored in the high doubleword of the
10895 destination register.
10896
10897 The operation is:
10898
10899 \c    dst[0-31]  := dst[0-31] - dst[32-63],
10900 \c    dst[32-63] := src[0-31] + src[32-63].
10901
10902
10903 \S{insPFRCP} \i\c{PFRCP}: Packed Single-Precision FP Reciprocal Approximation
10904
10905 \c PFRCP mm1,mm2/m64             ; 0F 0F /r 96          [PENT,3DNOW]
10906
10907 \c{PFRCP} performs a low precision estimate of the reciprocal of the
10908 low-order single-precision FP value in the source operand, storing the
10909 result in both halves of the destination register. The result is accurate
10910 to 14 bits.
10911
10912 For higher precision reciprocals, this instruction should be followed by
10913 two more instructions: \c{PFRCPIT1} (\k{insPFRCPIT1}) and \c{PFRCPIT2}
10914 (\k{insPFRCPIT1}). This will result in a 24-bit accuracy. For more details,
10915 see the AMD 3DNow! technology manual.
10916
10917
10918 \S{insPFRCPIT1} \i\c{PFRCPIT1}: Packed Single-Precision FP Reciprocal,
10919 First Iteration Step
10920
10921 \c PFRCPIT1 mm1,mm2/m64          ; 0F 0F /r A6          [PENT,3DNOW]
10922
10923 \c{PFRCPIT1} performs the first intermediate step in the calculation of
10924 the reciprocal of a single-precision FP value. The first source value
10925 (\c{mm1} is the original value, and the second source value (\c{mm2/m64}
10926 is the result of a \c{PFRCP} instruction.
10927
10928 For the final step in a reciprocal, returning the full 24-bit accuracy
10929 of a single-precision FP value, see \c{PFRCPIT2} (\k{insPFRCPIT2}). For
10930 more details, see the AMD 3DNow! technology manual.
10931
10932
10933 \S{insPFRCPIT2} \i\c{PFRCPIT2}: Packed Single-Precision FP
10934 Reciprocal/ Reciprocal Square Root, Second Iteration Step
10935
10936 \c PFRCPIT2 mm1,mm2/m64          ; 0F 0F /r B6          [PENT,3DNOW]
10937
10938 \c{PFRCPIT2} performs the second and final intermediate step in the
10939 calculation of a reciprocal or reciprocal square root, refining the
10940 values returned by the \c{PFRCP} and \c{PFRSQRT} instructions,
10941 respectively.
10942
10943 The first source value (\c{mm1}) is the output of either a \c{PFRCPIT1}
10944 or a \c{PFRSQIT1} instruction, and the second source is the output of
10945 either the \c{PFRCP} or the \c{PFRSQRT} instruction. For more details,
10946 see the AMD 3DNow! technology manual.
10947
10948
10949 \S{insPFRSQIT1} \i\c{PFRSQIT1}: Packed Single-Precision FP Reciprocal
10950 Square Root, First Iteration Step
10951
10952 \c PFRSQIT1 mm1,mm2/m64          ; 0F 0F /r A7          [PENT,3DNOW]
10953
10954 \c{PFRSQIT1} performs the first intermediate step in the calculation of
10955 the reciprocal square root of a single-precision FP value. The first
10956 source value (\c{mm1} is the square of the result of a \c{PFRSQRT}
10957 instruction, and the second source value (\c{mm2/m64} is the original
10958 value.
10959
10960 For the final step in a calculation, returning the full 24-bit accuracy
10961 of a single-precision FP value, see \c{PFRCPIT2} (\k{insPFRCPIT2}). For
10962 more details, see the AMD 3DNow! technology manual.
10963
10964
10965 \S{insPFRSQRT} \i\c{PFRSQRT}: Packed Single-Precision FP Reciprocal
10966 Square Root Approximation
10967
10968 \c PFRSQRT mm1,mm2/m64           ; 0F 0F /r 97          [PENT,3DNOW]
10969
10970 \c{PFRSQRT} performs a low precision estimate of the reciprocal square
10971 root of the low-order single-precision FP value in the source operand,
10972 storing the result in both halves of the destination register. The result
10973 is accurate to 15 bits.
10974
10975 For higher precision reciprocals, this instruction should be followed by
10976 two more instructions: \c{PFRSQIT1} (\k{insPFRSQIT1}) and \c{PFRCPIT2}
10977 (\k{insPFRCPIT1}). This will result in a 24-bit accuracy. For more details,
10978 see the AMD 3DNow! technology manual.
10979
10980
10981 \S{insPFSUB} \i\c{PFSUB}: Packed Single-Precision FP Subtract
10982
10983 \c PFSUB mm1,mm2/m64             ; 0F 0F /r 9A          [PENT,3DNOW]
10984
10985 \c{PFSUB} subtracts the single-precision FP values in the source from
10986 those in the destination, and stores the result in the destination
10987 operand.
10988
10989 \c    dst[0-31]  := dst[0-31]  - src[0-31],
10990 \c    dst[32-63] := dst[32-63] - src[32-63].
10991
10992
10993 \S{insPFSUBR} \i\c{PFSUBR}: Packed Single-Precision FP Reverse Subtract
10994
10995 \c PFSUBR mm1,mm2/m64            ; 0F 0F /r AA          [PENT,3DNOW]
10996
10997 \c{PFSUBR} subtracts the single-precision FP values in the destination
10998 from those in the source, and stores the result in the destination
10999 operand.
11000
11001 \c    dst[0-31]  := src[0-31]  - dst[0-31],
11002 \c    dst[32-63] := src[32-63] - dst[32-63].
11003
11004
11005 \S{insPI2FD} \i\c{PI2FD}: Packed Doubleword Integer to Single-Precision FP Convert
11006
11007 \c PI2FD mm1,mm2/m64             ; 0F 0F /r 0D          [PENT,3DNOW]
11008
11009 \c{PF2ID} converts two signed 32-bit integers in the source operand
11010 to single-precision FP values, using truncation of significant digits,
11011 and stores them in the destination operand.
11012
11013
11014 \S{insPF2IW} \i\c{PF2IW}: Packed Word Integer to Single-Precision FP Convert
11015
11016 \c PI2FW mm1,mm2/m64             ; 0F 0F /r 0C          [PENT,3DNOW]
11017
11018 \c{PF2IW} converts two signed 16-bit integers in the source operand
11019 to single-precision FP values, and stores them in the destination
11020 operand. The input values are in the low word of each doubleword.
11021
11022
11023 \S{insPINSRW} \i\c{PINSRW}: Insert Word
11024
11025 \c PINSRW mm,r16/r32/m16,imm8    ;0F C4 /r ib      [KATMAI,MMX]
11026 \c PINSRW xmm,r16/r32/m16,imm8   ;66 0F C4 /r ib   [WILLAMETTE,SSE2]
11027
11028 \c{PINSRW} loads a word from a 16-bit register (or the low half of a
11029 32-bit register), or from memory, and loads it to the word position
11030 in the destination register, pointed at by the count operand (third
11031 operand). If the destination is an \c{MMX} register, the low two bits
11032 of the count byte are used, if it is an \c{XMM} register the low 3
11033 bits are used. The insertion is done in such a way that the other
11034 words from the destination register are left untouched.
11035
11036
11037 \S{insPMACHRIW} \i\c{PMACHRIW}: Packed Multiply and Accumulate with Rounding
11038
11039 \c PMACHRIW mm,m64               ; 0F 5E /r             [CYRIX,MMX]
11040
11041 \c{PMACHRIW} takes two packed 16-bit integer inputs, multiplies the
11042 values in the inputs, rounds on bit 15 of each result, then adds bits
11043 15-30 of each result to the corresponding position of the \e{implied}
11044 destination register.
11045
11046 The operation of this instruction is:
11047
11048 \c    dstI[0-15]  := dstI[0-15]  + (mm[0-15] *m64[0-15]
11049 \c                                           + 0x00004000)[15-30],
11050 \c    dstI[16-31] := dstI[16-31] + (mm[16-31]*m64[16-31]
11051 \c                                           + 0x00004000)[15-30],
11052 \c    dstI[32-47] := dstI[32-47] + (mm[32-47]*m64[32-47]
11053 \c                                           + 0x00004000)[15-30],
11054 \c    dstI[48-63] := dstI[48-63] + (mm[48-63]*m64[48-63]
11055 \c                                           + 0x00004000)[15-30].
11056
11057 Note that \c{PMACHRIW} cannot take a register as its second source
11058 operand.
11059
11060
11061 \S{insPMADDWD} \i\c{PMADDWD}: MMX Packed Multiply and Add
11062
11063 \c PMADDWD mm1,mm2/m64           ; 0F F5 /r             [PENT,MMX]
11064 \c PMADDWD xmm1,xmm2/m128        ; 66 0F F5 /r     [WILLAMETTE,SSE2]
11065
11066 \c{PMADDWD} treats its two inputs as vectors of signed words. It
11067 multiplies corresponding elements of the two operands, giving doubleword
11068 results. These are then added together in pairs and stored in the
11069 destination operand.
11070
11071 The operation of this instruction is:
11072
11073 \c    dst[0-31]   := (dst[0-15] * src[0-15])
11074 \c                                + (dst[16-31] * src[16-31]);
11075 \c    dst[32-63]  := (dst[32-47] * src[32-47])
11076 \c                                + (dst[48-63] * src[48-63]);
11077
11078 The following apply to the \c{SSE} version of the instruction:
11079
11080 \c    dst[64-95]  := (dst[64-79] * src[64-79])
11081 \c                                + (dst[80-95] * src[80-95]);
11082 \c    dst[96-127] := (dst[96-111] * src[96-111])
11083 \c                                + (dst[112-127] * src[112-127]).
11084
11085
11086 \S{insPMAGW} \i\c{PMAGW}: MMX Packed Magnitude
11087
11088 \c PMAGW mm1,mm2/m64             ; 0F 52 /r             [CYRIX,MMX]
11089
11090 \c{PMAGW}, specific to the Cyrix MMX extensions, treats both its
11091 operands as vectors of four signed words. It compares the absolute
11092 values of the words in corresponding positions, and sets each word
11093 of the destination (first) operand to whichever of the two words in
11094 that position had the larger absolute value.
11095
11096
11097 \S{insPMAXSW} \i\c{PMAXSW}: Packed Signed Integer Word Maximum
11098
11099 \c PMAXSW mm1,mm2/m64            ; 0F EE /r        [KATMAI,MMX]
11100 \c PMAXSW xmm1,xmm2/m128         ; 66 0F EE /r     [WILLAMETTE,SSE2]
11101
11102 \c{PMAXSW} compares each pair of words in the two source operands, and
11103 for each pair it stores the maximum value in the destination register.
11104
11105
11106 \S{insPMAXUB} \i\c{PMAXUB}: Packed Unsigned Integer Byte Maximum
11107
11108 \c PMAXUB mm1,mm2/m64            ; 0F DE /r        [KATMAI,MMX]
11109 \c PMAXUB xmm1,xmm2/m128         ; 66 0F DE /r     [WILLAMETTE,SSE2]
11110
11111 \c{PMAXUB} compares each pair of bytes in the two source operands, and
11112 for each pair it stores the maximum value in the destination register.
11113
11114
11115 \S{insPMINSW} \i\c{PMINSW}: Packed Signed Integer Word Minimum
11116
11117 \c PMINSW mm1,mm2/m64            ; 0F EA /r        [KATMAI,MMX]
11118 \c PMINSW xmm1,xmm2/m128         ; 66 0F EA /r     [WILLAMETTE,SSE2]
11119
11120 \c{PMINSW} compares each pair of words in the two source operands, and
11121 for each pair it stores the minimum value in the destination register.
11122
11123
11124 \S{insPMINUB} \i\c{PMINUB}: Packed Unsigned Integer Byte Minimum
11125
11126 \c PMINUB mm1,mm2/m64            ; 0F DA /r        [KATMAI,MMX]
11127 \c PMINUB xmm1,xmm2/m128         ; 66 0F DA /r     [WILLAMETTE,SSE2]
11128
11129 \c{PMINUB} compares each pair of bytes in the two source operands, and
11130 for each pair it stores the minimum value in the destination register.
11131
11132
11133 \S{insPMOVMSKB} \i\c{PMOVMSKB}: Move Byte Mask To Integer
11134
11135 \c PMOVMSKB reg32,mm             ; 0F D7 /r        [KATMAI,MMX]
11136 \c PMOVMSKB reg32,xmm            ; 66 0F D7 /r     [WILLAMETTE,SSE2]
11137
11138 \c{PMOVMSKB} returns an 8-bit or 16-bit mask formed of the most
11139 significant bits of each byte of source operand (8-bits for an
11140 \c{MMX} register, 16-bits for an \c{XMM} register).
11141
11142
11143 \S{insPMULHRW} \i\c{PMULHRWC}, \i\c{PMULHRIW}: Multiply Packed 16-bit Integers
11144 With Rounding, and Store High Word
11145
11146 \c PMULHRWC mm1,mm2/m64         ; 0F 59 /r              [CYRIX,MMX]
11147 \c PMULHRIW mm1,mm2/m64         ; 0F 5D /r              [CYRIX,MMX]
11148
11149 These instructions take two packed 16-bit integer inputs, multiply the
11150 values in the inputs, round on bit 15 of each result, then store bits
11151 15-30 of each result to the corresponding position of the destination
11152 register.
11153
11154 \b For \c{PMULHRWC}, the destination is the first source operand.
11155
11156 \b For \c{PMULHRIW}, the destination is an implied register (worked out
11157 as described for \c{PADDSIW} (\k{insPADDSIW})).
11158
11159 The operation of this instruction is:
11160
11161 \c    dst[0-15]  := (src1[0-15] *src2[0-15]  + 0x00004000)[15-30]
11162 \c    dst[16-31] := (src1[16-31]*src2[16-31] + 0x00004000)[15-30]
11163 \c    dst[32-47] := (src1[32-47]*src2[32-47] + 0x00004000)[15-30]
11164 \c    dst[48-63] := (src1[48-63]*src2[48-63] + 0x00004000)[15-30]
11165
11166 See also \c{PMULHRWA} (\k{insPMULHRWA}) for a 3DNow! version of this
11167 instruction.
11168
11169
11170 \S{insPMULHRWA} \i\c{PMULHRWA}: Multiply Packed 16-bit Integers
11171 With Rounding, and Store High Word
11172
11173 \c PMULHRWA mm1,mm2/m64          ; 0F 0F /r B7     [PENT,3DNOW]
11174
11175 \c{PMULHRWA} takes two packed 16-bit integer inputs, multiplies
11176 the values in the inputs, rounds on bit 16 of each result, then
11177 stores bits 16-31 of each result to the corresponding position
11178 of the destination register.
11179
11180 The operation of this instruction is:
11181
11182 \c    dst[0-15]  := (src1[0-15] *src2[0-15]  + 0x00008000)[16-31];
11183 \c    dst[16-31] := (src1[16-31]*src2[16-31] + 0x00008000)[16-31];
11184 \c    dst[32-47] := (src1[32-47]*src2[32-47] + 0x00008000)[16-31];
11185 \c    dst[48-63] := (src1[48-63]*src2[48-63] + 0x00008000)[16-31].
11186
11187 See also \c{PMULHRWC} (\k{insPMULHRW}) for a Cyrix version of this
11188 instruction.
11189
11190
11191 \S{insPMULHUW} \i\c{PMULHUW}: Multiply Packed 16-bit Integers,
11192 and Store High Word
11193
11194 \c PMULHUW mm1,mm2/m64           ; 0F E4 /r        [KATMAI,MMX]
11195 \c PMULHUW xmm1,xmm2/m128        ; 66 0F E4 /r     [WILLAMETTE,SSE2]
11196
11197 \c{PMULHUW} takes two packed unsigned 16-bit integer inputs, multiplies
11198 the values in the inputs, then stores bits 16-31 of each result to the
11199 corresponding position of the destination register.
11200
11201
11202 \S{insPMULHW} \i\c{PMULHW}, \i\c{PMULLW}: Multiply Packed 16-bit Integers,
11203 and Store
11204
11205 \c PMULHW mm1,mm2/m64            ; 0F E5 /r             [PENT,MMX]
11206 \c PMULLW mm1,mm2/m64            ; 0F D5 /r             [PENT,MMX]
11207
11208 \c PMULHW xmm1,xmm2/m128         ; 66 0F E5 /r     [WILLAMETTE,SSE2]
11209 \c PMULLW xmm1,xmm2/m128         ; 66 0F D5 /r     [WILLAMETTE,SSE2]
11210
11211 \c{PMULxW} takes two packed unsigned 16-bit integer inputs, and
11212 multiplies the values in the inputs, forming doubleword results.
11213
11214 \b \c{PMULHW} then stores the top 16 bits of each doubleword in the
11215 destination (first) operand;
11216
11217 \b \c{PMULLW} stores the bottom 16 bits of each doubleword in the
11218 destination operand.
11219
11220
11221 \S{insPMULUDQ} \i\c{PMULUDQ}: Multiply Packed Unsigned
11222 32-bit Integers, and Store.
11223
11224 \c PMULUDQ mm1,mm2/m64           ; 0F F4 /r        [WILLAMETTE,SSE2]
11225 \c PMULUDQ xmm1,xmm2/m128        ; 66 0F F4 /r     [WILLAMETTE,SSE2]
11226
11227 \c{PMULUDQ} takes two packed unsigned 32-bit integer inputs, and
11228 multiplies the values in the inputs, forming quadword results. The
11229 source is either an unsigned doubleword in the low doubleword of a
11230 64-bit operand, or it's two unsigned doublewords in the first and
11231 third doublewords of a 128-bit operand. This produces either one or
11232 two 64-bit results, which are stored in the respective quadword
11233 locations of the destination register.
11234
11235 The operation is:
11236
11237 \c    dst[0-63]   := dst[0-31]  * src[0-31];
11238 \c    dst[64-127] := dst[64-95] * src[64-95].
11239
11240
11241 \S{insPMVccZB} \i\c{PMVccZB}: MMX Packed Conditional Move
11242
11243 \c PMVZB mmxreg,mem64            ; 0F 58 /r             [CYRIX,MMX]
11244 \c PMVNZB mmxreg,mem64           ; 0F 5A /r             [CYRIX,MMX]
11245 \c PMVLZB mmxreg,mem64           ; 0F 5B /r             [CYRIX,MMX]
11246 \c PMVGEZB mmxreg,mem64          ; 0F 5C /r             [CYRIX,MMX]
11247
11248 These instructions, specific to the Cyrix MMX extensions, perform
11249 parallel conditional moves. The two input operands are treated as
11250 vectors of eight bytes. Each byte of the destination (first) operand
11251 is either written from the corresponding byte of the source (second)
11252 operand, or left alone, depending on the value of the byte in the
11253 \e{implied} operand (specified in the same way as \c{PADDSIW}, in
11254 \k{insPADDSIW}).
11255
11256 \b \c{PMVZB} performs each move if the corresponding byte in the
11257 implied operand is zero;
11258
11259 \b \c{PMVNZB} moves if the byte is non-zero;
11260
11261 \b \c{PMVLZB} moves if the byte is less than zero;
11262
11263 \b \c{PMVGEZB} moves if the byte is greater than or equal to zero.
11264
11265 Note that these instructions cannot take a register as their second
11266 source operand.
11267
11268
11269 \S{insPOP} \i\c{POP}: Pop Data from Stack
11270
11271 \c POP reg16                     ; o16 58+r             [8086]
11272 \c POP reg32                     ; o32 58+r             [386]
11273
11274 \c POP r/m16                     ; o16 8F /0            [8086]
11275 \c POP r/m32                     ; o32 8F /0            [386]
11276
11277 \c POP CS                        ; 0F                   [8086,UNDOC]
11278 \c POP DS                        ; 1F                   [8086]
11279 \c POP ES                        ; 07                   [8086]
11280 \c POP SS                        ; 17                   [8086]
11281 \c POP FS                        ; 0F A1                [386]
11282 \c POP GS                        ; 0F A9                [386]
11283
11284 \c{POP} loads a value from the stack (from \c{[SS:SP]} or
11285 \c{[SS:ESP]}) and then increments the stack pointer.
11286
11287 The address-size attribute of the instruction determines whether
11288 \c{SP} or \c{ESP} is used as the stack pointer: to deliberately
11289 override the default given by the \c{BITS} setting, you can use an
11290 \i\c{a16} or \i\c{a32} prefix.
11291
11292 The operand-size attribute of the instruction determines whether the
11293 stack pointer is incremented by 2 or 4: this means that segment
11294 register pops in \c{BITS 32} mode will pop 4 bytes off the stack and
11295 discard the upper two of them. If you need to override that, you can
11296 use an \i\c{o16} or \i\c{o32} prefix.
11297
11298 The above opcode listings give two forms for general-purpose
11299 register pop instructions: for example, \c{POP BX} has the two forms
11300 \c{5B} and \c{8F C3}. NASM will always generate the shorter form
11301 when given \c{POP BX}. NDISASM will disassemble both.
11302
11303 \c{POP CS} is not a documented instruction, and is not supported on
11304 any processor above the 8086 (since they use \c{0Fh} as an opcode
11305 prefix for instruction set extensions). However, at least some 8086
11306 processors do support it, and so NASM generates it for completeness.
11307
11308
11309 \S{insPOPA} \i\c{POPAx}: Pop All General-Purpose Registers
11310
11311 \c POPA                          ; 61                   [186]
11312 \c POPAW                         ; o16 61               [186]
11313 \c POPAD                         ; o32 61               [386]
11314
11315 \b \c{POPAW} pops a word from the stack into each of, successively,
11316 \c{DI}, \c{SI}, \c{BP}, nothing (it discards a word from the stack
11317 which was a placeholder for \c{SP}), \c{BX}, \c{DX}, \c{CX} and
11318 \c{AX}. It is intended to reverse the operation of \c{PUSHAW} (see
11319 \k{insPUSHA}), but it ignores the value for \c{SP} that was pushed
11320 on the stack by \c{PUSHAW}.
11321
11322 \b \c{POPAD} pops twice as much data, and places the results in
11323 \c{EDI}, \c{ESI}, \c{EBP}, nothing (placeholder for \c{ESP}),
11324 \c{EBX}, \c{EDX}, \c{ECX} and \c{EAX}. It reverses the operation of
11325 \c{PUSHAD}.
11326
11327 \c{POPA} is an alias mnemonic for either \c{POPAW} or \c{POPAD},
11328 depending on the current \c{BITS} setting.
11329
11330 Note that the registers are popped in reverse order of their numeric
11331 values in opcodes (see \k{iref-rv}).
11332
11333
11334 \S{insPOPF} \i\c{POPFx}: Pop Flags Register
11335
11336 \c POPF                          ; 9D                   [8086]
11337 \c POPFW                         ; o16 9D               [8086]
11338 \c POPFD                         ; o32 9D               [386]
11339
11340 \b \c{POPFW} pops a word from the stack and stores it in the bottom 16
11341 bits of the flags register (or the whole flags register, on
11342 processors below a 386).
11343
11344 \b \c{POPFD} pops a doubleword and stores it in the entire flags register.
11345
11346 \c{POPF} is an alias mnemonic for either \c{POPFW} or \c{POPFD},
11347 depending on the current \c{BITS} setting.
11348
11349 See also \c{PUSHF} (\k{insPUSHF}).
11350
11351
11352 \S{insPOR} \i\c{POR}: MMX Bitwise OR
11353
11354 \c POR mm1,mm2/m64               ; 0F EB /r             [PENT,MMX]
11355 \c POR xmm1,xmm2/m128            ; 66 0F EB /r     [WILLAMETTE,SSE2]
11356
11357 \c{POR} performs a bitwise OR operation between its two operands
11358 (i.e. each bit of the result is 1 if and only if at least one of the
11359 corresponding bits of the two inputs was 1), and stores the result
11360 in the destination (first) operand.
11361
11362
11363 \S{insPREFETCH} \i\c{PREFETCH}: Prefetch Data Into Caches
11364
11365 \c PREFETCH mem8                 ; 0F 0D /0             [PENT,3DNOW]
11366 \c PREFETCHW mem8                ; 0F 0D /1             [PENT,3DNOW]
11367
11368 \c{PREFETCH} and \c{PREFETCHW} fetch the line of data from memory that
11369 contains the specified byte. \c{PREFETCHW} performs differently on the
11370 Athlon to earlier processors.
11371
11372 For more details, see the 3DNow! Technology Manual.
11373
11374
11375 \S{insPREFETCHh} \i\c{PREFETCHh}: Prefetch Data Into Caches
11376 \I\c{PREFETCHNTA} \I\c{PREFETCHT0} \I\c{PREFETCHT1} \I\c{PREFETCHT2}
11377
11378 \c PREFETCHNTA m8                ; 0F 18 /0        [KATMAI]
11379 \c PREFETCHT0 m8                 ; 0F 18 /1        [KATMAI]
11380 \c PREFETCHT1 m8                 ; 0F 18 /2        [KATMAI]
11381 \c PREFETCHT2 m8                 ; 0F 18 /3        [KATMAI]
11382
11383 The \c{PREFETCHh} instructions fetch the line of data from memory
11384 that contains the specified byte. It is placed in the cache
11385 according to rules specified by locality hints \c{h}:
11386
11387 The hints are:
11388
11389 \b \c{T0} (temporal data) - prefetch data into all levels of the
11390 cache hierarchy.
11391
11392 \b \c{T1} (temporal data with respect to first level cache) -
11393 prefetch data into level 2 cache and higher.
11394
11395 \b \c{T2} (temporal data with respect to second level cache) -
11396 prefetch data into level 2 cache and higher.
11397
11398 \b \c{NTA} (non-temporal data with respect to all cache levels) -
11399 prefetch data into non-temporal cache structure and into a
11400 location close to the processor, minimizing cache pollution.
11401
11402 Note that this group of instructions doesn't provide a guarantee
11403 that the data will be in the cache when it is needed. For more
11404 details, see the Intel IA32 Software Developer Manual, Volume 2.
11405
11406
11407 \S{insPSADBW} \i\c{PSADBW}: Packed Sum of Absolute Differences
11408
11409 \c PSADBW mm1,mm2/m64            ; 0F F6 /r        [KATMAI,MMX]
11410 \c PSADBW xmm1,xmm2/m128         ; 66 0F F6 /r     [WILLAMETTE,SSE2]
11411
11412 \c{PSADBW} The PSADBW instruction computes the absolute value of the
11413 difference of the packed unsigned bytes in the two source operands.
11414 These differences are then summed to produce a word result in the lower
11415 16-bit field of the destination register; the rest of the register is
11416 cleared. The destination operand is an \c{MMX} or an \c{XMM} register.
11417 The source operand can either be a register or a memory operand.
11418
11419
11420 \S{insPSHUFD} \i\c{PSHUFD}: Shuffle Packed Doublewords
11421
11422 \c PSHUFD xmm1,xmm2/m128,imm8    ; 66 0F 70 /r ib  [WILLAMETTE,SSE2]
11423
11424 \c{PSHUFD} shuffles the doublewords in the source (second) operand
11425 according to the encoding specified by imm8, and stores the result
11426 in the destination (first) operand.
11427
11428 Bits 0 and 1 of imm8 encode the source position of the doubleword to
11429 be copied to position 0 in the destination operand. Bits 2 and 3
11430 encode for position 1, bits 4 and 5 encode for position 2, and bits
11431 6 and 7 encode for position 3. For example, an encoding of 10 in
11432 bits 0 and 1 of imm8 indicates that the doubleword at bits 64-95 of
11433 the source operand will be copied to bits 0-31 of the destination.
11434
11435
11436 \S{insPSHUFHW} \i\c{PSHUFHW}: Shuffle Packed High Words
11437
11438 \c PSHUFHW xmm1,xmm2/m128,imm8   ; F3 0F 70 /r ib  [WILLAMETTE,SSE2]
11439
11440 \c{PSHUFW} shuffles the words in the high quadword of the source
11441 (second) operand according to the encoding specified by imm8, and
11442 stores the result in the high quadword of the destination (first)
11443 operand.
11444
11445 The operation of this instruction is similar to the \c{PSHUFW}
11446 instruction, except that the source and destination are the top
11447 quadword of a 128-bit operand, instead of being 64-bit operands.
11448 The low quadword is copied from the source to the destination
11449 without any changes.
11450
11451
11452 \S{insPSHUFLW} \i\c{PSHUFLW}: Shuffle Packed Low Words
11453
11454 \c PSHUFLW xmm1,xmm2/m128,imm8   ; F2 0F 70 /r ib  [WILLAMETTE,SSE2]
11455
11456 \c{PSHUFLW} shuffles the words in the low quadword of the source
11457 (second) operand according to the encoding specified by imm8, and
11458 stores the result in the low quadword of the destination (first)
11459 operand.
11460
11461 The operation of this instruction is similar to the \c{PSHUFW}
11462 instruction, except that the source and destination are the low
11463 quadword of a 128-bit operand, instead of being 64-bit operands.
11464 The high quadword is copied from the source to the destination
11465 without any changes.
11466
11467
11468 \S{insPSHUFW} \i\c{PSHUFW}: Shuffle Packed Words
11469
11470 \c PSHUFW mm1,mm2/m64,imm8       ; 0F 70 /r ib     [KATMAI,MMX]
11471
11472 \c{PSHUFW} shuffles the words in the source (second) operand
11473 according to the encoding specified by imm8, and stores the result
11474 in the destination (first) operand.
11475
11476 Bits 0 and 1 of imm8 encode the source position of the word to be
11477 copied to position 0 in the destination operand. Bits 2 and 3 encode
11478 for position 1, bits 4 and 5 encode for position 2, and bits 6 and 7
11479 encode for position 3. For example, an encoding of 10 in bits 0 and 1
11480 of imm8 indicates that the word at bits 32-47 of the source operand
11481 will be copied to bits 0-15 of the destination.
11482
11483
11484 \S{insPSLLD} \i\c{PSLLx}: Packed Data Bit Shift Left Logical
11485
11486 \c PSLLW mm1,mm2/m64             ; 0F F1 /r             [PENT,MMX]
11487 \c PSLLW mm,imm8                 ; 0F 71 /6 ib          [PENT,MMX]
11488
11489 \c PSLLW xmm1,xmm2/m128          ; 66 0F F1 /r     [WILLAMETTE,SSE2]
11490 \c PSLLW xmm,imm8                ; 66 0F 71 /6 ib  [WILLAMETTE,SSE2]
11491
11492 \c PSLLD mm1,mm2/m64             ; 0F F2 /r             [PENT,MMX]
11493 \c PSLLD mm,imm8                 ; 0F 72 /6 ib          [PENT,MMX]
11494
11495 \c PSLLD xmm1,xmm2/m128          ; 66 0F F2 /r     [WILLAMETTE,SSE2]
11496 \c PSLLD xmm,imm8                ; 66 0F 72 /6 ib  [WILLAMETTE,SSE2]
11497
11498 \c PSLLQ mm1,mm2/m64             ; 0F F3 /r             [PENT,MMX]
11499 \c PSLLQ mm,imm8                 ; 0F 73 /6 ib          [PENT,MMX]
11500
11501 \c PSLLQ xmm1,xmm2/m128          ; 66 0F F3 /r     [WILLAMETTE,SSE2]
11502 \c PSLLQ xmm,imm8                ; 66 0F 73 /6 ib  [WILLAMETTE,SSE2]
11503
11504 \c PSLLDQ xmm1,imm8              ; 66 0F 73 /7 ib  [PENT,MMX]
11505
11506 \c{PSLLx} performs logical left shifts of the data elements in the
11507 destination (first) operand, moving each bit in the separate elements
11508 left by the number of bits specified in the source (second) operand,
11509 clearing the low-order bits as they are vacated.
11510
11511 \b \c{PSLLW} shifts word sized elements.
11512
11513 \b \c{PSLLD} shifts doubleword sized elements.
11514
11515 \b \c{PSLLQ} shifts quadword sized elements.
11516
11517 \b \c{PSLLDQ} shifts double quadword sized elements.
11518
11519
11520 \S{insPSRAD} \i\c{PSRAx}: Packed Data Bit Shift Right Arithmetic
11521
11522 \c PSRAW mm1,mm2/m64             ; 0F E1 /r             [PENT,MMX]
11523 \c PSRAW mm,imm8                 ; 0F 71 /4 ib          [PENT,MMX]
11524
11525 \c PSRAW xmm1,xmm2/m128          ; 66 0F E1 /r     [WILLAMETTE,SSE2]
11526 \c PSRAW xmm,imm8                ; 66 0F 71 /4 ib  [WILLAMETTE,SSE2]
11527
11528 \c PSRAD mm1,mm2/m64             ; 0F E2 /r             [PENT,MMX]
11529 \c PSRAD mm,imm8                 ; 0F 72 /4 ib          [PENT,MMX]
11530
11531 \c PSRAD xmm1,xmm2/m128          ; 66 0F E2 /r     [WILLAMETTE,SSE2]
11532 \c PSRAD xmm,imm8                ; 66 0F 72 /4 ib  [WILLAMETTE,SSE2]
11533
11534 \c{PSRAx} performs arithmetic right shifts of the data elements in the
11535 destination (first) operand, moving each bit in the separate elements
11536 right by the number of bits specified in the source (second) operand,
11537 setting the high-order bits to the value of the original sign bit.
11538
11539 \b \c{PSRAW} shifts word sized elements.
11540
11541 \b \c{PSRAD} shifts doubleword sized elements.
11542
11543
11544 \S{insPSRLD} \i\c{PSRLx}: Packed Data Bit Shift Right Logical
11545
11546 \c PSRLW mm1,mm2/m64             ; 0F D1 /r             [PENT,MMX]
11547 \c PSRLW mm,imm8                 ; 0F 71 /2 ib          [PENT,MMX]
11548
11549 \c PSRLW xmm1,xmm2/m128          ; 66 0F D1 /r     [WILLAMETTE,SSE2]
11550 \c PSRLW xmm,imm8                ; 66 0F 71 /2 ib  [WILLAMETTE,SSE2]
11551
11552 \c PSRLD mm1,mm2/m64             ; 0F D2 /r             [PENT,MMX]
11553 \c PSRLD mm,imm8                 ; 0F 72 /2 ib          [PENT,MMX]
11554
11555 \c PSRLD xmm1,xmm2/m128          ; 66 0F D2 /r     [WILLAMETTE,SSE2]
11556 \c PSRLD xmm,imm8                ; 66 0F 72 /2 ib  [WILLAMETTE,SSE2]
11557
11558 \c PSRLQ mm1,mm2/m64             ; 0F D3 /r             [PENT,MMX]
11559 \c PSRLQ mm,imm8                 ; 0F 73 /2 ib          [PENT,MMX]
11560
11561 \c PSRLQ xmm1,xmm2/m128          ; 66 0F D3 /r     [WILLAMETTE,SSE2]
11562 \c PSRLQ xmm,imm8                ; 66 0F 73 /2 ib  [WILLAMETTE,SSE2]
11563
11564 \c PSRLDQ xmm1,imm8              ; 66 0F 73 /3 ib  [WILLAMETTE,SSE2]
11565
11566 \c{PSRLx} performs logical right shifts of the data elements in the
11567 destination (first) operand, moving each bit in the separate elements
11568 right by the number of bits specified in the source (second) operand,
11569 clearing the high-order bits as they are vacated.
11570
11571 \b \c{PSRLW} shifts word sized elements.
11572
11573 \b \c{PSRLD} shifts doubleword sized elements.
11574
11575 \b \c{PSRLQ} shifts quadword sized elements.
11576
11577 \b \c{PSRLDQ} shifts double quadword sized elements.
11578
11579
11580 \S{insPSUBB} \i\c{PSUBx}: Subtract Packed Integers
11581
11582 \c PSUBB mm1,mm2/m64             ; 0F F8 /r             [PENT,MMX]
11583 \c PSUBW mm1,mm2/m64             ; 0F F9 /r             [PENT,MMX]
11584 \c PSUBD mm1,mm2/m64             ; 0F FA /r             [PENT,MMX]
11585 \c PSUBQ mm1,mm2/m64             ; 0F FB /r        [WILLAMETTE,SSE2]
11586
11587 \c PSUBB xmm1,xmm2/m128          ; 66 0F F8 /r     [WILLAMETTE,SSE2]
11588 \c PSUBW xmm1,xmm2/m128          ; 66 0F F9 /r     [WILLAMETTE,SSE2]
11589 \c PSUBD xmm1,xmm2/m128          ; 66 0F FA /r     [WILLAMETTE,SSE2]
11590 \c PSUBQ xmm1,xmm2/m128          ; 66 0F FB /r     [WILLAMETTE,SSE2]
11591
11592 \c{PSUBx} subtracts packed integers in the source operand from those
11593 in the destination operand. It doesn't differentiate between signed
11594 and unsigned integers, and doesn't set any of the flags.
11595
11596 \b \c{PSUBB} operates on byte sized elements.
11597
11598 \b \c{PSUBW} operates on word sized elements.
11599
11600 \b \c{PSUBD} operates on doubleword sized elements.
11601
11602 \b \c{PSUBQ} operates on quadword sized elements.
11603
11604
11605 \S{insPSUBSB} \i\c{PSUBSxx}, \i\c{PSUBUSx}: Subtract Packed Integers With Saturation
11606
11607 \c PSUBSB mm1,mm2/m64            ; 0F E8 /r             [PENT,MMX]
11608 \c PSUBSW mm1,mm2/m64            ; 0F E9 /r             [PENT,MMX]
11609
11610 \c PSUBSB xmm1,xmm2/m128         ; 66 0F E8 /r     [WILLAMETTE,SSE2]
11611 \c PSUBSW xmm1,xmm2/m128         ; 66 0F E9 /r     [WILLAMETTE,SSE2]
11612
11613 \c PSUBUSB mm1,mm2/m64           ; 0F D8 /r             [PENT,MMX]
11614 \c PSUBUSW mm1,mm2/m64           ; 0F D9 /r             [PENT,MMX]
11615
11616 \c PSUBUSB xmm1,xmm2/m128        ; 66 0F D8 /r     [WILLAMETTE,SSE2]
11617 \c PSUBUSW xmm1,xmm2/m128        ; 66 0F D9 /r     [WILLAMETTE,SSE2]
11618
11619 \c{PSUBSx} and \c{PSUBUSx} subtracts packed integers in the source
11620 operand from those in the destination operand, and use saturation for
11621 results that are outside the range supported by the destination operand.
11622
11623 \b \c{PSUBSB} operates on signed bytes, and uses signed saturation on the
11624 results.
11625
11626 \b \c{PSUBSW} operates on signed words, and uses signed saturation on the
11627 results.
11628
11629 \b \c{PSUBUSB} operates on unsigned bytes, and uses signed saturation on
11630 the results.
11631
11632 \b \c{PSUBUSW} operates on unsigned words, and uses signed saturation on
11633 the results.
11634
11635
11636 \S{insPSUBSIW} \i\c{PSUBSIW}: MMX Packed Subtract with Saturation to
11637 Implied Destination
11638
11639 \c PSUBSIW mm1,mm2/m64           ; 0F 55 /r             [CYRIX,MMX]
11640
11641 \c{PSUBSIW}, specific to the Cyrix extensions to the MMX instruction
11642 set, performs the same function as \c{PSUBSW}, except that the
11643 result is not placed in the register specified by the first operand,
11644 but instead in the implied destination register, specified as for
11645 \c{PADDSIW} (\k{insPADDSIW}).
11646
11647
11648 \S{insPSWAPD} \i\c{PSWAPD}: Swap Packed Data
11649 \I\c{PSWAPW}
11650
11651 \c PSWAPD mm1,mm2/m64            ; 0F 0F /r BB     [PENT,3DNOW]
11652
11653 \c{PSWAPD} swaps the packed doublewords in the source operand, and
11654 stores the result in the destination operand.
11655
11656 In the \c{K6-2} and \c{K6-III} processors, this opcode uses the
11657 mnemonic \c{PSWAPW}, and it swaps the order of words when copying
11658 from the source to the destination.
11659
11660 The operation in the \c{K6-2} and \c{K6-III} processors is
11661
11662 \c    dst[0-15]  = src[48-63];
11663 \c    dst[16-31] = src[32-47];
11664 \c    dst[32-47] = src[16-31];
11665 \c    dst[48-63] = src[0-15].
11666
11667 The operation in the \c{K6-x+}, \c{ATHLON} and later processors is:
11668
11669 \c    dst[0-31]  = src[32-63];
11670 \c    dst[32-63] = src[0-31].
11671
11672
11673 \S{insPUNPCKHBW} \i\c{PUNPCKxxx}: Unpack and Interleave Data
11674
11675 \c PUNPCKHBW mm1,mm2/m64         ; 0F 68 /r             [PENT,MMX]
11676 \c PUNPCKHWD mm1,mm2/m64         ; 0F 69 /r             [PENT,MMX]
11677 \c PUNPCKHDQ mm1,mm2/m64         ; 0F 6A /r             [PENT,MMX]
11678
11679 \c PUNPCKHBW xmm1,xmm2/m128      ; 66 0F 68 /r     [WILLAMETTE,SSE2]
11680 \c PUNPCKHWD xmm1,xmm2/m128      ; 66 0F 69 /r     [WILLAMETTE,SSE2]
11681 \c PUNPCKHDQ xmm1,xmm2/m128      ; 66 0F 6A /r     [WILLAMETTE,SSE2]
11682 \c PUNPCKHQDQ xmm1,xmm2/m128     ; 66 0F 6D /r     [WILLAMETTE,SSE2]
11683
11684 \c PUNPCKLBW mm1,mm2/m32         ; 0F 60 /r             [PENT,MMX]
11685 \c PUNPCKLWD mm1,mm2/m32         ; 0F 61 /r             [PENT,MMX]
11686 \c PUNPCKLDQ mm1,mm2/m32         ; 0F 62 /r             [PENT,MMX]
11687
11688 \c PUNPCKLBW xmm1,xmm2/m128      ; 66 0F 60 /r     [WILLAMETTE,SSE2]
11689 \c PUNPCKLWD xmm1,xmm2/m128      ; 66 0F 61 /r     [WILLAMETTE,SSE2]
11690 \c PUNPCKLDQ xmm1,xmm2/m128      ; 66 0F 62 /r     [WILLAMETTE,SSE2]
11691 \c PUNPCKLQDQ xmm1,xmm2/m128     ; 66 0F 6C /r     [WILLAMETTE,SSE2]
11692
11693 \c{PUNPCKxx} all treat their operands as vectors, and produce a new
11694 vector generated by interleaving elements from the two inputs. The
11695 \c{PUNPCKHxx} instructions start by throwing away the bottom half of
11696 each input operand, and the \c{PUNPCKLxx} instructions throw away
11697 the top half.
11698
11699 The remaining elements, are then interleaved into the destination,
11700 alternating elements from the second (source) operand and the first
11701 (destination) operand: so the leftmost part of each element in the
11702 result always comes from the second operand, and the rightmost from
11703 the destination.
11704
11705 \b \c{PUNPCKxBW} works a byte at a time, producing word sized output
11706 elements.
11707
11708 \b \c{PUNPCKxWD} works a word at a time, producing doubleword sized
11709 output elements.
11710
11711 \b \c{PUNPCKxDQ} works a doubleword at a time, producing quadword sized
11712 output elements.
11713
11714 \b \c{PUNPCKxQDQ} works a quadword at a time, producing double quadword
11715 sized output elements.
11716
11717 So, for example, for \c{MMX} operands, if the first operand held
11718 \c{0x7A6A5A4A3A2A1A0A} and the second held \c{0x7B6B5B4B3B2B1B0B},
11719 then:
11720
11721 \b \c{PUNPCKHBW} would return \c{0x7B7A6B6A5B5A4B4A}.
11722
11723 \b \c{PUNPCKHWD} would return \c{0x7B6B7A6A5B4B5A4A}.
11724
11725 \b \c{PUNPCKHDQ} would return \c{0x7B6B5B4B7A6A5A4A}.
11726
11727 \b \c{PUNPCKLBW} would return \c{0x3B3A2B2A1B1A0B0A}.
11728
11729 \b \c{PUNPCKLWD} would return \c{0x3B2B3A2A1B0B1A0A}.
11730
11731 \b \c{PUNPCKLDQ} would return \c{0x3B2B1B0B3A2A1A0A}.
11732
11733
11734 \S{insPUSH} \i\c{PUSH}: Push Data on Stack
11735
11736 \c PUSH reg16                    ; o16 50+r             [8086]
11737 \c PUSH reg32                    ; o32 50+r             [386]
11738
11739 \c PUSH r/m16                    ; o16 FF /6            [8086]
11740 \c PUSH r/m32                    ; o32 FF /6            [386]
11741
11742 \c PUSH CS                       ; 0E                   [8086]
11743 \c PUSH DS                       ; 1E                   [8086]
11744 \c PUSH ES                       ; 06                   [8086]
11745 \c PUSH SS                       ; 16                   [8086]
11746 \c PUSH FS                       ; 0F A0                [386]
11747 \c PUSH GS                       ; 0F A8                [386]
11748
11749 \c PUSH imm8                     ; 6A ib                [186]
11750 \c PUSH imm16                    ; o16 68 iw            [186]
11751 \c PUSH imm32                    ; o32 68 id            [386]
11752
11753 \c{PUSH} decrements the stack pointer (\c{SP} or \c{ESP}) by 2 or 4,
11754 and then stores the given value at \c{[SS:SP]} or \c{[SS:ESP]}.
11755
11756 The address-size attribute of the instruction determines whether
11757 \c{SP} or \c{ESP} is used as the stack pointer: to deliberately
11758 override the default given by the \c{BITS} setting, you can use an
11759 \i\c{a16} or \i\c{a32} prefix.
11760
11761 The operand-size attribute of the instruction determines whether the
11762 stack pointer is decremented by 2 or 4: this means that segment
11763 register pushes in \c{BITS 32} mode will push 4 bytes on the stack,
11764 of which the upper two are undefined. If you need to override that,
11765 you can use an \i\c{o16} or \i\c{o32} prefix.
11766
11767 The above opcode listings give two forms for general-purpose
11768 \i{register push} instructions: for example, \c{PUSH BX} has the two
11769 forms \c{53} and \c{FF F3}. NASM will always generate the shorter
11770 form when given \c{PUSH BX}. NDISASM will disassemble both.
11771
11772 Unlike the undocumented and barely supported \c{POP CS}, \c{PUSH CS}
11773 is a perfectly valid and sensible instruction, supported on all
11774 processors.
11775
11776 The instruction \c{PUSH SP} may be used to distinguish an 8086 from
11777 later processors: on an 8086, the value of \c{SP} stored is the
11778 value it has \e{after} the push instruction, whereas on later
11779 processors it is the value \e{before} the push instruction.
11780
11781
11782 \S{insPUSHA} \i\c{PUSHAx}: Push All General-Purpose Registers
11783
11784 \c PUSHA                         ; 60                   [186]
11785 \c PUSHAD                        ; o32 60               [386]
11786 \c PUSHAW                        ; o16 60               [186]
11787
11788 \c{PUSHAW} pushes, in succession, \c{AX}, \c{CX}, \c{DX}, \c{BX},
11789 \c{SP}, \c{BP}, \c{SI} and \c{DI} on the stack, decrementing the
11790 stack pointer by a total of 16.
11791
11792 \c{PUSHAD} pushes, in succession, \c{EAX}, \c{ECX}, \c{EDX},
11793 \c{EBX}, \c{ESP}, \c{EBP}, \c{ESI} and \c{EDI} on the stack,
11794 decrementing the stack pointer by a total of 32.
11795
11796 In both cases, the value of \c{SP} or \c{ESP} pushed is its
11797 \e{original} value, as it had before the instruction was executed.
11798
11799 \c{PUSHA} is an alias mnemonic for either \c{PUSHAW} or \c{PUSHAD},
11800 depending on the current \c{BITS} setting.
11801
11802 Note that the registers are pushed in order of their numeric values
11803 in opcodes (see \k{iref-rv}).
11804
11805 See also \c{POPA} (\k{insPOPA}).
11806
11807
11808 \S{insPUSHF} \i\c{PUSHFx}: Push Flags Register
11809
11810 \c PUSHF                         ; 9C                   [8086]
11811 \c PUSHFD                        ; o32 9C               [386]
11812 \c PUSHFW                        ; o16 9C               [8086]
11813
11814 \b \c{PUSHFW} pops a word from the stack and stores it in the
11815 bottom 16 bits of the flags register (or the whole flags register,
11816 on processors below a 386).
11817
11818 \b \c{PUSHFD} pops a doubleword and stores it in the entire flags
11819 register.
11820
11821 \c{PUSHF} is an alias mnemonic for either \c{PUSHFW} or \c{PUSHFD},
11822 depending on the current \c{BITS} setting.
11823
11824 See also \c{POPF} (\k{insPOPF}).
11825
11826
11827 \S{insPXOR} \i\c{PXOR}: MMX Bitwise XOR
11828
11829 \c PXOR mm1,mm2/m64              ; 0F EF /r             [PENT,MMX]
11830 \c PXOR xmm1,xmm2/m128           ; 66 0F EF /r     [WILLAMETTE,SSE2]
11831
11832 \c{PXOR} performs a bitwise XOR operation between its two operands
11833 (i.e. each bit of the result is 1 if and only if exactly one of the
11834 corresponding bits of the two inputs was 1), and stores the result
11835 in the destination (first) operand.
11836
11837
11838 \S{insRCL} \i\c{RCL}, \i\c{RCR}: Bitwise Rotate through Carry Bit
11839
11840 \c RCL r/m8,1                    ; D0 /2                [8086]
11841 \c RCL r/m8,CL                   ; D2 /2                [8086]
11842 \c RCL r/m8,imm8                 ; C0 /2 ib             [186]
11843 \c RCL r/m16,1                   ; o16 D1 /2            [8086]
11844 \c RCL r/m16,CL                  ; o16 D3 /2            [8086]
11845 \c RCL r/m16,imm8                ; o16 C1 /2 ib         [186]
11846 \c RCL r/m32,1                   ; o32 D1 /2            [386]
11847 \c RCL r/m32,CL                  ; o32 D3 /2            [386]
11848 \c RCL r/m32,imm8                ; o32 C1 /2 ib         [386]
11849
11850 \c RCR r/m8,1                    ; D0 /3                [8086]
11851 \c RCR r/m8,CL                   ; D2 /3                [8086]
11852 \c RCR r/m8,imm8                 ; C0 /3 ib             [186]
11853 \c RCR r/m16,1                   ; o16 D1 /3            [8086]
11854 \c RCR r/m16,CL                  ; o16 D3 /3            [8086]
11855 \c RCR r/m16,imm8                ; o16 C1 /3 ib         [186]
11856 \c RCR r/m32,1                   ; o32 D1 /3            [386]
11857 \c RCR r/m32,CL                  ; o32 D3 /3            [386]
11858 \c RCR r/m32,imm8                ; o32 C1 /3 ib         [386]
11859
11860 \c{RCL} and \c{RCR} perform a 9-bit, 17-bit or 33-bit bitwise
11861 rotation operation, involving the given source/destination (first)
11862 operand and the carry bit. Thus, for example, in the operation
11863 \c{RCL AL,1}, a 9-bit rotation is performed in which \c{AL} is
11864 shifted left by 1, the top bit of \c{AL} moves into the carry flag,
11865 and the original value of the carry flag is placed in the low bit of
11866 \c{AL}.
11867
11868 The number of bits to rotate by is given by the second operand. Only
11869 the bottom five bits of the rotation count are considered by
11870 processors above the 8086.
11871
11872 You can force the longer (286 and upwards, beginning with a \c{C1}
11873 byte) form of \c{RCL foo,1} by using a \c{BYTE} prefix: \c{RCL
11874 foo,BYTE 1}. Similarly with \c{RCR}.
11875
11876
11877 \S{insRCPPS} \i\c{RCPPS}: Packed Single-Precision FP Reciprocal
11878
11879 \c RCPPS xmm1,xmm2/m128          ; 0F 53 /r        [KATMAI,SSE]
11880
11881 \c{RCPPS} returns an approximation of the reciprocal of the packed
11882 single-precision FP values from xmm2/m128. The maximum error for this
11883 approximation is: |Error| <= 1.5 x 2^-12
11884
11885
11886 \S{insRCPSS} \i\c{RCPSS}: Scalar Single-Precision FP Reciprocal
11887
11888 \c RCPSS xmm1,xmm2/m128          ; F3 0F 53 /r     [KATMAI,SSE]
11889
11890 \c{RCPSS} returns an approximation of the reciprocal of the lower
11891 single-precision FP value from xmm2/m32; the upper three fields are
11892 passed through from xmm1. The maximum error for this approximation is:
11893 |Error| <= 1.5 x 2^-12
11894
11895
11896 \S{insRDMSR} \i\c{RDMSR}: Read Model-Specific Registers
11897
11898 \c RDMSR                         ; 0F 32                [PENT,PRIV]
11899
11900 \c{RDMSR} reads the processor Model-Specific Register (MSR) whose
11901 index is stored in \c{ECX}, and stores the result in \c{EDX:EAX}.
11902 See also \c{WRMSR} (\k{insWRMSR}).
11903
11904
11905 \S{insRDPMC} \i\c{RDPMC}: Read Performance-Monitoring Counters
11906
11907 \c RDPMC                         ; 0F 33                [P6]
11908
11909 \c{RDPMC} reads the processor performance-monitoring counter whose
11910 index is stored in \c{ECX}, and stores the result in \c{EDX:EAX}.
11911
11912 This instruction is available on P6 and later processors and on MMX
11913 class processors.
11914
11915
11916 \S{insRDSHR} \i\c{RDSHR}: Read SMM Header Pointer Register
11917
11918 \c RDSHR r/m32                   ; 0F 36 /0        [386,CYRIX,SMM]
11919
11920 \c{RDSHR} reads the contents of the SMM header pointer register and
11921 saves it to the destination operand, which can be either a 32 bit
11922 memory location or a 32 bit register.
11923
11924 See also \c{WRSHR} (\k{insWRSHR}).
11925
11926
11927 \S{insRDTSC} \i\c{RDTSC}: Read Time-Stamp Counter
11928
11929 \c RDTSC                         ; 0F 31                [PENT]
11930
11931 \c{RDTSC} reads the processor's time-stamp counter into \c{EDX:EAX}.
11932
11933
11934 \S{insRET} \i\c{RET}, \i\c{RETF}, \i\c{RETN}: Return from Procedure Call
11935
11936 \c RET                           ; C3                   [8086]
11937 \c RET imm16                     ; C2 iw                [8086]
11938
11939 \c RETF                          ; CB                   [8086]
11940 \c RETF imm16                    ; CA iw                [8086]
11941
11942 \c RETN                          ; C3                   [8086]
11943 \c RETN imm16                    ; C2 iw                [8086]
11944
11945 \b \c{RET}, and its exact synonym \c{RETN}, pop \c{IP} or \c{EIP} from
11946 the stack and transfer control to the new address. Optionally, if a
11947 numeric second operand is provided, they increment the stack pointer
11948 by a further \c{imm16} bytes after popping the return address.
11949
11950 \b \c{RETF} executes a far return: after popping \c{IP}/\c{EIP}, it
11951 then pops \c{CS}, and \e{then} increments the stack pointer by the
11952 optional argument if present.
11953
11954
11955 \S{insROL} \i\c{ROL}, \i\c{ROR}: Bitwise Rotate
11956
11957 \c ROL r/m8,1                    ; D0 /0                [8086]
11958 \c ROL r/m8,CL                   ; D2 /0                [8086]
11959 \c ROL r/m8,imm8                 ; C0 /0 ib             [186]
11960 \c ROL r/m16,1                   ; o16 D1 /0            [8086]
11961 \c ROL r/m16,CL                  ; o16 D3 /0            [8086]
11962 \c ROL r/m16,imm8                ; o16 C1 /0 ib         [186]
11963 \c ROL r/m32,1                   ; o32 D1 /0            [386]
11964 \c ROL r/m32,CL                  ; o32 D3 /0            [386]
11965 \c ROL r/m32,imm8                ; o32 C1 /0 ib         [386]
11966
11967 \c ROR r/m8,1                    ; D0 /1                [8086]
11968 \c ROR r/m8,CL                   ; D2 /1                [8086]
11969 \c ROR r/m8,imm8                 ; C0 /1 ib             [186]
11970 \c ROR r/m16,1                   ; o16 D1 /1            [8086]
11971 \c ROR r/m16,CL                  ; o16 D3 /1            [8086]
11972 \c ROR r/m16,imm8                ; o16 C1 /1 ib         [186]
11973 \c ROR r/m32,1                   ; o32 D1 /1            [386]
11974 \c ROR r/m32,CL                  ; o32 D3 /1            [386]
11975 \c ROR r/m32,imm8                ; o32 C1 /1 ib         [386]
11976
11977 \c{ROL} and \c{ROR} perform a bitwise rotation operation on the given
11978 source/destination (first) operand. Thus, for example, in the
11979 operation \c{ROL AL,1}, an 8-bit rotation is performed in which
11980 \c{AL} is shifted left by 1 and the original top bit of \c{AL} moves
11981 round into the low bit.
11982
11983 The number of bits to rotate by is given by the second operand. Only
11984 the bottom five bits of the rotation count are considered by processors
11985 above the 8086.
11986
11987 You can force the longer (286 and upwards, beginning with a \c{C1}
11988 byte) form of \c{ROL foo,1} by using a \c{BYTE} prefix: \c{ROL
11989 foo,BYTE 1}. Similarly with \c{ROR}.
11990
11991
11992 \S{insRSDC} \i\c{RSDC}: Restore Segment Register and Descriptor
11993
11994 \c RSDC segreg,m80               ; 0F 79 /r        [486,CYRIX,SMM]
11995
11996 \c{RSDC} restores a segment register (DS, ES, FS, GS, or SS) from mem80,
11997 and sets up its descriptor.
11998
11999
12000 \S{insRSLDT} \i\c{RSLDT}: Restore Segment Register and Descriptor
12001
12002 \c RSLDT m80                     ; 0F 7B /0        [486,CYRIX,SMM]
12003
12004 \c{RSLDT} restores the Local Descriptor Table (LDTR) from mem80.
12005
12006
12007 \S{insRSM} \i\c{RSM}: Resume from System-Management Mode
12008
12009 \c RSM                           ; 0F AA                [PENT]
12010
12011 \c{RSM} returns the processor to its normal operating mode when it
12012 was in System-Management Mode.
12013
12014
12015 \S{insRSQRTPS} \i\c{RSQRTPS}: Packed Single-Precision FP Square Root Reciprocal
12016
12017 \c RSQRTPS xmm1,xmm2/m128        ; 0F 52 /r        [KATMAI,SSE]
12018
12019 \c{RSQRTPS} computes the approximate reciprocals of the square
12020 roots of the packed single-precision floating-point values in the
12021 source and stores the results in xmm1. The maximum error for this
12022 approximation is: |Error| <= 1.5 x 2^-12
12023
12024
12025 \S{insRSQRTSS} \i\c{RSQRTSS}: Scalar Single-Precision FP Square Root Reciprocal
12026
12027 \c RSQRTSS xmm1,xmm2/m128        ; F3 0F 52 /r     [KATMAI,SSE]
12028
12029 \c{RSQRTSS} returns an approximation of the reciprocal of the
12030 square root of the lowest order single-precision FP value from
12031 the source, and stores it in the low doubleword of the destination
12032 register. The upper three fields of xmm1 are preserved. The maximum
12033 error for this approximation is: |Error| <= 1.5 x 2^-12
12034
12035
12036 \S{insRSTS} \i\c{RSTS}: Restore TSR and Descriptor
12037
12038 \c RSTS m80                      ; 0F 7D /0        [486,CYRIX,SMM]
12039
12040 \c{RSTS} restores Task State Register (TSR) from mem80.
12041
12042
12043 \S{insSAHF} \i\c{SAHF}: Store AH to Flags
12044
12045 \c SAHF                          ; 9E                   [8086]
12046
12047 \c{SAHF} sets the low byte of the flags word according to the
12048 contents of the \c{AH} register.
12049
12050 The operation of \c{SAHF} is:
12051
12052 \c  AH --> SF:ZF:0:AF:0:PF:1:CF
12053
12054 See also \c{LAHF} (\k{insLAHF}).
12055
12056
12057 \S{insSAL} \i\c{SAL}, \i\c{SAR}: Bitwise Arithmetic Shifts
12058
12059 \c SAL r/m8,1                    ; D0 /4                [8086]
12060 \c SAL r/m8,CL                   ; D2 /4                [8086]
12061 \c SAL r/m8,imm8                 ; C0 /4 ib             [186]
12062 \c SAL r/m16,1                   ; o16 D1 /4            [8086]
12063 \c SAL r/m16,CL                  ; o16 D3 /4            [8086]
12064 \c SAL r/m16,imm8                ; o16 C1 /4 ib         [186]
12065 \c SAL r/m32,1                   ; o32 D1 /4            [386]
12066 \c SAL r/m32,CL                  ; o32 D3 /4            [386]
12067 \c SAL r/m32,imm8                ; o32 C1 /4 ib         [386]
12068
12069 \c SAR r/m8,1                    ; D0 /7                [8086]
12070 \c SAR r/m8,CL                   ; D2 /7                [8086]
12071 \c SAR r/m8,imm8                 ; C0 /7 ib             [186]
12072 \c SAR r/m16,1                   ; o16 D1 /7            [8086]
12073 \c SAR r/m16,CL                  ; o16 D3 /7            [8086]
12074 \c SAR r/m16,imm8                ; o16 C1 /7 ib         [186]
12075 \c SAR r/m32,1                   ; o32 D1 /7            [386]
12076 \c SAR r/m32,CL                  ; o32 D3 /7            [386]
12077 \c SAR r/m32,imm8                ; o32 C1 /7 ib         [386]
12078
12079 \c{SAL} and \c{SAR} perform an arithmetic shift operation on the given
12080 source/destination (first) operand. The vacated bits are filled with
12081 zero for \c{SAL}, and with copies of the original high bit of the
12082 source operand for \c{SAR}.
12083
12084 \c{SAL} is a synonym for \c{SHL} (see \k{insSHL}). NASM will
12085 assemble either one to the same code, but NDISASM will always
12086 disassemble that code as \c{SHL}.
12087
12088 The number of bits to shift by is given by the second operand. Only
12089 the bottom five bits of the shift count are considered by processors
12090 above the 8086.
12091
12092 You can force the longer (286 and upwards, beginning with a \c{C1}
12093 byte) form of \c{SAL foo,1} by using a \c{BYTE} prefix: \c{SAL
12094 foo,BYTE 1}. Similarly with \c{SAR}.
12095
12096
12097 \S{insSALC} \i\c{SALC}: Set AL from Carry Flag
12098
12099 \c SALC                          ; D6                  [8086,UNDOC]
12100
12101 \c{SALC} is an early undocumented instruction similar in concept to
12102 \c{SETcc} (\k{insSETcc}). Its function is to set \c{AL} to zero if
12103 the carry flag is clear, or to \c{0xFF} if it is set.
12104
12105
12106 \S{insSBB} \i\c{SBB}: Subtract with Borrow
12107
12108 \c SBB r/m8,reg8                 ; 18 /r                [8086]
12109 \c SBB r/m16,reg16               ; o16 19 /r            [8086]
12110 \c SBB r/m32,reg32               ; o32 19 /r            [386]
12111
12112 \c SBB reg8,r/m8                 ; 1A /r                [8086]
12113 \c SBB reg16,r/m16               ; o16 1B /r            [8086]
12114 \c SBB reg32,r/m32               ; o32 1B /r            [386]
12115
12116 \c SBB r/m8,imm8                 ; 80 /3 ib             [8086]
12117 \c SBB r/m16,imm16               ; o16 81 /3 iw         [8086]
12118 \c SBB r/m32,imm32               ; o32 81 /3 id         [386]
12119
12120 \c SBB r/m16,imm8                ; o16 83 /3 ib         [8086]
12121 \c SBB r/m32,imm8                ; o32 83 /3 ib         [386]
12122
12123 \c SBB AL,imm8                   ; 1C ib                [8086]
12124 \c SBB AX,imm16                  ; o16 1D iw            [8086]
12125 \c SBB EAX,imm32                 ; o32 1D id            [386]
12126
12127 \c{SBB} performs integer subtraction: it subtracts its second
12128 operand, plus the value of the carry flag, from its first, and
12129 leaves the result in its destination (first) operand. The flags are
12130 set according to the result of the operation: in particular, the
12131 carry flag is affected and can be used by a subsequent \c{SBB}
12132 instruction.
12133
12134 In the forms with an 8-bit immediate second operand and a longer
12135 first operand, the second operand is considered to be signed, and is
12136 sign-extended to the length of the first operand. In these cases,
12137 the \c{BYTE} qualifier is necessary to force NASM to generate this
12138 form of the instruction.
12139
12140 To subtract one number from another without also subtracting the
12141 contents of the carry flag, use \c{SUB} (\k{insSUB}).
12142
12143
12144 \S{insSCASB} \i\c{SCASB}, \i\c{SCASW}, \i\c{SCASD}: Scan String
12145
12146 \c SCASB                         ; AE                   [8086]
12147 \c SCASW                         ; o16 AF               [8086]
12148 \c SCASD                         ; o32 AF               [386]
12149
12150 \c{SCASB} compares the byte in \c{AL} with the byte at \c{[ES:DI]}
12151 or \c{[ES:EDI]}, and sets the flags accordingly. It then increments
12152 or decrements (depending on the direction flag: increments if the
12153 flag is clear, decrements if it is set) \c{DI} (or \c{EDI}).
12154
12155 The register used is \c{DI} if the address size is 16 bits, and
12156 \c{EDI} if it is 32 bits. If you need to use an address size not
12157 equal to the current \c{BITS} setting, you can use an explicit
12158 \i\c{a16} or \i\c{a32} prefix.
12159
12160 Segment override prefixes have no effect for this instruction: the
12161 use of \c{ES} for the load from \c{[DI]} or \c{[EDI]} cannot be
12162 overridden.
12163
12164 \c{SCASW} and \c{SCASD} work in the same way, but they compare a
12165 word to \c{AX} or a doubleword to \c{EAX} instead of a byte to
12166 \c{AL}, and increment or decrement the addressing registers by 2 or
12167 4 instead of 1.
12168
12169 The \c{REPE} and \c{REPNE} prefixes (equivalently, \c{REPZ} and
12170 \c{REPNZ}) may be used to repeat the instruction up to \c{CX} (or
12171 \c{ECX} - again, the address size chooses which) times until the
12172 first unequal or equal byte is found.
12173
12174
12175 \S{insSETcc} \i\c{SETcc}: Set Register from Condition
12176
12177 \c SETcc r/m8                    ; 0F 90+cc /2          [386]
12178
12179 \c{SETcc} sets the given 8-bit operand to zero if its condition is
12180 not satisfied, and to 1 if it is.
12181
12182
12183 \S{insSFENCE} \i\c{SFENCE}: Store Fence
12184
12185 \c SFENCE                 ; 0F AE /7               [KATMAI]
12186
12187 \c{SFENCE} performs a serialising operation on all writes to memory
12188 that were issued before the \c{SFENCE} instruction. This guarantees that
12189 all memory writes before the \c{SFENCE} instruction are visible before any
12190 writes after the \c{SFENCE} instruction.
12191
12192 \c{SFENCE} is ordered respective to other \c{SFENCE} instruction, \c{MFENCE},
12193 any memory write and any other serialising instruction (such as \c{CPUID}).
12194
12195 Weakly ordered memory types can be used to achieve higher processor
12196 performance through such techniques as out-of-order issue,
12197 write-combining, and write-collapsing. The degree to which a consumer
12198 of data recognizes or knows that the data is weakly ordered varies
12199 among applications and may be unknown to the producer of this data.
12200 The \c{SFENCE} instruction provides a performance-efficient way of
12201 insuring store ordering between routines that produce weakly-ordered
12202 results and routines that consume this data.
12203
12204 \c{SFENCE} uses the following ModRM encoding:
12205
12206 \c           Mod (7:6)        = 11B
12207 \c           Reg/Opcode (5:3) = 111B
12208 \c           R/M (2:0)        = 000B
12209
12210 All other ModRM encodings are defined to be reserved, and use
12211 of these encodings risks incompatibility with future processors.
12212
12213 See also \c{LFENCE} (\k{insLFENCE}) and \c{MFENCE} (\k{insMFENCE}).
12214
12215
12216 \S{insSGDT} \i\c{SGDT}, \i\c{SIDT}, \i\c{SLDT}: Store Descriptor Table Pointers
12217
12218 \c SGDT mem                      ; 0F 01 /0             [286,PRIV]
12219 \c SIDT mem                      ; 0F 01 /1             [286,PRIV]
12220 \c SLDT r/m16                    ; 0F 00 /0             [286,PRIV]
12221
12222 \c{SGDT} and \c{SIDT} both take a 6-byte memory area as an operand:
12223 they store the contents of the GDTR (global descriptor table
12224 register) or IDTR (interrupt descriptor table register) into that
12225 area as a 32-bit linear address and a 16-bit size limit from that
12226 area (in that order). These are the only instructions which directly
12227 use \e{linear} addresses, rather than segment/offset pairs.
12228
12229 \c{SLDT} stores the segment selector corresponding to the LDT (local
12230 descriptor table) into the given operand.
12231
12232 See also \c{LGDT}, \c{LIDT} and \c{LLDT} (\k{insLGDT}).
12233
12234
12235 \S{insSHL} \i\c{SHL}, \i\c{SHR}: Bitwise Logical Shifts
12236
12237 \c SHL r/m8,1                    ; D0 /4                [8086]
12238 \c SHL r/m8,CL                   ; D2 /4                [8086]
12239 \c SHL r/m8,imm8                 ; C0 /4 ib             [186]
12240 \c SHL r/m16,1                   ; o16 D1 /4            [8086]
12241 \c SHL r/m16,CL                  ; o16 D3 /4            [8086]
12242 \c SHL r/m16,imm8                ; o16 C1 /4 ib         [186]
12243 \c SHL r/m32,1                   ; o32 D1 /4            [386]
12244 \c SHL r/m32,CL                  ; o32 D3 /4            [386]
12245 \c SHL r/m32,imm8                ; o32 C1 /4 ib         [386]
12246
12247 \c SHR r/m8,1                    ; D0 /5                [8086]
12248 \c SHR r/m8,CL                   ; D2 /5                [8086]
12249 \c SHR r/m8,imm8                 ; C0 /5 ib             [186]
12250 \c SHR r/m16,1                   ; o16 D1 /5            [8086]
12251 \c SHR r/m16,CL                  ; o16 D3 /5            [8086]
12252 \c SHR r/m16,imm8                ; o16 C1 /5 ib         [186]
12253 \c SHR r/m32,1                   ; o32 D1 /5            [386]
12254 \c SHR r/m32,CL                  ; o32 D3 /5            [386]
12255 \c SHR r/m32,imm8                ; o32 C1 /5 ib         [386]
12256
12257 \c{SHL} and \c{SHR} perform a logical shift operation on the given
12258 source/destination (first) operand. The vacated bits are filled with
12259 zero.
12260
12261 A synonym for \c{SHL} is \c{SAL} (see \k{insSAL}). NASM will
12262 assemble either one to the same code, but NDISASM will always
12263 disassemble that code as \c{SHL}.
12264
12265 The number of bits to shift by is given by the second operand. Only
12266 the bottom five bits of the shift count are considered by processors
12267 above the 8086.
12268
12269 You can force the longer (286 and upwards, beginning with a \c{C1}
12270 byte) form of \c{SHL foo,1} by using a \c{BYTE} prefix: \c{SHL
12271 foo,BYTE 1}. Similarly with \c{SHR}.
12272
12273
12274 \S{insSHLD} \i\c{SHLD}, \i\c{SHRD}: Bitwise Double-Precision Shifts
12275
12276 \c SHLD r/m16,reg16,imm8         ; o16 0F A4 /r ib      [386]
12277 \c SHLD r/m16,reg32,imm8         ; o32 0F A4 /r ib      [386]
12278 \c SHLD r/m16,reg16,CL           ; o16 0F A5 /r         [386]
12279 \c SHLD r/m16,reg32,CL           ; o32 0F A5 /r         [386]
12280
12281 \c SHRD r/m16,reg16,imm8         ; o16 0F AC /r ib      [386]
12282 \c SHRD r/m32,reg32,imm8         ; o32 0F AC /r ib      [386]
12283 \c SHRD r/m16,reg16,CL           ; o16 0F AD /r         [386]
12284 \c SHRD r/m32,reg32,CL           ; o32 0F AD /r         [386]
12285
12286 \b \c{SHLD} performs a double-precision left shift. It notionally
12287 places its second operand to the right of its first, then shifts
12288 the entire bit string thus generated to the left by a number of
12289 bits specified in the third operand. It then updates only the
12290 \e{first} operand according to the result of this. The second
12291 operand is not modified.
12292
12293 \b \c{SHRD} performs the corresponding right shift: it notionally
12294 places the second operand to the \e{left} of the first, shifts the
12295 whole bit string right, and updates only the first operand.
12296
12297 For example, if \c{EAX} holds \c{0x01234567} and \c{EBX} holds
12298 \c{0x89ABCDEF}, then the instruction \c{SHLD EAX,EBX,4} would update
12299 \c{EAX} to hold \c{0x12345678}. Under the same conditions, \c{SHRD
12300 EAX,EBX,4} would update \c{EAX} to hold \c{0xF0123456}.
12301
12302 The number of bits to shift by is given by the third operand. Only
12303 the bottom five bits of the shift count are considered.
12304
12305
12306 \S{insSHUFPD} \i\c{SHUFPD}: Shuffle Packed Double-Precision FP Values
12307
12308 \c SHUFPD xmm1,xmm2/m128,imm8    ; 66 0F C6 /r ib  [WILLAMETTE,SSE2]
12309
12310 \c{SHUFPD} moves one of the packed double-precision FP values from
12311 the destination operand into the low quadword of the destination
12312 operand; the upper quadword is generated by moving one of the
12313 double-precision FP values from the source operand into the
12314 destination. The select (third) operand selects which of the values
12315 are moved to the destination register.
12316
12317 The select operand is an 8-bit immediate: bit 0 selects which value
12318 is moved from the destination operand to the result (where 0 selects
12319 the low quadword and 1 selects the high quadword) and bit 1 selects
12320 which value is moved from the source operand to the result.
12321 Bits 2 through 7 of the shuffle operand are reserved.
12322
12323
12324 \S{insSHUFPS} \i\c{SHUFPS}: Shuffle Packed Single-Precision FP Values
12325
12326 \c SHUFPS xmm1,xmm2/m128,imm8    ; 0F C6 /r ib     [KATMAI,SSE]
12327
12328 \c{SHUFPS} moves two of the packed single-precision FP values from
12329 the destination operand into the low quadword of the destination
12330 operand; the upper quadword is generated by moving two of the
12331 single-precision FP values from the source operand into the
12332 destination. The select (third) operand selects which of the
12333 values are moved to the destination register.
12334
12335 The select operand is an 8-bit immediate: bits 0 and 1 select the
12336 value to be moved from the destination operand the low doubleword of
12337 the result, bits 2 and 3 select the value to be moved from the
12338 destination operand the second doubleword of the result, bits 4 and
12339 5 select the value to be moved from the source operand the third
12340 doubleword of the result, and bits 6 and 7 select the value to be
12341 moved from the source operand to the high doubleword of the result.
12342
12343
12344 \S{insSMI} \i\c{SMI}: System Management Interrupt
12345
12346 \c SMI                           ; F1                   [386,UNDOC]
12347
12348 \c{SMI} puts some AMD processors into SMM mode. It is available on some
12349 386 and 486 processors, and is only available when DR7 bit 12 is set,
12350 otherwise it generates an Int 1.
12351
12352
12353 \S{insSMINT} \i\c{SMINT}, \i\c{SMINTOLD}: Software SMM Entry (CYRIX)
12354
12355 \c SMINT                         ; 0F 38                [PENT,CYRIX]
12356 \c SMINTOLD                      ; 0F 7E                [486,CYRIX]
12357
12358 \c{SMINT} puts the processor into SMM mode. The CPU state information is
12359 saved in the SMM memory header, and then execution begins at the SMM base
12360 address.
12361
12362 \c{SMINTOLD} is the same as \c{SMINT}, but was the opcode used on the 486.
12363
12364 This pair of opcodes are specific to the Cyrix and compatible range of
12365 processors (Cyrix, IBM, Via).
12366
12367
12368 \S{insSMSW} \i\c{SMSW}: Store Machine Status Word
12369
12370 \c SMSW r/m16                    ; 0F 01 /4             [286,PRIV]
12371
12372 \c{SMSW} stores the bottom half of the \c{CR0} control register (or
12373 the Machine Status Word, on 286 processors) into the destination
12374 operand. See also \c{LMSW} (\k{insLMSW}).
12375
12376 For 32-bit code, this would use the low 16-bits of the specified
12377 register (or a 16bit memory location), without needing an operand
12378 size override byte.
12379
12380
12381 \S{insSQRTPD} \i\c{SQRTPD}: Packed Double-Precision FP Square Root
12382
12383 \c SQRTPD xmm1,xmm2/m128         ; 66 0F 51 /r     [WILLAMETTE,SSE2]
12384
12385 \c{SQRTPD} calculates the square root of the packed double-precision
12386 FP value from the source operand, and stores the double-precision
12387 results in the destination register.
12388
12389
12390 \S{insSQRTPS} \i\c{SQRTPS}: Packed Single-Precision FP Square Root
12391
12392 \c SQRTPS xmm1,xmm2/m128         ; 0F 51 /r        [KATMAI,SSE]
12393
12394 \c{SQRTPS} calculates the square root of the packed single-precision
12395 FP value from the source operand, and stores the single-precision
12396 results in the destination register.
12397
12398
12399 \S{insSQRTSD} \i\c{SQRTSD}: Scalar Double-Precision FP Square Root
12400
12401 \c SQRTSD xmm1,xmm2/m128         ; F2 0F 51 /r     [WILLAMETTE,SSE2]
12402
12403 \c{SQRTSD} calculates the square root of the low-order double-precision
12404 FP value from the source operand, and stores the double-precision
12405 result in the destination register. The high-quadword remains unchanged.
12406
12407
12408 \S{insSQRTSS} \i\c{SQRTSS}: Scalar Single-Precision FP Square Root
12409
12410 \c SQRTSS xmm1,xmm2/m128         ; F3 0F 51 /r     [KATMAI,SSE]
12411
12412 \c{SQRTSS} calculates the square root of the low-order single-precision
12413 FP value from the source operand, and stores the single-precision
12414 result in the destination register. The three high doublewords remain
12415 unchanged.
12416
12417
12418 \S{insSTC} \i\c{STC}, \i\c{STD}, \i\c{STI}: Set Flags
12419
12420 \c STC                           ; F9                   [8086]
12421 \c STD                           ; FD                   [8086]
12422 \c STI                           ; FB                   [8086]
12423
12424 These instructions set various flags. \c{STC} sets the carry flag;
12425 \c{STD} sets the direction flag; and \c{STI} sets the interrupt flag
12426 (thus enabling interrupts).
12427
12428 To clear the carry, direction, or interrupt flags, use the \c{CLC},
12429 \c{CLD} and \c{CLI} instructions (\k{insCLC}). To invert the carry
12430 flag, use \c{CMC} (\k{insCMC}).
12431
12432
12433 \S{insSTMXCSR} \i\c{STMXCSR}: Store Streaming SIMD Extension
12434  Control/Status
12435
12436 \c STMXCSR m32                   ; 0F AE /3        [KATMAI,SSE]
12437
12438 \c{STMXCSR} stores the contents of the \c{MXCSR} control/status
12439 register to the specified memory location. \c{MXCSR} is used to
12440 enable masked/unmasked exception handling, to set rounding modes,
12441 to set flush-to-zero mode, and to view exception status flags.
12442 The reserved bits in the \c{MXCSR} register are stored as 0s.
12443
12444 For details of the \c{MXCSR} register, see the Intel processor docs.
12445
12446 See also \c{LDMXCSR} (\k{insLDMXCSR}).
12447
12448
12449 \S{insSTOSB} \i\c{STOSB}, \i\c{STOSW}, \i\c{STOSD}: Store Byte to String
12450
12451 \c STOSB                         ; AA                   [8086]
12452 \c STOSW                         ; o16 AB               [8086]
12453 \c STOSD                         ; o32 AB               [386]
12454
12455 \c{STOSB} stores the byte in \c{AL} at \c{[ES:DI]} or \c{[ES:EDI]},
12456 and sets the flags accordingly. It then increments or decrements
12457 (depending on the direction flag: increments if the flag is clear,
12458 decrements if it is set) \c{DI} (or \c{EDI}).
12459
12460 The register used is \c{DI} if the address size is 16 bits, and
12461 \c{EDI} if it is 32 bits. If you need to use an address size not
12462 equal to the current \c{BITS} setting, you can use an explicit
12463 \i\c{a16} or \i\c{a32} prefix.
12464
12465 Segment override prefixes have no effect for this instruction: the
12466 use of \c{ES} for the store to \c{[DI]} or \c{[EDI]} cannot be
12467 overridden.
12468
12469 \c{STOSW} and \c{STOSD} work in the same way, but they store the
12470 word in \c{AX} or the doubleword in \c{EAX} instead of the byte in
12471 \c{AL}, and increment or decrement the addressing registers by 2 or
12472 4 instead of 1.
12473
12474 The \c{REP} prefix may be used to repeat the instruction \c{CX} (or
12475 \c{ECX} - again, the address size chooses which) times.
12476
12477
12478 \S{insSTR} \i\c{STR}: Store Task Register
12479
12480 \c STR r/m16                     ; 0F 00 /1             [286,PRIV]
12481
12482 \c{STR} stores the segment selector corresponding to the contents of
12483 the Task Register into its operand. When the operand size is a 16-bit
12484 register, the upper 16-bits are cleared to 0s. When the destination
12485 operand is a memory location, 16 bits are written regardless of the
12486 operand size.
12487
12488
12489 \S{insSUB} \i\c{SUB}: Subtract Integers
12490
12491 \c SUB r/m8,reg8                 ; 28 /r                [8086]
12492 \c SUB r/m16,reg16               ; o16 29 /r            [8086]
12493 \c SUB r/m32,reg32               ; o32 29 /r            [386]
12494
12495 \c SUB reg8,r/m8                 ; 2A /r                [8086]
12496 \c SUB reg16,r/m16               ; o16 2B /r            [8086]
12497 \c SUB reg32,r/m32               ; o32 2B /r            [386]
12498
12499 \c SUB r/m8,imm8                 ; 80 /5 ib             [8086]
12500 \c SUB r/m16,imm16               ; o16 81 /5 iw         [8086]
12501 \c SUB r/m32,imm32               ; o32 81 /5 id         [386]
12502
12503 \c SUB r/m16,imm8                ; o16 83 /5 ib         [8086]
12504 \c SUB r/m32,imm8                ; o32 83 /5 ib         [386]
12505
12506 \c SUB AL,imm8                   ; 2C ib                [8086]
12507 \c SUB AX,imm16                  ; o16 2D iw            [8086]
12508 \c SUB EAX,imm32                 ; o32 2D id            [386]
12509
12510 \c{SUB} performs integer subtraction: it subtracts its second
12511 operand from its first, and leaves the result in its destination
12512 (first) operand. The flags are set according to the result of the
12513 operation: in particular, the carry flag is affected and can be used
12514 by a subsequent \c{SBB} instruction (\k{insSBB}).
12515
12516 In the forms with an 8-bit immediate second operand and a longer
12517 first operand, the second operand is considered to be signed, and is
12518 sign-extended to the length of the first operand. In these cases,
12519 the \c{BYTE} qualifier is necessary to force NASM to generate this
12520 form of the instruction.
12521
12522
12523 \S{insSUBPD} \i\c{SUBPD}: Packed Double-Precision FP Subtract
12524
12525 \c SUBPD xmm1,xmm2/m128          ; 66 0F 5C /r     [WILLAMETTE,SSE2]
12526
12527 \c{SUBPD} subtracts the packed double-precision FP values of
12528 the source operand from those of the destination operand, and
12529 stores the result in the destination operation.
12530
12531
12532 \S{insSUBPS} \i\c{SUBPS}: Packed Single-Precision FP Subtract
12533
12534 \c SUBPS xmm1,xmm2/m128          ; 0F 5C /r        [KATMAI,SSE]
12535
12536 \c{SUBPS} subtracts the packed single-precision FP values of
12537 the source operand from those of the destination operand, and
12538 stores the result in the destination operation.
12539
12540
12541 \S{insSUBSD} \i\c{SUBSD}: Scalar Single-FP Subtract
12542
12543 \c SUBSD xmm1,xmm2/m128          ; F2 0F 5C /r     [WILLAMETTE,SSE2]
12544
12545 \c{SUBSD} subtracts the low-order double-precision FP value of
12546 the source operand from that of the destination operand, and
12547 stores the result in the destination operation. The high
12548 quadword is unchanged.
12549
12550
12551 \S{insSUBSS} \i\c{SUBSS}: Scalar Single-FP Subtract
12552
12553 \c SUBSS xmm1,xmm2/m128          ; F3 0F 5C /r     [KATMAI,SSE]
12554
12555 \c{SUBSS} subtracts the low-order single-precision FP value of
12556 the source operand from that of the destination operand, and
12557 stores the result in the destination operation. The three high
12558 doublewords are unchanged.
12559
12560
12561 \S{insSVDC} \i\c{SVDC}: Save Segment Register and Descriptor
12562
12563 \c SVDC m80,segreg               ; 0F 78 /r        [486,CYRIX,SMM]
12564
12565 \c{SVDC} saves a segment register (DS, ES, FS, GS, or SS) and its
12566 descriptor to mem80.
12567
12568
12569 \S{insSVLDT} \i\c{SVLDT}: Save LDTR and Descriptor
12570
12571 \c SVLDT m80                     ; 0F 7A /0        [486,CYRIX,SMM]
12572
12573 \c{SVLDT} saves the Local Descriptor Table (LDTR) to mem80.
12574
12575
12576 \S{insSVTS} \i\c{SVTS}: Save TSR and Descriptor
12577
12578 \c SVTS m80                      ; 0F 7C /0        [486,CYRIX,SMM]
12579
12580 \c{SVTS} saves the Task State Register (TSR) to mem80.
12581
12582
12583 \S{insSYSCALL} \i\c{SYSCALL}: Call Operating System
12584
12585 \c SYSCALL                       ; 0F 05                [P6,AMD]
12586
12587 \c{SYSCALL} provides a fast method of transferring control to a fixed
12588 entry point in an operating system.
12589
12590 \b The \c{EIP} register is copied into the \c{ECX} register.
12591
12592 \b Bits [31-0] of the 64-bit SYSCALL/SYSRET Target Address Register
12593 (\c{STAR}) are copied into the \c{EIP} register.
12594
12595 \b Bits [47-32] of the \c{STAR} register specify the selector that is
12596 copied into the \c{CS} register.
12597
12598 \b Bits [47-32]+1000b of the \c{STAR} register specify the selector that
12599 is copied into the SS register.
12600
12601 The \c{CS} and \c{SS} registers should not be modified by the operating
12602 system between the execution of the \c{SYSCALL} instruction and its
12603 corresponding \c{SYSRET} instruction.
12604
12605 For more information, see the \c{SYSCALL and SYSRET Instruction Specification}
12606 (AMD document number 21086.pdf).
12607
12608
12609 \S{insSYSENTER} \i\c{SYSENTER}: Fast System Call
12610
12611 \c SYSENTER                      ; 0F 34                [P6]
12612
12613 \c{SYSENTER} executes a fast call to a level 0 system procedure or
12614 routine. Before using this instruction, various MSRs need to be set
12615 up:
12616
12617 \b \c{SYSENTER_CS_MSR} contains the 32-bit segment selector for the
12618 privilege level 0 code segment. (This value is also used to compute
12619 the segment selector of the privilege level 0 stack segment.)
12620
12621 \b \c{SYSENTER_EIP_MSR} contains the 32-bit offset into the privilege
12622 level 0 code segment to the first instruction of the selected operating
12623 procedure or routine.
12624
12625 \b \c{SYSENTER_ESP_MSR} contains the 32-bit stack pointer for the
12626 privilege level 0 stack.
12627
12628 \c{SYSENTER} performs the following sequence of operations:
12629
12630 \b Loads the segment selector from the \c{SYSENTER_CS_MSR} into the
12631 \c{CS} register.
12632
12633 \b Loads the instruction pointer from the \c{SYSENTER_EIP_MSR} into
12634 the \c{EIP} register.
12635
12636 \b Adds 8 to the value in \c{SYSENTER_CS_MSR} and loads it into the
12637 \c{SS} register.
12638
12639 \b Loads the stack pointer from the \c{SYSENTER_ESP_MSR} into the
12640 \c{ESP} register.
12641
12642 \b Switches to privilege level 0.
12643
12644 \b Clears the \c{VM} flag in the \c{EFLAGS} register, if the flag
12645 is set.
12646
12647 \b Begins executing the selected system procedure.
12648
12649 In particular, note that this instruction des not save the values of
12650 \c{CS} or \c{(E)IP}. If you need to return to the calling code, you
12651 need to write your code to cater for this.
12652
12653 For more information, see the Intel Architecture Software Developer's
12654 Manual, Volume 2.
12655
12656
12657 \S{insSYSEXIT} \i\c{SYSEXIT}: Fast Return From System Call
12658
12659 \c SYSEXIT                       ; 0F 35                [P6,PRIV]
12660
12661 \c{SYSEXIT} executes a fast return to privilege level 3 user code.
12662 This instruction is a companion instruction to the \c{SYSENTER}
12663 instruction, and can only be executed by privilege level 0 code.
12664 Various registers need to be set up before calling this instruction:
12665
12666 \b \c{SYSENTER_CS_MSR} contains the 32-bit segment selector for the
12667 privilege level 0 code segment in which the processor is currently
12668 executing. (This value is used to compute the segment selectors for
12669 the privilege level 3 code and stack segments.)
12670
12671 \b \c{EDX} contains the 32-bit offset into the privilege level 3 code
12672 segment to the first instruction to be executed in the user code.
12673
12674 \b \c{ECX} contains the 32-bit stack pointer for the privilege level 3
12675 stack.
12676
12677 \c{SYSEXIT} performs the following sequence of operations:
12678
12679 \b Adds 16 to the value in \c{SYSENTER_CS_MSR} and loads the sum into
12680 the \c{CS} selector register.
12681
12682 \b Loads the instruction pointer from the \c{EDX} register into the
12683 \c{EIP} register.
12684
12685 \b Adds 24 to the value in \c{SYSENTER_CS_MSR} and loads the sum
12686 into the \c{SS} selector register.
12687
12688 \b Loads the stack pointer from the \c{ECX} register into the \c{ESP}
12689 register.
12690
12691 \b Switches to privilege level 3.
12692
12693 \b Begins executing the user code at the \c{EIP} address.
12694
12695 For more information on the use of the \c{SYSENTER} and \c{SYSEXIT}
12696 instructions, see the Intel Architecture Software Developer's
12697 Manual, Volume 2.
12698
12699
12700 \S{insSYSRET} \i\c{SYSRET}: Return From Operating System
12701
12702 \c SYSRET                        ; 0F 07                [P6,AMD,PRIV]
12703
12704 \c{SYSRET} is the return instruction used in conjunction with the
12705 \c{SYSCALL} instruction to provide fast entry/exit to an operating system.
12706
12707 \b The \c{ECX} register, which points to the next sequential instruction
12708 after the corresponding \c{SYSCALL} instruction, is copied into the \c{EIP}
12709 register.
12710
12711 \b Bits [63-48] of the \c{STAR} register specify the selector that is copied
12712 into the \c{CS} register.
12713
12714 \b Bits [63-48]+1000b of the \c{STAR} register specify the selector that is
12715 copied into the \c{SS} register.
12716
12717 \b Bits [1-0] of the \c{SS} register are set to 11b (RPL of 3) regardless of
12718 the value of bits [49-48] of the \c{STAR} register.
12719
12720 The \c{CS} and \c{SS} registers should not be modified by the operating
12721 system between the execution of the \c{SYSCALL} instruction and its
12722 corresponding \c{SYSRET} instruction.
12723
12724 For more information, see the \c{SYSCALL and SYSRET Instruction Specification}
12725 (AMD document number 21086.pdf).
12726
12727
12728 \S{insTEST} \i\c{TEST}: Test Bits (notional bitwise AND)
12729
12730 \c TEST r/m8,reg8                ; 84 /r                [8086]
12731 \c TEST r/m16,reg16              ; o16 85 /r            [8086]
12732 \c TEST r/m32,reg32              ; o32 85 /r            [386]
12733
12734 \c TEST r/m8,imm8                ; F6 /0 ib             [8086]
12735 \c TEST r/m16,imm16              ; o16 F7 /0 iw         [8086]
12736 \c TEST r/m32,imm32              ; o32 F7 /0 id         [386]
12737
12738 \c TEST AL,imm8                  ; A8 ib                [8086]
12739 \c TEST AX,imm16                 ; o16 A9 iw            [8086]
12740 \c TEST EAX,imm32                ; o32 A9 id            [386]
12741
12742 \c{TEST} performs a `mental' bitwise AND of its two operands, and
12743 affects the flags as if the operation had taken place, but does not
12744 store the result of the operation anywhere.
12745
12746
12747 \S{insUCOMISD} \i\c{UCOMISD}: Unordered Scalar Double-Precision FP
12748 compare and set EFLAGS
12749
12750 \c UCOMISD xmm1,xmm2/m128        ; 66 0F 2E /r     [WILLAMETTE,SSE2]
12751
12752 \c{UCOMISD} compares the low-order double-precision FP numbers in the
12753 two operands, and sets the \c{ZF}, \c{PF} and \c{CF} bits in the
12754 \c{EFLAGS} register. In addition, the \c{OF}, \c{SF} and \c{AF} bits
12755 in the \c{EFLAGS} register are zeroed out. The unordered predicate
12756 (\c{ZF}, \c{PF} and \c{CF} all set) is returned if either source
12757 operand is a \c{NaN} (\c{qNaN} or \c{sNaN}).
12758
12759
12760 \S{insUCOMISS} \i\c{UCOMISS}: Unordered Scalar Single-Precision FP
12761 compare and set EFLAGS
12762
12763 \c UCOMISS xmm1,xmm2/m128        ; 0F 2E /r        [KATMAI,SSE]
12764
12765 \c{UCOMISS} compares the low-order single-precision FP numbers in the
12766 two operands, and sets the \c{ZF}, \c{PF} and \c{CF} bits in the
12767 \c{EFLAGS} register. In addition, the \c{OF}, \c{SF} and \c{AF} bits
12768 in the \c{EFLAGS} register are zeroed out. The unordered predicate
12769 (\c{ZF}, \c{PF} and \c{CF} all set) is returned if either source
12770 operand is a \c{NaN} (\c{qNaN} or \c{sNaN}).
12771
12772
12773 \S{insUD2} \i\c{UD0}, \i\c{UD1}, \i\c{UD2}: Undefined Instruction
12774
12775 \c UD0                           ; 0F FF                [186,UNDOC]
12776 \c UD1                           ; 0F B9                [186,UNDOC]
12777 \c UD2                           ; 0F 0B                [186]
12778
12779 \c{UDx} can be used to generate an invalid opcode exception, for testing
12780 purposes.
12781
12782 \c{UD0} is specifically documented by AMD as being reserved for this
12783 purpose.
12784
12785 \c{UD1} is documented by Intel as being available for this purpose.
12786
12787 \c{UD2} is specifically documented by Intel as being reserved for this
12788 purpose. Intel document this as the preferred method of generating an
12789 invalid opcode exception.
12790
12791 All these opcodes can be used to generate invalid opcode exceptions on
12792 all currently available processors.
12793
12794
12795 \S{insUMOV} \i\c{UMOV}: User Move Data
12796
12797 \c UMOV r/m8,reg8                ; 0F 10 /r             [386,UNDOC]
12798 \c UMOV r/m16,reg16              ; o16 0F 11 /r         [386,UNDOC]
12799 \c UMOV r/m32,reg32              ; o32 0F 11 /r         [386,UNDOC]
12800
12801 \c UMOV reg8,r/m8                ; 0F 12 /r             [386,UNDOC]
12802 \c UMOV reg16,r/m16              ; o16 0F 13 /r         [386,UNDOC]
12803 \c UMOV reg32,r/m32              ; o32 0F 13 /r         [386,UNDOC]
12804
12805 This undocumented instruction is used by in-circuit emulators to
12806 access user memory (as opposed to host memory). It is used just like
12807 an ordinary memory/register or register/register \c{MOV}
12808 instruction, but accesses user space.
12809
12810 This instruction is only available on some AMD and IBM 386 and 486
12811 processors.
12812
12813
12814 \S{insUNPCKHPD} \i\c{UNPCKHPD}: Unpack and Interleave High Packed
12815 Double-Precision FP Values
12816
12817 \c UNPCKHPD xmm1,xmm2/m128       ; 66 0F 15 /r     [WILLAMETTE,SSE2]
12818
12819 \c{UNPCKHPD} performs an interleaved unpack of the high-order data
12820 elements of the source and destination operands, saving the result
12821 in \c{xmm1}. It ignores the lower half of the sources.
12822
12823 The operation of this instruction is:
12824
12825 \c    dst[63-0]   := dst[127-64];
12826 \c    dst[127-64] := src[127-64].
12827
12828
12829 \S{insUNPCKHPS} \i\c{UNPCKHPS}: Unpack and Interleave High Packed
12830 Single-Precision FP Values
12831
12832 \c UNPCKHPS xmm1,xmm2/m128       ; 0F 15 /r        [KATMAI,SSE]
12833
12834 \c{UNPCKHPS} performs an interleaved unpack of the high-order data
12835 elements of the source and destination operands, saving the result
12836 in \c{xmm1}. It ignores the lower half of the sources.
12837
12838 The operation of this instruction is:
12839
12840 \c    dst[31-0]   := dst[95-64];
12841 \c    dst[63-32]  := src[95-64];
12842 \c    dst[95-64]  := dst[127-96];
12843 \c    dst[127-96] := src[127-96].
12844
12845
12846 \S{insUNPCKLPD} \i\c{UNPCKLPD}: Unpack and Interleave Low Packed
12847 Double-Precision FP Data
12848
12849 \c UNPCKLPD xmm1,xmm2/m128       ; 66 0F 14 /r     [WILLAMETTE,SSE2]
12850
12851 \c{UNPCKLPD} performs an interleaved unpack of the low-order data
12852 elements of the source and destination operands, saving the result
12853 in \c{xmm1}. It ignores the lower half of the sources.
12854
12855 The operation of this instruction is:
12856
12857 \c    dst[63-0]   := dst[63-0];
12858 \c    dst[127-64] := src[63-0].
12859
12860
12861 \S{insUNPCKLPS} \i\c{UNPCKLPS}: Unpack and Interleave Low Packed
12862 Single-Precision FP Data
12863
12864 \c UNPCKLPS xmm1,xmm2/m128       ; 0F 14 /r        [KATMAI,SSE]
12865
12866 \c{UNPCKLPS} performs an interleaved unpack of the low-order data
12867 elements of the source and destination operands, saving the result
12868 in \c{xmm1}. It ignores the lower half of the sources.
12869
12870 The operation of this instruction is:
12871
12872 \c    dst[31-0]   := dst[31-0];
12873 \c    dst[63-32]  := src[31-0];
12874 \c    dst[95-64]  := dst[63-32];
12875 \c    dst[127-96] := src[63-32].
12876
12877
12878 \S{insVERR} \i\c{VERR}, \i\c{VERW}: Verify Segment Readability/Writability
12879
12880 \c VERR r/m16                    ; 0F 00 /4             [286,PRIV]
12881
12882 \c VERW r/m16                    ; 0F 00 /5             [286,PRIV]
12883
12884 \b \c{VERR} sets the zero flag if the segment specified by the selector
12885 in its operand can be read from at the current privilege level.
12886 Otherwise it is cleared.
12887
12888 \b \c{VERW} sets the zero flag if the segment can be written.
12889
12890
12891 \S{insWAIT} \i\c{WAIT}: Wait for Floating-Point Processor
12892
12893 \c WAIT                          ; 9B                   [8086]
12894 \c FWAIT                         ; 9B                   [8086]
12895
12896 \c{WAIT}, on 8086 systems with a separate 8087 FPU, waits for the
12897 FPU to have finished any operation it is engaged in before
12898 continuing main processor operations, so that (for example) an FPU
12899 store to main memory can be guaranteed to have completed before the
12900 CPU tries to read the result back out.
12901
12902 On higher processors, \c{WAIT} is unnecessary for this purpose, and
12903 it has the alternative purpose of ensuring that any pending unmasked
12904 FPU exceptions have happened before execution continues.
12905
12906
12907 \S{insWBINVD} \i\c{WBINVD}: Write Back and Invalidate Cache
12908
12909 \c WBINVD                        ; 0F 09                [486]
12910
12911 \c{WBINVD} invalidates and empties the processor's internal caches,
12912 and causes the processor to instruct external caches to do the same.
12913 It writes the contents of the caches back to memory first, so no
12914 data is lost. To flush the caches quickly without bothering to write
12915 the data back first, use \c{INVD} (\k{insINVD}).
12916
12917
12918 \S{insWRMSR} \i\c{WRMSR}: Write Model-Specific Registers
12919
12920 \c WRMSR                         ; 0F 30                [PENT]
12921
12922 \c{WRMSR} writes the value in \c{EDX:EAX} to the processor
12923 Model-Specific Register (MSR) whose index is stored in \c{ECX}.
12924 See also \c{RDMSR} (\k{insRDMSR}).
12925
12926
12927 \S{insWRSHR} \i\c{WRSHR}: Write SMM Header Pointer Register
12928
12929 \c WRSHR r/m32                   ; 0F 37 /0        [386,CYRIX,SMM]
12930
12931 \c{WRSHR} loads the contents of either a 32-bit memory location or a
12932 32-bit register into the SMM header pointer register.
12933
12934 See also \c{RDSHR} (\k{insRDSHR}).
12935
12936
12937 \S{insXADD} \i\c{XADD}: Exchange and Add
12938
12939 \c XADD r/m8,reg8                ; 0F C0 /r             [486]
12940 \c XADD r/m16,reg16              ; o16 0F C1 /r         [486]
12941 \c XADD r/m32,reg32              ; o32 0F C1 /r         [486]
12942
12943 \c{XADD} exchanges the values in its two operands, and then adds
12944 them together and writes the result into the destination (first)
12945 operand. This instruction can be used with a \c{LOCK} prefix for
12946 multi-processor synchronisation purposes.
12947
12948
12949 \S{insXBTS} \i\c{XBTS}: Extract Bit String
12950
12951 \c XBTS reg16,r/m16              ; o16 0F A6 /r         [386,UNDOC]
12952 \c XBTS reg32,r/m32              ; o32 0F A6 /r         [386,UNDOC]
12953
12954 The implied operation of this instruction is:
12955
12956 \c XBTS r/m16,reg16,AX,CL
12957 \c XBTS r/m32,reg32,EAX,CL
12958
12959 Writes a bit string from the source operand to the destination. \c{CL}
12960 indicates the number of bits to be copied, and \c{(E)AX} indicates the
12961 low order bit offset in the source. The bits are written to the low
12962 order bits of the destination register. For example, if \c{CL} is set
12963 to 4 and \c{AX} (for 16-bit code) is set to 5, bits 5-8 of \c{src} will
12964 be copied to bits 0-3 of \c{dst}. This instruction is very poorly
12965 documented, and I have been unable to find any official source of
12966 documentation on it.
12967
12968 \c{XBTS} is supported only on the early Intel 386s, and conflicts with
12969 the opcodes for \c{CMPXCHG486} (on early Intel 486s). NASM supports it
12970 only for completeness. Its counterpart is \c{IBTS} (see \k{insIBTS}).
12971
12972
12973 \S{insXCHG} \i\c{XCHG}: Exchange
12974
12975 \c XCHG reg8,r/m8                ; 86 /r                [8086]
12976 \c XCHG reg16,r/m8               ; o16 87 /r            [8086]
12977 \c XCHG reg32,r/m32              ; o32 87 /r            [386]
12978
12979 \c XCHG r/m8,reg8                ; 86 /r                [8086]
12980 \c XCHG r/m16,reg16              ; o16 87 /r            [8086]
12981 \c XCHG r/m32,reg32              ; o32 87 /r            [386]
12982
12983 \c XCHG AX,reg16                 ; o16 90+r             [8086]
12984 \c XCHG EAX,reg32                ; o32 90+r             [386]
12985 \c XCHG reg16,AX                 ; o16 90+r             [8086]
12986 \c XCHG reg32,EAX                ; o32 90+r             [386]
12987
12988 \c{XCHG} exchanges the values in its two operands. It can be used
12989 with a \c{LOCK} prefix for purposes of multi-processor
12990 synchronisation.
12991
12992 \c{XCHG AX,AX} or \c{XCHG EAX,EAX} (depending on the \c{BITS}
12993 setting) generates the opcode \c{90h}, and so is a synonym for
12994 \c{NOP} (\k{insNOP}).
12995
12996
12997 \S{insXLATB} \i\c{XLATB}: Translate Byte in Lookup Table
12998
12999 \c XLAT                          ; D7                   [8086]
13000 \c XLATB                         ; D7                   [8086]
13001
13002 \c{XLATB} adds the value in \c{AL}, treated as an unsigned byte, to
13003 \c{BX} or \c{EBX}, and loads the byte from the resulting address (in
13004 the segment specified by \c{DS}) back into \c{AL}.
13005
13006 The base register used is \c{BX} if the address size is 16 bits, and
13007 \c{EBX} if it is 32 bits. If you need to use an address size not
13008 equal to the current \c{BITS} setting, you can use an explicit
13009 \i\c{a16} or \i\c{a32} prefix.
13010
13011 The segment register used to load from \c{[BX+AL]} or \c{[EBX+AL]}
13012 can be overridden by using a segment register name as a prefix (for
13013 example, \c{es xlatb}).
13014
13015
13016 \S{insXOR} \i\c{XOR}: Bitwise Exclusive OR
13017
13018 \c XOR r/m8,reg8                 ; 30 /r                [8086]
13019 \c XOR r/m16,reg16               ; o16 31 /r            [8086]
13020 \c XOR r/m32,reg32               ; o32 31 /r            [386]
13021
13022 \c XOR reg8,r/m8                 ; 32 /r                [8086]
13023 \c XOR reg16,r/m16               ; o16 33 /r            [8086]
13024 \c XOR reg32,r/m32               ; o32 33 /r            [386]
13025
13026 \c XOR r/m8,imm8                 ; 80 /6 ib             [8086]
13027 \c XOR r/m16,imm16               ; o16 81 /6 iw         [8086]
13028 \c XOR r/m32,imm32               ; o32 81 /6 id         [386]
13029
13030 \c XOR r/m16,imm8                ; o16 83 /6 ib         [8086]
13031 \c XOR r/m32,imm8                ; o32 83 /6 ib         [386]
13032
13033 \c XOR AL,imm8                   ; 34 ib                [8086]
13034 \c XOR AX,imm16                  ; o16 35 iw            [8086]
13035 \c XOR EAX,imm32                 ; o32 35 id            [386]
13036
13037 \c{XOR} performs a bitwise XOR operation between its two operands
13038 (i.e. each bit of the result is 1 if and only if exactly one of the
13039 corresponding bits of the two inputs was 1), and stores the result
13040 in the destination (first) operand.
13041
13042 In the forms with an 8-bit immediate second operand and a longer
13043 first operand, the second operand is considered to be signed, and is
13044 sign-extended to the length of the first operand. In these cases,
13045 the \c{BYTE} qualifier is necessary to force NASM to generate this
13046 form of the instruction.
13047
13048 The \c{MMX} instruction \c{PXOR} (see \k{insPXOR}) performs the same
13049 operation on the 64-bit \c{MMX} registers.
13050
13051
13052 \S{insXORPD} \i\c{XORPD}: Bitwise Logical XOR of Double-Precision FP Values
13053
13054 \c XORPD xmm1,xmm2/m128          ; 66 0F 57 /r     [WILLAMETTE,SSE2]
13055
13056 \c{XORPD} returns a bit-wise logical XOR between the source and
13057 destination operands, storing the result in the destination operand.
13058
13059
13060 \S{insXORPS} \i\c{XORPS}: Bitwise Logical XOR of Single-Precision FP Values
13061
13062 \c XORPS xmm1,xmm2/m128          ; 0F 57 /r        [KATMAI,SSE]
13063
13064 \c{XORPS} returns a bit-wise logical XOR between the source and
13065 destination operands, storing the result in the destination operand.
13066
13067