3 \# Source code to NASM documentation
5 \M{category}{Programming}
6 \M{title}{NASM - The Netwide Assembler}
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.}
13 \M{infotitle}{The Netwide Assembler for x86}
14 \M{epslogo}{nasmlogo.eps}
20 \IR{-On} \c{-On} option
36 \IR{!=} \c{!=} operator
37 \IR{$, here} \c{$}, Here token
38 \IR{$, prefix} \c{$}, prefix
41 \IR{%%} \c{%%} operator
42 \IR{%+1} \c{%+1} and \c{%-1} syntax
44 \IR{%0} \c{%0} parameter count
46 \IR{&&} \c{&&} operator
48 \IR{..@} \c{..@} symbol prefix
50 \IR{//} \c{//} operator
52 \IR{<<} \c{<<} operator
53 \IR{<=} \c{<=} operator
54 \IR{<>} \c{<>} operator
56 \IR{==} \c{==} operator
58 \IR{>=} \c{>=} operator
59 \IR{>>} \c{>>} operator
60 \IR{?} \c{?} MASM syntax
62 \IR{^^} \c{^^} operator
64 \IR{||} \c{||} operator
66 \IR{%$} \c{%$} and \c{%$$} prefixes
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
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
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
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
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
108 \IR{dll symbols, exporting} DLL symbols, exporting
109 \IR{dll symbols, importing} DLL symbols, importing
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}
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
121 \IR{freelink} FreeLink
122 \IR{functions, c calling convention} functions, C calling convention
123 \IR{functions, pascal calling convention} functions, Pascal calling
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
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
140 \IA{memory reference}{memory references}
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
149 \IR{ms-dos device drivers} MS-DOS device drivers
150 \IR{multipush} \c{multipush} macro
151 \IR{nasm version} NASM version
155 \IR{operating system} operating system
157 \IR{pascal calling convention}Pascal calling convention
158 \IR{passes} passes, assembly
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
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
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
193 \IR{underscore, in c symbols} underscore, in C symbols
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
203 \IR{version number of nasm} version number of NASM
204 \IR{visual c++} Visual C++
205 \IR{www page} WWW page
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}
217 \C{intro} Introduction
219 \H{whatsnasm} What Is NASM?
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
231 \S{yaasm} Why Yet Another Assembler?
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.
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.
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
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.
251 \b \i\c{MASM} isn't very good, and it's expensive, and it runs only under
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.
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.
269 \S{legal} Licence Conditions
271 Please see the file \c{Licence}, supplied as part of any NASM
272 distribution archive, for the \i{licence} conditions under which you
276 \H{contact} Contact Information
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.
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/}
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.
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}
296 \W{ftp://ftp.kernel.org/pub/software/devel/nasm/}\i\c{ftp.kernel.org}
298 \W{ftp://ibiblio.org/pub/Linux/devel/lang/assemblers/}\i\c{ibiblio.org}.
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}
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
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}
311 \W{http://sourceforge.net/projects/nasm}\c{http://sourceforge.net/projects/nasm}.
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.
318 \H{install} Installation
320 \S{instdos} \i{Installing} NASM under MS-\i{DOS} or Windows
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}).
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}
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}.)
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.
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.
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}.
363 \S{instdos} Installing NASM under \i{Unix}
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}.
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}
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.
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.
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.
396 \C{running} Running NASM
398 \H{syntax} NASM \i{Command-Line} Syntax
400 To assemble a file, you issue a command of the form
402 \c nasm -f <format> <filename> [-o <output>]
406 \c nasm -f elf myfile.asm
408 will assemble \c{myfile.asm} into an \c{ELF} object file \c{myfile.o}. And
410 \c nasm -f bin myfile.asm -o myfile.com
412 will assemble \c{myfile.asm} into a raw binary file \c{myfile.com}.
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:
418 \c nasm -f coff myfile.asm -l myfile.lst
420 To get further usage instructions from NASM, try typing
424 This will also list the available output file formats, and what they
427 If you use Linux but aren't sure whether your system is \c{a.out}
432 (in the directory in which you put the NASM binary when you
433 installed it). If it says something like
435 \c nasm: ELF 32-bit LSB executable i386 (386 and up) Version 1
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
440 \c nasm: Linux/i386 demand-paged executable (QMAGIC)
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.)
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
451 \S{opt-o} The \i\c{-o} Option: Specifying the Output File Name
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}.
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.
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:
474 \c nasm -f bin program.asm -o program.com
475 \c nasm -f bin driver.asm -odriver.sys
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}.
481 \S{opt-f} The \i\c{-f} Option: Specifying the \i{Output File Format}
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.
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.
492 A complete list of the available output file formats can be given by
493 issuing the command \i\c{nasm -hf}.
496 \S{opt-l} The \i\c{-l} Option: Generating a \i{Listing File}
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
506 \c nasm -f elf myfile.asm -l myfile.lst
509 \S{opt-M} The \i\c{-M} Option: Generate \i{Makefile Dependencies}.
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:
514 \c NASM -M myfile.asm > myfile.dep
517 \S{opt-F} The \i\c{-F} Option: Selecting a \i{Debugging Format}
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.
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}.
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}
530 \S{opt-g} The \i\c{-g} Option: Enabling \i{Debug Information}.
532 This option can be used to generate debugging information in the specified
535 See \k{opt-F} for more information.
538 \S{opt-X} The \i\c{-X} Option: Selecting an \i{Error Reporting Format}
540 This option can be used to select an error reporting format for any
541 error messages that might be produced by NASM.
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:
547 \c filename.asm:65: error:specific error message
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.
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:
559 \c filename.asm(65) error:specific error message
562 where the only difference is that the line number is in parentheses
563 instead of being delimited by colons.
565 See also the \c{Visual C++} output format, \k{win32fmt}.
567 \S{opt-E} The \i\c{-E} Option: Send Errors to a File
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.
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
580 \c nasm -E myfile.err -f obj myfile.asm
583 \S{opt-s} The \i\c{-s} Option: Send Errors to \i\c{stdout}
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:
590 \c nasm -s -f obj myfile.asm | more
592 See also the \c{-E} option, \k{opt-E}.
595 \S{opt-i} The \i\c{-i}\I\c{-I} Option: Include File Search Directories
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
603 \c nasm -ic:\macrolib\ -f obj myfile.asm
605 (As usual, a space between \c{-i} and the path name is allowed, and
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.
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}...)
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
624 For Makefile compatibility with many C compilers, this option can also
625 be specified as \c{-I}.
628 \S{opt-p} The \i\c{-p}\I\c{-P} Option: \I{pre-including files}Pre-Include a File
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}
634 \c nasm myfile.asm -p myinc.inc
636 is equivalent to running \c{nasm myfile.asm} and placing the
637 directive \c{%include "myinc.inc"} at the start of the file.
639 For consistency with the \c{-I}, \c{-D} and \c{-U} options, this
640 option can also be specified as \c{-P}.
643 \S{opt-d} The \i\c{-d}\I\c{-D} Option: \I{pre-defining macros}Pre-Define a Macro
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
650 \c nasm myfile.asm -dFOO=100
652 as an alternative to placing the directive
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
662 For Makefile compatibility with many C compilers, this option can also
663 be specified as \c{-D}.
666 \S{opt-u} The \i\c{-u}\I\c{-U} Option: \I{Undefining macros}Undefine a Macro
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.
672 For example, the following command line:
674 \c nasm myfile.asm -dFOO=100 -uFOO
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
680 For Makefile compatibility with many C compilers, this option can also
681 be specified as \c{-U}.
684 \S{opt-e} The \i\c{-e} Option: Preprocess Only
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).
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
697 \c %assign tablesize ($-tablestart)
699 will cause an error in \i{preprocess-only mode}.
702 \S{opt-a} The \i\c{-a} Option: Don't Preprocess At All
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.
712 \S{opt-On} The \i\c{-On} Option: Specifying \i{Multipass Optimization}.
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.
718 Using the \c{-O} option, you can tell NASM to carry out multiple passes.
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
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.
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
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}.
744 \S{opt-t} The \i\c{-t} option: Enable TASM Compatibility Mode
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:
749 \b local labels may be prefixed with \c{@@} instead of \c{.}
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
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
762 \b \c{%arg} preprocessor directive is supported which is similar to
763 TASM's \c{ARG} directive.
765 \b \c{%local} preprocessor directive
767 \b \c{%stacksize} preprocessor directive
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})
775 For more information on the directives, see the section on TASM
776 Compatiblity preprocessor directives in \k{tasmcompat}.
779 \S{opt-w} The \i\c{-w} Option: Enable or Disable Assembly \i{Warnings}
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
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}.
797 The \i{suppressible warning} classes are:
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.
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.
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
815 \S{opt-v} The \i\c{-v} Option: Display \i{Version} Info
817 Typing \c{NASM -v} will display the version of NASM which you are using,
818 and the date on which it was compiled.
820 You will need the version number if you report a bug.
823 \S{nasmenv} The \c{NASMENV} \i{Environment} Variable
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.
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"}.
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.
845 This environment variable was previously called \c{NASM}. This was
846 changed with version 0.98.31.
849 \H{qstart} \i{Quick Start} for \i{MASM} Users
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.
858 \S{qscs} NASM Is \I{case sensitivity}Case-Sensitive
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.
869 \S{qsbrackets} NASM Requires \i{Square Brackets} For \i{Memory References}
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,
880 then the two lines of code
885 generate completely different opcodes, despite having
886 identical-looking syntaxes.
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]}.
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.
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.
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.
920 \S{qstypes} NASM Doesn't Store \i{Variable Types}
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}.
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.
937 \S{qsassume} NASM Doesn't \i\c{ASSUME}
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.
945 \S{qsmodel} NASM Doesn't Support \i{Memory Models}
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
959 \S{qsfpu} \i{Floating-Point} Differences
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.
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.
972 \S{qsother} Other Differences
974 For historical reasons, NASM uses the keyword \i\c{TWORD} where MASM
975 and compatible assemblers use \i\c{TBYTE}.
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.
985 In addition to all of this, macros and directives work completely
986 differently to MASM. See \k{preproc} and \k{directive} for further
990 \C{lang} The NASM Language
992 \H{syntax} Layout of a NASM Source Line
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
998 \c label: instruction operands ; comment
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.
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.
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}.)
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.
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
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.
1049 In addition to actual machine instructions, NASM also supports a
1050 number of pseudo-instructions, described in \k{pseudop}.
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}).
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:
1065 \c fadd st1 ; this sets st0 := st0 + st1
1066 \c fadd st0,st1 ; so does this
1068 \c fadd st1,st0 ; this sets st1 := st1 + st0
1069 \c fadd to st1 ; so does this
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.
1076 \H{pseudop} \i{Pseudo-Instructions}
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.
1087 \S{db} \c{DB} and friends: Declaring Initialised Data
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}
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
1107 \c{DQ} and \c{DT} do not accept \i{numeric constants} or string
1108 constants as operands.
1111 \S{resb} \c{RESB} and friends: Declaring \i{Uninitialised} Data
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
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
1130 \S{incbin} \i\c{INCBIN}: Including External \i{Binary Files}
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
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
1144 \S{equ} \i\c{EQU}: Defining Constants
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
1152 \c message db 'hello, world'
1153 \c msglen equ $-message
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}
1165 \S{times} \i\c{TIMES}: \i{Repeating} Instructions or Data
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
1172 \c zerobuf: times 64 db 0
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
1178 \c buffer: db 'hello, world'
1179 \c times 64-$+buffer db ' '
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:
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.
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}).
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.
1201 \H{effaddr} Effective Addresses
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
1211 \c mov ax,[wordvar+1]
1212 \c mov ax,[es:wordvar+bx]
1214 Anything not conforming to this simple system is not a valid memory
1215 reference in NASM, for example \c{es:wordvar[bx]}.
1217 More complicated effective addresses, such as those involving more
1218 than one register, work in exactly the same way:
1220 \c mov eax,[ebx*2+ecx+offset]
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
1227 \c mov eax,[ebx*5] ; assembles as [ebx*4+ebx]
1228 \c mov eax,[label1*2-label2] ; ie [label1+(label1-label2)]
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.
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.
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.
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.
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.
1270 \H{const} \i{Constants}
1272 NASM understands four different types of constant: numeric,
1273 character, string and floating-point.
1276 \S{numconst} \i{Numeric Constants}
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.
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
1297 \S{chrconst} \i{Character Constants}
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
1305 A character constant with more than one character will be arranged
1306 with \i{little-endian} order in mind: if you code
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}).
1317 \S{strconst} String Constants
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
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:
1327 \c db 'hello' ; string constant
1328 \c db 'h','e','l','l','o' ; equivalent character constants
1330 And the following are also equivalent:
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
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}.
1344 \S{fltconst} \I{floating-point, constants}Floating-Point Constants
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.
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
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.
1373 \H{expr} \i{Expressions}
1375 Expressions in NASM are similar in syntax to those in C.
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.
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{($-$$)}.
1393 The arithmetic \i{operators} provided by NASM are listed here, in
1394 increasing order of \i{precedence}.
1397 \S{expor} \i\c{|}: \i{Bitwise OR} Operator
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.
1404 \S{expxor} \i\c{^}: \i{Bitwise XOR} Operator
1406 \c{^} provides the bitwise XOR operation.
1409 \S{expand} \i\c{&}: \i{Bitwise AND} Operator
1411 \c{&} provides the bitwise AND operation.
1414 \S{expshift} \i\c{<<} and \i\c{>>}: \i{Bit Shift} Operators
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.
1423 \S{expplmi} \I{+ opaddition}\c{+} and \I{- opsubtraction}\c{-}:
1424 \i{Addition} and \i{Subtraction} Operators
1426 The \c{+} and \c{-} operators do perfectly ordinary addition and
1430 \S{expmul} \i\c{*}, \i\c{/}, \i\c{//}, \i\c{%} and \i\c{%%}:
1431 \i{Multiplication} and \i{Division}
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.
1439 NASM, like ANSI C, provides no guarantees about the sensible
1440 operation of the signed modulo operator.
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.
1447 \S{expmul} \i{Unary Operators}: \I{+ opunary}\c{+}, \I{- opunary}\c{-},
1448 \i\c{~} and \i\c{SEG}
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}).
1458 \H{segwrt} \i\c{SEG} and \i\c{WRT}
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.
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
1469 \c mov ax,seg symbol
1473 will load \c{ES:BX} with a valid pointer to the symbol \c{symbol}.
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
1481 \c mov ax,weird_seg ; weird_seg is a segment base
1483 \c mov bx,symbol wrt weird_seg
1485 to load \c{ES:BX} with a different, but functionally equivalent,
1486 pointer to the symbol \c{symbol}.
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
1493 \c call (seg procedure):procedure
1494 \c call weird_seg:(procedure wrt weird_seg)
1496 (The parentheses are included for clarity, to show the intended
1497 parsing of the above instructions. They are not necessary in
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.
1504 To declare a \i{far pointer} to a data item in a data segment, you
1507 \c dw symbol, seg symbol
1509 NASM supports no convenient synonym for this, though you can always
1510 invent one using the macro processor.
1513 \H{strict} \i\c{STRICT}: Inhibiting Optimization
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
1525 is encoded in three bytes \c{66 6A 21}, whereas
1527 \c push strict dword 33
1529 is encoded in six bytes, with a full dword immediate operand \c{66 68
1532 With the optimizer off, the same code (six bytes) is generated whether
1533 the \c{STRICT} keyword was used or not.
1536 \H{crit} \i{Critical Expressions}
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.
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,
1549 \c times (label-$) db 0
1550 \c label: db 'Where am I?'
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
1558 \c times (label-$+1) db 0
1559 \c label: db 'NOW where am I?'
1561 in which \e{any} value for the \c{TIMES} argument is by definition
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.
1572 Critical expressions can crop up in other contexts as well: consider
1576 \c symbol1 equ symbol2
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.
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.
1591 There is a related issue involving \i{forward references}: consider
1594 \c mov eax,[ebx+offset]
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
1613 \H{locallab} \i{Local Labels}
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:
1620 \c label1 ; some code
1628 \c label2 ; some code
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.
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
1650 \c label3 ; some more code
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
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
1672 \c jmp ..@foo ; this will jump three lines up
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}).
1679 \C{preproc} The NASM \i{Preprocessor}
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{%}
1687 The preprocessor collapses all lines which end with a backslash (\\)
1688 character into a single line. Thus:
1690 \c %define THIS_VERY_LONG_MACRO_NAME_IS_DEFINED_TO \\
1693 will work like a single-line macro without the backslash-newline
1696 \H{slmacro} \i{Single-Line Macros}
1698 \S{define} The Normal Way: \I\c{%idefine}\i\c{%define}
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
1704 \c %define ctrl 0x1F &
1705 \c %define param(a,b) ((a)+(a)*(b))
1707 \c mov byte [param(2,ebx)], ctrl 'D'
1709 which will expand to
1711 \c mov byte [(2)+(2)*(ebx)], 0x1F & 'D'
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
1717 \c %define a(x) 1+b(x)
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}.
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
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.
1739 \c %define a(x) 1+a(x)
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.
1747 You can \I{overloading, single-line macros}overload single-line
1748 macros: if you write
1750 \c %define foo(x) 1+x
1751 \c %define foo(x,y) 1+x*y
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
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.
1764 This doesn't prevent single-line macros being \e{redefined}: you can
1765 perfectly well define a macro with
1769 and then re-define it later in the same source file with
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}).
1777 You can \i{pre-define} single-line macros using the `-d' option on
1778 the NASM command line: see \k{opt-d}.
1781 \S{xdefine} Enhancing %define: \I\c{%xidefine}\i\c{%xdefine}
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}.
1789 Suppose you have the following code:
1792 \c %define isFalse isTrue
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
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}.
1812 \c %xdefine isTrue 1
1813 \c %xdefine isFalse isTrue
1814 \c %xdefine isTrue 0
1818 \c %xdefine isTrue 1
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.
1827 \S{concat%+} Concatenating Single Line Macro Tokens: \i\c{%+}
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.
1833 As an example, consider the following:
1835 \c %define BDASTART 400h ; Start of BIOS data area
1837 \c struc tBIOSDA ; its structure
1843 Now, if we need to access the elements of tBIOSDA in different places,
1846 \c mov ax,BDASTART + tBIOSDA.COM1addr
1847 \c mov bx,BDASTART + tBIOSDA.COM2addr
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:
1852 \c ; Macro to access BIOS variables by their names (from tBDA):
1854 \c %define BDA(x) BDASTART + tBIOSDA. %+ x
1856 Now the above code can be written as:
1858 \c mov ax,BDA(COM1addr)
1859 \c mov bx,BDA(COM2addr)
1861 Using this feature, we can simplify references to a lot of macros (and,
1862 in turn, reduce typing errors).
1865 \S{undef} Undefining macros: \i\c{%undef}
1867 Single-line macros can be removed with the \c{%undef} command. For
1868 example, the following sequence:
1875 will expand to the instruction \c{mov eax, foo}, since after
1876 \c{%undef} the macro \c{foo} is no longer defined.
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
1883 \S{assign} \i{Preprocessor Variables}: \i\c{%assign}
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}).
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.
1895 Like \c{%define}, macros defined using \c{%assign} can be re-defined
1896 later, so you can do things like
1900 to increment the numeric value of a macro.
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}.
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).
1912 \H{strlen} \i{String Handling in Macros}: \i\c{%strlen} and \i\c{%substr}
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.
1919 \S{strlen} \i{String Length}: \i\c{%strlen}
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:
1926 \c %strlen charcnt 'my string'
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:
1933 \c %define sometext 'my string'
1934 \c %strlen charcnt sometext
1936 As in the first case, this would result in \c{charcnt} being
1937 assigned the value of 8.
1940 \S{substr} \i{Sub-strings}: \i\c{%substr}
1942 Individual letters in strings can be extracted using \c{%substr}.
1943 An example of its use is probably more useful than the description:
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'
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.
1958 \H{mlmacro} \i{Multi-Line Macros}: \I\c{%imacro}\i\c{%macro}
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
1964 \c %macro prologue 1
1972 This defines a C-like function prologue as a macro: so you would
1973 invoke the macro with a call such as
1975 \c myfunc: prologue 12
1977 which would expand to the three lines of code
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},
1990 Multi-line macros, like single-line macros, are \i{case-sensitive},
1991 unless you define them using the alternative directive \c{%imacro}.
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
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
2009 \S{mlmacover} Overloading Multi-Line Macros\I{overloading, multi-line macros}
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
2016 \c %macro prologue 0
2023 to define an alternative form of the function prologue which
2024 allocates no local stack space.
2026 Sometimes, however, you might want to `overload' a machine
2027 instruction; for example, you might want to define
2036 so that you could code
2038 \c push ebx ; this line is not a macro call
2039 \c push eax,ecx ; but this one is
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}).
2049 \S{maclocal} \i{Macro-Local Labels}
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:
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.
2077 \S{mlmacgre} \i{Greedy Macro Parameters}
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
2085 \c writefile [filehandle],"hello, world",13,10
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
2093 \c %macro writefile 2+
2099 \c mov cx,%%endstr-%%str
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
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
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
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
2129 \c writefile [filehandle], {"hello, world",13,10}
2131 NASM provides both mechanisms for putting \i{commas in macro
2132 parameters}, and you choose which one you prefer for each macro
2135 See \k{sectmac} for a better way to write the above macro.
2138 \S{mlmacdef} \i{Default Macro Parameters}
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:
2144 \c %macro die 0-1 "Painful program death has occurred."
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.
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
2163 \c %macro foobar 1-3 eax,[ebx+2]
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]}.
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.
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
2180 \c %macro die 0-1+ "Painful program death has occurred.",13,10
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}.
2187 \S{percent0} \i\c{%0}: \I{counting macro parameters}Macro Parameter Counter
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}.
2196 \S{rotate} \i\c{%rotate}: \i{Rotating Macro Parameters}
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.
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.
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.
2215 \I{iterating over macro parameters}So a pair of macros to save and
2216 restore a set of registers might work as follows:
2218 \c %macro multipush 1-*
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.
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.
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.
2247 This can be done by the following definition:
2249 \c %macro multipop 1-*
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.
2265 \S{concat} \i{Concatenating Macro Parameters}
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
2273 \c %macro keytab_entry 2
2275 \c keypos%1 equ $-keytab
2281 \c keytab_entry F1,128+1
2282 \c keytab_entry F2,128+2
2283 \c keytab_entry Return,13
2285 which would expand to
2288 \c keyposF1 equ $-keytab
2290 \c keyposF2 equ $-keytab
2292 \c keyposReturn equ $-keytab
2295 You can just as easily concatenate text on to the other end of a
2296 macro parameter, by writing \c{%1foo}.
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).
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.)
2318 \S{mlmaccc} \i{Condition Codes as Macro Parameters}
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
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:
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
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.
2352 \S{nolist} \i{Disabling Listing Expansion}\I\c{.nolist}
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
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:
2366 \c %macro foo 1.nolist
2370 \c %macro bar 1-5+.nolist a,b,c,d,e,f,g,h
2372 \H{condasm} \i{Conditional Assembly}\I\c{%if}
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:
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
2383 \c ; this appears if neither <condition> nor <condition2> was met
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.
2390 \S{ifdef} \i\c{%ifdef}: Testing Single-Line Macro Existence\I{testing,
2391 single-line macro existence}
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.
2398 For example, when debugging a program, you might want to write code
2401 \c ; perform some function
2403 \c writefile 2,"Function performed successfully",13,10
2405 \c ; go and do something else
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.
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
2417 \S{ifmacro} \i\c{ifmacro}: Testing Multi-Line Macro
2418 Existence\I{testing, multi-line macro existence}
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.
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
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:
2431 \c %ifmacro MyMacro 1-3
2433 \c %error "MyMacro 1-3" causes a conflict with an existing macro.
2437 \c %macro MyMacro 1-3
2439 \c ; insert code to define the macro
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
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}.
2454 \S{ifctx} \i\c{%ifctx}: Testing the Context Stack\I{testing, context
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.
2463 For more details of the context stack, see \k{ctxstack}. For a
2464 sample use of \c{%ifctx}, see \k{blockif}.
2467 \S{if} \i\c{%if}: Testing Arbitrary Numeric Expressions\I{testing,
2468 arbitrary numeric expressions}
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.
2476 The expression given to \c{%if}, and its counterpart \i\c{%elif}, is
2477 a critical expression (see \k{crit}).
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.
2495 \S{ifidn} \i\c{%ifidn} and \i\c{%ifidni}: Testing Exact Text
2496 Identity\I{testing, exact text identity}
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.
2503 \c{%ifidni} is similar to \c{%ifidn}, but is \i{case-insensitive}.
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:
2508 \c %macro pushparam 1
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}.
2525 \S{iftyp} \i\c{%ifid}, \i\c{%ifnum}, \i\c{%ifstr}: Testing Token
2526 Types\I{testing, token types}
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
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.
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:
2543 \c %macro writefile 2-3+
2552 \c %%endstr: mov dx,%%str
2553 \c mov cx,%%endstr-%%str
2564 Then the \c{writefile} macro can cope with being called in either of
2565 the following two ways:
2567 \c writefile [file], strpointer, length
2568 \c writefile [file], "hello", 13, 10
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.
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).
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}.
2587 \S{pperror} \i\c{%error}: Reporting \i{User-Defined Errors}
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:
2594 \c %ifdef SOME_MACRO
2596 \c %elifdef SOME_OTHER_MACRO
2597 \c ; do some different setup
2599 \c %error Neither SOME_MACRO nor SOME_OTHER_MACRO was defined.
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.
2608 \H{rep} \i{Preprocessor Loops}\I{repeating code}: \i\c{%rep}
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}.
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:
2622 \c inc word [table+2*i]
2626 This will generate a sequence of 64 \c{INC} instructions,
2627 incrementing every word of memory from \c{[table]} to
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:
2647 \c fib_number equ ($-fibonacci)/2
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.
2657 \H{include} \i{Including Other Files}
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:
2663 \c %include "macros.mac"
2665 will include the contents of the file \c{macros.mac} into the source
2666 file containing the \c{%include} directive.
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.
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
2678 \c %ifndef MACROS_MAC
2679 \c %define MACROS_MAC
2680 \c ; now define some macros
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.
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}).
2692 \H{ctxstack} The \i{Context Stack}
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.
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.
2709 \S{pushpop} \i\c{%push} and \i\c{%pop}: \I{creating
2710 contexts}\I{removing contexts}Creating and Removing Contexts
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:
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.
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.
2727 \S{ctxlocal} \i{Context-Local Labels}
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:
2749 and invoked by means of, for example,
2757 which would scan every fourth byte of a string in search of the byte
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.
2765 \S{ctxdefine} \i{Context-Local Single-Line Macros}
2767 NASM also allows you to define single-line macros which are local to
2768 a particular context, in just the same way:
2770 \c %define %$localmac 3
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}.
2777 \S{ctxrepl} \i\c{%repl}: \I{renaming contexts}Renaming a Context
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.
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
2792 with the non-destructive version \c{%repl newname}.
2795 \S{blockif} Example Use of the \i{Context Stack}: \i{Block IFs}
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.
2815 \c %error "expected `if' before `else'"
2829 \c %error "expected `if' or `else' before `endif'"
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
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}.
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}.
2852 A sample usage of these macros might look like:
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}.
2880 \H{stdmac} \i{Standard Macros}
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.
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
2893 \S{stdmacver} \i\c{__NASM_MAJOR__}, \i\c{__NASM_MINOR__},
2894 \i\c{__NASM_SUBMINOR__} and \i\c{___NASM_PATCHLEVEL__}: \i{NASM Version}
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.
2905 \S{stdmacverid} \i\c{__NASM_VERSION_ID__}: \i{NASM Version ID}
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:
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.
2925 \S{stdmacverstr} \i\c{__NASM_VER__}: \i{NASM Version string}
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,
2937 \S{fileline} \i\c{__FILE__} and \i\c{__LINE__}: File Name and Line Number
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.
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
2955 \c %macro notdeadyet 0
2964 and then pepper your code with calls to \c{notdeadyet} until you
2965 find the crash point.
2968 \S{struc} \i\c{STRUC} and \i\c{ENDSTRUC}: \i{Declaring Structure} Data Types
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.
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.
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
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.
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:
3014 This defines the offsets to the structure fields as \c{mytype.long},
3015 \c{mytype.word}, \c{mytype.byte} and \c{mytype.str}.
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]}.
3026 \S{istruc} \i\c{ISTRUC}, \i\c{AT} and \i\c{IEND}: Declaring
3027 \i{Instances of Structures}
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:
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
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.
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:
3055 \c at mt_str, db 123,134,145,156,167,178,189
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
3063 \c db 'hello, world'
3067 \S{align} \i\c{ALIGN} and \i\c{ALIGNB}: Data Alignment
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
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
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.
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.
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
3099 \c{ALIGNB} (or \c{ALIGN} with a second argument of \c{RESB 1}) can
3100 be used within structure definitions:
3117 This will ensure that the structure members are sensibly aligned
3118 relative to the base of the structure.
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}.
3129 \H{tasmcompat} \i{TASM Compatible Preprocessor Directives}
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}.)
3135 \b\c{%arg} (see \k{arg})
3137 \b\c{%stacksize} (see \k{stacksize})
3139 \b\c{%local} (see \k{local})
3142 \S{arg} \i\c{%arg} Directive
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.
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:
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
3164 \c %pop ; restore original context
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.
3172 \S{stacksize} \i\c{%stacksize} Directive
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}.
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).
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).
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
3204 \S{local} \i\c{%local} Directive
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:
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
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
3230 \c leave ; restore old bp
3233 \c %pop ; restore original context
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.
3243 \H{otherpreproc} \i{Other Preprocessor Directives}
3245 NASM also has preprocessor directives which allow access to
3246 information from external sources. Currently they include:
3248 The following preprocessor directive is supported to allow NASM to
3249 correctly handle output of the cpp C language preprocessor.
3251 \b\c{%line} enables NAsM to correctly handle the output of the cpp
3252 C language preprocessor (see \k{line}).
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}).
3257 \S{line} \i\c{%line} Directive
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
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:
3271 \c %line nnn[+mmm] [filename]
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.
3280 After reading a \c{%line} preprocessor directive, NASM will report
3281 all file name and line numbers relative to the values specified
3285 \S{getenv} \i\c{%!}\c{<env>}: Read an environment variable.
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.
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:
3296 \c %define FOO %!FOO
3299 \c tmpstr db quote FOO quote
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.
3310 \C{directive} \i{Assembler Directives}
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.
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.
3323 Primitive directives are enclosed in square brackets; user-level
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}.
3333 \H{bits} \i\c{BITS}: Specifying Target \i{Processor Mode}
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}.
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.
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.
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.
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
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.
3371 \S{USE16 & USE32} \i\c{USE16} & \i\c{USE32}: Aliases for BITS
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.
3377 \H{section} \i\c{SECTION} or \i\c{SEGMENT}: Changing and \i{Defining
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
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
3397 \S{sectmac} The \i\c{__SECT__} Macro
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
3409 expands to the two lines
3411 \c %define __SECT__ [SECTION .text]
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:
3418 \c %macro writefile 2+
3428 \c mov cx,%%endstr-%%str
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.
3447 \H{absolute} \i\c{ABSOLUTE}: Defining Absolute Labels
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.
3455 \c{ABSOLUTE} is used as follows:
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.
3467 The user-level form of \c{ABSOLUTE}, like that of \c{SECTION},
3468 redefines the \i\c{__SECT__} macro when it is invoked.
3470 \i\c{STRUC} and \i\c{ENDSTRUC} are defined as macros which use
3471 \c{ABSOLUTE} (and also \c{__SECT__}).
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:
3478 \c org 100h ; it's a .COM program
3480 \c jmp setup ; setup code comes last
3482 \c ; the resident part of the TSR goes here
3484 \c ; now write the code that installs the TSR here
3488 \c runtimevar1 resw 1
3489 \c runtimevar2 resd 20
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.
3500 \H{extern} \i\c{EXTERN}: \i{Importing Symbols} from Other Modules
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.
3509 The \c{EXTERN} directive takes as many arguments as you like. Each
3510 argument is the name of a symbol:
3513 \c extern _sscanf,_fscanf
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
3522 \c extern _variable:wrt dgroup
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.
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.
3533 \H{global} \i\c{GLOBAL}: \i{Exporting Symbols} to Other Modules
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.
3541 The \c{GLOBAL} directive applying to a symbol must appear \e{before}
3542 the definition of the symbol.
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:
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
3557 \c global hashlookup:function, hashtable:data
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
3564 \H{common} \i\c{COMMON}: Defining Common Data Areas
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
3572 is similar in function to
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.
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:
3589 \c common commvar 4:near ; works in OBJ
3590 \c common intarray 100:4 ; works in ELF: 4 byte aligned
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.
3597 \H{CPU} \i\c{CPU}: Defining CPU Dependencies
3599 The \i\c{CPU} directive restricts assembly to those instructions which
3600 are available on the specified CPU.
3604 \b\c{CPU 8086} Assemble only 8086 instruction set
3606 \b\c{CPU 186} Assemble instructions up to the 80186 instruction set
3608 \b\c{CPU 286} Assemble instructions up to the 286 instruction set
3610 \b\c{CPU 386} Assemble instructions up to the 386 instruction set
3612 \b\c{CPU 486} 486 instruction set
3614 \b\c{CPU 586} Pentium instruction set
3616 \b\c{CPU PENTIUM} Same as 586
3618 \b\c{CPU 686} P6 instruction set
3620 \b\c{CPU PPRO} Same as 686
3622 \b\c{CPU P2} Same as 686
3624 \b\c{CPU P3} Pentium III and Katmai instruction sets
3626 \b\c{CPU KATMAI} Same as P3
3628 \b\c{CPU P4} Pentium 4 (Willamette) instruction set
3630 \b\c{CPU WILLAMETTE} Same as P4
3632 \b\c{CPU IA64} IA64 CPU (in x86 mode) instruction set
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.
3639 \C{outfmt} \i{Output Formats}
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.
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.
3656 \H{binfmt} \i\c{bin}: \i{Flat-Form Binary}\I{pure binary} Output
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}
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}.
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}
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}.
3679 \S{org} \i\c{ORG}: Binary File \i{Program Origin}
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.
3686 For example, the following code will generate the longword
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.
3702 \S{binseg} \c{bin} Extensions to the \c{SECTION}
3703 Directive\I{SECTION, bin extensions to}
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,
3710 \c section .data align=16
3712 switches to the section \c{.data} and also specifies that it must be
3713 aligned on a 16-byte boundary.
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}
3721 \S{multisec} \c{Multisection}\I{bin, multisection} support for the BIN format.
3723 The \c{bin} format allows the use of multiple sections, which are
3724 ordered according to a few basic rules.
3726 \b Any code which comes before an explicit \c{SECTION} directive
3727 is directed by default into the \c{.text} section.
3729 \b If a \c{.text} section is not given an \c{ORG} statement, it is
3730 allocated \c{ORG 0} by default.
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.
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
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
3745 \b The \c{.data} section does not follow any special rules, unlike the
3746 \c{.text} and \c{.bss} sections.
3748 \b The \c{.bss} section will be placed after all other sections.
3750 \b All sections are aligned on dword boundaries, unless a higher level
3751 of alignment has been specified.
3753 \b Sections cannot overlap.
3756 \H{objfmt} \i\c{obj}: \i{Microsoft OMF}\I{OMF} Object Files
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}.
3763 \c{obj} provides a default output file-name extension of \c{.obj}.
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
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}.
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.
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:
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
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
3801 \c mov ax,seg foo ; get preferred segment of foo
3803 \c mov ax,data ; a different segment
3805 \c mov ax,[ds:foo] ; this accesses `foo'
3806 \c mov [es:foo wrt data],bx ; so does this
3809 \S{objseg} \c{obj} Extensions to the \c{SEGMENT}
3810 Directive\I{SEGMENT, obj extensions to}
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,
3817 \c segment code private align=16
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.
3823 The available qualifiers are:
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.
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}
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}.
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.
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.
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.
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.
3868 NASM's default segment attributes are \c{PUBLIC}, \c{ALIGN=1}, no
3869 class, no overlay, and \c{USE16}.
3872 \S{group} \i\c{GROUP}: Defining Groups of Segments\I{segments, groups of}
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
3885 \c ; some uninitialised data
3887 \c group dgroup data bss
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
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.
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.
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.
3913 \S{uppercase} \i\c{UPPERCASE}: Disabling Case Sensitivity in Output
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.
3923 \c{UPPERCASE} is used alone on a line; it requires no parameters.
3926 \S{import} \i\c{IMPORT}: Importing DLL Symbols\I{DLL symbols,
3927 importing}\I{symbols, importing from DLLs}
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.
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
3939 \c import WSAStartup wsock32.dll
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:
3946 \c import asyncsel wsock32.dll WSAAsyncSelect
3949 \S{export} \i\c{EXPORT}: Exporting DLL Symbols\I{DLL symbols,
3950 exporting}\I{symbols, exporting from DLLs}
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.
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
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:
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.
3975 \b \c{nodata} indicates that the exported symbol is a function which
3976 does not make use of any initialised data.
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.
3982 \b An attribute which is just a number indicates that the symbol
3983 should be exported with an identifying number (ordinal), and gives
3989 \c export myfunc TheRealMoreFormalLookingFunctionName
3990 \c export myfunc myfunc 1234 ; export by ordinal
3991 \c export myfunc myfunc resident parm=23 nodata
3994 \S{dotdotstart} \i\c{..start}: Defining the \i{Program Entry
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
4005 \S{objextern} \c{obj} Extensions to the \c{EXTERN}
4006 Directive\I{EXTERN, obj extensions to}
4008 If you declare an external symbol with the directive
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
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
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
4026 \c mov ax,[foo wrt dgroup]
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
4032 \c extern foo:wrt dgroup
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
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
4045 \S{objcommon} \c{obj} Extensions to the \c{COMMON}
4046 Directive\I{COMMON, obj extensions to}
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
4052 \c common nearvar 2:near ; `nearvar' is a near common
4053 \c common farvar 10:far ; and `farvar' is far
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.
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
4068 \c common c_5by2 10:far 5 ; two five-byte elements
4069 \c common c_2by5 10:far 2 ; five two-byte elements
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
4076 \c common c_5by2 10:5 ; two five-byte elements
4077 \c common c_2by5 10:2 ; five two-byte elements
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
4083 \c common foo 10:wrt dgroup
4084 \c common bar 16:far 2:wrt data
4085 \c common baz 24:wrt data:6
4088 \H{win32fmt} \i\c{win32}: Microsoft Win32 Object Files
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}).
4095 \c{win32} provides a default output file-name extension of \c{.obj}.
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.
4107 \S{win32sect} \c{win32} Extensions to the \c{SECTION}
4108 Directive\I{SECTION, win32 extensions to}
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
4117 The available qualifiers are:
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
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.
4129 \b \c{rdata} declares an initialised data section that is readable
4130 but not writable. Microsoft compilers use this section to place
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
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.
4151 The defaults assumed by NASM if you do not specify the above
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
4159 Any other section name is treated by default like \c{.text}.
4162 \H{cofffmt} \i\c{coff}: \i{Common Object File Format}
4164 The \c{coff} output type produces \c{COFF} object files suitable for
4165 linking with the \i{DJGPP} linker.
4167 \c{coff} provides a default output file-name extension of \c{.o}.
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.
4174 \H{elffmt} \i\c{elf}: \I{ELF}\I{linux, elf}\i{Executable and Linkable
4175 Format} Object Files
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}.
4183 \S{elfsect} \c{elf} Extensions to the \c{SECTION}
4184 Directive\I{SECTION, elf extensions to}
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.
4193 The available qualifiers are:
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.
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
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
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.
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.
4216 The defaults assumed by NASM if you do not specify the above
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
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.)
4229 \S{elfwrt} \i{Position-Independent Code}\I{PIC}: \c{elf} Special
4230 Symbols and \i\c{WRT}
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.
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
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:
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.
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.
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.
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
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.
4283 A fuller explanation of how to use these relocation types to write
4284 shared libraries entirely in NASM is given in \k{picdll}.
4287 \S{elfglob} \c{elf} Extensions to the \c{GLOBAL} Directive\I{GLOBAL,
4288 elf extensions to}\I{GLOBAL, aoutb extensions to}
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.
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:
4304 \c global hashlookup:function, hashtable:data
4306 exports the global symbol \c{hashlookup} as a function and
4307 \c{hashtable} as a data object.
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:
4313 \c global hashtable:data (hashtable.end - hashtable)
4316 \c db this,that,theother ; some data here
4319 This makes NASM automatically calculate the length of the table and
4320 place that information into the \c{ELF} symbol table.
4322 Declaring the type and size of global symbols is necessary when
4323 writing shared library code. For more information, see
4327 \S{elfcomm} \c{elf} Extensions to the \c{COMMON} Directive
4328 \I{COMMON, elf extensions to}
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:
4337 \c common dwordarray 128:4
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.
4343 \S{elf16} 16-bit code and ELF
4344 \I{ELF, 16-bit code and}
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.
4353 \H{aoutfmt} \i\c{aout}: Linux \I{a.out, Linux version}\I{linux, a.out}\c{a.out} Object Files
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.
4363 \c{a.out} provides a default output file-name extension of \c{.o}.
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}.
4371 \H{aoutfmt} \i\c{aoutb}: \i{NetBSD}/\i{FreeBSD}/\i{OpenBSD}
4372 \I{a.out, BSD version}\c{a.out} Object Files
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}.
4382 \c{aoutb} provides a default output file-name extension of \c{.o}.
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.
4390 \c{aoutb} also supports the same extensions to the \c{GLOBAL}
4391 directive as \c{elf} does: see \k{elfglob} for documentation of
4395 \H{as86fmt} \c{as86}: \i{Minix}/Linux\I{linux, as86} \i\c{as86} Object Files
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
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}.
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}.
4413 \H{rdffmt} \I{RDOFF}\i\c{rdf}: \i{Relocatable Dynamic Object File
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.
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.
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.
4432 \c{rdf} supports only the \i{standard section names} \i\c{.text},
4433 \i\c{.data} and \i\c{.bss}.
4436 \S{rdflib} Requiring a Library: The \i\c{LIBRARY} Directive
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:
4443 \c library mylib.rdl
4446 \S{rdfmod} Specifying a Module Name: The \i\c{MODULE} Directive
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
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:
4459 \c module $kernel.core
4462 \S{rdfglob} \c{rdf} Extensions to the \c{GLOBAL} directive\I{GLOBAL,
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.
4471 Suffixing the name with a colon and the word \i\c{export} you make the
4474 \c global sys_open:export
4476 To specify that exported symbol is a procedure (function), you add the
4477 word \i\c{proc} or \i\c{function} after declaration:
4479 \c global sys_open:export proc
4481 Similarly, to specify exported data object, add the word \i\c{data}
4482 or \i\c{object} to the directive:
4484 \c global kernel_ticks:export data
4487 \H{dbgfmt} \i\c{dbg}: Debugging Format
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.
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.
4502 For simple files, one can easily use the \c{dbg} format like this:
4504 \c nasm -f dbg filename.asm
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:
4514 \c nasm -e -f rdf -o rdfprog.i rdfprog.asm
4515 \c nasm -a -f dbg rdfprog.i
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.
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.
4531 \c{dbg} accepts any section name and any directives at all, and logs
4532 them all to its output file.
4535 \C{16bit} Writing 16-bit Code (DOS, Windows 3/3.1)
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.
4544 \H{exefiles} Producing \i\c{.EXE} Files
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.
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.
4560 NASM may also support \c{.EXE} natively as another output format in
4564 \S{objexe} Using the \c{obj} Format To Generate \c{.EXE} Files
4566 This section describes the usual method of generating \c{.EXE} files
4567 by linking \c{.OBJ} files together.
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}.
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.
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}.
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
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.
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.
4631 This terminates the program using another DOS system call.
4635 \c hello: db 'hello, world', 13, 10, '$'
4637 The data segment contains the string we want to display.
4639 \c segment stack stack
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
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.
4656 \S{binexe} Using the \c{bin} Format To Generate \c{.EXE} Files
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
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}.
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}.
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.
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.
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
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
4703 \H{comfiles} Producing \i\c{.COM} Files
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}
4711 \S{combinfmt} Using the \c{bin} Format To Generate \c{.COM} Files
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
4724 \c ; put your code here
4728 \c ; put data items here
4732 \c ; put uninitialised data here
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
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
4746 To assemble the above program, you should use a command line like
4748 \c nasm myprog.asm -fbin -o myprog.com
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.
4755 \S{comobjfmt} Using the \c{obj} Format To Generate \c{.COM} Files
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}
4765 If you do this, you need to take care of several things:
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.
4777 \b You don't need to define a stack segment.
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.
4785 \H{sysfiles} Producing \i\c{.SYS} Files
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
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.
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}.
4806 \H{16c} Interfacing to 16-bit C Programs
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}.
4814 \S{16cunder} External Symbol Names
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.
4825 If you find the underscores inconvenient, you can define macros to
4826 replace the \c{GLOBAL} and \c{EXTERN} directives as follows:
4842 (These forms of the macros only take one argument at a time; a
4843 \c{%rep} construct could solve this.)
4845 If you then declare an external like this:
4849 then the macro will expand it as
4852 \c %define printf _printf
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.
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}.
4862 \S{16cmodels} \i{Memory Models}
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
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.
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.
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).
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.
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.
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.
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
4924 \S{16cfunc} Function Definitions and Function Calls
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.
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).
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
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.
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
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}.
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}.
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
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
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.
4997 Thus, you would define a function in C style in the following way.
4998 The following example is for small model:
5005 \c sub sp,0x40 ; 64 bytes of local stack space
5006 \c mov bx,[bp+4] ; first parameter to function
5010 \c mov sp,bp ; undo "sub sp,0x40" above
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.
5021 At the other end of the process, to call a C function from your
5022 assembly code, you would do something like this:
5026 \c ; and then, further down...
5028 \c push word [myint] ; one of my integer variables
5029 \c push word mystring ; pointer into my data segment
5031 \c add sp,byte 4 ; `byte' saves space
5033 \c ; then those data items...
5038 \c mystring db 'This number -> %d <- should be 1234',10,0
5040 This piece of code is the small-model assembly equivalent of the C
5043 \c int myint = 1234;
5044 \c printf("This number -> %d <- should be 1234\n", myint);
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
5051 \c push word [myint]
5052 \c push word seg mystring ; Now push the segment, and...
5053 \c push word mystring ; ... offset of "mystring"
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
5070 \S{16cdata} Accessing Data Items
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
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):
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}.
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.
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
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.
5123 \S{16cmacro} \i\c{c16.mac}: Helper Macros for the 16-bit C Interface
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.
5131 (An alternative, TASM compatible form of \c{arg} is also now built
5132 into NASM's preprocessor. See \k{tasmcompat} for details.)
5134 An example of an assembly function using the macro set is given
5141 \c mov ax,[bp + %$i]
5142 \c mov bx,[bp + %$j]
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}.
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.
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.
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}.
5171 The large-model equivalent of the above function would look like this:
5179 \c mov ax,[bp + %$i]
5180 \c mov bx,[bp + %$j]
5181 \c mov es,[bp + %$j + 2]
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.
5191 \H{16bp} Interfacing to \i{Borland Pascal} Programs
5193 Interfacing to Borland Pascal programs is similar in concept to
5194 interfacing to 16-bit C programs. The differences are:
5196 \b The leading underscore required for interfacing to C programs is
5197 not required for Pascal.
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.
5212 \b The function calling convention is different - described below.
5214 \b Some data types, such as strings, are stored differently.
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.
5221 \S{16bpfunc} The Pascal Calling Convention
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
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).
5233 \b The caller then executes a far \c{CALL} instruction to pass
5234 control to the callee.
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.
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.
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}.
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.
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
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
5280 Thus, you would define a function in Pascal style, taking two
5281 \c{Integer}-type parameters, in the following way:
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
5293 \c mov sp,bp ; undo "sub sp,0x40" above
5295 \c retf 4 ; total size of params is 4
5297 At the other end of the process, to call a Pascal function from your
5298 assembly code, you would do something like this:
5302 \c ; and then, further down...
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
5309 This is equivalent to the Pascal code
5311 \c procedure SomeFunc(String: PChar; Int: Integer);
5312 \c SomeFunc(@mystring, myint);
5315 \S{16bpseg} Borland Pascal \I{segment names, Borland Pascal}Segment
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
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}.
5328 \b Initialised data must be in a segment whose name is either
5329 \c{CONST} or something ending in \c{_DATA}.
5331 \b Uninitialised data must be in a segment whose name is either
5332 \c{DATA}, \c{DSEG}, or something ending in \c{_BSS}.
5334 \b Any other segments in the object file are completely ignored.
5335 \c{GROUP} directives and segment attributes are also ignored.
5338 \S{16bpmacro} Using \i\c{c16.mac} With Pascal Programs
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.
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:
5357 \c mov ax,[bp + %$i]
5358 \c mov bx,[bp + %$j]
5359 \c mov es,[bp + %$j + 2]
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
5373 \C{32bit} Writing 32-bit Code (Unix, Win32, DJGPP)
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
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
5397 \H{32c} Interfacing to 32-bit C Programs
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.
5404 \S{32cunder} External Symbol Names
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.
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.
5420 \S{32cfunc} Function Definitions and Function Calls
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
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).
5432 \b The caller then executes a near \c{CALL} instruction to pass
5433 control to the callee.
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.
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.
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}.
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
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}).
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
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.
5486 Thus, you would define a function in C style in the following way:
5493 \c sub esp,0x40 ; 64 bytes of local stack space
5494 \c mov ebx,[ebp+8] ; first parameter to function
5498 \c leave ; mov esp,ebp / pop ebp
5501 At the other end of the process, to call a C function from your
5502 assembly code, you would do something like this:
5506 \c ; and then, further down...
5508 \c push dword [myint] ; one of my integer variables
5509 \c push dword mystring ; pointer into my data segment
5511 \c add esp,byte 8 ; `byte' saves space
5513 \c ; then those data items...
5518 \c mystring db 'This number -> %d <- should be 1234',10,0
5520 This piece of code is the assembly equivalent of the C code
5522 \c int myint = 1234;
5523 \c printf("This number -> %d <- should be 1234\n", myint);
5526 \S{32cdata} Accessing Data Items
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
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):
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.
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.
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
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.
5578 \S{32cmacro} \i\c{c32.mac}: Helper Macros for the 32-bit C Interface
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.
5586 An example of an assembly function using the macro set is given
5593 \c mov eax,[ebp + %$i]
5594 \c mov ebx,[ebp + %$j]
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}.
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.
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.
5616 \H{picdll} Writing NetBSD/FreeBSD/OpenBSD and Linux/ELF \i{Shared
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.
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.
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.
5635 Therefore, you cannot get at your variables by writing code like
5638 \c mov eax,[myvar] ; WRONG
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.
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).
5656 \S{picgot} Obtaining the Address of the GOT
5658 Each code module in your shared library should define the GOT as an
5661 \c extern _GLOBAL_OFFSET_TABLE_ ; in ELF
5662 \c extern __GLOBAL_OFFSET_TABLE_ ; in BSD a.out
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
5675 \c add ebx,_GLOBAL_OFFSET_TABLE_+$$-.get_GOT wrt ..gotpc
5677 \c ; the function body comes here
5684 (For BSD, again, the symbol \c{_GLOBAL_OFFSET_TABLE} requires a
5685 second leading underscore.)
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.
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.
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:
5719 \c add ebx,_GLOBAL_OFFSET_TABLE_+$$-%%getgot wrt ..gotpc
5723 \S{piclocal} Finding Your Local Data Items
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:
5731 \c lea eax,[ebx+myvar wrt ..gotoff]
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}.
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.
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.
5750 \S{picextern} Finding External and Common Data Items
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},
5763 \c mov eax,[ebx+extvar wrt ..got]
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.
5770 Common variables must also be accessed in this way.
5773 \S{picglobal} Exporting Symbols to the Library User
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
5783 So to export a function to users of the library, you must use
5785 \c global func:function ; declare it as a function
5791 And to export a data item such as an array, you would have to code
5793 \c global array:data array.end-array ; give the size too
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).
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
5810 \c dataptr: dd global_data_item ; WRONG
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.
5818 Instead of the above code, then, you must write
5820 \c dataptr: dd global_data_item wrt ..sym
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.
5826 Either method will work for functions: referring to one of your
5827 functions by means of
5829 \c funcptr: dd my_function
5831 will give the user the address of the code you wrote, whereas
5833 \c funcptr: dd my_function wrt .sym
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.
5840 \S{picproc} Calling Procedures Outside the Library
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
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
5858 \S{link} Generating the Library File
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
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
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:
5871 \c ld -shared -soname library.so.1 -o library.so.1.2 *.o
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.
5877 \C{mixsize} Mixing 16 and 32 Bit Code
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.
5887 \H{mixjump} Mixed-Size Jumps\I{jumps, mixed-size}
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.
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,
5902 \c jmp 0x1234:0x56789ABC ; wrong!
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
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:
5913 \c jmp dword 0x1234:0x56789ABC ; right
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.
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:
5925 \c jmp word 0x8765:0x4321 ; 32 to 16 bit
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.
5932 \H{mixaddr} Addressing Between Different-Size Segments\I{addressing,
5933 mixed-size}\I{mixed-size addressing}
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.
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.
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
5950 \c mov eax,offset_into_32_bit_segment_specified_by_fs
5951 \c mov dword [fs:eax],0x11223344
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?
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:
5962 \c mov dword [fs:dword my_offset],0x11223344
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
5968 \c mov dword [dword fs:my_offset],0x11223344
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:
5975 \c mov word [dword 0x12345678],0x9ABC
5977 This moves 16 bits of data to an address specified by a 32-bit
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:
5983 \c call dword far [fs:word 0x4321]
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.
5990 \H{mixother} Other Mixed-Size Instructions
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.
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
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.
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.
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}:
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
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.)
6041 \C{trouble} Troubleshooting
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.
6049 \H{problems} Common Problems
6051 \S{inefficient} NASM Generates \i{Inefficient Code}
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.
6063 \S{jmprange} My Jumps are Out of Range\I{out of range, jumps}
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
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.
6084 \S{proborg} \i\c{ORG} Doesn't Work
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
6093 \c ; some boot sector code
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:
6104 \c ; some boot sector code
6106 \c TIMES 510-($-$$) DB 0
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.
6117 \S{probtimes} \i\c{TIMES} Doesn't Work
6119 The other common problem with the above code is people who write the
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
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}.
6139 The solution, as in the previous section, is to code the \c{TIMES}
6142 \c TIMES 510-($-$$) DB 0
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.
6149 \H{bugs} \i{Bugs}\I{reporting bugs}
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
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}.
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
6167 If you do report a bug, \e{please} give us all of the following
6170 \b What operating system you're running NASM under. DOS, Linux,
6171 NetBSD, Win16, Win32, VMS (I'd be impressed), whatever.
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
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.
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.)
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.)
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'.
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
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.
6235 \A{ndisasm} \i{Ndisasm}
6237 The Netwide Disassembler, NDISASM
6239 \H{ndisintro} Introduction
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.
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
6255 \H{ndisstart} Getting Started: Installation
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.
6262 \H{ndisrun} Running NDISASM
6264 To disassemble a file, you will typically use a command of the form
6266 \c ndisasm [-b16 | -b32] filename
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.
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.
6278 \S{ndiscom} COM Files: Specifying an Origin
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
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}.
6292 Hence, to disassemble a \c{.COM} file:
6294 \c ndisasm -o100h filename.com
6299 \S{ndissync} Code Following Data: Synchronisation
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.
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
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.
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
6333 \c ndisasm -o100h -s120h file.com
6337 \c ndisasm -o100h -s20h file.com
6339 As stated above, you can specify multiple sync markers if you need
6340 to, just by repeating the \c{-s} option.
6343 \S{ndisisync} Mixed Code and Data: Automatic (Intelligent) Synchronisation
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
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?
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...)
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).
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.
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}
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.
6395 \S{ndisother} Other Options
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.
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
6410 \H{ndisbugs} Bugs and Improvements
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
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.
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,
6428 I hope NDISASM is of some use to somebody. Including me. :-)
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.
6435 \A{iref} x86 Instruction Reference
6437 This appendix provides a complete list of the machine instructions
6438 which NASM will assemble, and a short description of the function of
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/}.
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
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.
6460 \H{iref-opr} Key to Operand Specifications
6462 The instruction descriptions in this appendix specify their operands
6463 using the following notation:
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.
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.
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.
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}
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}.
6500 \H{iref-opc} Key to Opcode Descriptions
6502 This appendix also provides the opcodes which NASM will generate for
6503 each form of each instruction. The opcodes are listed in the
6506 \b A hex number, such as \c{3F}, indicates a fixed byte containing
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}.
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}.
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}.
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
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.
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.
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.
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
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
6576 \S{iref-rv} Register Values
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
6585 The encodings for the various classes of register are:
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
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.
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
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.
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.
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}
6609 \b \i{Control registers}: \c{CR0} is 0, \c{CR2} is 2, \c{CR3} is 3,
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.
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.
6618 (Note that wherever a register name contains a number, that number
6619 is also the register value for that register.)
6622 \S{iref-cc} \i{Condition Codes}
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.
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.
6632 \b \c{O} is 0 (trigger if the overflow flag is set); \c{NO} is 1.
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.
6637 \b \c{E} and \c{Z} are 4 (trigger if the zero flag is set); \c{NE}
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.
6643 \b \c{S} is 8 (trigger if the sign flag is set); \c{NS} is 9.
6645 \b \c{P} and \c{PE} are 10 (trigger if the parity flag is set);
6646 \c{NP} and \c{PO} are 11.
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.
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
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.
6658 For details of when an instruction sets each of the status flags,
6659 see the individual instruction, plus the Status Flags reference
6663 \S{iref-SSE-cc} \i{SSE Condition Predicates}
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
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
6679 \c EQ 000B equal A = B False No
6681 \c LT 001B less-than A < B False Yes
6683 \c LE 010B less-than- A <= B False Yes
6686 \c --- ---- greater A > B Swap False Yes
6690 \c --- ---- greater- A >= B Swap False Yes
6691 \c than-or-equal Operands,
6694 \c UNORD 011B unordered A, B = Unordered True No
6696 \c NEQ 100B not-equal A != B True No
6698 \c NLT 101B not-less- NOT(A < B) True Yes
6701 \c NLE 110B not-less- NOT(A <= B) True Yes
6705 \c --- ---- not-greater NOT(A > B) Swap True Yes
6709 \c --- ---- not-greater NOT(A >= B) Swap True Yes
6713 \c ORD 111B ordered A , B = Ordered False No
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.
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
6727 \S{iref-Flags} \i{Status Flags}
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}).
6734 There are 6 status flags:
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
6744 \c PF - Parity flag.
6746 Set if the least-significant byte of the result contains an even
6747 number of 1 bits; cleared otherwise.
6749 \c AF - Adjust flag.
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.
6757 Set if the result is zero; cleared otherwise.
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.)
6765 \c OF - Overflow flag.
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.
6773 \S{iref-ea} Effective Address Encoding: \i{ModR/M} and \i{SIB}
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
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.
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.
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,
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.
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
6809 However, there is a special case:
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.
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.
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:
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.
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.
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:
6841 \b The \c{base} field encodes the register value of the base
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).
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.
6852 The exceptions to the 32-bit encoding rules are:
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.
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).
6867 \H{iref-flg} Key to Instruction Flags
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:
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
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.
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.
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).
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.
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.
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.
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.
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.
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.
6918 \H{iref-inst} x86 Instruction Set
6921 \S{insAAA} \i\c{AAA}, \i\c{AAS}, \i\c{AAM}, \i\c{AAD}: ASCII
6928 \c AAD ; D5 0A [8086]
6929 \c AAD imm ; D5 ib [8086]
6931 \c AAM ; D4 0A [8086]
6932 \c AAM imm ; D4 ib [8086]
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
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.
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
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}.
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
6968 \S{insADC} \i\c{ADC}: Add with Carry
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]
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]
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]
6982 \c ADC r/m16,imm8 ; o16 83 /2 ib [8086]
6983 \c ADC r/m32,imm8 ; o32 83 /2 ib [386]
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]
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.
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.
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.
7005 To add two numbers without also adding the contents of the carry
7006 flag, use \c{ADD} (\k{insADD}).
7009 \S{insADD} \i\c{ADD}: Add Integers
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]
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]
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]
7023 \c ADD r/m16,imm8 ; o16 83 /0 ib [8086]
7024 \c ADD r/m32,imm8 ; o32 83 /0 ib [386]
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]
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
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.
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.
7047 \S{insADDPD} \i\c{ADDPD}: ADD Packed Double-Precision FP Values
7049 \c ADDPD xmm1,xmm2/mem128 ; 66 0F 58 /r [WILLAMETTE,SSE2]
7051 \c{ADDPD} performs addition on each of two packed double-precision
7054 \c dst[0-63] := dst[0-63] + src[0-63],
7055 \c dst[64-127] := dst[64-127] + src[64-127].
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.
7061 \S{insADDPS} \i\c{ADDPS}: ADD Packed Single-Precision FP Values
7063 \c ADDPS xmm1,xmm2/mem128 ; 0F 58 /r [KATMAI,SSE]
7065 \c{ADDPS} performs addition on each of four packed single-precision
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].
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.
7077 \S{insADDSD} \i\c{ADDSD}: ADD Scalar Double-Precision FP Values
7079 \c ADDSD xmm1,xmm2/mem64 ; F2 0F 58 /r [KATMAI,SSE]
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.
7085 \c dst[0-63] := dst[0-63] + src[0-63],
7086 \c dst[64-127) remains unchanged.
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.
7092 \S{insADDSS} \i\c{ADDSS}: ADD Scalar Single-Precision FP Values
7094 \c ADDSS xmm1,xmm2/mem32 ; F3 0F 58 /r [WILLAMETTE,SSE2]
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.
7100 \c dst[0-31] := dst[0-31] + src[0-31],
7101 \c dst[32-127] remains unchanged.
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.
7107 \S{insAND} \i\c{AND}: Bitwise AND
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]
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]
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]
7121 \c AND r/m16,imm8 ; o16 83 /4 ib [8086]
7122 \c AND r/m32,imm8 ; o32 83 /4 ib [386]
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]
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.
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.
7141 The \c{MMX} instruction \c{PAND} (see \k{insPAND}) performs the same
7142 operation on the 64-bit \c{MMX} registers.
7145 \S{insANDNPD} \i\c{ANDNPD}: Bitwise Logical AND NOT of
7146 Packed Double-Precision FP Values
7148 \c ANDNPD xmm1,xmm2/mem128 ; 66 0F 55 /r [WILLAMETTE,SSE2]
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.
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].
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.
7163 \S{insANDNPS} \i\c{ANDNPS}: Bitwise Logical AND NOT of
7164 Packed Single-Precision FP Values
7166 \c ANDNPS xmm1,xmm2/mem128 ; 0F 55 /r [KATMAI,SSE]
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.
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].
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.
7183 \S{insANDPD} \i\c{ANDPD}: Bitwise Logical AND For Single FP
7185 \c ANDPD xmm1,xmm2/mem128 ; 66 0F 54 /r [WILLAMETTE,SSE2]
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.
7191 \c dst[0-63] := src[0-63] AND dst[0-63],
7192 \c dst[64-127] := src[64-127] AND dst[64-127].
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.
7198 \S{insANDPS} \i\c{ANDPS}: Bitwise Logical AND For Single FP
7200 \c ANDPS xmm1,xmm2/mem128 ; 0F 54 /r [KATMAI,SSE]
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.
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].
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.
7215 \S{insARPL} \i\c{ARPL}: Adjust RPL Field of Selector
7217 \c ARPL r/m16,reg16 ; 63 /r [286,PRIV]
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.
7227 \S{insBOUND} \i\c{BOUND}: Check Array Index against Bounds
7229 \c BOUND reg16,mem ; o16 62 /r [186]
7230 \c BOUND reg32,mem ; o32 62 /r [386]
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.
7241 \S{insBSF} \i\c{BSF}, \i\c{BSR}: Bit Scan
7243 \c BSF reg16,r/m16 ; o16 0F BC /r [386]
7244 \c BSF reg32,r/m32 ; o32 0F BC /r [386]
7246 \c BSR reg16,r/m16 ; o16 0F BD /r [386]
7247 \c BSR reg32,r/m32 ; o32 0F BD /r [386]
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.
7255 \b \c{BSR} performs the same function, but searches from the top
7256 instead, so it finds the most significant set bit.
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.
7263 \S{insBSWAP} \i\c{BSWAP}: Byte Swap
7265 \c BSWAP reg32 ; o32 0F C8+r [486]
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.
7274 \S{insBT} \i\c{BT}, \i\c{BTC}, \i\c{BTR}, \i\c{BTS}: Bit Test
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]
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]
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]
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]
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).
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.
7306 The destination can be a register or a memory location. The source can
7307 be a register or an immediate value.
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
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)
7320 \S{insCALL} \i\c{CALL}: Call Subroutine
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]
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.
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.
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.
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}.
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}.
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}.
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}.
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.
7369 \S{insCBW} \i\c{CBW}, \i\c{CWD}, \i\c{CDQ}, \i\c{CWDE}: Sign Extensions
7371 \c CBW ; o16 98 [8086]
7372 \c CWDE ; o32 98 [386]
7374 \c CWD ; o16 99 [8086]
7375 \c CDQ ; o32 99 [386]
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
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}.
7388 \S{insCLC} \i\c{CLC}, \i\c{CLD}, \i\c{CLI}, \i\c{CLTS}: Clear Flags
7393 \c CLTS ; 0F 06 [286,PRIV]
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}.
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}).
7405 \S{insCLFLUSH} \i\c{CLFLUSH}: Flush Cache Line
7407 \c CLFLUSH mem ; 0F AE /7 [WILLAMETTE,SSE2]
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.
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.
7422 \S{insCMC} \i\c{CMC}: Complement Carry Flag
7426 \c{CMC} changes the value of the carry flag: if it was 0, it sets it
7427 to 1, and vice versa.
7430 \S{insCMOVcc} \i\c{CMOVcc}: Conditional Move
7432 \c CMOVcc reg16,r/m16 ; o16 0F 40+cc /r [P6]
7433 \c CMOVcc reg32,r/m32 ; o32 0F 40+cc /r [P6]
7435 \c{CMOV} moves its source (second) operand into its destination
7436 (first) operand if the given condition code is satisfied; otherwise
7439 For a list of condition codes, see \k{iref-cc}.
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.
7447 \S{insCMP} \i\c{CMP}: Compare Integers
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]
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]
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]
7461 \c CMP r/m16,imm8 ; o16 83 /0 ib [8086]
7462 \c CMP r/m32,imm8 ; o32 83 /0 ib [386]
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]
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
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.
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.
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}
7488 \c CMPPD xmm1,xmm2/mem128,imm8 ; 66 0F C2 /r ib [WILLAMETTE,SSE2]
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]
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).
7505 The destination is an \c{XMM} register. The source can be either an
7506 \c{XMM} register or a 128-bit memory location.
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:
7516 \c LE 2 Less-than-or-equal
7517 \c UNORD 3 Unordered
7519 \c NLT 5 Not-less-than
7520 \c NLE 6 Not-less-than-or-equal
7523 For more details of the comparison predicates, and details of how
7524 to emulate the "greater-than" equivalents, see \k{iref-SSE-cc}
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}
7531 \c CMPPS xmm1,xmm2/mem128,imm8 ; 0F C2 /r ib [KATMAI,SSE]
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]
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).
7548 The destination is an \c{XMM} register. The source can be either an
7549 \c{XMM} register or a 128-bit memory location.
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:
7559 \c LE 2 Less-than-or-equal
7560 \c UNORD 3 Unordered
7562 \c NLT 5 Not-less-than
7563 \c NLE 6 Not-less-than-or-equal
7566 For more details of the comparison predicates, and details of how
7567 to emulate the "greater-than" equivalents, see \k{iref-SSE-cc}
7570 \S{insCMPSB} \i\c{CMPSB}, \i\c{CMPSW}, \i\c{CMPSD}: Compare Strings
7572 \c CMPSB ; A6 [8086]
7573 \c CMPSW ; o16 A7 [8086]
7574 \c CMPSD ; o32 A7 [386]
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}).
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.
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.
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.
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.
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}
7606 \c CMPSD xmm1,xmm2/mem64,imm8 ; F2 0F C2 /r ib [WILLAMETTE,SSE2]
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]
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).
7623 The destination is an \c{XMM} register. The source can be either an
7624 \c{XMM} register or a 128-bit memory location.
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:
7634 \c LE 2 Less-than-or-equal
7635 \c UNORD 3 Unordered
7637 \c NLT 5 Not-less-than
7638 \c NLE 6 Not-less-than-or-equal
7641 For more details of the comparison predicates, and details of how
7642 to emulate the "greater-than" equivalents, see \k{iref-SSE-cc}
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}
7649 \c CMPSS xmm1,xmm2/mem32,imm8 ; F3 0F C2 /r ib [KATMAI,SSE]
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]
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).
7666 The destination is an \c{XMM} register. The source can be either an
7667 \c{XMM} register or a 128-bit memory location.
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:
7677 \c LE 2 Less-than-or-equal
7678 \c UNORD 3 Unordered
7680 \c NLT 5 Not-less-than
7681 \c NLE 6 Not-less-than-or-equal
7684 For more details of the comparison predicates, and details of how
7685 to emulate the "greater-than" equivalents, see \k{iref-SSE-cc}
7688 \S{insCMPXCHG} \i\c{CMPXCHG}, \i\c{CMPXCHG486}: Compare and Exchange
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]
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]
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.
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.
7709 The destination can be either a register or a memory location. The
7710 source is a register.
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
7727 \S{insCMPXCHG8B} \i\c{CMPXCHG8B}: Compare and Exchange Eight Bytes
7729 \c CMPXCHG8B mem ; 0F C7 /1 [PENT]
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}.
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
7742 \S{insCOMISD} \i\c{COMISD}: Scalar Ordered Double-Precision FP Compare and Set EFLAGS
7744 \c COMISD xmm1,xmm2/mem64 ; 66 0F 2F /r [WILLAMETTE,SSE2]
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).
7751 The destination operand is an \c{XMM} register. The source can be either
7752 an \c{XMM} register or a memory location.
7754 The flags are set according to the following rules:
7756 \c Result Flags Values
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;
7764 \S{insCOMISS} \i\c{COMISS}: Scalar Ordered Single-Precision FP Compare and Set EFLAGS
7766 \c COMISS xmm1,xmm2/mem32 ; 66 0F 2F /r [KATMAI,SSE]
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).
7773 The destination operand is an \c{XMM} register. The source can be either
7774 an \c{XMM} register or a memory location.
7776 The flags are set according to the following rules:
7778 \c Result Flags Values
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;
7786 \S{insCPUID} \i\c{CPUID}: Get CPU Identification Code
7788 \c CPUID ; 0F A2 [PENT]
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}.
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.
7801 The information returned is as follows:
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"}.
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.
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
7822 For more information on the data returned from \c{CPUID}, see the
7823 documentation from Intel and other processor manufacturers.
7826 \S{insCVTDQ2PD} \i\c{CVTDQ2PD}:
7827 Packed Signed INT32 to Packed Double-Precision FP Conversion
7829 \c CVTDQ2PD xmm1,xmm2/mem64 ; F3 0F E6 /r [WILLAMETTE,SSE2]
7831 \c{CVTDQ2PD} converts two packed signed doublewords from the source
7832 operand to two packed double-precision FP values in the destination
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.
7840 \S{insCVTDQ2PS} \i\c{CVTDQ2PS}:
7841 Packed Signed INT32 to Packed Single-Precision FP Conversion
7843 \c CVTDQ2PS xmm1,xmm2/mem128 ; 0F 5B /r [WILLAMETTE,SSE2]
7845 \c{CVTDQ2PS} converts four packed signed doublewords from the source
7846 operand to four packed single-precision FP values in the destination
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.
7852 For more details of this instruction, see the Intel Processor manuals.
7855 \S{insCVTPD2DQ} \i\c{CVTPD2DQ}:
7856 Packed Double-Precision FP to Packed Signed INT32 Conversion
7858 \c CVTPD2DQ xmm1,xmm2/mem128 ; F2 0F E6 /r [WILLAMETTE,SSE2]
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
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.
7868 For more details of this instruction, see the Intel Processor manuals.
7871 \S{insCVTPD2PI} \i\c{CVTPD2PI}:
7872 Packed Double-Precision FP to Packed Signed INT32 Conversion
7874 \c CVTPD2PI mm,xmm/mem128 ; 66 0F 2D /r [WILLAMETTE,SSE2]
7876 \c{CVTPD2PI} converts two packed double-precision FP values from the
7877 source operand to two packed signed doublewords in the destination
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.
7883 For more details of this instruction, see the Intel Processor manuals.
7886 \S{insCVTPD2PS} \i\c{CVTPD2PS}:
7887 Packed Double-Precision FP to Packed Single-Precision FP Conversion
7889 \c CVTPD2PS xmm1,xmm2/mem128 ; 66 0F 5A /r [WILLAMETTE,SSE2]
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.
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.
7899 For more details of this instruction, see the Intel Processor manuals.
7902 \S{insCVTPI2PD} \i\c{CVTPI2PD}:
7903 Packed Signed INT32 to Packed Double-Precision FP Conversion
7905 \c CVTPI2PD xmm,mm/mem64 ; 66 0F 2A /r [WILLAMETTE,SSE2]
7907 \c{CVTPI2PD} converts two packed signed doublewords from the source
7908 operand to two packed double-precision FP values in the destination
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.
7914 For more details of this instruction, see the Intel Processor manuals.
7917 \S{insCVTPI2PS} \i\c{CVTPI2PS}:
7918 Packed Signed INT32 to Packed Single-FP Conversion
7920 \c CVTPI2PS xmm,mm/mem64 ; 0F 2A /r [KATMAI,SSE]
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
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.
7930 For more details of this instruction, see the Intel Processor manuals.
7933 \S{insCVTPS2DQ} \i\c{CVTPS2DQ}:
7934 Packed Single-Precision FP to Packed Signed INT32 Conversion
7936 \c CVTPS2DQ xmm1,xmm2/mem128 ; 66 0F 5B /r [WILLAMETTE,SSE2]
7938 \c{CVTPS2DQ} converts four packed single-precision FP values from the
7939 source operand to four packed signed doublewords in the destination operand.
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.
7944 For more details of this instruction, see the Intel Processor manuals.
7947 \S{insCVTPS2PD} \i\c{CVTPS2PD}:
7948 Packed Single-Precision FP to Packed Double-Precision FP Conversion
7950 \c CVTPS2PD xmm1,xmm2/mem64 ; 0F 5A /r [WILLAMETTE,SSE2]
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
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.
7960 For more details of this instruction, see the Intel Processor manuals.
7963 \S{insCVTPS2PI} \i\c{CVTPS2PI}:
7964 Packed Single-Precision FP to Packed Signed INT32 Conversion
7966 \c CVTPS2PI mm,xmm/mem64 ; 0F 2D /r [KATMAI,SSE]
7968 \c{CVTPS2PI} converts two packed single-precision FP values from
7969 the source operand to two packed signed doublewords in the destination
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.
7976 For more details of this instruction, see the Intel Processor manuals.
7979 \S{insCVTSD2SI} \i\c{CVTSD2SI}:
7980 Scalar Double-Precision FP to Signed INT32 Conversion
7982 \c CVTSD2SI reg32,xmm/mem64 ; F2 0F 2D /r [WILLAMETTE,SSE2]
7984 \c{CVTSD2SI} converts a double-precision FP value from the source
7985 operand to a signed doubleword in the destination operand.
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.
7991 For more details of this instruction, see the Intel Processor manuals.
7994 \S{insCVTSD2SS} \i\c{CVTSD2SS}:
7995 Scalar Double-Precision FP to Scalar Single-Precision FP Conversion
7997 \c CVTSD2SS xmm1,xmm2/mem64 ; F2 0F 5A /r [KATMAI,SSE]
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.
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.
8007 For more details of this instruction, see the Intel Processor manuals.
8010 \S{insCVTSI2SD} \i\c{CVTSI2SD}:
8011 Signed INT32 to Scalar Double-Precision FP Conversion
8013 \c CVTSI2SD xmm,r/m32 ; F2 0F 2A /r [WILLAMETTE,SSE2]
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.
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.
8022 For more details of this instruction, see the Intel Processor manuals.
8025 \S{insCVTSI2SS} \i\c{CVTSI2SS}:
8026 Signed INT32 to Scalar Single-Precision FP Conversion
8028 \c CVTSI2SS xmm,r/m32 ; F3 0F 2A /r [KATMAI,SSE]
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.
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.
8037 For more details of this instruction, see the Intel Processor manuals.
8040 \S{insCVTSS2SD} \i\c{CVTSS2SD}:
8041 Scalar Single-Precision FP to Scalar Double-Precision FP Conversion
8043 \c CVTSS2SD xmm1,xmm2/mem32 ; F3 0F 5A /r [WILLAMETTE,SSE2]
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.
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.
8053 For more details of this instruction, see the Intel Processor manuals.
8056 \S{insCVTSS2SI} \i\c{CVTSS2SI}:
8057 Scalar Single-Precision FP to Signed INT32 Conversion
8059 \c CVTSS2SI reg32,xmm/mem32 ; F3 0F 2D /r [KATMAI,SSE]
8061 \c{CVTSS2SI} converts a single-precision FP value from the source
8062 operand to a signed doubleword in the destination operand.
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.
8068 For more details of this instruction, see the Intel Processor manuals.
8071 \S{insCVTTPD2DQ} \i\c{CVTTPD2DQ}:
8072 Packed Double-Precision FP to Packed Signed INT32 Conversion with Truncation
8074 \c CVTTPD2DQ xmm1,xmm2/mem128 ; 66 0F E6 /r [WILLAMETTE,SSE2]
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.
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.
8084 For more details of this instruction, see the Intel Processor manuals.
8087 \S{insCVTTPD2PI} \i\c{CVTTPD2PI}:
8088 Packed Double-Precision FP to Packed Signed INT32 Conversion with Truncation
8090 \c CVTTPD2PI mm,xmm/mem128 ; 66 0F 2C /r [WILLAMETTE,SSE2]
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).
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.
8099 For more details of this instruction, see the Intel Processor manuals.
8102 \S{insCVTTPS2DQ} \i\c{CVTTPS2DQ}:
8103 Packed Single-Precision FP to Packed Signed INT32 Conversion with Truncation
8105 \c CVTTPS2DQ xmm1,xmm2/mem128 ; F3 0F 5B /r [WILLAMETTE,SSE2]
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).
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.
8114 For more details of this instruction, see the Intel Processor manuals.
8117 \S{insCVTTPS2PI} \i\c{CVTTPS2PI}:
8118 Packed Single-Precision FP to Packed Signed INT32 Conversion with Truncation
8120 \c CVTTPS2PI mm,xmm/mem64 ; 0F 2C /r [KATMAI,SSE]
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.
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.
8131 For more details of this instruction, see the Intel Processor manuals.
8134 \S{insCVTTSD2SI} \i\c{CVTTSD2SI}:
8135 Scalar Double-Precision FP to Signed INT32 Conversion with Truncation
8137 \c CVTTSD2SI reg32,xmm/mem64 ; F2 0F 2C /r [WILLAMETTE,SSE2]
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).
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.
8147 For more details of this instruction, see the Intel Processor manuals.
8150 \S{insCVTTSS2SI} \i\c{CVTTSS2SI}:
8151 Scalar Single-Precision FP to Signed INT32 Conversion with Truncation
8153 \c CVTTSD2SI reg32,xmm/mem32 ; F3 0F 2C /r [KATMAI,SSE]
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).
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.
8163 For more details of this instruction, see the Intel Processor manuals.
8166 \S{insDAA} \i\c{DAA}, \i\c{DAS}: Decimal Adjustments
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}.
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
8185 \c{DAS} works similarly to \c{DAA}, but is for use after \c{SUB}
8186 instructions rather than \c{ADD}.
8189 \S{insDEC} \i\c{DEC}: Decrement Integer
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]
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.
8201 This instruction can be used with a \c{LOCK} prefix to allow atomic
8204 See also \c{INC} (\k{insINC}).
8207 \S{insDIV} \i\c{DIV}: Unsigned Integer Divide
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]
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:
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}.
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}.
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}.
8226 Signed integer division is performed by the \c{IDIV} instruction:
8230 \S{insDIVPD} \i\c{DIVPD}: Packed Double-Precision FP Divide
8232 \c DIVPD xmm1,xmm2/mem128 ; 66 0F 5E /r [WILLAMETTE,SSE2]
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.
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.
8242 \c dst[0-63] := dst[0-63] / src[0-63],
8243 \c dst[64-127] := dst[64-127] / src[64-127].
8246 \S{insDIVPS} \i\c{DIVPS}: Packed Single-Precision FP Divide
8248 \c DIVPS xmm1,xmm2/mem128 ; 0F 5E /r [KATMAI,SSE]
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.
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.
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].
8264 \S{insDIVSD} \i\c{DIVSD}: Scalar Double-Precision FP Divide
8266 \c DIVSD xmm1,xmm2/mem64 ; F2 0F 5E /r [WILLAMETTE,SSE2]
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.
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.
8276 \c dst[0-63] := dst[0-63] / src[0-63],
8277 \c dst[64-127] remains unchanged.
8280 \S{insDIVSS} \i\c{DIVSS}: Scalar Single-Precision FP Divide
8282 \c DIVSS xmm1,xmm2/mem32 ; F3 0F 5E /r [KATMAI,SSE]
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.
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.
8292 \c dst[0-31] := dst[0-31] / src[0-31],
8293 \c dst[32-127] remains unchanged.
8296 \S{insEMMS} \i\c{EMMS}: Empty MMX State
8298 \c EMMS ; 0F 77 [PENT,MMX]
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.
8306 \S{insENTER} \i\c{ENTER}: Create Stack Frame
8308 \c ENTER imm,imm ; C8 iw ib [186]
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).
8317 The function of \c{ENTER}, with a nesting level of zero, is
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
8324 This creates a stack frame with the procedure parameters accessible
8325 upwards from \c{EBP}, and local variables accessible downwards from
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]}.
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.
8341 Stack frames created by \c{ENTER} can be destroyed by the \c{LEAVE}
8342 instruction: see \k{insLEAVE}.
8345 \S{insF2XM1} \i\c{F2XM1}: Calculate 2**X-1
8347 \c F2XM1 ; D9 F0 [8086,FPU]
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.
8354 \S{insFABS} \i\c{FABS}: Floating-Point Absolute Value
8356 \c FABS ; D9 E1 [8086,FPU]
8358 \c{FABS} computes the absolute value of \c{ST0},by clearing the sign
8359 bit, and stores the result back in \c{ST0}.
8362 \S{insFADD} \i\c{FADD}, \i\c{FADDP}: Floating-Point Addition
8364 \c FADD mem32 ; D8 /0 [8086,FPU]
8365 \c FADD mem64 ; DC /0 [8086,FPU]
8367 \c FADD fpureg ; D8 C0+r [8086,FPU]
8368 \c FADD ST0,fpureg ; D8 C0+r [8086,FPU]
8370 \c FADD TO fpureg ; DC C0+r [8086,FPU]
8371 \c FADD fpureg,ST0 ; DC C0+r [8086,FPU]
8373 \c FADDP fpureg ; DE C0+r [8086,FPU]
8374 \c FADDP fpureg,ST0 ; DE C0+r [8086,FPU]
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}.
8380 \b \c{FADDP} performs the same function as \c{FADD TO}, but pops the
8381 register stack after storing the result.
8383 The given two-operand forms are synonyms for the one-operand forms.
8385 To add an integer value to \c{ST0}, use the c{FIADD} instruction
8389 \S{insFBLD} \i\c{FBLD}, \i\c{FBSTP}: BCD Floating-Point Load and Store
8391 \c FBLD mem80 ; DF /4 [8086,FPU]
8392 \c FBSTP mem80 ; DF /6 [8086,FPU]
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
8401 \S{insFCHS} \i\c{FCHS}: Floating-Point Change Sign
8403 \c FCHS ; D9 E0 [8086,FPU]
8405 \c{FCHS} negates the number in \c{ST0}, by inverting the sign bit:
8406 negative numbers become positive, and vice versa.
8409 \S{insFCLEX} \i\c{FCLEX}, \c{FNCLEX}: Clear Floating-Point Exceptions
8411 \c FCLEX ; 9B DB E2 [8086,FPU]
8412 \c FNCLEX ; DB E2 [8086,FPU]
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.
8420 \S{insFCMOVB} \i\c{FCMOVcc}: Floating-Point Conditional Move
8422 \c FCMOVB fpureg ; DA C0+r [P6,FPU]
8423 \c FCMOVB ST0,fpureg ; DA C0+r [P6,FPU]
8425 \c FCMOVE fpureg ; DA C8+r [P6,FPU]
8426 \c FCMOVE ST0,fpureg ; DA C8+r [P6,FPU]
8428 \c FCMOVBE fpureg ; DA D0+r [P6,FPU]
8429 \c FCMOVBE ST0,fpureg ; DA D0+r [P6,FPU]
8431 \c FCMOVU fpureg ; DA D8+r [P6,FPU]
8432 \c FCMOVU ST0,fpureg ; DA D8+r [P6,FPU]
8434 \c FCMOVNB fpureg ; DB C0+r [P6,FPU]
8435 \c FCMOVNB ST0,fpureg ; DB C0+r [P6,FPU]
8437 \c FCMOVNE fpureg ; DB C8+r [P6,FPU]
8438 \c FCMOVNE ST0,fpureg ; DB C8+r [P6,FPU]
8440 \c FCMOVNBE fpureg ; DB D0+r [P6,FPU]
8441 \c FCMOVNBE ST0,fpureg ; DB D0+r [P6,FPU]
8443 \c FCMOVNU fpureg ; DB D8+r [P6,FPU]
8444 \c FCMOVNU ST0,fpureg ; DB D8+r [P6,FPU]
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.
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}.)
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
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.
8474 \S{insFCOM} \i\c{FCOM}, \i\c{FCOMP}, \i\c{FCOMPP}, \i\c{FCOMI},
8475 \i\c{FCOMIP}: Floating-Point Compare
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]
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]
8487 \c FCOMPP ; DE D9 [8086,FPU]
8489 \c FCOMI fpureg ; DB F0+r [P6,FPU]
8490 \c FCOMI ST0,fpureg ; DB F0+r [P6,FPU]
8492 \c FCOMIP fpureg ; DF F0+r [P6,FPU]
8493 \c FCOMIP ST0,fpureg ; DF F0+r [P6,FPU]
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.
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.
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
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.
8516 \S{insFCOS} \i\c{FCOS}: Cosine
8518 \c FCOS ; D9 FF [386,FPU]
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.
8523 See also \c{FSINCOS} (\k{insFSIN}).
8526 \S{insFDECSTP} \i\c{FDECSTP}: Decrement Floating-Point Stack Pointer
8528 \c FDECSTP ; D9 F6 [8086,FPU]
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}).
8536 \S{insFDISI} \i\c{FxDISI}, \i\c{FxENI}: Disable and Enable Floating-Point Interrupts
8538 \c FDISI ; 9B DB E1 [8086,FPU]
8539 \c FNDISI ; DB E1 [8086,FPU]
8541 \c FENI ; 9B DB E0 [8086,FPU]
8542 \c FNENI ; DB E0 [8086,FPU]
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.
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.
8553 \S{insFDIV} \i\c{FDIV}, \i\c{FDIVP}, \i\c{FDIVR}, \i\c{FDIVRP}: Floating-Point Division
8555 \c FDIV mem32 ; D8 /6 [8086,FPU]
8556 \c FDIV mem64 ; DC /6 [8086,FPU]
8558 \c FDIV fpureg ; D8 F0+r [8086,FPU]
8559 \c FDIV ST0,fpureg ; D8 F0+r [8086,FPU]
8561 \c FDIV TO fpureg ; DC F8+r [8086,FPU]
8562 \c FDIV fpureg,ST0 ; DC F8+r [8086,FPU]
8564 \c FDIVR mem32 ; D8 /0 [8086,FPU]
8565 \c FDIVR mem64 ; DC /0 [8086,FPU]
8567 \c FDIVR fpureg ; D8 F8+r [8086,FPU]
8568 \c FDIVR ST0,fpureg ; D8 F8+r [8086,FPU]
8570 \c FDIVR TO fpureg ; DC F0+r [8086,FPU]
8571 \c FDIVR fpureg,ST0 ; DC F0+r [8086,FPU]
8573 \c FDIVP fpureg ; DE F8+r [8086,FPU]
8574 \c FDIVP fpureg,ST0 ; DE F8+r [8086,FPU]
8576 \c FDIVRP fpureg ; DE F0+r [8086,FPU]
8577 \c FDIVRP fpureg,ST0 ; DE F0+r [8086,FPU]
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
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
8590 \b \c{FDIVP} operates like \c{FDIV TO}, but pops the register stack
8591 once it has finished.
8593 \b \c{FDIVRP} operates like \c{FDIVR TO}, but pops the register stack
8594 once it has finished.
8596 For FP/Integer divisions, see \c{FIDIV} (\k{insFIDIV}).
8599 \S{insFEMMS} \i\c{FEMMS}: Faster Enter/Exit of the MMX or floating-point state
8601 \c FEMMS ; 0F 0E [PENT,3DNOW]
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
8611 \S{insFFREE} \i\c{FFREE}: Flag Floating-Point Register as Unused
8613 \c FFREE fpureg ; DD C0+r [8086,FPU]
8614 \c FFREEP fpureg ; DF C0+r [286,FPU,UNDOC]
8616 \c{FFREE} marks the given register as being empty.
8618 \c{FFREEP} marks the given register as being empty, and then
8619 pops the register stack.
8622 \S{insFIADD} \i\c{FIADD}: Floating-Point/Integer Addition
8624 \c FIADD mem16 ; DE /0 [8086,FPU]
8625 \c FIADD mem32 ; DA /0 [8086,FPU]
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}.
8631 \S{insFICOM} \i\c{FICOM}, \i\c{FICOMP}: Floating-Point/Integer Compare
8633 \c FICOM mem16 ; DE /2 [8086,FPU]
8634 \c FICOM mem32 ; DA /2 [8086,FPU]
8636 \c FICOMP mem16 ; DE /3 [8086,FPU]
8637 \c FICOMP mem32 ; DA /3 [8086,FPU]
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.
8644 \S{insFIDIV} \i\c{FIDIV}, \i\c{FIDIVR}: Floating-Point/Integer Division
8646 \c FIDIV mem16 ; DE /6 [8086,FPU]
8647 \c FIDIV mem32 ; DA /6 [8086,FPU]
8649 \c FIDIVR mem16 ; DE /7 [8086,FPU]
8650 \c FIDIVR mem32 ; DA /7 [8086,FPU]
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}.
8658 \S{insFILD} \i\c{FILD}, \i\c{FIST}, \i\c{FISTP}: Floating-Point/Integer Conversion
8660 \c FILD mem16 ; DF /0 [8086,FPU]
8661 \c FILD mem32 ; DB /0 [8086,FPU]
8662 \c FILD mem64 ; DF /5 [8086,FPU]
8664 \c FIST mem16 ; DF /2 [8086,FPU]
8665 \c FIST mem32 ; DB /2 [8086,FPU]
8667 \c FISTP mem16 ; DF /3 [8086,FPU]
8668 \c FISTP mem32 ; DB /3 [8086,FPU]
8669 \c FISTP mem64 ; DF /7 [8086,FPU]
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.
8677 \S{insFIMUL} \i\c{FIMUL}: Floating-Point/Integer Multiplication
8679 \c FIMUL mem16 ; DE /1 [8086,FPU]
8680 \c FIMUL mem32 ; DA /1 [8086,FPU]
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}.
8686 \S{insFINCSTP} \i\c{FINCSTP}: Increment Floating-Point Stack Pointer
8688 \c FINCSTP ; D9 F7 [8086,FPU]
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}).
8698 \S{insFINIT} \i\c{FINIT}, \i\c{FNINIT}: Initialise Floating-Point Unit
8700 \c FINIT ; 9B DB E3 [8086,FPU]
8701 \c FNINIT ; DB E3 [8086,FPU]
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.
8709 \S{insFISUB} \i\c{FISUB}: Floating-Point/Integer Subtraction
8711 \c FISUB mem16 ; DE /4 [8086,FPU]
8712 \c FISUB mem32 ; DA /4 [8086,FPU]
8714 \c FISUBR mem16 ; DE /5 [8086,FPU]
8715 \c FISUBR mem32 ; DA /5 [8086,FPU]
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
8724 \S{insFLD} \i\c{FLD}: Floating-Point Load
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]
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.
8735 \S{insFLD1} \i\c{FLDxx}: Floating-Point Load Constants
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]
8745 These instructions push specific standard constants on the FPU
8748 \c Instruction Constant pushed
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
8759 \S{insFLDCW} \i\c{FLDCW}: Load Floating-Point Control Word
8761 \c FLDCW mem16 ; D9 /5 [8086,FPU]
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.
8771 \S{insFLDENV} \i\c{FLDENV}: Load Floating-Point Environment
8773 \c FLDENV mem ; D9 /4 [8086,FPU]
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}).
8781 \S{insFMUL} \i\c{FMUL}, \i\c{FMULP}: Floating-Point Multiply
8783 \c FMUL mem32 ; D8 /1 [8086,FPU]
8784 \c FMUL mem64 ; DC /1 [8086,FPU]
8786 \c FMUL fpureg ; D8 C8+r [8086,FPU]
8787 \c FMUL ST0,fpureg ; D8 C8+r [8086,FPU]
8789 \c FMUL TO fpureg ; DC C8+r [8086,FPU]
8790 \c FMUL fpureg,ST0 ; DC C8+r [8086,FPU]
8792 \c FMULP fpureg ; DE C8+r [8086,FPU]
8793 \c FMULP fpureg,ST0 ; DE C8+r [8086,FPU]
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.
8801 \S{insFNOP} \i\c{FNOP}: Floating-Point No Operation
8803 \c FNOP ; D9 D0 [8086,FPU]
8805 \c{FNOP} does nothing.
8808 \S{insFPATAN} \i\c{FPATAN}, \i\c{FPTAN}: Arctangent and Tangent
8810 \c FPATAN ; D9 F3 [8086,FPU]
8811 \c FPTAN ; D9 F2 [8086,FPU]
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).
8821 \c{FPTAN} computes the tangent of the value in \c{ST0} (in radians),
8822 and stores the result back into \c{ST0}.
8824 The absolute value of \c{ST0} must be less than 2**63.
8827 \S{insFPREM} \i\c{FPREM}, \i\c{FPREM1}: Floating-Point Partial Remainder
8829 \c FPREM ; D9 F8 [8086,FPU]
8830 \c FPREM1 ; D9 F5 [386,FPU]
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
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}.
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.
8854 \S{insFRNDINT} \i\c{FRNDINT}: Floating-Point Round to Integer
8856 \c FRNDINT ; D9 FC [8086,FPU]
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}.
8863 \S{insFRSTOR} \i\c{FSAVE}, \i\c{FRSTOR}: Save/Restore Floating-Point State
8865 \c FSAVE mem ; 9B DD /6 [8086,FPU]
8866 \c FNSAVE mem ; DD /6 [8086,FPU]
8868 \c FRSTOR mem ; DD /4 [8086,FPU]
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.
8876 \c{FNSAVE} does the same as \c{FSAVE}, without first waiting for
8877 pending floating-point exceptions to clear.
8880 \S{insFSCALE} \i\c{FSCALE}: Scale Floating-Point Value by Power of Two
8882 \c FSCALE ; D9 FD [8086,FPU]
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}.
8889 \S{insFSETPM} \i\c{FSETPM}: Set Protected Mode
8891 \c FSETPM ; DB E4 [286,FPU]
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.
8898 \S{insFSIN} \i\c{FSIN}, \i\c{FSINCOS}: Sine and Cosine
8900 \c FSIN ; D9 FE [386,FPU]
8901 \c FSINCOS ; D9 FB [386,FPU]
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.
8909 The absolute value of \c{ST0} must be less than 2**63.
8912 \S{insFSQRT} \i\c{FSQRT}: Floating-Point Square Root
8914 \c FSQRT ; D9 FA [8086,FPU]
8916 \c{FSQRT} calculates the square root of \c{ST0} and stores the
8920 \S{insFST} \i\c{FST}, \i\c{FSTP}: Floating-Point Store
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]
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]
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
8936 \S{insFSTCW} \i\c{FSTCW}: Store Floating-Point Control Word
8938 \c FSTCW mem16 ; 9B D9 /7 [8086,FPU]
8939 \c FNSTCW mem16 ; D9 /7 [8086,FPU]
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}).
8945 \c{FNSTCW} does the same thing as \c{FSTCW}, without first waiting
8946 for pending floating-point exceptions to clear.
8949 \S{insFSTENV} \i\c{FSTENV}: Store Floating-Point Environment
8951 \c FSTENV mem ; 9B D9 /6 [8086,FPU]
8952 \c FNSTENV mem ; D9 /6 [8086,FPU]
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}
8960 \c{FNSTENV} does the same thing as \c{FSTENV}, without first waiting
8961 for pending floating-point exceptions to clear.
8964 \S{insFSTSW} \i\c{FSTSW}: Store Floating-Point Status Word
8966 \c FSTSW mem16 ; 9B DD /7 [8086,FPU]
8967 \c FSTSW AX ; 9B DF E0 [286,FPU]
8969 \c FNSTSW mem16 ; DD /7 [8086,FPU]
8970 \c FNSTSW AX ; DF E0 [286,FPU]
8972 \c{FSTSW} stores the \c{FPU} status word into \c{AX} or into a 2-byte
8975 \c{FNSTSW} does the same thing as \c{FSTSW}, without first waiting
8976 for pending floating-point exceptions to clear.
8979 \S{insFSUB} \i\c{FSUB}, \i\c{FSUBP}, \i\c{FSUBR}, \i\c{FSUBRP}: Floating-Point Subtract
8981 \c FSUB mem32 ; D8 /4 [8086,FPU]
8982 \c FSUB mem64 ; DC /4 [8086,FPU]
8984 \c FSUB fpureg ; D8 E0+r [8086,FPU]
8985 \c FSUB ST0,fpureg ; D8 E0+r [8086,FPU]
8987 \c FSUB TO fpureg ; DC E8+r [8086,FPU]
8988 \c FSUB fpureg,ST0 ; DC E8+r [8086,FPU]
8990 \c FSUBR mem32 ; D8 /5 [8086,FPU]
8991 \c FSUBR mem64 ; DC /5 [8086,FPU]
8993 \c FSUBR fpureg ; D8 E8+r [8086,FPU]
8994 \c FSUBR ST0,fpureg ; D8 E8+r [8086,FPU]
8996 \c FSUBR TO fpureg ; DC E0+r [8086,FPU]
8997 \c FSUBR fpureg,ST0 ; DC E0+r [8086,FPU]
8999 \c FSUBP fpureg ; DE E8+r [8086,FPU]
9000 \c FSUBP fpureg,ST0 ; DE E8+r [8086,FPU]
9002 \c FSUBRP fpureg ; DE E0+r [8086,FPU]
9003 \c FSUBRP fpureg,ST0 ; DE E0+r [8086,FPU]
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.
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
9016 \b \c{FSUBP} operates like \c{FSUB TO}, but pops the register stack
9017 once it has finished.
9019 \b \c{FSUBRP} operates like \c{FSUBR TO}, but pops the register stack
9020 once it has finished.
9023 \S{insFTST} \i\c{FTST}: Test \c{ST0} Against Zero
9025 \c FTST ; D9 E4 [8086,FPU]
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
9033 \S{insFUCOM} \i\c{FUCOMxx}: Floating-Point Unordered Compare
9035 \c FUCOM fpureg ; DD E0+r [386,FPU]
9036 \c FUCOM ST0,fpureg ; DD E0+r [386,FPU]
9038 \c FUCOMP fpureg ; DD E8+r [386,FPU]
9039 \c FUCOMP ST0,fpureg ; DD E8+r [386,FPU]
9041 \c FUCOMPP ; DA E9 [386,FPU]
9043 \c FUCOMI fpureg ; DB E8+r [P6,FPU]
9044 \c FUCOMI ST0,fpureg ; DB E8+r [P6,FPU]
9046 \c FUCOMIP fpureg ; DF E8+r [P6,FPU]
9047 \c FUCOMIP ST0,fpureg ; DF E8+r [P6,FPU]
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.
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.
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
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.
9070 \S{insFXAM} \i\c{FXAM}: Examine Class of Value in \c{ST0}
9072 \c FXAM ; D9 E5 [8086,FPU]
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}:
9077 \c Register contents Flags
9079 \c Unsupported format 000
9081 \c Finite number 010
9084 \c Empty register 101
9087 Additionally, the \c{C1} flag is set to the sign of the number.
9090 \S{insFXCH} \i\c{FXCH}: Floating-Point Exchange
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]
9097 \c{FXCH} exchanges \c{ST0} with a given FPU register. The no-operand
9098 form exchanges \c{ST0} with \c{ST1}.
9101 \S{insFXRSTOR} \i\c{FXRSTOR}: Restore \c{FP}, \c{MMX} and \c{SSE} State
9103 \c FXRSTOR memory ; 0F AE /1 [P6,SSE,FPU]
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
9111 \S{insFXSAVE} \i\c{FXSAVE}: Store \c{FP}, \c{MMX} and \c{SSE} State
9113 \c FXSAVE memory ; 0F AE /0 [P6,SSE,FPU]
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}).
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.
9127 \S{insFXTRACT} \i\c{FXTRACT}: Extract Exponent and Significand
9129 \c FXTRACT ; D9 F4 [8086,FPU]
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}).
9137 \S{insFYL2X} \i\c{FYL2X}, \i\c{FYL2XP1}: Compute Y times Log2(X) or Log2(X+1)
9139 \c FYL2X ; D9 F1 [8086,FPU]
9140 \c FYL2XP1 ; D9 F9 [8086,FPU]
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
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.
9152 \S{insHLT} \i\c{HLT}: Halt Processor
9154 \c HLT ; F4 [8086,PRIV]
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
9160 On the 286 and later processors, this is a privileged instruction.
9163 \S{insIBTS} \i\c{IBTS}: Insert Bit String
9165 \c IBTS r/m16,reg16 ; o16 0F A7 /r [386,UNDOC]
9166 \c IBTS r/m32,reg32 ; o32 0F A7 /r [386,UNDOC]
9168 The implied operation of this instruction is:
9170 \c IBTS r/m16,AX,CL,reg16
9171 \c IBTS r/m32,EAX,CL,reg32
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.
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}
9188 \S{insIDIV} \i\c{IDIV}: Signed Integer Divide
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]
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:
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}.
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}.
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}.
9207 Unsigned integer division is performed by the \c{DIV} instruction:
9211 \S{insIMUL} \i\c{IMUL}: Signed Integer Multiply
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]
9217 \c IMUL reg16,r/m16 ; o16 0F AF /r [386]
9218 \c IMUL reg32,r/m32 ; o32 0F AF /r [386]
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]
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]
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:
9234 \b For \c{IMUL r/m8}, \c{AL} is multiplied by the given operand;
9235 the product is stored in \c{AX}.
9237 \b For \c{IMUL r/m16}, \c{AX} is multiplied by the given operand;
9238 the product is stored in \c{DX:AX}.
9240 \b For \c{IMUL r/m32}, \c{EAX} is multiplied by the given operand;
9241 the product is stored in \c{EDX:EAX}.
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
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).
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.
9260 Unsigned integer multiplication is performed by the \c{MUL}
9261 instruction: see \k{insMUL}.
9264 \S{insIN} \i\c{IN}: Input from I/O Port
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]
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}).
9279 \S{insINC} \i\c{INC}: Increment Integer
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]
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.
9291 This instruction can be used with a \c{LOCK} prefix to allow atomic execution.
9293 See also \c{DEC} (\k{insDEC}).
9296 \S{insINSB} \i\c{INSB}, \i\c{INSW}, \i\c{INSD}: Input String from I/O Port
9299 \c INSW ; o16 6D [186]
9300 \c INSD ; o32 6D [386]
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}.
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.
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
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.
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.
9323 See also \c{OUTSB}, \c{OUTSW} and \c{OUTSD} (\k{insOUTSB}).
9326 \S{insINT} \i\c{INT}: Software Interrupt
9328 \c INT imm8 ; CD ib [8086]
9330 \c{INT} causes a software interrupt through a specified vector
9331 number from 0 to 255.
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.
9340 \S{insINT1} \i\c{INT3}, \i\c{INT1}, \i\c{ICEBP}, \i\c{INT01}: Breakpoints
9347 \c INT03 ; CC [8086]
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.
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.
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.
9366 \S{insINTO} \i\c{INTO}: Interrupt if Overflow
9370 \c{INTO} performs an \c{INT 4} software interrupt (see \k{insINT})
9371 if and only if the overflow flag is set.
9374 \S{insINVD} \i\c{INVD}: Invalidate Internal Caches
9376 \c INVD ; 0F 08 [486]
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}).
9385 \S{insINVLPG} \i\c{INVLPG}: Invalidate TLB Entry
9387 \c INVLPG mem ; 0F 01 /7 [486]
9389 \c{INVLPG} invalidates the translation lookahead buffer (TLB) entry
9390 associated with the supplied memory address.
9393 \S{insIRET} \i\c{IRET}, \i\c{IRETW}, \i\c{IRETD}: Return from Interrupt
9396 \c IRETW ; o16 CF [8086]
9397 \c IRETD ; o32 CF [386]
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}.
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.
9409 \c{IRET} is a shorthand for either \c{IRETW} or \c{IRETD}, depending
9410 on the default \c{BITS} setting at the time.
9413 \S{insJcc} \i\c{Jcc}: Conditional Branch
9415 \c Jcc imm ; 70+cc rb [8086]
9416 \c Jcc NEAR imm ; 0F 80+cc rw/rd [386]
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.
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
9428 The \c{SHORT} keyword is allowed on the first form of the
9429 instruction, for clarity, but is not necessary.
9431 For details of the condition codes, see \k{iref-cc}.
9434 \S{insJCXZ} \i\c{JCXZ}, \i\c{JECXZ}: Jump if CX/ECX Zero
9436 \c JCXZ imm ; a16 E3 rb [8086]
9437 \c JECXZ imm ; a32 E3 rb [386]
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}.
9444 \S{insJMP} \i\c{JMP}: Jump
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]
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
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.
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}.
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}.
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}.
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}.
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.
9489 \S{insLAHF} \i\c{LAHF}: Load AH from Flags
9493 \c{LAHF} sets the \c{AH} register according to the contents of the
9494 low byte of the flags word.
9496 The operation of \c{LAHF} is:
9498 \c AH <-- SF:ZF:0:AF:0:PF:1:CF
9500 See also \c{SAHF} (\k{insSAHF}).
9503 \S{insLAR} \i\c{LAR}: Load Access Rights
9505 \c LAR reg16,r/m16 ; o16 0F 02 /r [286,PRIV]
9506 \c LAR reg32,r/m32 ; o32 0F 02 /r [286,PRIV]
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.
9514 \S{insLDMXCSR} \i\c{LDMXCSR}: Load Streaming SIMD Extension
9517 \c LDMXCSR mem32 ; 0F AE /2 [KATMAI,SSE]
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.
9524 For details of the \c{MXCSR} register, see the Intel processor docs.
9526 See also \c{STMXCSR} (\k{insSTMXCSR}
9529 \S{insLDS} \i\c{LDS}, \i\c{LES}, \i\c{LFS}, \i\c{LGS}, \i\c{LSS}: Load Far Pointer
9531 \c LDS reg16,mem ; o16 C5 /r [8086]
9532 \c LDS reg32,mem ; o32 C5 /r [386]
9534 \c LES reg16,mem ; o16 C4 /r [8086]
9535 \c LES reg32,mem ; o32 C4 /r [386]
9537 \c LFS reg16,mem ; o16 0F B4 /r [386]
9538 \c LFS reg32,mem ; o32 0F B4 /r [386]
9540 \c LGS reg16,mem ; o16 0F B5 /r [386]
9541 \c LGS reg32,mem ; o32 0F B5 /r [386]
9543 \c LSS reg16,mem ; o16 0F B2 /r [386]
9544 \c LSS reg32,mem ; o32 0F B2 /r [386]
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
9555 \S{insLEA} \i\c{LEA}: Load Effective Address
9557 \c LEA reg16,mem ; o16 8D /r [8086]
9558 \c LEA reg32,mem ; o32 8D /r [386]
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.
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.
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.
9578 \S{insLEAVE} \i\c{LEAVE}: Destroy Stack Frame
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).
9588 \S{insLFENCE} \i\c{LFENCE}: Load Fence
9590 \c LFENCE ; 0F AE /5 [WILLAMETTE,SSE2]
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.
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}).
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.
9609 \c{LFENCE} uses the following ModRM encoding:
9612 \c Reg/Opcode (5:3) = 101B
9615 All other ModRM encodings are defined to be reserved, and use
9616 of these encodings risks incompatibility with future processors.
9618 See also \c{SFENCE} (\k{insSFENCE}) and \c{MFENCE} (\k{insMFENCE}).
9621 \S{insLGDT} \i\c{LGDT}, \i\c{LIDT}, \i\c{LLDT}: Load Descriptor Tables
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]
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.
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).
9638 See also \c{SGDT}, \c{SIDT} and \c{SLDT} (\k{insSGDT}).
9641 \S{insLMSW} \i\c{LMSW}: Load/Store Machine Status Word
9643 \c LMSW r/m16 ; 0F 01 /6 [286,PRIV]
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}).
9650 \S{insLOADALL} \i\c{LOADALL}, \i\c{LOADALL286}: Load Processor State
9652 \c LOADALL ; 0F 07 [386,UNDOC]
9653 \c LOADALL286 ; 0F 05 [286,UNDOC]
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.
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]}.
9665 \S{insLODSB} \i\c{LODSB}, \i\c{LODSW}, \i\c{LODSD}: Load from String
9667 \c LODSB ; AC [8086]
9668 \c LODSW ; o16 AD [8086]
9669 \c LODSD ; o32 AD [386]
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
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.
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}).
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.
9690 \S{insLOOP} \i\c{LOOP}, \i\c{LOOPE}, \i\c{LOOPZ}, \i\c{LOOPNE}, \i\c{LOOPNZ}: Loop with Counter
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]
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]
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]
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.
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.
9722 \S{insLSL} \i\c{LSL}: Load Segment Limit
9724 \c LSL reg16,r/m16 ; o16 0F 03 /r [286,PRIV]
9725 \c LSL reg32,r/m32 ; o32 0F 03 /r [286,PRIV]
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.
9736 \S{insLTR} \i\c{LTR}: Load Task Register
9738 \c LTR r/m16 ; 0F 00 /3 [286,PRIV]
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.
9745 \S{insMASKMOVDQU} \i\c{MASKMOVDQU}: Byte Mask Write
9747 \c MASKMOVDQU xmm1,xmm2 ; 66 0F F7 /r [WILLAMETTE,SSE2]
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.
9756 \S{insMASKMOVQ} \i\c{MASKMOVQ}: Byte Mask Write
9758 \c MASKMOVQ mm1,mm2 ; 0F F7 /r [KATMAI,MMX]
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.
9767 \S{insMAXPD} \i\c{MAXPD}: Return Packed Double-Precision FP Maximum
9769 \c MAXPD xmm1,xmm2/m128 ; 66 0F 5F /r [WILLAMETTE,SSE2]
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).
9779 \S{insMAXPS} \i\c{MAXPS}: Return Packed Single-Precision FP Maximum
9781 \c MAXPS xmm1,xmm2/m128 ; 0F 5F /r [KATMAI,SSE]
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).
9791 \S{insMAXSD} \i\c{MAXSD}: Return Scalar Double-Precision FP Maximum
9793 \c MAXSD xmm1,xmm2/m64 ; F2 0F 5F /r [WILLAMETTE,SSE2]
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
9804 \S{insMAXSS} \i\c{MAXSS}: Return Scalar Single-Precision FP Maximum
9806 \c MAXSS xmm1,xmm2/m32 ; F3 0F 5F /r [KATMAI,SSE]
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.
9817 \S{insMFENCE} \i\c{MFENCE}: Memory Fence
9819 \c MFENCE ; 0F AE /6 [WILLAMETTE,SSE2]
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.
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}).
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.
9840 \c{MFENCE} uses the following ModRM encoding:
9843 \c Reg/Opcode (5:3) = 110B
9846 All other ModRM encodings are defined to be reserved, and use
9847 of these encodings risks incompatibility with future processors.
9849 See also \c{LFENCE} (\k{insLFENCE}) and \c{SFENCE} (\k{insSFENCE}).
9852 \S{insMINPD} \i\c{MINPD}: Return Packed Double-Precision FP Minimum
9854 \c MINPD xmm1,xmm2/m128 ; 66 0F 5D /r [WILLAMETTE,SSE2]
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).
9864 \S{insMINPS} \i\c{MINPS}: Return Packed Single-Precision FP Minimum
9866 \c MINPS xmm1,xmm2/m128 ; 0F 5D /r [KATMAI,SSE]
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).
9876 \S{insMINSD} \i\c{MINSD}: Return Scalar Double-Precision FP Minimum
9878 \c MINSD xmm1,xmm2/m64 ; F2 0F 5D /r [WILLAMETTE,SSE2]
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
9889 \S{insMINSS} \i\c{MINSS}: Return Scalar Single-Precision FP Minimum
9891 \c MINSS xmm1,xmm2/m32 ; F3 0F 5D /r [KATMAI,SSE]
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.
9902 \S{insMOV} \i\c{MOV}: Move Data
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]
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]
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]
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]
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]
9937 \c{MOV} copies the contents of its source (second) operand into its
9938 destination (first) operand.
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
9949 \c{MOV} may not use \c{CS} as a destination.
9951 \c{CR4} is only a supported register on the Pentium and above.
9953 Test registers are supported on 386/486 processors and on some
9954 non-Intel Pentium class processors.
9957 \S{insMOVAPD} \i\c{MOVAPD}: Move Aligned Packed Double-Precision FP Values
9959 \c MOVAPD xmm1,xmm2/mem128 ; 66 0F 28 /r [WILLAMETTE,SSE2]
9960 \c MOVAPD xmm1/mem128,xmm2 ; 66 0F 29 /r [WILLAMETTE,SSE2]
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
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}).
9971 \S{insMOVAPS} \i\c{MOVAPS}: Move Aligned Packed Single-Precision FP Values
9973 \c MOVAPS xmm1,xmm2/mem128 ; 0F 28 /r [KATMAI,SSE]
9974 \c MOVAPS xmm1/mem128,xmm2 ; 0F 29 /r [KATMAI,SSE]
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
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}).
9985 \S{insMOVD} \i\c{MOVD}: Move Doubleword to/from MMX Register
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]
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.
9998 \S{insMOVDQ2Q} \i\c{MOVDQ2Q}: Move Quadword from XMM to MMX register.
10000 \c MOVDQ2Q mm,xmm ; F2 OF D6 /r [WILLAMETTE,SSE2]
10002 \c{MOVDQ2Q} moves the low quadword from the source operand to the
10003 destination operand.
10006 \S{insMOVDQA} \i\c{MOVDQA}: Move Aligned Double Quadword
10008 \c MOVDQA xmm1,xmm2/m128 ; 66 OF 6F /r [WILLAMETTE,SSE2]
10009 \c MOVDQA xmm1/m128,xmm2 ; 66 OF 7F /r [WILLAMETTE,SSE2]
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.
10015 To move a double quadword to or from unaligned memory locations,
10016 use the \c{MOVDQU} instruction (\k{insMOVDQU}).
10019 \S{insMOVDQU} \i\c{MOVDQU}: Move Unaligned Double Quadword
10021 \c MOVDQU xmm1,xmm2/m128 ; F3 OF 6F /r [WILLAMETTE,SSE2]
10022 \c MOVDQU xmm1/m128,xmm2 ; F3 OF 7F /r [WILLAMETTE,SSE2]
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.
10028 To move a double quadword to or from known aligned memory locations,
10029 use the \c{MOVDQA} instruction (\k{insMOVDQA}).
10032 \S{insMOVHLPS} \i\c{MOVHLPS}: Move Packed Single-Precision FP High to Low
10034 \c MOVHLPS xmm1,xmm2 ; OF 12 /r [KATMAI,SSE]
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.
10040 The operation of this instruction is:
10042 \c dst[0-63] := src[64-127],
10043 \c dst[64-127] remains unchanged.
10046 \S{insMOVHPD} \i\c{MOVHPD}: Move High Packed Double-Precision FP
10048 \c MOVHPD xmm,m64 ; 66 OF 16 /r [WILLAMETTE,SSE2]
10049 \c MOVHPD m64,xmm ; 66 OF 17 /r [WILLAMETTE,SSE2]
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.
10055 The operation of this instruction is:
10057 \c mem[0-63] := xmm[64-127];
10061 \c xmm[0-63] remains unchanged;
10062 \c xmm[64-127] := mem[0-63].
10065 \S{insMOVHPS} \i\c{MOVHPS}: Move High Packed Single-Precision FP
10067 \c MOVHPS xmm,m64 ; 0F 16 /r [KATMAI,SSE]
10068 \c MOVHPS m64,xmm ; 0F 17 /r [KATMAI,SSE]
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.
10074 The operation of this instruction is:
10076 \c mem[0-63] := xmm[64-127];
10080 \c xmm[0-63] remains unchanged;
10081 \c xmm[64-127] := mem[0-63].
10084 \S{insMOVLHPS} \i\c{MOVLHPS}: Move Packed Single-Precision FP Low to High
10086 \c MOVLHPS xmm1,xmm2 ; OF 16 /r [KATMAI,SSE]
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.
10092 The operation of this instruction is:
10094 \c dst[0-63] remains unchanged;
10095 \c dst[64-127] := src[0-63].
10097 \S{insMOVLPD} \i\c{MOVLPD}: Move Low Packed Double-Precision FP
10099 \c MOVLPD xmm,m64 ; 66 OF 12 /r [WILLAMETTE,SSE2]
10100 \c MOVLPD m64,xmm ; 66 OF 13 /r [WILLAMETTE,SSE2]
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.
10106 The operation of this instruction is:
10108 \c mem(0-63) := xmm(0-63);
10112 \c xmm(0-63) := mem(0-63);
10113 \c xmm(64-127) remains unchanged.
10115 \S{insMOVLPS} \i\c{MOVLPS}: Move Low Packed Single-Precision FP
10117 \c MOVLPS xmm,m64 ; OF 12 /r [KATMAI,SSE]
10118 \c MOVLPS m64,xmm ; OF 13 /r [KATMAI,SSE]
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.
10124 The operation of this instruction is:
10126 \c mem(0-63) := xmm(0-63);
10130 \c xmm(0-63) := mem(0-63);
10131 \c xmm(64-127) remains unchanged.
10134 \S{insMOVMSKPD} \i\c{MOVMSKPD}: Extract Packed Double-Precision FP Sign Mask
10136 \c MOVMSKPD reg32,xmm ; 66 0F 50 /r [WILLAMETTE,SSE2]
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.
10142 \S{insMOVMSKPS} \i\c{MOVMSKPS}: Extract Packed Single-Precision FP Sign Mask
10144 \c MOVMSKPS reg32,xmm ; 0F 50 /r [KATMAI,SSE]
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.
10150 \S{insMOVNTDQ} \i\c{MOVNTDQ}: Move Double Quadword Non Temporal
10152 \c MOVNTDQ m128,xmm ; 66 0F E7 /r [WILLAMETTE,SSE2]
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.
10159 \S{insMOVNTI} \i\c{MOVNTI}: Move Doubleword Non Temporal
10161 \c MOVNTI m32,reg32 ; 0F C3 /r [WILLAMETTE,SSE2]
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.
10168 \S{insMOVNTPD} \i\c{MOVNTPD}: Move Aligned Four Packed Single-Precision
10169 FP Values Non Temporal
10171 \c MOVNTPD m128,xmm ; 66 0F 2B /r [WILLAMETTE,SSE2]
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.
10179 \S{insMOVNTPS} \i\c{MOVNTPS}: Move Aligned Four Packed Single-Precision
10180 FP Values Non Temporal
10182 \c MOVNTPS m128,xmm ; 0F 2B /r [KATMAI,SSE]
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.
10190 \S{insMOVNTQ} \i\c{MOVNTQ}: Move Quadword Non Temporal
10192 \c MOVNTQ m64,mm ; 0F E7 /r [KATMAI,MMX]
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.
10199 \S{insMOVQ} \i\c{MOVQ}: Move Quadword to/from MMX Register
10201 \c MOVQ mm1,mm2/m64 ; 0F 6F /r [PENT,MMX]
10202 \c MOVQ mm1/m64,mm2 ; 0F 7F /r [PENT,MMX]
10204 \c MOVQ xmm1,xmm2/m64 ; F3 0F 7E /r [WILLAMETTE,SSE2]
10205 \c MOVQ xmm1/m64,xmm2 ; 66 0F D6 /r [WILLAMETTE,SSE2]
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.
10213 \S{insMOVQ2DQ} \i\c{MOVQ2DQ}: Move Quadword from MMX to XMM register.
10215 \c MOVQ2DQ xmm,mm ; F3 OF D6 /r [WILLAMETTE,SSE2]
10217 \c{MOVQ2DQ} moves the quadword from the source operand to the low
10218 quadword of the destination operand, and clears the high quadword.
10221 \S{insMOVSB} \i\c{MOVSB}, \i\c{MOVSW}, \i\c{MOVSD}: Move String
10223 \c MOVSB ; A4 [8086]
10224 \c MOVSW ; o16 A5 [8086]
10225 \c MOVSD ; o32 A5 [386]
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}).
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.
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.
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.
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.
10250 \S{insMOVSD} \i\c{MOVSD}: Move Scalar Double-Precision FP Value
10252 \c MOVSD xmm1,xmm2/m64 ; F2 0F 10 /r [WILLAMETTE,SSE2]
10253 \c MOVSD xmm1/m64,xmm2 ; F2 0F 11 /r [WILLAMETTE,SSE2]
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.
10260 \S{insMOVSS} \i\c{MOVSS}: Move Scalar Single-Precision FP Value
10262 \c MOVSS xmm1,xmm2/m32 ; F3 0F 10 /r [KATMAI,SSE]
10263 \c MOVSS xmm1/m32,xmm2 ; F3 0F 11 /r [KATMAI,SSE]
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.
10270 \S{insMOVSX} \i\c{MOVSX}, \i\c{MOVZX}: Move Data with Sign or Zero Extend
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]
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]
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.
10286 \S{insMOVUPD} \i\c{MOVUPD}: Move Unaligned Packed Double-Precision FP Values
10288 \c MOVUPD xmm1,xmm2/mem128 ; 66 0F 10 /r [WILLAMETTE,SSE2]
10289 \c MOVUPD xmm1/mem128,xmm2 ; 66 0F 11 /r [WILLAMETTE,SSE2]
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.
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}).
10299 \S{insMOVUPS} \i\c{MOVUPS}: Move Unaligned Packed Single-Precision FP Values
10301 \c MOVUPS xmm1,xmm2/mem128 ; 0F 10 /r [KATMAI,SSE]
10302 \c MOVUPS xmm1/mem128,xmm2 ; 0F 11 /r [KATMAI,SSE]
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.
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}).
10312 \S{insMUL} \i\c{MUL}: Unsigned Integer Multiply
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]
10318 \c{MUL} performs unsigned integer multiplication. The other operand
10319 to the multiplication, and the destination operand, are implicit, in
10322 \b For \c{MUL r/m8}, \c{AL} is multiplied by the given operand; the
10323 product is stored in \c{AX}.
10325 \b For \c{MUL r/m16}, \c{AX} is multiplied by the given operand;
10326 the product is stored in \c{DX:AX}.
10328 \b For \c{MUL r/m32}, \c{EAX} is multiplied by the given operand;
10329 the product is stored in \c{EDX:EAX}.
10331 Signed integer multiplication is performed by the \c{IMUL}
10332 instruction: see \k{insIMUL}.
10335 \S{insMULPD} \i\c{MULPD}: Packed Single-FP Multiply
10337 \c MULPD xmm1,xmm2/mem128 ; 66 0F 59 /r [WILLAMETTE,SSE2]
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.
10343 \S{insMULPS} \i\c{MULPS}: Packed Single-FP Multiply
10345 \c MULPS xmm1,xmm2/mem128 ; 0F 59 /r [KATMAI,SSE]
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.
10351 \S{insMULSD} \i\c{MULSD}: Scalar Single-FP Multiply
10353 \c MULSD xmm1,xmm2/mem32 ; F2 0F 59 /r [WILLAMETTE,SSE2]
10355 \c{MULSD} multiplies the lowest double-precision FP values of both
10356 operands, and stores the result in the low quadword of xmm1.
10359 \S{insMULSS} \i\c{MULSS}: Scalar Single-FP Multiply
10361 \c MULSS xmm1,xmm2/mem32 ; F3 0F 59 /r [KATMAI,SSE]
10363 \c{MULSS} multiplies the lowest single-precision FP values of both
10364 operands, and stores the result in the low doubleword of xmm1.
10367 \S{insNEG} \i\c{NEG}, \i\c{NOT}: Two's and One's Complement
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]
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]
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
10383 \S{insNOP} \i\c{NOP}: No Operation
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}).
10392 \S{insOR} \i\c{OR}: Bitwise OR
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]
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]
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]
10406 \c OR r/m16,imm8 ; o16 83 /1 ib [8086]
10407 \c OR r/m32,imm8 ; o32 83 /1 ib [386]
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]
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.
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.
10424 The MMX instruction \c{POR} (see \k{insPOR}) performs the same
10425 operation on the 64-bit MMX registers.
10428 \S{insORPD} \i\c{ORPD}: Bit-wise Logical OR of Double-Precision FP Data
10430 \c ORPD xmm1,xmm2/m128 ; 66 0F 56 /r [WILLAMETTE,SSE2]
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.
10437 \S{insORPS} \i\c{ORPS}: Bit-wise Logical OR of Single-Precision FP Data
10439 \c ORPS xmm1,xmm2/m128 ; 0F 56 /r [KATMAI,SSE]
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.
10446 \S{insOUT} \i\c{OUT}: Output Data to I/O Port
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]
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}).
10461 \S{insOUTSB} \i\c{OUTSB}, \i\c{OUTSW}, \i\c{OUTSD}: Output String to I/O Port
10463 \c OUTSB ; 6E [186]
10464 \c OUTSW ; o16 6F [186]
10465 \c OUTSD ; o32 6F [386]
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}.
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.
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}).
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.
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.
10489 \S{insPACKSSDW} \i\c{PACKSSDW}, \i\c{PACKSSWB}, \i\c{PACKUSWB}: Pack Data
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]
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]
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.
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.
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
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.
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.
10524 \S{insPADDB} \i\c{PADDB}, \i\c{PADDW}, \i\c{PADDD}: Add Packed Integers
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]
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]
10534 \c{PADDx} performs packed addition of the two operands, storing the
10535 result in the destination (first) operand.
10537 \b \c{PADDB} treats the operands as packed bytes, and adds each byte
10540 \b \c{PADDW} treats the operands as packed words;
10542 \b \c{PADDD} treats its operands as packed doublewords.
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
10549 \S{insPADDQ} \i\c{PADDQ}: Add Packed Quadword Integers
10551 \c PADDQ mm1,mm2/m64 ; 0F D4 /r [PENT,MMX]
10553 \c PADDQ xmm1,xmm2/m128 ; 66 0F D4 /r [WILLAMETTE,SSE2]
10555 \c{PADDQ} adds the quadwords in the source and destination operands, and
10556 stores the result in the destination register.
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
10563 \S{insPADDSB} \i\c{PADDSB}, \i\c{PADDSW}: Add Packed Signed Integers With Saturation
10565 \c PADDSB mm1,mm2/m64 ; 0F EC /r [PENT,MMX]
10566 \c PADDSW mm1,mm2/m64 ; 0F ED /r [PENT,MMX]
10568 \c PADDSB xmm1,xmm2/m128 ; 66 0F EC /r [WILLAMETTE,SSE2]
10569 \c PADDSW xmm1,xmm2/m128 ; 66 0F ED /r [WILLAMETTE,SSE2]
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.
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.
10582 \S{insPADDSIW} \i\c{PADDSIW}: MMX Packed Addition to Implicit Destination
10584 \c PADDSIW mmxreg,r/m64 ; 0F 51 /r [CYRIX,MMX]
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.
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}.
10595 \S{insPADDUSB} \i\c{PADDUSB}, \i\c{PADDUSW}: Add Packed Unsigned Integers With Saturation
10597 \c PADDUSB mm1,mm2/m64 ; 0F DC /r [PENT,MMX]
10598 \c PADDUSW mm1,mm2/m64 ; 0F DD /r [PENT,MMX]
10600 \c PADDUSB xmm1,xmm2/m128 ; 66 0F DC /r [WILLAMETTE,SSE2]
10601 \c PADDUSW xmm1,xmm2/m128 ; 66 0F DD /r [WILLAMETTE,SSE2]
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.
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.
10613 \S{insPAND} \i\c{PAND}, \i\c{PANDN}: MMX Bitwise AND and AND-NOT
10615 \c PAND mm1,mm2/m64 ; 0F DB /r [PENT,MMX]
10616 \c PANDN mm1,mm2/m64 ; 0F DF /r [PENT,MMX]
10618 \c PAND xmm1,xmm2/m128 ; 66 0F DB /r [WILLAMETTE,SSE2]
10619 \c PANDN xmm1,xmm2/m128 ; 66 0F DF /r [WILLAMETTE,SSE2]
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.
10627 \c{PANDN} performs the same operation, but performs a one's
10628 complement operation on the destination (first) operand first.
10631 \S{insPAUSE} \i\c{PAUSE}: Spin Loop Hint
10633 \c PAUSE ; F3 90 [WILLAMETTE,SSE2]
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}.
10641 \S{insPAVEB} \i\c{PAVEB}: MMX Packed Average
10643 \c PAVEB mmxreg,r/m64 ; 0F 50 /r [CYRIX,MMX]
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.
10650 This opcode maps to \c{MOVMSKPS r32, xmm} on processors that support
10651 the SSE instruction set.
10654 \S{insPAVGB} \i\c{PAVGB} \i\c{PAVGW}: Average Packed Integers
10656 \c PAVGB mm1,mm2/m64 ; 0F E0 /r [KATMAI,MMX]
10657 \c PAVGW mm1,mm2/m64 ; 0F E3 /r [KATMAI,MMX,SM]
10659 \c PAVGB xmm1,xmm2/m128 ; 66 0F E0 /r [WILLAMETTE,SSE2]
10660 \c PAVGW xmm1,xmm2/m128 ; 66 0F E3 /r [WILLAMETTE,SSE2]
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
10669 \b \c{PAVGB} operates on packed unsigned bytes, and
10671 \b \c{PAVGW} operates on packed unsigned words.
10674 \S{insPAVGUSB} \i\c{PAVGUSB}: Average of unsigned packed 8-bit values
10676 \c PAVGUSB mm1,mm2/m64 ; 0F 0F /r BF [PENT,3DNOW]
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
10685 This instruction performs exactly the same operations as the \c{PAVGB}
10686 \c{MMX} instruction (\k{insPAVGB}).
10689 \S{insPCMPEQB} \i\c{PCMPxx}: Compare Packed Integers.
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]
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]
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]
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]
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.
10713 \b \c{PCMPxxB} treats the operands as vectors of bytes;
10715 \b \c{PCMPxxW} treats the operands as vectors of words;
10717 \b \c{PCMPxxD} treats the operands as vectors of doublewords;
10719 \b \c{PCMPEQx} sets the corresponding element of the destination
10720 operand to all ones if the two elements compared are equal;
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.
10727 \S{insPDISTIB} \i\c{PDISTIB}: MMX Packed Distance and Accumulate
10728 with Implied Register
10730 \c PDISTIB mm,m64 ; 0F 54 /r [CYRIX,MMX]
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}.
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}.
10743 Note that \c{PDISTIB} cannot take a register as its second source
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]),
10752 \c dstI[56-63] := dstI[56-63] + ABS(src0[56-63] - src1[56-63]).
10755 \S{insPEXTRW} \i\c{PEXTRW}: Extract Word
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]
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.
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
10771 \S{insPF2ID} \i\c{PF2ID}: Packed Single-Precision FP to Integer Convert
10773 \c PF2ID mm1,mm2/m64 ; 0F 0F /r 1D [PENT,3DNOW]
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
10782 \S{insPF2IW} \i\c{PF2IW}: Packed Single-Precision FP to Integer Word Convert
10784 \c PF2IW mm1,mm2/m64 ; 0F 0F /r 1C [PENT,3DNOW]
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
10792 \b In the K6-2 and K6-III, the 16-bit value is zero-extended to 32-bits
10795 \b In the K6-2+, K6-III+ and Athlon processors, the value is sign-extended
10796 to 32-bits before storing.
10799 \S{insPFACC} \i\c{PFACC}: Packed Single-Precision FP Accumulate
10801 \c PFACC mm1,mm2/m64 ; 0F 0F /r AE [PENT,3DNOW]
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.
10810 \c dst[0-31] := dst[0-31] + dst[32-63],
10811 \c dst[32-63] := src[0-31] + src[32-63].
10814 \S{insPFADD} \i\c{PFADD}: Packed Single-Precision FP Addition
10816 \c PFADD mm1,mm2/m64 ; 0F 0F /r 9E [PENT,3DNOW]
10818 \c{PFADD} performs addition on each of two packed single-precision
10821 \c dst[0-31] := dst[0-31] + src[0-31],
10822 \c dst[32-63] := dst[32-63] + src[32-63].
10825 \S{insPFCMP} \i\c{PFCMPxx}: Packed Single-Precision FP Compare
10826 \I\c{PFCMPEQ} \I\c{PFCMPGE} \I\c{PFCMPGT}
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]
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.
10837 \b \c{PFCMPEQ} tests whether dst == src;
10839 \b \c{PFCMPGE} tests whether dst >= src;
10841 \b \c{PFCMPGT} tests whether dst > src.
10844 \S{insPFMAX} \i\c{PFMAX}: Packed Single-Precision FP Maximum
10846 \c PFMAX mm1,mm2/m64 ; 0F 0F /r A4 [PENT,3DNOW]
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.
10852 \S{insPFMIN} \i\c{PFMIN}: Packed Single-Precision FP Minimum
10854 \c PFMIN mm1,mm2/m64 ; 0F 0F /r 94 [PENT,3DNOW]
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.
10860 \S{insPFMUL} \i\c{PFMUL}: Packed Single-Precision FP Multiply
10862 \c PFMUL mm1,mm2/m64 ; 0F 0F /r B4 [PENT,3DNOW]
10864 \c{PFMUL} returns the product of each pair of single-precision FP values.
10866 \c dst[0-31] := dst[0-31] * src[0-31],
10867 \c dst[32-63] := dst[32-63] * src[32-63].
10870 \S{insPFNACC} \i\c{PFNACC}: Packed Single-Precision FP Negative Accumulate
10872 \c PFNACC mm1,mm2/m64 ; 0F 0F /r 8A [PENT,3DNOW]
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.
10882 \c dst[0-31] := dst[0-31] - dst[32-63],
10883 \c dst[32-63] := src[0-31] - src[32-63].
10886 \S{insPFPNACC} \i\c{PFPNACC}: Packed Single-Precision FP Mixed Accumulate
10888 \c PFPNACC mm1,mm2/m64 ; 0F 0F /r 8E [PENT,3DNOW]
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.
10899 \c dst[0-31] := dst[0-31] - dst[32-63],
10900 \c dst[32-63] := src[0-31] + src[32-63].
10903 \S{insPFRCP} \i\c{PFRCP}: Packed Single-Precision FP Reciprocal Approximation
10905 \c PFRCP mm1,mm2/m64 ; 0F 0F /r 96 [PENT,3DNOW]
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
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.
10918 \S{insPFRCPIT1} \i\c{PFRCPIT1}: Packed Single-Precision FP Reciprocal,
10919 First Iteration Step
10921 \c PFRCPIT1 mm1,mm2/m64 ; 0F 0F /r A6 [PENT,3DNOW]
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.
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.
10933 \S{insPFRCPIT2} \i\c{PFRCPIT2}: Packed Single-Precision FP
10934 Reciprocal/ Reciprocal Square Root, Second Iteration Step
10936 \c PFRCPIT2 mm1,mm2/m64 ; 0F 0F /r B6 [PENT,3DNOW]
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,
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.
10949 \S{insPFRSQIT1} \i\c{PFRSQIT1}: Packed Single-Precision FP Reciprocal
10950 Square Root, First Iteration Step
10952 \c PFRSQIT1 mm1,mm2/m64 ; 0F 0F /r A7 [PENT,3DNOW]
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
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.
10965 \S{insPFRSQRT} \i\c{PFRSQRT}: Packed Single-Precision FP Reciprocal
10966 Square Root Approximation
10968 \c PFRSQRT mm1,mm2/m64 ; 0F 0F /r 97 [PENT,3DNOW]
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.
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.
10981 \S{insPFSUB} \i\c{PFSUB}: Packed Single-Precision FP Subtract
10983 \c PFSUB mm1,mm2/m64 ; 0F 0F /r 9A [PENT,3DNOW]
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
10989 \c dst[0-31] := dst[0-31] - src[0-31],
10990 \c dst[32-63] := dst[32-63] - src[32-63].
10993 \S{insPFSUBR} \i\c{PFSUBR}: Packed Single-Precision FP Reverse Subtract
10995 \c PFSUBR mm1,mm2/m64 ; 0F 0F /r AA [PENT,3DNOW]
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
11001 \c dst[0-31] := src[0-31] - dst[0-31],
11002 \c dst[32-63] := src[32-63] - dst[32-63].
11005 \S{insPI2FD} \i\c{PI2FD}: Packed Doubleword Integer to Single-Precision FP Convert
11007 \c PI2FD mm1,mm2/m64 ; 0F 0F /r 0D [PENT,3DNOW]
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.
11014 \S{insPF2IW} \i\c{PF2IW}: Packed Word Integer to Single-Precision FP Convert
11016 \c PI2FW mm1,mm2/m64 ; 0F 0F /r 0C [PENT,3DNOW]
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.
11023 \S{insPINSRW} \i\c{PINSRW}: Insert Word
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]
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.
11037 \S{insPMACHRIW} \i\c{PMACHRIW}: Packed Multiply and Accumulate with Rounding
11039 \c PMACHRIW mm,m64 ; 0F 5E /r [CYRIX,MMX]
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.
11046 The operation of this instruction is:
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].
11057 Note that \c{PMACHRIW} cannot take a register as its second source
11061 \S{insPMADDWD} \i\c{PMADDWD}: MMX Packed Multiply and Add
11063 \c PMADDWD mm1,mm2/m64 ; 0F F5 /r [PENT,MMX]
11064 \c PMADDWD xmm1,xmm2/m128 ; 66 0F F5 /r [WILLAMETTE,SSE2]
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.
11071 The operation of this instruction is:
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]);
11078 The following apply to the \c{SSE} version of the instruction:
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]).
11086 \S{insPMAGW} \i\c{PMAGW}: MMX Packed Magnitude
11088 \c PMAGW mm1,mm2/m64 ; 0F 52 /r [CYRIX,MMX]
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.
11097 \S{insPMAXSW} \i\c{PMAXSW}: Packed Signed Integer Word Maximum
11099 \c PMAXSW mm1,mm2/m64 ; 0F EE /r [KATMAI,MMX]
11100 \c PMAXSW xmm1,xmm2/m128 ; 66 0F EE /r [WILLAMETTE,SSE2]
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.
11106 \S{insPMAXUB} \i\c{PMAXUB}: Packed Unsigned Integer Byte Maximum
11108 \c PMAXUB mm1,mm2/m64 ; 0F DE /r [KATMAI,MMX]
11109 \c PMAXUB xmm1,xmm2/m128 ; 66 0F DE /r [WILLAMETTE,SSE2]
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.
11115 \S{insPMINSW} \i\c{PMINSW}: Packed Signed Integer Word Minimum
11117 \c PMINSW mm1,mm2/m64 ; 0F EA /r [KATMAI,MMX]
11118 \c PMINSW xmm1,xmm2/m128 ; 66 0F EA /r [WILLAMETTE,SSE2]
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.
11124 \S{insPMINUB} \i\c{PMINUB}: Packed Unsigned Integer Byte Minimum
11126 \c PMINUB mm1,mm2/m64 ; 0F DA /r [KATMAI,MMX]
11127 \c PMINUB xmm1,xmm2/m128 ; 66 0F DA /r [WILLAMETTE,SSE2]
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.
11133 \S{insPMOVMSKB} \i\c{PMOVMSKB}: Move Byte Mask To Integer
11135 \c PMOVMSKB reg32,mm ; 0F D7 /r [KATMAI,MMX]
11136 \c PMOVMSKB reg32,xmm ; 66 0F D7 /r [WILLAMETTE,SSE2]
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).
11143 \S{insPMULHRW} \i\c{PMULHRWC}, \i\c{PMULHRIW}: Multiply Packed 16-bit Integers
11144 With Rounding, and Store High Word
11146 \c PMULHRWC mm1,mm2/m64 ; 0F 59 /r [CYRIX,MMX]
11147 \c PMULHRIW mm1,mm2/m64 ; 0F 5D /r [CYRIX,MMX]
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
11154 \b For \c{PMULHRWC}, the destination is the first source operand.
11156 \b For \c{PMULHRIW}, the destination is an implied register (worked out
11157 as described for \c{PADDSIW} (\k{insPADDSIW})).
11159 The operation of this instruction is:
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]
11166 See also \c{PMULHRWA} (\k{insPMULHRWA}) for a 3DNow! version of this
11170 \S{insPMULHRWA} \i\c{PMULHRWA}: Multiply Packed 16-bit Integers
11171 With Rounding, and Store High Word
11173 \c PMULHRWA mm1,mm2/m64 ; 0F 0F /r B7 [PENT,3DNOW]
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.
11180 The operation of this instruction is:
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].
11187 See also \c{PMULHRWC} (\k{insPMULHRW}) for a Cyrix version of this
11191 \S{insPMULHUW} \i\c{PMULHUW}: Multiply Packed 16-bit Integers,
11192 and Store High Word
11194 \c PMULHUW mm1,mm2/m64 ; 0F E4 /r [KATMAI,MMX]
11195 \c PMULHUW xmm1,xmm2/m128 ; 66 0F E4 /r [WILLAMETTE,SSE2]
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.
11202 \S{insPMULHW} \i\c{PMULHW}, \i\c{PMULLW}: Multiply Packed 16-bit Integers,
11205 \c PMULHW mm1,mm2/m64 ; 0F E5 /r [PENT,MMX]
11206 \c PMULLW mm1,mm2/m64 ; 0F D5 /r [PENT,MMX]
11208 \c PMULHW xmm1,xmm2/m128 ; 66 0F E5 /r [WILLAMETTE,SSE2]
11209 \c PMULLW xmm1,xmm2/m128 ; 66 0F D5 /r [WILLAMETTE,SSE2]
11211 \c{PMULxW} takes two packed unsigned 16-bit integer inputs, and
11212 multiplies the values in the inputs, forming doubleword results.
11214 \b \c{PMULHW} then stores the top 16 bits of each doubleword in the
11215 destination (first) operand;
11217 \b \c{PMULLW} stores the bottom 16 bits of each doubleword in the
11218 destination operand.
11221 \S{insPMULUDQ} \i\c{PMULUDQ}: Multiply Packed Unsigned
11222 32-bit Integers, and Store.
11224 \c PMULUDQ mm1,mm2/m64 ; 0F F4 /r [WILLAMETTE,SSE2]
11225 \c PMULUDQ xmm1,xmm2/m128 ; 66 0F F4 /r [WILLAMETTE,SSE2]
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.
11237 \c dst[0-63] := dst[0-31] * src[0-31];
11238 \c dst[64-127] := dst[64-95] * src[64-95].
11241 \S{insPMVccZB} \i\c{PMVccZB}: MMX Packed Conditional Move
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]
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
11256 \b \c{PMVZB} performs each move if the corresponding byte in the
11257 implied operand is zero;
11259 \b \c{PMVNZB} moves if the byte is non-zero;
11261 \b \c{PMVLZB} moves if the byte is less than zero;
11263 \b \c{PMVGEZB} moves if the byte is greater than or equal to zero.
11265 Note that these instructions cannot take a register as their second
11269 \S{insPOP} \i\c{POP}: Pop Data from Stack
11271 \c POP reg16 ; o16 58+r [8086]
11272 \c POP reg32 ; o32 58+r [386]
11274 \c POP r/m16 ; o16 8F /0 [8086]
11275 \c POP r/m32 ; o32 8F /0 [386]
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]
11284 \c{POP} loads a value from the stack (from \c{[SS:SP]} or
11285 \c{[SS:ESP]}) and then increments the stack pointer.
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.
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.
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.
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.
11309 \S{insPOPA} \i\c{POPAx}: Pop All General-Purpose Registers
11312 \c POPAW ; o16 61 [186]
11313 \c POPAD ; o32 61 [386]
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}.
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
11327 \c{POPA} is an alias mnemonic for either \c{POPAW} or \c{POPAD},
11328 depending on the current \c{BITS} setting.
11330 Note that the registers are popped in reverse order of their numeric
11331 values in opcodes (see \k{iref-rv}).
11334 \S{insPOPF} \i\c{POPFx}: Pop Flags Register
11336 \c POPF ; 9D [8086]
11337 \c POPFW ; o16 9D [8086]
11338 \c POPFD ; o32 9D [386]
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).
11344 \b \c{POPFD} pops a doubleword and stores it in the entire flags register.
11346 \c{POPF} is an alias mnemonic for either \c{POPFW} or \c{POPFD},
11347 depending on the current \c{BITS} setting.
11349 See also \c{PUSHF} (\k{insPUSHF}).
11352 \S{insPOR} \i\c{POR}: MMX Bitwise OR
11354 \c POR mm1,mm2/m64 ; 0F EB /r [PENT,MMX]
11355 \c POR xmm1,xmm2/m128 ; 66 0F EB /r [WILLAMETTE,SSE2]
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.
11363 \S{insPREFETCH} \i\c{PREFETCH}: Prefetch Data Into Caches
11365 \c PREFETCH mem8 ; 0F 0D /0 [PENT,3DNOW]
11366 \c PREFETCHW mem8 ; 0F 0D /1 [PENT,3DNOW]
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.
11372 For more details, see the 3DNow! Technology Manual.
11375 \S{insPREFETCHh} \i\c{PREFETCHh}: Prefetch Data Into Caches
11376 \I\c{PREFETCHNTA} \I\c{PREFETCHT0} \I\c{PREFETCHT1} \I\c{PREFETCHT2}
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]
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}:
11389 \b \c{T0} (temporal data) - prefetch data into all levels of the
11392 \b \c{T1} (temporal data with respect to first level cache) -
11393 prefetch data into level 2 cache and higher.
11395 \b \c{T2} (temporal data with respect to second level cache) -
11396 prefetch data into level 2 cache and higher.
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.
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.
11407 \S{insPSADBW} \i\c{PSADBW}: Packed Sum of Absolute Differences
11409 \c PSADBW mm1,mm2/m64 ; 0F F6 /r [KATMAI,MMX]
11410 \c PSADBW xmm1,xmm2/m128 ; 66 0F F6 /r [WILLAMETTE,SSE2]
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.
11420 \S{insPSHUFD} \i\c{PSHUFD}: Shuffle Packed Doublewords
11422 \c PSHUFD xmm1,xmm2/m128,imm8 ; 66 0F 70 /r ib [WILLAMETTE,SSE2]
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.
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.
11436 \S{insPSHUFHW} \i\c{PSHUFHW}: Shuffle Packed High Words
11438 \c PSHUFHW xmm1,xmm2/m128,imm8 ; F3 0F 70 /r ib [WILLAMETTE,SSE2]
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)
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.
11452 \S{insPSHUFLW} \i\c{PSHUFLW}: Shuffle Packed Low Words
11454 \c PSHUFLW xmm1,xmm2/m128,imm8 ; F2 0F 70 /r ib [WILLAMETTE,SSE2]
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)
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.
11468 \S{insPSHUFW} \i\c{PSHUFW}: Shuffle Packed Words
11470 \c PSHUFW mm1,mm2/m64,imm8 ; 0F 70 /r ib [KATMAI,MMX]
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.
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.
11484 \S{insPSLLD} \i\c{PSLLx}: Packed Data Bit Shift Left Logical
11486 \c PSLLW mm1,mm2/m64 ; 0F F1 /r [PENT,MMX]
11487 \c PSLLW mm,imm8 ; 0F 71 /6 ib [PENT,MMX]
11489 \c PSLLW xmm1,xmm2/m128 ; 66 0F F1 /r [WILLAMETTE,SSE2]
11490 \c PSLLW xmm,imm8 ; 66 0F 71 /6 ib [WILLAMETTE,SSE2]
11492 \c PSLLD mm1,mm2/m64 ; 0F F2 /r [PENT,MMX]
11493 \c PSLLD mm,imm8 ; 0F 72 /6 ib [PENT,MMX]
11495 \c PSLLD xmm1,xmm2/m128 ; 66 0F F2 /r [WILLAMETTE,SSE2]
11496 \c PSLLD xmm,imm8 ; 66 0F 72 /6 ib [WILLAMETTE,SSE2]
11498 \c PSLLQ mm1,mm2/m64 ; 0F F3 /r [PENT,MMX]
11499 \c PSLLQ mm,imm8 ; 0F 73 /6 ib [PENT,MMX]
11501 \c PSLLQ xmm1,xmm2/m128 ; 66 0F F3 /r [WILLAMETTE,SSE2]
11502 \c PSLLQ xmm,imm8 ; 66 0F 73 /6 ib [WILLAMETTE,SSE2]
11504 \c PSLLDQ xmm1,imm8 ; 66 0F 73 /7 ib [PENT,MMX]
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.
11511 \b \c{PSLLW} shifts word sized elements.
11513 \b \c{PSLLD} shifts doubleword sized elements.
11515 \b \c{PSLLQ} shifts quadword sized elements.
11517 \b \c{PSLLDQ} shifts double quadword sized elements.
11520 \S{insPSRAD} \i\c{PSRAx}: Packed Data Bit Shift Right Arithmetic
11522 \c PSRAW mm1,mm2/m64 ; 0F E1 /r [PENT,MMX]
11523 \c PSRAW mm,imm8 ; 0F 71 /4 ib [PENT,MMX]
11525 \c PSRAW xmm1,xmm2/m128 ; 66 0F E1 /r [WILLAMETTE,SSE2]
11526 \c PSRAW xmm,imm8 ; 66 0F 71 /4 ib [WILLAMETTE,SSE2]
11528 \c PSRAD mm1,mm2/m64 ; 0F E2 /r [PENT,MMX]
11529 \c PSRAD mm,imm8 ; 0F 72 /4 ib [PENT,MMX]
11531 \c PSRAD xmm1,xmm2/m128 ; 66 0F E2 /r [WILLAMETTE,SSE2]
11532 \c PSRAD xmm,imm8 ; 66 0F 72 /4 ib [WILLAMETTE,SSE2]
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.
11539 \b \c{PSRAW} shifts word sized elements.
11541 \b \c{PSRAD} shifts doubleword sized elements.
11544 \S{insPSRLD} \i\c{PSRLx}: Packed Data Bit Shift Right Logical
11546 \c PSRLW mm1,mm2/m64 ; 0F D1 /r [PENT,MMX]
11547 \c PSRLW mm,imm8 ; 0F 71 /2 ib [PENT,MMX]
11549 \c PSRLW xmm1,xmm2/m128 ; 66 0F D1 /r [WILLAMETTE,SSE2]
11550 \c PSRLW xmm,imm8 ; 66 0F 71 /2 ib [WILLAMETTE,SSE2]
11552 \c PSRLD mm1,mm2/m64 ; 0F D2 /r [PENT,MMX]
11553 \c PSRLD mm,imm8 ; 0F 72 /2 ib [PENT,MMX]
11555 \c PSRLD xmm1,xmm2/m128 ; 66 0F D2 /r [WILLAMETTE,SSE2]
11556 \c PSRLD xmm,imm8 ; 66 0F 72 /2 ib [WILLAMETTE,SSE2]
11558 \c PSRLQ mm1,mm2/m64 ; 0F D3 /r [PENT,MMX]
11559 \c PSRLQ mm,imm8 ; 0F 73 /2 ib [PENT,MMX]
11561 \c PSRLQ xmm1,xmm2/m128 ; 66 0F D3 /r [WILLAMETTE,SSE2]
11562 \c PSRLQ xmm,imm8 ; 66 0F 73 /2 ib [WILLAMETTE,SSE2]
11564 \c PSRLDQ xmm1,imm8 ; 66 0F 73 /3 ib [WILLAMETTE,SSE2]
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.
11571 \b \c{PSRLW} shifts word sized elements.
11573 \b \c{PSRLD} shifts doubleword sized elements.
11575 \b \c{PSRLQ} shifts quadword sized elements.
11577 \b \c{PSRLDQ} shifts double quadword sized elements.
11580 \S{insPSUBB} \i\c{PSUBx}: Subtract Packed Integers
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]
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]
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.
11596 \b \c{PSUBB} operates on byte sized elements.
11598 \b \c{PSUBW} operates on word sized elements.
11600 \b \c{PSUBD} operates on doubleword sized elements.
11602 \b \c{PSUBQ} operates on quadword sized elements.
11605 \S{insPSUBSB} \i\c{PSUBSxx}, \i\c{PSUBUSx}: Subtract Packed Integers With Saturation
11607 \c PSUBSB mm1,mm2/m64 ; 0F E8 /r [PENT,MMX]
11608 \c PSUBSW mm1,mm2/m64 ; 0F E9 /r [PENT,MMX]
11610 \c PSUBSB xmm1,xmm2/m128 ; 66 0F E8 /r [WILLAMETTE,SSE2]
11611 \c PSUBSW xmm1,xmm2/m128 ; 66 0F E9 /r [WILLAMETTE,SSE2]
11613 \c PSUBUSB mm1,mm2/m64 ; 0F D8 /r [PENT,MMX]
11614 \c PSUBUSW mm1,mm2/m64 ; 0F D9 /r [PENT,MMX]
11616 \c PSUBUSB xmm1,xmm2/m128 ; 66 0F D8 /r [WILLAMETTE,SSE2]
11617 \c PSUBUSW xmm1,xmm2/m128 ; 66 0F D9 /r [WILLAMETTE,SSE2]
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.
11623 \b \c{PSUBSB} operates on signed bytes, and uses signed saturation on the
11626 \b \c{PSUBSW} operates on signed words, and uses signed saturation on the
11629 \b \c{PSUBUSB} operates on unsigned bytes, and uses signed saturation on
11632 \b \c{PSUBUSW} operates on unsigned words, and uses signed saturation on
11636 \S{insPSUBSIW} \i\c{PSUBSIW}: MMX Packed Subtract with Saturation to
11637 Implied Destination
11639 \c PSUBSIW mm1,mm2/m64 ; 0F 55 /r [CYRIX,MMX]
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}).
11648 \S{insPSWAPD} \i\c{PSWAPD}: Swap Packed Data
11651 \c PSWAPD mm1,mm2/m64 ; 0F 0F /r BB [PENT,3DNOW]
11653 \c{PSWAPD} swaps the packed doublewords in the source operand, and
11654 stores the result in the destination operand.
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.
11660 The operation in the \c{K6-2} and \c{K6-III} processors is
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].
11667 The operation in the \c{K6-x+}, \c{ATHLON} and later processors is:
11669 \c dst[0-31] = src[32-63];
11670 \c dst[32-63] = src[0-31].
11673 \S{insPUNPCKHBW} \i\c{PUNPCKxxx}: Unpack and Interleave Data
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]
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]
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]
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]
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
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
11705 \b \c{PUNPCKxBW} works a byte at a time, producing word sized output
11708 \b \c{PUNPCKxWD} works a word at a time, producing doubleword sized
11711 \b \c{PUNPCKxDQ} works a doubleword at a time, producing quadword sized
11714 \b \c{PUNPCKxQDQ} works a quadword at a time, producing double quadword
11715 sized output elements.
11717 So, for example, for \c{MMX} operands, if the first operand held
11718 \c{0x7A6A5A4A3A2A1A0A} and the second held \c{0x7B6B5B4B3B2B1B0B},
11721 \b \c{PUNPCKHBW} would return \c{0x7B7A6B6A5B5A4B4A}.
11723 \b \c{PUNPCKHWD} would return \c{0x7B6B7A6A5B4B5A4A}.
11725 \b \c{PUNPCKHDQ} would return \c{0x7B6B5B4B7A6A5A4A}.
11727 \b \c{PUNPCKLBW} would return \c{0x3B3A2B2A1B1A0B0A}.
11729 \b \c{PUNPCKLWD} would return \c{0x3B2B3A2A1B0B1A0A}.
11731 \b \c{PUNPCKLDQ} would return \c{0x3B2B1B0B3A2A1A0A}.
11734 \S{insPUSH} \i\c{PUSH}: Push Data on Stack
11736 \c PUSH reg16 ; o16 50+r [8086]
11737 \c PUSH reg32 ; o32 50+r [386]
11739 \c PUSH r/m16 ; o16 FF /6 [8086]
11740 \c PUSH r/m32 ; o32 FF /6 [386]
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]
11749 \c PUSH imm8 ; 6A ib [186]
11750 \c PUSH imm16 ; o16 68 iw [186]
11751 \c PUSH imm32 ; o32 68 id [386]
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]}.
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.
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.
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.
11772 Unlike the undocumented and barely supported \c{POP CS}, \c{PUSH CS}
11773 is a perfectly valid and sensible instruction, supported on all
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.
11782 \S{insPUSHA} \i\c{PUSHAx}: Push All General-Purpose Registers
11784 \c PUSHA ; 60 [186]
11785 \c PUSHAD ; o32 60 [386]
11786 \c PUSHAW ; o16 60 [186]
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.
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.
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.
11799 \c{PUSHA} is an alias mnemonic for either \c{PUSHAW} or \c{PUSHAD},
11800 depending on the current \c{BITS} setting.
11802 Note that the registers are pushed in order of their numeric values
11803 in opcodes (see \k{iref-rv}).
11805 See also \c{POPA} (\k{insPOPA}).
11808 \S{insPUSHF} \i\c{PUSHFx}: Push Flags Register
11810 \c PUSHF ; 9C [8086]
11811 \c PUSHFD ; o32 9C [386]
11812 \c PUSHFW ; o16 9C [8086]
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).
11818 \b \c{PUSHFD} pops a doubleword and stores it in the entire flags
11821 \c{PUSHF} is an alias mnemonic for either \c{PUSHFW} or \c{PUSHFD},
11822 depending on the current \c{BITS} setting.
11824 See also \c{POPF} (\k{insPOPF}).
11827 \S{insPXOR} \i\c{PXOR}: MMX Bitwise XOR
11829 \c PXOR mm1,mm2/m64 ; 0F EF /r [PENT,MMX]
11830 \c PXOR xmm1,xmm2/m128 ; 66 0F EF /r [WILLAMETTE,SSE2]
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.
11838 \S{insRCL} \i\c{RCL}, \i\c{RCR}: Bitwise Rotate through Carry Bit
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]
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]
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
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.
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}.
11877 \S{insRCPPS} \i\c{RCPPS}: Packed Single-Precision FP Reciprocal
11879 \c RCPPS xmm1,xmm2/m128 ; 0F 53 /r [KATMAI,SSE]
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
11886 \S{insRCPSS} \i\c{RCPSS}: Scalar Single-Precision FP Reciprocal
11888 \c RCPSS xmm1,xmm2/m128 ; F3 0F 53 /r [KATMAI,SSE]
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
11896 \S{insRDMSR} \i\c{RDMSR}: Read Model-Specific Registers
11898 \c RDMSR ; 0F 32 [PENT,PRIV]
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}).
11905 \S{insRDPMC} \i\c{RDPMC}: Read Performance-Monitoring Counters
11907 \c RDPMC ; 0F 33 [P6]
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}.
11912 This instruction is available on P6 and later processors and on MMX
11916 \S{insRDSHR} \i\c{RDSHR}: Read SMM Header Pointer Register
11918 \c RDSHR r/m32 ; 0F 36 /0 [386,CYRIX,SMM]
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.
11924 See also \c{WRSHR} (\k{insWRSHR}).
11927 \S{insRDTSC} \i\c{RDTSC}: Read Time-Stamp Counter
11929 \c RDTSC ; 0F 31 [PENT]
11931 \c{RDTSC} reads the processor's time-stamp counter into \c{EDX:EAX}.
11934 \S{insRET} \i\c{RET}, \i\c{RETF}, \i\c{RETN}: Return from Procedure Call
11937 \c RET imm16 ; C2 iw [8086]
11939 \c RETF ; CB [8086]
11940 \c RETF imm16 ; CA iw [8086]
11942 \c RETN ; C3 [8086]
11943 \c RETN imm16 ; C2 iw [8086]
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.
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.
11955 \S{insROL} \i\c{ROL}, \i\c{ROR}: Bitwise Rotate
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]
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]
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.
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
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}.
11992 \S{insRSDC} \i\c{RSDC}: Restore Segment Register and Descriptor
11994 \c RSDC segreg,m80 ; 0F 79 /r [486,CYRIX,SMM]
11996 \c{RSDC} restores a segment register (DS, ES, FS, GS, or SS) from mem80,
11997 and sets up its descriptor.
12000 \S{insRSLDT} \i\c{RSLDT}: Restore Segment Register and Descriptor
12002 \c RSLDT m80 ; 0F 7B /0 [486,CYRIX,SMM]
12004 \c{RSLDT} restores the Local Descriptor Table (LDTR) from mem80.
12007 \S{insRSM} \i\c{RSM}: Resume from System-Management Mode
12009 \c RSM ; 0F AA [PENT]
12011 \c{RSM} returns the processor to its normal operating mode when it
12012 was in System-Management Mode.
12015 \S{insRSQRTPS} \i\c{RSQRTPS}: Packed Single-Precision FP Square Root Reciprocal
12017 \c RSQRTPS xmm1,xmm2/m128 ; 0F 52 /r [KATMAI,SSE]
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
12025 \S{insRSQRTSS} \i\c{RSQRTSS}: Scalar Single-Precision FP Square Root Reciprocal
12027 \c RSQRTSS xmm1,xmm2/m128 ; F3 0F 52 /r [KATMAI,SSE]
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
12036 \S{insRSTS} \i\c{RSTS}: Restore TSR and Descriptor
12038 \c RSTS m80 ; 0F 7D /0 [486,CYRIX,SMM]
12040 \c{RSTS} restores Task State Register (TSR) from mem80.
12043 \S{insSAHF} \i\c{SAHF}: Store AH to Flags
12045 \c SAHF ; 9E [8086]
12047 \c{SAHF} sets the low byte of the flags word according to the
12048 contents of the \c{AH} register.
12050 The operation of \c{SAHF} is:
12052 \c AH --> SF:ZF:0:AF:0:PF:1:CF
12054 See also \c{LAHF} (\k{insLAHF}).
12057 \S{insSAL} \i\c{SAL}, \i\c{SAR}: Bitwise Arithmetic Shifts
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]
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]
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}.
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}.
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
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}.
12097 \S{insSALC} \i\c{SALC}: Set AL from Carry Flag
12099 \c SALC ; D6 [8086,UNDOC]
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.
12106 \S{insSBB} \i\c{SBB}: Subtract with Borrow
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]
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]
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]
12120 \c SBB r/m16,imm8 ; o16 83 /3 ib [8086]
12121 \c SBB r/m32,imm8 ; o32 83 /3 ib [386]
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]
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}
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.
12140 To subtract one number from another without also subtracting the
12141 contents of the carry flag, use \c{SUB} (\k{insSUB}).
12144 \S{insSCASB} \i\c{SCASB}, \i\c{SCASW}, \i\c{SCASD}: Scan String
12146 \c SCASB ; AE [8086]
12147 \c SCASW ; o16 AF [8086]
12148 \c SCASD ; o32 AF [386]
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}).
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.
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
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
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.
12175 \S{insSETcc} \i\c{SETcc}: Set Register from Condition
12177 \c SETcc r/m8 ; 0F 90+cc /2 [386]
12179 \c{SETcc} sets the given 8-bit operand to zero if its condition is
12180 not satisfied, and to 1 if it is.
12183 \S{insSFENCE} \i\c{SFENCE}: Store Fence
12185 \c SFENCE ; 0F AE /7 [KATMAI]
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.
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}).
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.
12204 \c{SFENCE} uses the following ModRM encoding:
12207 \c Reg/Opcode (5:3) = 111B
12208 \c R/M (2:0) = 000B
12210 All other ModRM encodings are defined to be reserved, and use
12211 of these encodings risks incompatibility with future processors.
12213 See also \c{LFENCE} (\k{insLFENCE}) and \c{MFENCE} (\k{insMFENCE}).
12216 \S{insSGDT} \i\c{SGDT}, \i\c{SIDT}, \i\c{SLDT}: Store Descriptor Table Pointers
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]
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.
12229 \c{SLDT} stores the segment selector corresponding to the LDT (local
12230 descriptor table) into the given operand.
12232 See also \c{LGDT}, \c{LIDT} and \c{LLDT} (\k{insLGDT}).
12235 \S{insSHL} \i\c{SHL}, \i\c{SHR}: Bitwise Logical Shifts
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]
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]
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
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}.
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
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}.
12274 \S{insSHLD} \i\c{SHLD}, \i\c{SHRD}: Bitwise Double-Precision Shifts
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]
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]
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.
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.
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}.
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.
12306 \S{insSHUFPD} \i\c{SHUFPD}: Shuffle Packed Double-Precision FP Values
12308 \c SHUFPD xmm1,xmm2/m128,imm8 ; 66 0F C6 /r ib [WILLAMETTE,SSE2]
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.
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.
12324 \S{insSHUFPS} \i\c{SHUFPS}: Shuffle Packed Single-Precision FP Values
12326 \c SHUFPS xmm1,xmm2/m128,imm8 ; 0F C6 /r ib [KATMAI,SSE]
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.
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.
12344 \S{insSMI} \i\c{SMI}: System Management Interrupt
12346 \c SMI ; F1 [386,UNDOC]
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.
12353 \S{insSMINT} \i\c{SMINT}, \i\c{SMINTOLD}: Software SMM Entry (CYRIX)
12355 \c SMINT ; 0F 38 [PENT,CYRIX]
12356 \c SMINTOLD ; 0F 7E [486,CYRIX]
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
12362 \c{SMINTOLD} is the same as \c{SMINT}, but was the opcode used on the 486.
12364 This pair of opcodes are specific to the Cyrix and compatible range of
12365 processors (Cyrix, IBM, Via).
12368 \S{insSMSW} \i\c{SMSW}: Store Machine Status Word
12370 \c SMSW r/m16 ; 0F 01 /4 [286,PRIV]
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}).
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.
12381 \S{insSQRTPD} \i\c{SQRTPD}: Packed Double-Precision FP Square Root
12383 \c SQRTPD xmm1,xmm2/m128 ; 66 0F 51 /r [WILLAMETTE,SSE2]
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.
12390 \S{insSQRTPS} \i\c{SQRTPS}: Packed Single-Precision FP Square Root
12392 \c SQRTPS xmm1,xmm2/m128 ; 0F 51 /r [KATMAI,SSE]
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.
12399 \S{insSQRTSD} \i\c{SQRTSD}: Scalar Double-Precision FP Square Root
12401 \c SQRTSD xmm1,xmm2/m128 ; F2 0F 51 /r [WILLAMETTE,SSE2]
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.
12408 \S{insSQRTSS} \i\c{SQRTSS}: Scalar Single-Precision FP Square Root
12410 \c SQRTSS xmm1,xmm2/m128 ; F3 0F 51 /r [KATMAI,SSE]
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
12418 \S{insSTC} \i\c{STC}, \i\c{STD}, \i\c{STI}: Set Flags
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).
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}).
12433 \S{insSTMXCSR} \i\c{STMXCSR}: Store Streaming SIMD Extension
12436 \c STMXCSR m32 ; 0F AE /3 [KATMAI,SSE]
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.
12444 For details of the \c{MXCSR} register, see the Intel processor docs.
12446 See also \c{LDMXCSR} (\k{insLDMXCSR}).
12449 \S{insSTOSB} \i\c{STOSB}, \i\c{STOSW}, \i\c{STOSD}: Store Byte to String
12451 \c STOSB ; AA [8086]
12452 \c STOSW ; o16 AB [8086]
12453 \c STOSD ; o32 AB [386]
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}).
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.
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
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
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.
12478 \S{insSTR} \i\c{STR}: Store Task Register
12480 \c STR r/m16 ; 0F 00 /1 [286,PRIV]
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
12489 \S{insSUB} \i\c{SUB}: Subtract Integers
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]
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]
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]
12503 \c SUB r/m16,imm8 ; o16 83 /5 ib [8086]
12504 \c SUB r/m32,imm8 ; o32 83 /5 ib [386]
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]
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}).
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.
12523 \S{insSUBPD} \i\c{SUBPD}: Packed Double-Precision FP Subtract
12525 \c SUBPD xmm1,xmm2/m128 ; 66 0F 5C /r [WILLAMETTE,SSE2]
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.
12532 \S{insSUBPS} \i\c{SUBPS}: Packed Single-Precision FP Subtract
12534 \c SUBPS xmm1,xmm2/m128 ; 0F 5C /r [KATMAI,SSE]
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.
12541 \S{insSUBSD} \i\c{SUBSD}: Scalar Single-FP Subtract
12543 \c SUBSD xmm1,xmm2/m128 ; F2 0F 5C /r [WILLAMETTE,SSE2]
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.
12551 \S{insSUBSS} \i\c{SUBSS}: Scalar Single-FP Subtract
12553 \c SUBSS xmm1,xmm2/m128 ; F3 0F 5C /r [KATMAI,SSE]
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.
12561 \S{insSVDC} \i\c{SVDC}: Save Segment Register and Descriptor
12563 \c SVDC m80,segreg ; 0F 78 /r [486,CYRIX,SMM]
12565 \c{SVDC} saves a segment register (DS, ES, FS, GS, or SS) and its
12566 descriptor to mem80.
12569 \S{insSVLDT} \i\c{SVLDT}: Save LDTR and Descriptor
12571 \c SVLDT m80 ; 0F 7A /0 [486,CYRIX,SMM]
12573 \c{SVLDT} saves the Local Descriptor Table (LDTR) to mem80.
12576 \S{insSVTS} \i\c{SVTS}: Save TSR and Descriptor
12578 \c SVTS m80 ; 0F 7C /0 [486,CYRIX,SMM]
12580 \c{SVTS} saves the Task State Register (TSR) to mem80.
12583 \S{insSYSCALL} \i\c{SYSCALL}: Call Operating System
12585 \c SYSCALL ; 0F 05 [P6,AMD]
12587 \c{SYSCALL} provides a fast method of transferring control to a fixed
12588 entry point in an operating system.
12590 \b The \c{EIP} register is copied into the \c{ECX} register.
12592 \b Bits [31-0] of the 64-bit SYSCALL/SYSRET Target Address Register
12593 (\c{STAR}) are copied into the \c{EIP} register.
12595 \b Bits [47-32] of the \c{STAR} register specify the selector that is
12596 copied into the \c{CS} register.
12598 \b Bits [47-32]+1000b of the \c{STAR} register specify the selector that
12599 is copied into the SS register.
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.
12605 For more information, see the \c{SYSCALL and SYSRET Instruction Specification}
12606 (AMD document number 21086.pdf).
12609 \S{insSYSENTER} \i\c{SYSENTER}: Fast System Call
12611 \c SYSENTER ; 0F 34 [P6]
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
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.)
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.
12625 \b \c{SYSENTER_ESP_MSR} contains the 32-bit stack pointer for the
12626 privilege level 0 stack.
12628 \c{SYSENTER} performs the following sequence of operations:
12630 \b Loads the segment selector from the \c{SYSENTER_CS_MSR} into the
12633 \b Loads the instruction pointer from the \c{SYSENTER_EIP_MSR} into
12634 the \c{EIP} register.
12636 \b Adds 8 to the value in \c{SYSENTER_CS_MSR} and loads it into the
12639 \b Loads the stack pointer from the \c{SYSENTER_ESP_MSR} into the
12642 \b Switches to privilege level 0.
12644 \b Clears the \c{VM} flag in the \c{EFLAGS} register, if the flag
12647 \b Begins executing the selected system procedure.
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.
12653 For more information, see the Intel Architecture Software Developer's
12657 \S{insSYSEXIT} \i\c{SYSEXIT}: Fast Return From System Call
12659 \c SYSEXIT ; 0F 35 [P6,PRIV]
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:
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.)
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.
12674 \b \c{ECX} contains the 32-bit stack pointer for the privilege level 3
12677 \c{SYSEXIT} performs the following sequence of operations:
12679 \b Adds 16 to the value in \c{SYSENTER_CS_MSR} and loads the sum into
12680 the \c{CS} selector register.
12682 \b Loads the instruction pointer from the \c{EDX} register into the
12685 \b Adds 24 to the value in \c{SYSENTER_CS_MSR} and loads the sum
12686 into the \c{SS} selector register.
12688 \b Loads the stack pointer from the \c{ECX} register into the \c{ESP}
12691 \b Switches to privilege level 3.
12693 \b Begins executing the user code at the \c{EIP} address.
12695 For more information on the use of the \c{SYSENTER} and \c{SYSEXIT}
12696 instructions, see the Intel Architecture Software Developer's
12700 \S{insSYSRET} \i\c{SYSRET}: Return From Operating System
12702 \c SYSRET ; 0F 07 [P6,AMD,PRIV]
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.
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}
12711 \b Bits [63-48] of the \c{STAR} register specify the selector that is copied
12712 into the \c{CS} register.
12714 \b Bits [63-48]+1000b of the \c{STAR} register specify the selector that is
12715 copied into the \c{SS} register.
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.
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.
12724 For more information, see the \c{SYSCALL and SYSRET Instruction Specification}
12725 (AMD document number 21086.pdf).
12728 \S{insTEST} \i\c{TEST}: Test Bits (notional bitwise AND)
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]
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]
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]
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.
12747 \S{insUCOMISD} \i\c{UCOMISD}: Unordered Scalar Double-Precision FP
12748 compare and set EFLAGS
12750 \c UCOMISD xmm1,xmm2/m128 ; 66 0F 2E /r [WILLAMETTE,SSE2]
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}).
12760 \S{insUCOMISS} \i\c{UCOMISS}: Unordered Scalar Single-Precision FP
12761 compare and set EFLAGS
12763 \c UCOMISS xmm1,xmm2/m128 ; 0F 2E /r [KATMAI,SSE]
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}).
12773 \S{insUD2} \i\c{UD0}, \i\c{UD1}, \i\c{UD2}: Undefined Instruction
12775 \c UD0 ; 0F FF [186,UNDOC]
12776 \c UD1 ; 0F B9 [186,UNDOC]
12777 \c UD2 ; 0F 0B [186]
12779 \c{UDx} can be used to generate an invalid opcode exception, for testing
12782 \c{UD0} is specifically documented by AMD as being reserved for this
12785 \c{UD1} is documented by Intel as being available for this purpose.
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.
12791 All these opcodes can be used to generate invalid opcode exceptions on
12792 all currently available processors.
12795 \S{insUMOV} \i\c{UMOV}: User Move Data
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]
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]
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.
12810 This instruction is only available on some AMD and IBM 386 and 486
12814 \S{insUNPCKHPD} \i\c{UNPCKHPD}: Unpack and Interleave High Packed
12815 Double-Precision FP Values
12817 \c UNPCKHPD xmm1,xmm2/m128 ; 66 0F 15 /r [WILLAMETTE,SSE2]
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.
12823 The operation of this instruction is:
12825 \c dst[63-0] := dst[127-64];
12826 \c dst[127-64] := src[127-64].
12829 \S{insUNPCKHPS} \i\c{UNPCKHPS}: Unpack and Interleave High Packed
12830 Single-Precision FP Values
12832 \c UNPCKHPS xmm1,xmm2/m128 ; 0F 15 /r [KATMAI,SSE]
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.
12838 The operation of this instruction is:
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].
12846 \S{insUNPCKLPD} \i\c{UNPCKLPD}: Unpack and Interleave Low Packed
12847 Double-Precision FP Data
12849 \c UNPCKLPD xmm1,xmm2/m128 ; 66 0F 14 /r [WILLAMETTE,SSE2]
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.
12855 The operation of this instruction is:
12857 \c dst[63-0] := dst[63-0];
12858 \c dst[127-64] := src[63-0].
12861 \S{insUNPCKLPS} \i\c{UNPCKLPS}: Unpack and Interleave Low Packed
12862 Single-Precision FP Data
12864 \c UNPCKLPS xmm1,xmm2/m128 ; 0F 14 /r [KATMAI,SSE]
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.
12870 The operation of this instruction is:
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].
12878 \S{insVERR} \i\c{VERR}, \i\c{VERW}: Verify Segment Readability/Writability
12880 \c VERR r/m16 ; 0F 00 /4 [286,PRIV]
12882 \c VERW r/m16 ; 0F 00 /5 [286,PRIV]
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.
12888 \b \c{VERW} sets the zero flag if the segment can be written.
12891 \S{insWAIT} \i\c{WAIT}: Wait for Floating-Point Processor
12893 \c WAIT ; 9B [8086]
12894 \c FWAIT ; 9B [8086]
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.
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.
12907 \S{insWBINVD} \i\c{WBINVD}: Write Back and Invalidate Cache
12909 \c WBINVD ; 0F 09 [486]
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}).
12918 \S{insWRMSR} \i\c{WRMSR}: Write Model-Specific Registers
12920 \c WRMSR ; 0F 30 [PENT]
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}).
12927 \S{insWRSHR} \i\c{WRSHR}: Write SMM Header Pointer Register
12929 \c WRSHR r/m32 ; 0F 37 /0 [386,CYRIX,SMM]
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.
12934 See also \c{RDSHR} (\k{insRDSHR}).
12937 \S{insXADD} \i\c{XADD}: Exchange and Add
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]
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.
12949 \S{insXBTS} \i\c{XBTS}: Extract Bit String
12951 \c XBTS reg16,r/m16 ; o16 0F A6 /r [386,UNDOC]
12952 \c XBTS reg32,r/m32 ; o32 0F A6 /r [386,UNDOC]
12954 The implied operation of this instruction is:
12956 \c XBTS r/m16,reg16,AX,CL
12957 \c XBTS r/m32,reg32,EAX,CL
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.
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}).
12973 \S{insXCHG} \i\c{XCHG}: Exchange
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]
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]
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]
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
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}).
12997 \S{insXLATB} \i\c{XLATB}: Translate Byte in Lookup Table
12999 \c XLAT ; D7 [8086]
13000 \c XLATB ; D7 [8086]
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}.
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.
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}).
13016 \S{insXOR} \i\c{XOR}: Bitwise Exclusive OR
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]
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]
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]
13030 \c XOR r/m16,imm8 ; o16 83 /6 ib [8086]
13031 \c XOR r/m32,imm8 ; o32 83 /6 ib [386]
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]
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.
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.
13048 The \c{MMX} instruction \c{PXOR} (see \k{insPXOR}) performs the same
13049 operation on the 64-bit \c{MMX} registers.
13052 \S{insXORPD} \i\c{XORPD}: Bitwise Logical XOR of Double-Precision FP Values
13054 \c XORPD xmm1,xmm2/m128 ; 66 0F 57 /r [WILLAMETTE,SSE2]
13056 \c{XORPD} returns a bit-wise logical XOR between the source and
13057 destination operands, storing the result in the destination operand.
13060 \S{insXORPS} \i\c{XORPS}: Bitwise Logical XOR of Single-Precision FP Values
13062 \c XORPS xmm1,xmm2/m128 ; 0F 57 /r [KATMAI,SSE]
13064 \c{XORPS} returns a bit-wise logical XOR between the source and
13065 destination operands, storing the result in the destination operand.