diff options
Diffstat (limited to 'doc/nasmdoc.ps')
-rw-r--r-- | doc/nasmdoc.ps | 12251 |
1 files changed, 0 insertions, 12251 deletions
diff --git a/doc/nasmdoc.ps b/doc/nasmdoc.ps deleted file mode 100644 index e7d0040..0000000 --- a/doc/nasmdoc.ps +++ /dev/null @@ -1,12251 +0,0 @@ -%!PS-Adobe-3.0 -%%Pages: 213 -%%BoundingBox: 0 0 595 792 -%%Creator: (NASM psflow.pl) -%%DocumentData: Clean7Bit -%%DocumentFonts: Times-Italic Times-Bold Courier Times-Roman Courier-Bold Times-BoldItalic -%%DocumentNeededFonts: Times-Italic Times-Bold Courier Times-Roman Courier-Bold Times-BoldItalic -%%Orientation: Portrait -%%PageOrder: Ascend -%%EndComments -%%BeginProlog -/tocind 12 def -/pymarg 50 def -/idxindent 24 def -/pageheight 792 def -/pagewidth 595 def -/idxcolumns 2 def -/tocpnz 24 def -/bulladj 12 def -/plmarg 50 def -/idxgutter 24 def -/lmarg 100 def -/topmarg 100 def -/botmarg 100 def -/prmarg 0 def -/startcopyright 75 def -/tocdots 8 def -/rmarg 50 def -/idxspace 24 def -/colorlinks false def -/NASMEncoding [ /.notdef /.notdef /.notdef /.notdef /.notdef - /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef - /.notdef /.notdef /.notdef /.notdef /dotlessi /grave /acute - /circumflex /tilde /macron /breve /dotaccent /dieresis /.notdef /ring - /cedilla /.notdef /hungarumlaut /ogonek /caron /space /exclam - /quotedbl /numbersign /dollar /percent /ampersand /quoteright - /parenleft /parenright /asterisk /plus /comma /minus /period /slash - /zero /one /two /three /four /five /six /seven /eight /nine /colon - /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H - /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft - /backslash /bracketright /asciicircum /underscore /quoteleft /a /b /c - /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z - /braceleft /bar /braceright /asciitilde /.notdef /.notdef /.notdef - /quotesinglbase /florin /quotedblbase /ellipsis /dagger /dbldagger - /circumflex /perthousand /Scaron /guilsinglleft /OE /.notdef /Zcaron - /.notdef /.notdef /grave /quotesingle /quotedblleft /quotedblright - /bullet /endash /emdash /tilde /trademark /scaron /guilsignlright /oe - /.notdef /zcaron /Ydieresis /space /exclamdown /cent /sterling - /currency /yen /brokenbar /section /dieresis /copyright /ordfeminine - /guillemotleft /logicalnot /hyphen /registered /macron /degree - /plusminus /twosuperior /threesuperior /acute /mu /paragraph - /periodcentered /cedilla /onesuperior /ordmasculine /guillemotright - /onequarter /onehalf /threequarters /questiondown /Agrave /Aacute - /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla /Egrave /Eacute - /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth - /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply - /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn - /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring /ae - /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute - /icircumflex /idieresis /eth /ntilde /ograve /oacute /ocircumflex - /otilde /odieresis /divide /oslash /ugrave /uacute /ucircumflex - /udieresis /yacute /thorn /ydieresis ] def -/nasmenc { - findfont dup length dict begin - { 1 index /FID ne {def}{pop pop} ifelse } forall - /Encoding NASMEncoding def - currentdict - end - definefont pop -} def -/Times-Italic-NASM /Times-Italic nasmenc -/Times-Bold-NASM /Times-Bold nasmenc -/Courier-NASM /Courier nasmenc -/Times-Roman-NASM /Times-Roman nasmenc -/Courier-Bold-NASM /Courier-Bold nasmenc -/Times-BoldItalic-NASM /Times-BoldItalic nasmenc -/tfont0 /Times-Bold-NASM findfont 20 scalefont def -/tfont1 /Times-BoldItalic-NASM findfont 20 scalefont def -/tfont2 /Courier-Bold-NASM findfont 20 scalefont def -/tfont [tfont0 tfont1 tfont2] def -/cfont0 /Times-Bold-NASM findfont 18 scalefont def -/cfont1 /Times-BoldItalic-NASM findfont 18 scalefont def -/cfont2 /Courier-Bold-NASM findfont 18 scalefont def -/cfont [cfont0 cfont1 cfont2] def -/hfont0 /Times-Bold-NASM findfont 14 scalefont def -/hfont1 /Times-BoldItalic-NASM findfont 14 scalefont def -/hfont2 /Courier-Bold-NASM findfont 14 scalefont def -/hfont [hfont0 hfont1 hfont2] def -/sfont0 /Times-Bold-NASM findfont 12 scalefont def -/sfont1 /Times-BoldItalic-NASM findfont 12 scalefont def -/sfont2 /Courier-Bold-NASM findfont 12 scalefont def -/sfont [sfont0 sfont1 sfont2] def -/bfont0 /Times-Roman-NASM findfont 10 scalefont def -/bfont1 /Times-Italic-NASM findfont 10 scalefont def -/bfont2 /Courier-NASM findfont 10 scalefont def -/bfont [bfont0 bfont1 bfont2] def -/bullet [(\225)] def -% -% PostScript header for NASM documentation -% - -% Avoid barfing on old PS implementations -/pdfmark where -{pop} {userdict /pdfmark /cleartomark load put} ifelse -/setpagedevice where -{pop} {userdict /setpagedevice /pop load put} ifelse - -% Useful definition -/space 32 def - -% -% This asks the PostScript interpreter for the proper size paper -% -/setpagesize { - 1 dict dup /PageSize [pagewidth pageheight] put setpagedevice -} def - -% -% Code to handle links -% -/min { 2 copy gt { exch } if pop } def -/max { 2 copy lt { exch } if pop } def - -/lkbegun 0 def -/lktype null def -/lkury 0 def -/lkurx 0 def -/lklly 0 def -/lkllx 0 def -/lkxmarg 1 def % Extra space for link in x dir -/lkymarg 1 def % Extra space for link in y dir -/lktarget () def - -% target type -- -/linkbegin { - userdict begin - /lkbegun 1 def - /lktype exch def - /lktarget exch def - colorlinks { 0 0 0.4 setrgbcolor } if - end -} def - -% target -- -/linkbegindest { - /Dest linkbegin -} def - -% uristring -- -/linkbeginuri { - /URI linkbegin -} def - -% pageno -- -/linkbeginpage { - /Page linkbegin -} def - -% string spacepadding -- -/linkshow { - userdict begin - /lspad exch def /lss exch def - lkbegun 0 ne { - gsave lss true charpath flattenpath pathbbox grestore - lkbegun 1 eq { - /lkury exch def - lss spacecount lspad mul add /lkurx exch def - /lklly exch def - /lkllx exch def - /lkbegun 2 def - } { - lkury max /lkury exch def - lss spacecount lspad mul add lkurx max /lkurx exch def - lklly min /lklly exch def - lkllx min /lkllx exch def - } ifelse - } if - lspad 0 space lss widthshow - end -} def - -% -- -/linkend { - userdict begin - [ lktype /URI eq { - /Action 2 dict dup /Subtype /URI put dup /URI lktarget put - } { - /Dest lktarget - } ifelse - /Border [0 0 0] - /Rect [ lkllx lkxmarg sub - lklly lkymarg sub - lkurx lkxmarg add - lkury lkymarg add ] - /Subtype /Link - /ANN pdfmark - /lkbegun 0 def - colorlinks { 0 setgray } if - end -} def - -% targetname -- -/linkdest { - [ /Dest 3 -1 roll - /View [ /XYZ currentpoint null ] - /DEST pdfmark -} def - -% A "fontset" is an array of fonts; a "stream" is an array of strings -% and numbers or procedures: -% [ 0 (Foo) ( ) (mani) ( ) 1 (padme) 0 ( ) (hum.) ] -% A number choses a font from the current fontset. -% A procedure is invoked as-is when printing the stream. -% -% When printing justified, an equal amount of space is added in -% between each string. - -% string -- spacecount -% Count space characters in a string -/spacecount { - 0 exch { - space eq { 1 add } if - } forall -} def - -% stream fontset -- spacecount width -% Get the width of a stream in the given fontset, and the -% number of space characters in the stream -/streamwidth { - gsave - 6 dict begin - /f exch def - /w 0 def - /s 0 def - f 0 get setfont - /integertype { - f exch get setfont - } def - /stringtype { - dup stringwidth pop w add /w exch def - spacecount s add /s exch def - } def - /arraytype { pop } def - % The input stream is on the top of the stack now - { - dup type exec - } forall - s w - end - grestore -} def - -% stream fontset spacer -- -% Show the stream in the given fontset, but add a certain amount -% of space to each space character -/showstreamspc { - 5 dict begin - /spc exch def - /f exch def - f 0 get setfont - /integertype { - f exch get setfont - } def - /stringtype { - spc linkshow - } def - /arraytype { - exec - } def - % Now stream is on the top of the stack - { - dup type exec - } forall - end -} def - -% stream fontset -- -% Show the stream in the given fontset, with no extra spacing -/showstream { - 0 showstreamspc -} def - -% stream fontset totalspace -- -% Show the stream justified to fit into a certain number of pixels -/showstreamjust { - userdict begin - /ts exch def /fs exch def /st exch def - st fs - st fs streamwidth ts exch sub exch - dup 0 gt { div } { pop } ifelse - showstreamspc - end -} def - -/bullmarg lmarg bulladj add def -/lwidth pagewidth lmarg sub rmarg sub def -/bwidth lwidth bulladj sub def - -% -% The various paragraph types -% The number at the end indicates start (1) of para, end (2) of para -% -/chapline { - currentpoint exch pop 10 sub lmarg exch moveto - 0 setlinecap 3 setlinewidth - lwidth 0 rlineto stroke -} def - -/chap0 { lmarg exch moveto cfont lwidth showstreamjust } def -/chap1 { lmarg exch moveto cfont lwidth showstreamjust } def -/chap2 { lmarg exch moveto cfont showstream chapline } def -/chap3 { lmarg exch moveto cfont showstream chapline } def - -/appn0 {chap0} def -/appn1 {chap1} def -/appn2 {chap2} def -/appn3 {chap3} def - -% lbl ypos fontset -- ypos -/headlbl { - 3 -1 roll [exch ( )] exch % ypos strm fontset - 2 copy % ypos strm fontset strm fontset - streamwidth % ypos strm fontset spccount width - lmarg exch sub % ypos strm fontset spccount xpos - 4 index % ypos strm fontset spccount xpos ypos - moveto % ypos strm fontset spccount - pop % ypos strm fontset spccount - showstream % ypos -} def - -/head0 { lmarg exch moveto hfont lwidth showstreamjust } def -/head1 { hfont headlbl lmarg exch moveto hfont lwidth showstreamjust } def -/head2 { lmarg exch moveto hfont showstream } def -/head3 { hfont headlbl lmarg exch moveto hfont showstream } def - -/subh0 { lmarg exch moveto sfont lwidth showstreamjust } def -/subh1 { sfont headlbl lmarg exch moveto sfont lwidth showstreamjust } def -/subh2 { lmarg exch moveto sfont showstream } def -/subh3 { sfont headlbl lmarg exch moveto sfont showstream } def - -/norm0 { lmarg exch moveto bfont lwidth showstreamjust } def -/norm1 { lmarg exch moveto bfont lwidth showstreamjust } def -/norm2 { lmarg exch moveto bfont showstream } def -/norm3 { lmarg exch moveto bfont showstream } def - -/code0 { lmarg exch moveto bfont showstream } def -/code1 { lmarg exch moveto bfont showstream } def -/code2 { lmarg exch moveto bfont showstream } def -/code3 { lmarg exch moveto bfont showstream } def - -/bull0 { bullmarg exch moveto bfont bwidth showstreamjust } def -/bull1 { dup lmarg exch moveto bullet bfont showstream - bullmarg exch moveto bfont bwidth showstreamjust } def -/bull2 { bullmarg exch moveto bfont showstream } def -/bull3 { dup lmarg exch moveto bullet bfont showstream - bullmarg exch moveto bfont showstream } def - -/tocw0 lwidth tocpnz sub def -/tocw1 tocw0 tocind sub def -/tocw2 tocw1 tocind sub def - -/tocx0 lmarg def -/tocx1 tocx0 tocind add def -/tocx2 tocx1 tocind add def - -/tocpn { - bfont0 setfont - 3 dict begin - /s exch def - /x s stringwidth pop pagewidth rmarg sub exch sub def - currentpoint /y exch def - lmarg sub tocdots div ceiling tocdots mul lmarg add - tocdots x { - y moveto (.) 0 linkshow - } for - x y moveto s 0 linkshow - end - linkend -} def - -/toc00 { tocx0 exch moveto 0 rmoveto bfont showstream } def -/toc01 { tocx0 exch moveto - linkbegindest bfont0 setfont 0 linkshow bfont showstream } def -/toc02 { tocx0 exch moveto 3 1 roll - 0 rmoveto bfont showstream tocpn } def -/toc03 { tocx0 exch moveto 4 1 roll - linkbegindest bfont0 setfont 0 linkshow bfont showstream tocpn } def - -/toc10 { tocx1 exch moveto 0 rmoveto bfont showstream } def -/toc11 { tocx1 exch moveto - linkbegindest bfont0 setfont 0 linkshow bfont showstream } def -/toc12 { tocx1 exch moveto 3 1 roll - 0 rmoveto bfont showstream tocpn } def -/toc13 { tocx1 exch moveto 4 1 roll - linkbegindest bfont0 setfont 0 linkshow bfont showstream tocpn } def - -/toc20 { tocx2 exch moveto 0 rmoveto bfont showstream } def -/toc21 { tocx2 exch moveto - linkbegindest bfont0 setfont 0 linkshow bfont showstream } def -/toc22 { tocx2 exch moveto 3 1 roll - 0 rmoveto bfont showstream tocpn } def -/toc23 { tocx2 exch moveto 4 1 roll - linkbegindest bfont0 setfont 0 linkshow bfont showstream tocpn } def - -% Spacing between index columns -/indexcolumn pagewidth lmarg sub rmarg sub idxgutter add idxcolumns div def -% Width of an individual index column -/indexcolwid indexcolumn idxgutter sub def - -/idx03 { - 2 dict begin - indexcolumn mul lmarg add - /x exch def /y exch def x y moveto - exch bfont showstream - dup bfont streamwidth - x indexcolwid add exch sub exch pop y moveto - bfont showstream - end -} def -/idx00 {idx03} def -/idx01 {idx03} def -/idx02 {idx03} def - -/idx13 { - 2 dict begin - indexcolumn mul lmarg add idxindent add - /x exch def /y exch def x y moveto - exch bfont showstream - dup bfont streamwidth - x indexcolwid idxindent sub add exch sub exch pop y moveto - bfont showstream - end -} def -/idx10 {idx13} def -/idx11 {idx13} def -/idx12 {idx13} def - -% -% Page numbers -% -/pagey botmarg pymarg sub def -/pagel lmarg plmarg sub def -/pager pagewidth rmarg sub prmarg add def - -/pageeven { pagel pagey moveto bfont1 setfont show } def -/pageodd { bfont1 setfont dup stringwidth pop pager exch sub - pagey moveto show } def - -% -% Functions invoked during parsing -% -/xa { linkdest } def -/pa { 0 pageheight moveto linkdest } def -/xl { linkbegindest } def -/wl { linkbeginuri } def -/pl { linkbeginpage } def -/el { linkend } def - -% -% PDF viewer options -% -[/PageMode /UseOutlines /DOCVIEW pdfmark % Display bookmarks - -% -% Functions to include EPS -% -/BeginEPSF { - /Before_EPSF_State save def - /dict_count countdictstack def - /op_count count 1 sub def - userdict begin - /showpage {} def - 0 setgray 0 setlinecap - 1 setlinewidth 0 setlinejoin - 10 setmiterlimit [ ] 0 setdash newpath - /languagelevel where - { - pop languagelevel - 1 ne { - false setstrokeadjust false setoverprint - } if - } if -} bind def -/EndEPSF { - count op_count sub {pop} repeat - countdictstack dict_count sub {end} repeat - Before_EPSF_State restore -} bind def -%%EndProlog -%%BeginSetup -[/Title (Title) -/Dest /title /OUT pdfmark -[/Title (Contents) -/Dest /contents /OUT pdfmark -[/Title (Introduction) -/Count -3 /Dest /chapter-1 /OUT pdfmark -[/Title (What Is NASM?) -/Count -2 /Dest /section-1.1 /OUT pdfmark -[/Title (Why Yet Another Assembler?) -/Dest /section-1.1.1 /OUT pdfmark -[/Title (License Conditions) -/Dest /section-1.1.2 /OUT pdfmark -[/Title (Contact Information) -/Dest /section-1.2 /OUT pdfmark -[/Title (Installation) -/Count -2 /Dest /section-1.3 /OUT pdfmark -[/Title (Installing NASM under MS-DOS or Windows) -/Dest /section-1.3.1 /OUT pdfmark -[/Title (Installing NASM under Unix) -/Dest /section-1.3.2 /OUT pdfmark -[/Title (Running NASM) -/Count -2 /Dest /chapter-2 /OUT pdfmark -[/Title (NASM Command-Line Syntax) -/Count -28 /Dest /section-2.1 /OUT pdfmark -[/Title (The -o Option: Specifying the Output File Name) -/Dest /section-2.1.1 /OUT pdfmark -[/Title (The -f Option: Specifying the Output File Format) -/Dest /section-2.1.2 /OUT pdfmark -[/Title (The -l Option: Generating a Listing File) -/Dest /section-2.1.3 /OUT pdfmark -[/Title (The -M Option: Generate Makefile Dependencies) -/Dest /section-2.1.4 /OUT pdfmark -[/Title (The -MG Option: Generate Makefile Dependencies) -/Dest /section-2.1.5 /OUT pdfmark -[/Title (The -MF Option: Set Makefile Dependency File) -/Dest /section-2.1.6 /OUT pdfmark -[/Title (The -MD Option: Assemble and Generate Dependencies) -/Dest /section-2.1.7 /OUT pdfmark -[/Title (The -MT Option: Dependency Target Name) -/Dest /section-2.1.8 /OUT pdfmark -[/Title (The -MQ Option: Dependency Target Name \(Quoted\)) -/Dest /section-2.1.9 /OUT pdfmark -[/Title (The -MP Option: Emit phony targets) -/Dest /section-2.1.10 /OUT pdfmark -[/Title (The -F Option: Selecting a Debug Information Format) -/Dest /section-2.1.11 /OUT pdfmark -[/Title (The -g Option: Enabling Debug Information.) -/Dest /section-2.1.12 /OUT pdfmark -[/Title (The -X Option: Selecting an Error Reporting Format) -/Dest /section-2.1.13 /OUT pdfmark -[/Title (The -Z Option: Send Errors to a File) -/Dest /section-2.1.14 /OUT pdfmark -[/Title (The -s Option: Send Errors to stdout) -/Dest /section-2.1.15 /OUT pdfmark -[/Title (The -i Option: Include File Search Directories) -/Dest /section-2.1.16 /OUT pdfmark -[/Title (The -p Option: Pre-Include a File) -/Dest /section-2.1.17 /OUT pdfmark -[/Title (The -d Option: Pre-Define a Macro) -/Dest /section-2.1.18 /OUT pdfmark -[/Title (The -u Option: Undefine a Macro) -/Dest /section-2.1.19 /OUT pdfmark -[/Title (The -E Option: Preprocess Only) -/Dest /section-2.1.20 /OUT pdfmark -[/Title (The -a Option: Don't Preprocess At All) -/Dest /section-2.1.21 /OUT pdfmark -[/Title (The -O Option: Specifying Multipass Optimization) -/Dest /section-2.1.22 /OUT pdfmark -[/Title (The -t Option: Enable TASM Compatibility Mode) -/Dest /section-2.1.23 /OUT pdfmark -[/Title (The -w and -W Options: Enable or Disable Assembly Warnings) -/Dest /section-2.1.24 /OUT pdfmark -[/Title (The -v Option: Display Version Info) -/Dest /section-2.1.25 /OUT pdfmark -[/Title (The -y Option: Display Available Debug Info Formats) -/Dest /section-2.1.26 /OUT pdfmark -[/Title (The --prefix and --postfix Options.) -/Dest /section-2.1.27 /OUT pdfmark -[/Title (The NASMENV Environment Variable) -/Dest /section-2.1.28 /OUT pdfmark -[/Title (Quick Start for MASM Users) -/Count -7 /Dest /section-2.2 /OUT pdfmark -[/Title (NASM Is Case-Sensitive) -/Dest /section-2.2.1 /OUT pdfmark -[/Title (NASM Requires Square Brackets For Memory References) -/Dest /section-2.2.2 /OUT pdfmark -[/Title (NASM Doesn't Store Variable Types) -/Dest /section-2.2.3 /OUT pdfmark -[/Title (NASM Doesn't ASSUME) -/Dest /section-2.2.4 /OUT pdfmark -[/Title (NASM Doesn't Support Memory Models) -/Dest /section-2.2.5 /OUT pdfmark -[/Title (Floating-Point Differences) -/Dest /section-2.2.6 /OUT pdfmark -[/Title (Other Differences) -/Dest /section-2.2.7 /OUT pdfmark -[/Title (The NASM Language) -/Count -9 /Dest /chapter-3 /OUT pdfmark -[/Title (Layout of a NASM Source Line) -/Dest /section-3.1 /OUT pdfmark -[/Title (Pseudo-Instructions) -/Count -5 /Dest /section-3.2 /OUT pdfmark -[/Title (DB and Friends: Declaring Initialized Data) -/Dest /section-3.2.1 /OUT pdfmark -[/Title (RESB and Friends: Declaring Uninitialized Data) -/Dest /section-3.2.2 /OUT pdfmark -[/Title (INCBIN: Including External Binary Files) -/Dest /section-3.2.3 /OUT pdfmark -[/Title (EQU: Defining Constants) -/Dest /section-3.2.4 /OUT pdfmark -[/Title (TIMES: Repeating Instructions or Data) -/Dest /section-3.2.5 /OUT pdfmark -[/Title (Effective Addresses) -/Dest /section-3.3 /OUT pdfmark -[/Title (Constants) -/Count -7 /Dest /section-3.4 /OUT pdfmark -[/Title (Numeric Constants) -/Dest /section-3.4.1 /OUT pdfmark -[/Title (Character Strings) -/Dest /section-3.4.2 /OUT pdfmark -[/Title (Character Constants) -/Dest /section-3.4.3 /OUT pdfmark -[/Title (String Constants) -/Dest /section-3.4.4 /OUT pdfmark -[/Title (Unicode Strings) -/Dest /section-3.4.5 /OUT pdfmark -[/Title (Floating-Point Constants) -/Dest /section-3.4.6 /OUT pdfmark -[/Title (Packed BCD Constants) -/Dest /section-3.4.7 /OUT pdfmark -[/Title (Expressions) -/Count -7 /Dest /section-3.5 /OUT pdfmark -[/Title (|: Bitwise OR Operator) -/Dest /section-3.5.1 /OUT pdfmark -[/Title (^: Bitwise XOR Operator) -/Dest /section-3.5.2 /OUT pdfmark -[/Title (&: Bitwise AND Operator) -/Dest /section-3.5.3 /OUT pdfmark -[/Title (<< and >>: Bit Shift Operators) -/Dest /section-3.5.4 /OUT pdfmark -[/Title (+ and -: Addition and Subtraction Operators) -/Dest /section-3.5.5 /OUT pdfmark -[/Title (*, /, //, % and %%: Multiplication and Division) -/Dest /section-3.5.6 /OUT pdfmark -[/Title (Unary Operators: +, -, ~, ! and SEG) -/Dest /section-3.5.7 /OUT pdfmark -[/Title (SEG and WRT) -/Dest /section-3.6 /OUT pdfmark -[/Title (STRICT: Inhibiting Optimization) -/Dest /section-3.7 /OUT pdfmark -[/Title (Critical Expressions) -/Dest /section-3.8 /OUT pdfmark -[/Title (Local Labels) -/Dest /section-3.9 /OUT pdfmark -[/Title (The NASM Preprocessor) -/Count -11 /Dest /chapter-4 /OUT pdfmark -[/Title (Single-Line Macros) -/Count -9 /Dest /section-4.1 /OUT pdfmark -[/Title (The Normal Way: %define) -/Dest /section-4.1.1 /OUT pdfmark -[/Title (Resolving %define: %xdefine) -/Dest /section-4.1.2 /OUT pdfmark -[/Title (Macro Indirection: %[...]) -/Dest /section-4.1.3 /OUT pdfmark -[/Title (Concatenating Single Line Macro Tokens: %+) -/Dest /section-4.1.4 /OUT pdfmark -[/Title (The Macro Name Itself: %? and %??) -/Dest /section-4.1.5 /OUT pdfmark -[/Title (Undefining Single-Line Macros: %undef) -/Dest /section-4.1.6 /OUT pdfmark -[/Title (Preprocessor Variables: %assign) -/Dest /section-4.1.7 /OUT pdfmark -[/Title (Defining Strings: %defstr) -/Dest /section-4.1.8 /OUT pdfmark -[/Title (Defining Tokens: %deftok) -/Dest /section-4.1.9 /OUT pdfmark -[/Title (String Manipulation in Macros) -/Count -3 /Dest /section-4.2 /OUT pdfmark -[/Title (Concatenating Strings: %strcat) -/Dest /section-4.2.1 /OUT pdfmark -[/Title (String Length: %strlen) -/Dest /section-4.2.2 /OUT pdfmark -[/Title (Extracting Substrings: %substr) -/Dest /section-4.2.3 /OUT pdfmark -[/Title (Multi-Line Macros: %macro) -/Count -12 /Dest /section-4.3 /OUT pdfmark -[/Title (Recursive Multi-Line Macros: %rmacro) -/Dest /section-4.3.1 /OUT pdfmark -[/Title (Overloading Multi-Line Macros) -/Dest /section-4.3.2 /OUT pdfmark -[/Title (Macro-Local Labels) -/Dest /section-4.3.3 /OUT pdfmark -[/Title (Greedy Macro Parameters) -/Dest /section-4.3.4 /OUT pdfmark -[/Title (Default Macro Parameters) -/Dest /section-4.3.5 /OUT pdfmark -[/Title (%0: Macro Parameter Counter) -/Dest /section-4.3.6 /OUT pdfmark -[/Title (%rotate: Rotating Macro Parameters) -/Dest /section-4.3.7 /OUT pdfmark -[/Title (Concatenating Macro Parameters) -/Dest /section-4.3.8 /OUT pdfmark -[/Title (Condition Codes as Macro Parameters) -/Dest /section-4.3.9 /OUT pdfmark -[/Title (Disabling Listing Expansion) -/Dest /section-4.3.10 /OUT pdfmark -[/Title (Undefining Multi-Line Macros: %unmacro) -/Dest /section-4.3.11 /OUT pdfmark -[/Title (Exiting Multi-Line Macros: %exitmacro) -/Dest /section-4.3.12 /OUT pdfmark -[/Title (Conditional Assembly) -/Count -8 /Dest /section-4.4 /OUT pdfmark -[/Title (%ifdef: Testing Single-Line Macro Existence) -/Dest /section-4.4.1 /OUT pdfmark -[/Title (%ifmacro: Testing Multi-Line Macro Existence) -/Dest /section-4.4.2 /OUT pdfmark -[/Title (%ifctx: Testing the Context Stack) -/Dest /section-4.4.3 /OUT pdfmark -[/Title (%if: Testing Arbitrary Numeric Expressions) -/Dest /section-4.4.4 /OUT pdfmark -[/Title (%ifidn and %ifidni: Testing Exact Text Identity) -/Dest /section-4.4.5 /OUT pdfmark -[/Title (%ifid, %ifnum, %ifstr: Testing Token Types) -/Dest /section-4.4.6 /OUT pdfmark -[/Title (%iftoken: Test for a Single Token) -/Dest /section-4.4.7 /OUT pdfmark -[/Title (%ifempty: Test for Empty Expansion) -/Dest /section-4.4.8 /OUT pdfmark -[/Title (Preprocessor Loops: %rep) -/Dest /section-4.5 /OUT pdfmark -[/Title (Source Files and Dependencies) -/Count -4 /Dest /section-4.6 /OUT pdfmark -[/Title (%include: Including Other Files) -/Dest /section-4.6.1 /OUT pdfmark -[/Title (%pathsearch: Search the Include Path) -/Dest /section-4.6.2 /OUT pdfmark -[/Title (%depend: Add Dependent Files) -/Dest /section-4.6.3 /OUT pdfmark -[/Title (%use: Include Standard Macro Package) -/Dest /section-4.6.4 /OUT pdfmark -[/Title (The Context Stack) -/Count -5 /Dest /section-4.7 /OUT pdfmark -[/Title (%push and %pop: Creating and Removing Contexts) -/Dest /section-4.7.1 /OUT pdfmark -[/Title (Context-Local Labels) -/Dest /section-4.7.2 /OUT pdfmark -[/Title (Context-Local Single-Line Macros) -/Dest /section-4.7.3 /OUT pdfmark -[/Title (%repl: Renaming a Context) -/Dest /section-4.7.4 /OUT pdfmark -[/Title (Example Use of the Context Stack: Block IFs) -/Dest /section-4.7.5 /OUT pdfmark -[/Title (Stack Relative Preprocessor Directives) -/Count -3 /Dest /section-4.8 /OUT pdfmark -[/Title (%arg Directive) -/Dest /section-4.8.1 /OUT pdfmark -[/Title (%stacksize Directive) -/Dest /section-4.8.2 /OUT pdfmark -[/Title (%local Directive) -/Dest /section-4.8.3 /OUT pdfmark -[/Title (Reporting User-Defined Errors: %error, %warning, %fatal) -/Dest /section-4.9 /OUT pdfmark -[/Title (Other Preprocessor Directives) -/Count -2 /Dest /section-4.10 /OUT pdfmark -[/Title (%line Directive) -/Dest /section-4.10.1 /OUT pdfmark -[/Title (%!<env>: Read an environment variable.) -/Dest /section-4.10.2 /OUT pdfmark -[/Title (Standard Macros) -/Count -12 /Dest /section-4.11 /OUT pdfmark -[/Title (NASM Version Macros) -/Dest /section-4.11.1 /OUT pdfmark -[/Title (__NASM_VERSION_ID__: NASM Version ID) -/Dest /section-4.11.2 /OUT pdfmark -[/Title (__NASM_VER__: NASM Version string) -/Dest /section-4.11.3 /OUT pdfmark -[/Title (__FILE__ and __LINE__: File Name and Line Number) -/Dest /section-4.11.4 /OUT pdfmark -[/Title (__BITS__: Current BITS Mode) -/Dest /section-4.11.5 /OUT pdfmark -[/Title (__OUTPUT_FORMAT__: Current Output Format) -/Dest /section-4.11.6 /OUT pdfmark -[/Title (Assembly Date and Time Macros) -/Dest /section-4.11.7 /OUT pdfmark -[/Title (__USE_package__: Package Include Test) -/Dest /section-4.11.8 /OUT pdfmark -[/Title (__PASS__: Assembly Pass) -/Dest /section-4.11.9 /OUT pdfmark -[/Title (STRUC and ENDSTRUC: Declaring Structure Data Types) -/Dest /section-4.11.10 /OUT pdfmark -[/Title (ISTRUC, AT and IEND: Declaring Instances of Structures) -/Dest /section-4.11.11 /OUT pdfmark -[/Title (ALIGN and ALIGNB: Data Alignment) -/Dest /section-4.11.12 /OUT pdfmark -[/Title (Standard Macro Packages) -/Count -2 /Dest /chapter-5 /OUT pdfmark -[/Title (altreg: Alternate Register Names) -/Dest /section-5.1 /OUT pdfmark -[/Title (smartalign: Smart ALIGN Macro) -/Dest /section-5.2 /OUT pdfmark -[/Title (Assembler Directives) -/Count -9 /Dest /chapter-6 /OUT pdfmark -[/Title (BITS: Specifying Target Processor Mode) -/Count -1 /Dest /section-6.1 /OUT pdfmark -[/Title (USE16 & USE32: Aliases for BITS) -/Dest /section-6.1.1 /OUT pdfmark -[/Title (DEFAULT: Change the assembler defaults) -/Dest /section-6.2 /OUT pdfmark -[/Title (SECTION or SEGMENT: Changing and Defining Sections) -/Count -1 /Dest /section-6.3 /OUT pdfmark -[/Title (The __SECT__ Macro) -/Dest /section-6.3.1 /OUT pdfmark -[/Title (ABSOLUTE: Defining Absolute Labels) -/Dest /section-6.4 /OUT pdfmark -[/Title (EXTERN: Importing Symbols from Other Modules) -/Dest /section-6.5 /OUT pdfmark -[/Title (GLOBAL: Exporting Symbols to Other Modules) -/Dest /section-6.6 /OUT pdfmark -[/Title (COMMON: Defining Common Data Areas) -/Dest /section-6.7 /OUT pdfmark -[/Title (CPU: Defining CPU Dependencies) -/Dest /section-6.8 /OUT pdfmark -[/Title (FLOAT: Handling of floating-point constants) -/Dest /section-6.9 /OUT pdfmark -[/Title (Output Formats) -/Count -14 /Dest /chapter-7 /OUT pdfmark -[/Title (bin: Flat-Form Binary Output) -/Count -4 /Dest /section-7.1 /OUT pdfmark -[/Title (ORG: Binary File Program Origin) -/Dest /section-7.1.1 /OUT pdfmark -[/Title (bin Extensions to the SECTION Directive) -/Dest /section-7.1.2 /OUT pdfmark -[/Title (Multisection Support for the bin Format) -/Dest /section-7.1.3 /OUT pdfmark -[/Title (Map Files) -/Dest /section-7.1.4 /OUT pdfmark -[/Title (ith: Intel Hex Output) -/Dest /section-7.2 /OUT pdfmark -[/Title (srec: Motorola S-Records Output) -/Dest /section-7.3 /OUT pdfmark -[/Title (obj: Microsoft OMF Object Files) -/Count -8 /Dest /section-7.4 /OUT pdfmark -[/Title (obj Extensions to the SEGMENT Directive) -/Dest /section-7.4.1 /OUT pdfmark -[/Title (GROUP: Defining Groups of Segments) -/Dest /section-7.4.2 /OUT pdfmark -[/Title (UPPERCASE: Disabling Case Sensitivity in Output) -/Dest /section-7.4.3 /OUT pdfmark -[/Title (IMPORT: Importing DLL Symbols) -/Dest /section-7.4.4 /OUT pdfmark -[/Title (EXPORT: Exporting DLL Symbols) -/Dest /section-7.4.5 /OUT pdfmark -[/Title (..start: Defining the Program Entry Point) -/Dest /section-7.4.6 /OUT pdfmark -[/Title (obj Extensions to the EXTERN Directive) -/Dest /section-7.4.7 /OUT pdfmark -[/Title (obj Extensions to the COMMON Directive) -/Dest /section-7.4.8 /OUT pdfmark -[/Title (win32: Microsoft Win32 Object Files) -/Count -2 /Dest /section-7.5 /OUT pdfmark -[/Title (win32 Extensions to the SECTION Directive) -/Dest /section-7.5.1 /OUT pdfmark -[/Title (win32: Safe Structured Exception Handling) -/Dest /section-7.5.2 /OUT pdfmark -[/Title (win64: Microsoft Win64 Object Files) -/Count -2 /Dest /section-7.6 /OUT pdfmark -[/Title (win64: Writing Position-Independent Code) -/Dest /section-7.6.1 /OUT pdfmark -[/Title (win64: Structured Exception Handling) -/Dest /section-7.6.2 /OUT pdfmark -[/Title (coff: Common Object File Format) -/Dest /section-7.7 /OUT pdfmark -[/Title (macho32 and macho64: Mach Object File Format) -/Dest /section-7.8 /OUT pdfmark -[/Title (elf32 and elf64: Executable and Linkable Format Object Files) -/Count -8 /Dest /section-7.9 /OUT pdfmark -[/Title (ELF specific directive osabi) -/Dest /section-7.9.1 /OUT pdfmark -[/Title (elf Extensions to the SECTION Directive) -/Dest /section-7.9.2 /OUT pdfmark -[/Title (Position-Independent Code: elf Special Symbols and WRT) -/Dest /section-7.9.3 /OUT pdfmark -[/Title (Thread Local Storage: elf Special Symbols and WRT) -/Dest /section-7.9.4 /OUT pdfmark -[/Title (elf Extensions to the GLOBAL Directive) -/Dest /section-7.9.5 /OUT pdfmark -[/Title (elf Extensions to the COMMON Directive ) -/Dest /section-7.9.6 /OUT pdfmark -[/Title (16-bit code and ELF ) -/Dest /section-7.9.7 /OUT pdfmark -[/Title (Debug formats and ELF ) -/Dest /section-7.9.8 /OUT pdfmark -[/Title (aout: Linux a.out Object Files) -/Dest /section-7.10 /OUT pdfmark -[/Title (aoutb: NetBSD/FreeBSD/OpenBSD a.out Object Files) -/Dest /section-7.11 /OUT pdfmark -[/Title (as86: Minix/Linux as86 Object Files) -/Dest /section-7.12 /OUT pdfmark -[/Title (rdf: Relocatable Dynamic Object File Format) -/Count -4 /Dest /section-7.13 /OUT pdfmark -[/Title (Requiring a Library: The LIBRARY Directive) -/Dest /section-7.13.1 /OUT pdfmark -[/Title (Specifying a Module Name: The MODULE Directive) -/Dest /section-7.13.2 /OUT pdfmark -[/Title (rdf Extensions to the GLOBAL Directive) -/Dest /section-7.13.3 /OUT pdfmark -[/Title (rdf Extensions to the EXTERN Directive) -/Dest /section-7.13.4 /OUT pdfmark -[/Title (dbg: Debugging Format) -/Dest /section-7.14 /OUT pdfmark -[/Title (Writing 16-bit Code \(DOS, Windows 3/3.1\)) -/Count -5 /Dest /chapter-8 /OUT pdfmark -[/Title (Producing .EXE Files) -/Count -2 /Dest /section-8.1 /OUT pdfmark -[/Title (Using the obj Format To Generate .EXE Files) -/Dest /section-8.1.1 /OUT pdfmark -[/Title (Using the bin Format To Generate .EXE Files) -/Dest /section-8.1.2 /OUT pdfmark -[/Title (Producing .COM Files) -/Count -2 /Dest /section-8.2 /OUT pdfmark -[/Title (Using the bin Format To Generate .COM Files) -/Dest /section-8.2.1 /OUT pdfmark -[/Title (Using the obj Format To Generate .COM Files) -/Dest /section-8.2.2 /OUT pdfmark -[/Title (Producing .SYS Files) -/Dest /section-8.3 /OUT pdfmark -[/Title (Interfacing to 16-bit C Programs) -/Count -5 /Dest /section-8.4 /OUT pdfmark -[/Title (External Symbol Names) -/Dest /section-8.4.1 /OUT pdfmark -[/Title (Memory Models) -/Dest /section-8.4.2 /OUT pdfmark -[/Title (Function Definitions and Function Calls) -/Dest /section-8.4.3 /OUT pdfmark -[/Title (Accessing Data Items) -/Dest /section-8.4.4 /OUT pdfmark -[/Title (c16.mac: Helper Macros for the 16-bit C Interface) -/Dest /section-8.4.5 /OUT pdfmark -[/Title (Interfacing to Borland Pascal Programs) -/Count -3 /Dest /section-8.5 /OUT pdfmark -[/Title (The Pascal Calling Convention) -/Dest /section-8.5.1 /OUT pdfmark -[/Title (Borland Pascal Segment Name Restrictions) -/Dest /section-8.5.2 /OUT pdfmark -[/Title (Using c16.mac With Pascal Programs) -/Dest /section-8.5.3 /OUT pdfmark -[/Title (Writing 32-bit Code \(Unix, Win32, DJGPP\)) -/Count -2 /Dest /chapter-9 /OUT pdfmark -[/Title (Interfacing to 32-bit C Programs) -/Count -4 /Dest /section-9.1 /OUT pdfmark -[/Title (External Symbol Names) -/Dest /section-9.1.1 /OUT pdfmark -[/Title (Function Definitions and Function Calls) -/Dest /section-9.1.2 /OUT pdfmark -[/Title (Accessing Data Items) -/Dest /section-9.1.3 /OUT pdfmark -[/Title (c32.mac: Helper Macros for the 32-bit C Interface) -/Dest /section-9.1.4 /OUT pdfmark -[/Title (Writing NetBSD/FreeBSD/OpenBSD and Linux/ELF Shared Libraries) -/Count -6 /Dest /section-9.2 /OUT pdfmark -[/Title (Obtaining the Address of the GOT) -/Dest /section-9.2.1 /OUT pdfmark -[/Title (Finding Your Local Data Items) -/Dest /section-9.2.2 /OUT pdfmark -[/Title (Finding External and Common Data Items) -/Dest /section-9.2.3 /OUT pdfmark -[/Title (Exporting Symbols to the Library User) -/Dest /section-9.2.4 /OUT pdfmark -[/Title (Calling Procedures Outside the Library) -/Dest /section-9.2.5 /OUT pdfmark -[/Title (Generating the Library File) -/Dest /section-9.2.6 /OUT pdfmark -[/Title (Mixing 16 and 32 Bit Code) -/Count -3 /Dest /chapter-10 /OUT pdfmark -[/Title (Mixed-Size Jumps) -/Dest /section-10.1 /OUT pdfmark -[/Title (Addressing Between Different-Size Segments) -/Dest /section-10.2 /OUT pdfmark -[/Title (Other Mixed-Size Instructions) -/Dest /section-10.3 /OUT pdfmark -[/Title (Writing 64-bit Code \(Unix, Win64\)) -/Count -4 /Dest /chapter-11 /OUT pdfmark -[/Title (Register Names in 64-bit Mode) -/Dest /section-11.1 /OUT pdfmark -[/Title (Immediates and Displacements in 64-bit Mode) -/Dest /section-11.2 /OUT pdfmark -[/Title (Interfacing to 64-bit C Programs \(Unix\)) -/Dest /section-11.3 /OUT pdfmark -[/Title (Interfacing to 64-bit C Programs \(Win64\)) -/Dest /section-11.4 /OUT pdfmark -[/Title (Troubleshooting) -/Count -2 /Dest /chapter-12 /OUT pdfmark -[/Title (Common Problems) -/Count -4 /Dest /section-12.1 /OUT pdfmark -[/Title (NASM Generates Inefficient Code) -/Dest /section-12.1.1 /OUT pdfmark -[/Title (My Jumps are Out of Range) -/Dest /section-12.1.2 /OUT pdfmark -[/Title (ORG Doesn't Work) -/Dest /section-12.1.3 /OUT pdfmark -[/Title (TIMES Doesn't Work) -/Dest /section-12.1.4 /OUT pdfmark -[/Title (Bugs) -/Dest /section-12.2 /OUT pdfmark -[/Title (Ndisasm) -/Count -4 /Dest /appendix-A /OUT pdfmark -[/Title (Introduction) -/Dest /section-A.1 /OUT pdfmark -[/Title (Getting Started: Installation) -/Dest /section-A.2 /OUT pdfmark -[/Title (Running NDISASM) -/Count -4 /Dest /section-A.3 /OUT pdfmark -[/Title (COM Files: Specifying an Origin) -/Dest /section-A.3.1 /OUT pdfmark -[/Title (Code Following Data: Synchronisation) -/Dest /section-A.3.2 /OUT pdfmark -[/Title (Mixed Code and Data: Automatic \(Intelligent\) Synchronisation ) -/Dest /section-A.3.3 /OUT pdfmark -[/Title (Other Options) -/Dest /section-A.3.4 /OUT pdfmark -[/Title (Bugs and Improvements) -/Dest /section-A.4 /OUT pdfmark -[/Title (Instruction List) -/Count -1 /Dest /appendix-B /OUT pdfmark -[/Title (Introduction) -/Count -32 /Dest /section-B.1 /OUT pdfmark -[/Title (Special instructions...) -/Dest /section-B.1.1 /OUT pdfmark -[/Title (Conventional instructions) -/Dest /section-B.1.2 /OUT pdfmark -[/Title (Katmai Streaming SIMD instructions \(SSE \226\226 a.k.a. KNI, XMM, MMX2\)) -/Dest /section-B.1.3 /OUT pdfmark -[/Title (Introduced in Deschutes but necessary for SSE support) -/Dest /section-B.1.4 /OUT pdfmark -[/Title (XSAVE group \(AVX and extended state\)) -/Dest /section-B.1.5 /OUT pdfmark -[/Title (Generic memory operations) -/Dest /section-B.1.6 /OUT pdfmark -[/Title (New MMX instructions introduced in Katmai) -/Dest /section-B.1.7 /OUT pdfmark -[/Title (AMD Enhanced 3DNow! \(Athlon\) instructions) -/Dest /section-B.1.8 /OUT pdfmark -[/Title (Willamette SSE2 Cacheability Instructions) -/Dest /section-B.1.9 /OUT pdfmark -[/Title (Willamette MMX instructions \(SSE2 SIMD Integer Instructions\)) -/Dest /section-B.1.10 /OUT pdfmark -[/Title (Willamette Streaming SIMD instructions \(SSE2\)) -/Dest /section-B.1.11 /OUT pdfmark -[/Title (Prescott New Instructions \(SSE3\)) -/Dest /section-B.1.12 /OUT pdfmark -[/Title (VMX Instructions) -/Dest /section-B.1.13 /OUT pdfmark -[/Title (Extended Page Tables VMX instructions) -/Dest /section-B.1.14 /OUT pdfmark -[/Title (Tejas New Instructions \(SSSE3\)) -/Dest /section-B.1.15 /OUT pdfmark -[/Title (AMD SSE4A) -/Dest /section-B.1.16 /OUT pdfmark -[/Title (New instructions in Barcelona) -/Dest /section-B.1.17 /OUT pdfmark -[/Title (Penryn New Instructions \(SSE4.1\)) -/Dest /section-B.1.18 /OUT pdfmark -[/Title (Nehalem New Instructions \(SSE4.2\)) -/Dest /section-B.1.19 /OUT pdfmark -[/Title (Intel SMX) -/Dest /section-B.1.20 /OUT pdfmark -[/Title (Geode \(Cyrix\) 3DNow! additions) -/Dest /section-B.1.21 /OUT pdfmark -[/Title (Intel new instructions in ???) -/Dest /section-B.1.22 /OUT pdfmark -[/Title (Intel AES instructions) -/Dest /section-B.1.23 /OUT pdfmark -[/Title (Intel AVX AES instructions) -/Dest /section-B.1.24 /OUT pdfmark -[/Title (Intel AVX instructions) -/Dest /section-B.1.25 /OUT pdfmark -[/Title (Intel Carry-Less Multiplication instructions \(CLMUL\)) -/Dest /section-B.1.26 /OUT pdfmark -[/Title (Intel AVX Carry-Less Multiplication instructions \(CLMUL\)) -/Dest /section-B.1.27 /OUT pdfmark -[/Title (Intel Fused Multiply-Add instructions \(FMA\)) -/Dest /section-B.1.28 /OUT pdfmark -[/Title (VIA \(Centaur\) security instructions) -/Dest /section-B.1.29 /OUT pdfmark -[/Title (AMD Lightweight Profiling \(LWP\) instructions) -/Dest /section-B.1.30 /OUT pdfmark -[/Title (AMD XOP, FMA4 and CVT16 instructions \(SSE5\)) -/Dest /section-B.1.31 /OUT pdfmark -[/Title (Systematic names for the hinting nop instructions) -/Dest /section-B.1.32 /OUT pdfmark -[/Title (NASM Version History) -/Count -3 /Dest /appendix-C /OUT pdfmark -[/Title (NASM 2 Series) -/Count -11 /Dest /section-C.1 /OUT pdfmark -[/Title (Version 2.08) -/Dest /section-C.1.1 /OUT pdfmark -[/Title (Version 2.07) -/Dest /section-C.1.2 /OUT pdfmark -[/Title (Version 2.06) -/Dest /section-C.1.3 /OUT pdfmark -[/Title (Version 2.05.01) -/Dest /section-C.1.4 /OUT pdfmark -[/Title (Version 2.05) -/Dest /section-C.1.5 /OUT pdfmark -[/Title (Version 2.04) -/Dest /section-C.1.6 /OUT pdfmark -[/Title (Version 2.03.01) -/Dest /section-C.1.7 /OUT pdfmark -[/Title (Version 2.03) -/Dest /section-C.1.8 /OUT pdfmark -[/Title (Version 2.02) -/Dest /section-C.1.9 /OUT pdfmark -[/Title (Version 2.01) -/Dest /section-C.1.10 /OUT pdfmark -[/Title (Version 2.00) -/Dest /section-C.1.11 /OUT pdfmark -[/Title (NASM 0.98 Series) -/Count -55 /Dest /section-C.2 /OUT pdfmark -[/Title (Version 0.98.39) -/Dest /section-C.2.1 /OUT pdfmark -[/Title (Version 0.98.38) -/Dest /section-C.2.2 /OUT pdfmark -[/Title (Version 0.98.37) -/Dest /section-C.2.3 /OUT pdfmark -[/Title (Version 0.98.36) -/Dest /section-C.2.4 /OUT pdfmark -[/Title (Version 0.98.35) -/Dest /section-C.2.5 /OUT pdfmark -[/Title (Version 0.98.34) -/Dest /section-C.2.6 /OUT pdfmark -[/Title (Version 0.98.33) -/Dest /section-C.2.7 /OUT pdfmark -[/Title (Version 0.98.32) -/Dest /section-C.2.8 /OUT pdfmark -[/Title (Version 0.98.31) -/Dest /section-C.2.9 /OUT pdfmark -[/Title (Version 0.98.30) -/Dest /section-C.2.10 /OUT pdfmark -[/Title (Version 0.98.28) -/Dest /section-C.2.11 /OUT pdfmark -[/Title (Version 0.98.26) -/Dest /section-C.2.12 /OUT pdfmark -[/Title (Version 0.98.25alt) -/Dest /section-C.2.13 /OUT pdfmark -[/Title (Version 0.98.25) -/Dest /section-C.2.14 /OUT pdfmark -[/Title (Version 0.98.24p1) -/Dest /section-C.2.15 /OUT pdfmark -[/Title (Version 0.98.24) -/Dest /section-C.2.16 /OUT pdfmark -[/Title (Version 0.98.23) -/Dest /section-C.2.17 /OUT pdfmark -[/Title (Version 0.98.22) -/Dest /section-C.2.18 /OUT pdfmark -[/Title (Version 0.98.21) -/Dest /section-C.2.19 /OUT pdfmark -[/Title (Version 0.98.20) -/Dest /section-C.2.20 /OUT pdfmark -[/Title (Version 0.98.19) -/Dest /section-C.2.21 /OUT pdfmark -[/Title (Version 0.98.18) -/Dest /section-C.2.22 /OUT pdfmark -[/Title (Version 0.98.17) -/Dest /section-C.2.23 /OUT pdfmark -[/Title (Version 0.98.16) -/Dest /section-C.2.24 /OUT pdfmark -[/Title (Version 0.98.15) -/Dest /section-C.2.25 /OUT pdfmark -[/Title (Version 0.98.14) -/Dest /section-C.2.26 /OUT pdfmark -[/Title (Version 0.98.13) -/Dest /section-C.2.27 /OUT pdfmark -[/Title (Version 0.98.12) -/Dest /section-C.2.28 /OUT pdfmark -[/Title (Version 0.98.11) -/Dest /section-C.2.29 /OUT pdfmark -[/Title (Version 0.98.10) -/Dest /section-C.2.30 /OUT pdfmark -[/Title (Version 0.98.09) -/Dest /section-C.2.31 /OUT pdfmark -[/Title (Version 0.98.08) -/Dest /section-C.2.32 /OUT pdfmark -[/Title (Version 0.98.09b with John Coffman patches released 28-Oct-2001) -/Dest /section-C.2.33 /OUT pdfmark -[/Title (Version 0.98.07 released 01/28/01) -/Dest /section-C.2.34 /OUT pdfmark -[/Title (Version 0.98.06f released 01/18/01) -/Dest /section-C.2.35 /OUT pdfmark -[/Title (Version 0.98.06e released 01/09/01) -/Dest /section-C.2.36 /OUT pdfmark -[/Title (Version 0.98p1) -/Dest /section-C.2.37 /OUT pdfmark -[/Title (Version 0.98bf \(bug-fixed\)) -/Dest /section-C.2.38 /OUT pdfmark -[/Title (Version 0.98.03 with John Coffman's changes released 27-Jul-2000) -/Dest /section-C.2.39 /OUT pdfmark -[/Title (Version 0.98.03) -/Dest /section-C.2.40 /OUT pdfmark -[/Title (Version 0.98) -/Dest /section-C.2.41 /OUT pdfmark -[/Title (Version 0.98p9) -/Dest /section-C.2.42 /OUT pdfmark -[/Title (Version 0.98p8) -/Dest /section-C.2.43 /OUT pdfmark -[/Title (Version 0.98p7) -/Dest /section-C.2.44 /OUT pdfmark -[/Title (Version 0.98p6) -/Dest /section-C.2.45 /OUT pdfmark -[/Title (Version 0.98p3.7) -/Dest /section-C.2.46 /OUT pdfmark -[/Title (Version 0.98p3.6) -/Dest /section-C.2.47 /OUT pdfmark -[/Title (Version 0.98p3.5) -/Dest /section-C.2.48 /OUT pdfmark -[/Title (Version 0.98p3.4) -/Dest /section-C.2.49 /OUT pdfmark -[/Title (Version 0.98p3.3) -/Dest /section-C.2.50 /OUT pdfmark -[/Title (Version 0.98p3.2) -/Dest /section-C.2.51 /OUT pdfmark -[/Title (Version 0.98p3-hpa) -/Dest /section-C.2.52 /OUT pdfmark -[/Title (Version 0.98 pre-release 3) -/Dest /section-C.2.53 /OUT pdfmark -[/Title (Version 0.98 pre-release 2) -/Dest /section-C.2.54 /OUT pdfmark -[/Title (Version 0.98 pre-release 1) -/Dest /section-C.2.55 /OUT pdfmark -[/Title (NASM 0.9 Series) -/Count -8 /Dest /section-C.3 /OUT pdfmark -[/Title (Version 0.97 released December 1997) -/Dest /section-C.3.1 /OUT pdfmark -[/Title (Version 0.96 released November 1997) -/Dest /section-C.3.2 /OUT pdfmark -[/Title (Version 0.95 released July 1997) -/Dest /section-C.3.3 /OUT pdfmark -[/Title (Version 0.94 released April 1997) -/Dest /section-C.3.4 /OUT pdfmark -[/Title (Version 0.93 released January 1997) -/Dest /section-C.3.5 /OUT pdfmark -[/Title (Version 0.92 released January 1997) -/Dest /section-C.3.6 /OUT pdfmark -[/Title (Version 0.91 released November 1996) -/Dest /section-C.3.7 /OUT pdfmark -[/Title (Version 0.90 released October 1996) -/Dest /section-C.3.8 /OUT pdfmark -[/Title (Index) -/Dest /index /OUT pdfmark -setpagesize -%%EndSetup -%%Page: 1 1 -%%BeginPageSetup -save -%%EndPageSetup -/1 pa -/ti (NASM \227 The Netwide Assembler) def -/sti (version\2402.08rc7) def -lmarg pageheight 2 mul 3 div moveto -tfont0 setfont -/title linkdest ti show -lmarg pageheight 2 mul 3 div 10 sub moveto -0 setlinecap 3 setlinewidth -pagewidth lmarg sub rmarg sub 0 rlineto currentpoint stroke moveto -hfont1 setfont sti stringwidth pop neg -15.4 rmoveto -sti show -BeginEPSF -154.5 363 translate --99 -45 translate -99 45 moveto -385 45 lineto -385 111 lineto -99 111 lineto -99 45 lineto clip newpath -%%BeginDocument: (nasmlogo.eps) -%!PS-Adobe-3.0 EPSF-3.0 -%%BoundingBox: 99 45 385 111 -%%DocumentData: Clean7Bit -%%DocumentFonts: Courier-Bold -%%DocumentNeededFonts: Courier-Bold -%%Title: (NASM logo) -%%EndComments -%%Page 1 1 -%%BeginPageSetup -save -newpath -%%EndPageSetup -% x y pointsize -- -/nasmlogo { -gsave 1 dict begin -/sz exch def -/Courier-Bold findfont sz scalefont setfont -moveto -0.85 1.22 scale -[(-~~..~:#;L .-:#;L,.- .~:#:;.T -~~.~:;. .~:;. ) -( E8+U *T +U' *T# .97 *L E8+' *;T' *;, ) -( D97 `*L .97 '*L "T;E+:, D9 *L *L ) -( H7 I# T7 I# "*:. H7 I# I# ) -( U: :8 *#+ , :8 T, 79 U: :8 :8 ) -(,#B. .IE, "T;E* .IE, J *+;#:T*" ,#B. .IE, .IE,)] { -currentpoint 3 -1 roll -sz -0.10 mul 0 3 -1 roll ashow -sz 0.72 mul sub moveto -} forall -end grestore -} def -0.6 setgray 100 100 12 nasmlogo -%%PageTrailer -restore -%%EndDocument -EndEPSF -restore showpage -%%Page: 2 2 -%%BeginPageSetup -save -%%EndPageSetup -/2 pa -[(\251 1996-2009 The NASM Development Team \227 All Rights Reserved)]164 norm3 -[(This document is redistributable under the license given in the file "COPYING" distributed in the NASM)]147 norm1 -[(archive.)]136 norm2 -[(This release is dedicated to the memory of Charles A. Crayne. We miss you, Chuck.)]119 norm3 -restore showpage -%%Page: 3 3 -%%BeginPageSetup -save -%%EndPageSetup -/3 pa -[{/contents xa}(Contents)]642.8 chap3 -[(Introduction)](Chapter 1: )/chapter-1 (14)607.8 toc03 -[(What Is NASM?)](1.1 )/section-1.1 (14)590.8 toc13 -[(Why Yet Another Assembler?)](1.1.1 )/section-1.1.1 (14)573.8 toc23 -[(License Conditions)](1.1.2 )/section-1.1.2 (14)556.8 toc23 -[(Contact Information)](1.2 )/section-1.2 (15)539.8 toc13 -[(Installation)](1.3 )/section-1.3 (15)522.8 toc13 -[(Installing NASM under MS-DOS or Windows)](1.3.1 )/section-1.3.1 (15)505.8 toc23 -[(Installing NASM under Unix)](1.3.2 )/section-1.3.2 (16)488.8 toc23 -[(Running NASM)](Chapter 2: )/chapter-2 (17)471.8 toc03 -[(NASM Command-Line Syntax)](2.1 )/section-2.1 (17)454.8 toc13 -[(The )2(-o)0( Option: Specifying the Output File Name)](2.1.1 )/section-2.1.1 (17)437.8 toc23 -[(The )2(-f)0( Option: Specifying the Output File Format)](2.1.2 )/section-2.1.2 (18)420.8 toc23 -[(The )2(-l)0( Option: Generating a Listing File)](2.1.3 )/section-2.1.3 (18)403.8 toc23 -[(The )2(-M)0( Option: Generate Makefile Dependencies)](2.1.4 )/section-2.1.4 (18)386.8 toc23 -[(The )2(-MG)0( Option: Generate Makefile Dependencies)](2.1.5 )/section-2.1.5 (18)369.8 toc23 -[(The )2(-MF)0( Option: Set Makefile Dependency File)](2.1.6 )/section-2.1.6 (18)352.8 toc23 -[(The )2(-MD)0( Option: Assemble and Generate Dependencies)](2.1.7 )/section-2.1.7 (18)335.8 toc23 -[(The )2(-MT)0( Option: Dependency Target Name)](2.1.8 )/section-2.1.8 (19)318.8 toc23 -[(The )2(-MQ)0( Option: Dependency Target Name \(Quoted\))](2.1.9 )/section-2.1.9 (19)301.8 toc23 -[(The )2(-MP)0( Option: Emit phony targets)](2.1.10 )/section-2.1.10 (19)284.8 toc23 -[(The )2(-F)0( Option: Selecting a Debug Information Format)](2.1.11 )/section-2.1.11 (19)267.8 toc23 -[(The )2(-g)0( Option: Enabling Debug Information.)](2.1.12 )/section-2.1.12 (19)250.8 toc23 -[(The )2(-X)0( Option: Selecting an Error Reporting Format)](2.1.13 )/section-2.1.13 (19)233.8 toc23 -[(The )2(-Z)0( Option: Send Errors to a File)](2.1.14 )/section-2.1.14 (20)216.8 toc23 -[(The )2(-s)0( Option: Send Errors to )2(stdout)](2.1.15 )/section-2.1.15 (20)199.8 toc23 -[(The )2(-i)0( Option: Include File Search Directories)](2.1.16 )/section-2.1.16 (20)182.8 toc23 -[(The )2(-p)0( Option: Pre-Include a File)](2.1.17 )/section-2.1.17 (20)165.8 toc23 -[(The )2(-d)0( Option: Pre-Define a Macro)](2.1.18 )/section-2.1.18 (20)148.8 toc23 -[(The )2(-u)0( Option: Undefine a Macro)](2.1.19 )/section-2.1.19 (21)131.8 toc23 -[(The )2(-E)0( Option: Preprocess Only)](2.1.20 )/section-2.1.20 (21)114.8 toc23 -(3)pageodd -restore showpage -%%Page: 4 4 -%%BeginPageSetup -save -%%EndPageSetup -/4 pa -[(The )2(-a)0( Option: Don't Preprocess At All)](2.1.21 )/section-2.1.21 (21)681 toc23 -[(The )2(-O)0( Option: Specifying Multipass Optimization)](2.1.22 )/section-2.1.22 (21)664 toc23 -[(The )2(-t)0( Option: Enable TASM Compatibility Mode)](2.1.23 )/section-2.1.23 (22)647 toc23 -[(The )2(-w)0( and )2(-W)0( Options: Enable or Disable Assembly Warnings)](2.1.24 )/section-2.1.24 (22)630 toc23 -[(The )2(-v)0( Option: Display Version Info)](2.1.25 )/section-2.1.25 (23)613 toc23 -[(The )2(-y)0( Option: Display Available Debug Info Formats)](2.1.26 )/section-2.1.26 (23)596 toc23 -[(The )2(--prefix)0( and )2(--postfix)0( Options.)](2.1.27 )/section-2.1.27 (23)579 toc23 -[(The )2(NASMENV)0( Environment Variable)](2.1.28 )/section-2.1.28 (23)562 toc23 -[(Quick Start for MASM Users)](2.2 )/section-2.2 (24)545 toc13 -[(NASM Is Case-Sensitive)](2.2.1 )/section-2.2.1 (24)528 toc23 -[(NASM Requires Square Brackets For Memory References)](2.2.2 )/section-2.2.2 (24)511 toc23 -[(NASM Doesn't Store Variable Types)](2.2.3 )/section-2.2.3 (24)494 toc23 -[(NASM Doesn't )2(ASSUME)](2.2.4 )/section-2.2.4 (25)477 toc23 -[(NASM Doesn't Support Memory Models)](2.2.5 )/section-2.2.5 (25)460 toc23 -[(Floating-Point Differences)](2.2.6 )/section-2.2.6 (25)443 toc23 -[(Other Differences)](2.2.7 )/section-2.2.7 (25)426 toc23 -[(The NASM Language)](Chapter 3: )/chapter-3 (26)409 toc03 -[(Layout of a NASM Source Line)](3.1 )/section-3.1 (26)392 toc13 -[(Pseudo-Instructions)](3.2 )/section-3.2 (27)375 toc13 -[2(DB)0( and Friends: Declaring Initialized Data)](3.2.1 )/section-3.2.1 (27)358 toc23 -[2(RESB)0( and Friends: Declaring Uninitialized Data)](3.2.2 )/section-3.2.2 (27)341 toc23 -[2(INCBIN)0(: Including External Binary Files)](3.2.3 )/section-3.2.3 (27)324 toc23 -[2(EQU)0(: Defining Constants)](3.2.4 )/section-3.2.4 (28)307 toc23 -[2(TIMES)0(: Repeating Instructions or Data)](3.2.5 )/section-3.2.5 (28)290 toc23 -[(Effective Addresses)](3.3 )/section-3.3 (28)273 toc13 -[(Constants)](3.4 )/section-3.4 (29)256 toc13 -[(Numeric Constants)](3.4.1 )/section-3.4.1 (29)239 toc23 -[(Character Strings)](3.4.2 )/section-3.4.2 (30)222 toc23 -[(Character Constants)](3.4.3 )/section-3.4.3 (31)205 toc23 -[(String Constants)](3.4.4 )/section-3.4.4 (31)188 toc23 -[(Unicode Strings)](3.4.5 )/section-3.4.5 (31)171 toc23 -[(Floating-Point Constants)](3.4.6 )/section-3.4.6 (31)154 toc23 -[(Packed BCD Constants)](3.4.7 )/section-3.4.7 (33)137 toc23 -[(Expressions)](3.5 )/section-3.5 (33)120 toc13 -[2(|)0(: Bitwise OR Operator)](3.5.1 )/section-3.5.1 (33)103 toc23 -(4)pageeven -restore showpage -%%Page: 5 5 -%%BeginPageSetup -save -%%EndPageSetup -/5 pa -[2(^)0(: Bitwise XOR Operator)](3.5.2 )/section-3.5.2 (33)681 toc23 -[2(&)0(: Bitwise AND Operator)](3.5.3 )/section-3.5.3 (33)664 toc23 -[2(<<)0( and )2(>>)0(: Bit Shift Operators)](3.5.4 )/section-3.5.4 (33)647 toc23 -[2(+)0( and )2(-)0(: Addition and Subtraction Operators)](3.5.5 )/section-3.5.5 (33)630 toc23 -[2(*)0(, )2(/)0(, )2(//)0(, )2(%)0( and )2(%%)0(: Multiplication and Division)](3.5.6 )/section-3.5.6 (33)613 toc23 -[(Unary Operators: )2(+)0(, )2(-)0(, )2(~)0(, )2(!)0( and )2(SEG)](3.5.7 )/section-3.5.7 (34)596 toc23 -[2(SEG)0( and )2(WRT)](3.6 )/section-3.6 (34)579 toc13 -[2(STRICT)0(: Inhibiting Optimization)](3.7 )/section-3.7 (34)562 toc13 -[(Critical Expressions)](3.8 )/section-3.8 (35)545 toc13 -[(Local Labels)](3.9 )/section-3.9 (35)528 toc13 -[(The NASM Preprocessor)](Chapter 4: )/chapter-4 (37)511 toc03 -[(Single-Line Macros)](4.1 )/section-4.1 (37)494 toc13 -[(The Normal Way: )2(%define)](4.1.1 )/section-4.1.1 (37)477 toc23 -[(Resolving )2(%define)0(: )2(%xdefine)](4.1.2 )/section-4.1.2 (38)460 toc23 -[(Macro Indirection: )2(%[...])](4.1.3 )/section-4.1.3 (39)443 toc23 -[(Concatenating Single Line Macro Tokens: )2(%+)](4.1.4 )/section-4.1.4 (39)426 toc23 -[(The Macro Name Itself: )2(%?)0( and )2(%??)](4.1.5 )/section-4.1.5 (39)409 toc23 -[(Undefining Single-Line Macros: )2(%undef)](4.1.6 )/section-4.1.6 (40)392 toc23 -[(Preprocessor Variables: )2(%assign)](4.1.7 )/section-4.1.7 (40)375 toc23 -[(Defining Strings: )2(%defstr)](4.1.8 )/section-4.1.8 (41)358 toc23 -[(Defining Tokens: )2(%deftok)](4.1.9 )/section-4.1.9 (41)341 toc23 -[(String Manipulation in Macros)](4.2 )/section-4.2 (41)324 toc13 -[(Concatenating Strings: )2(%strcat)](4.2.1 )/section-4.2.1 (41)307 toc23 -[(String Length: )2(%strlen)](4.2.2 )/section-4.2.2 (41)290 toc23 -[(Extracting Substrings: )2(%substr)](4.2.3 )/section-4.2.3 (42)273 toc23 -[(Multi-Line Macros: )2(%macro)](4.3 )/section-4.3 (42)256 toc13 -[(Recursive Multi-Line Macros: )2(%rmacro)](4.3.1 )/section-4.3.1 (43)239 toc23 -[(Overloading Multi-Line Macros)](4.3.2 )/section-4.3.2 (43)222 toc23 -[(Macro-Local Labels)](4.3.3 )/section-4.3.3 (43)205 toc23 -[(Greedy Macro Parameters)](4.3.4 )/section-4.3.4 (44)188 toc23 -[(Default Macro Parameters)](4.3.5 )/section-4.3.5 (45)171 toc23 -[2(%0)0(: Macro Parameter Counter)](4.3.6 )/section-4.3.6 (45)154 toc23 -[2(%rotate)0(: Rotating Macro Parameters)](4.3.7 )/section-4.3.7 (46)137 toc23 -[(Concatenating Macro Parameters)](4.3.8 )/section-4.3.8 (46)120 toc23 -[(Condition Codes as Macro Parameters)](4.3.9 )/section-4.3.9 (47)103 toc23 -(5)pageodd -restore showpage -%%Page: 6 6 -%%BeginPageSetup -save -%%EndPageSetup -/6 pa -[(Disabling Listing Expansion)](4.3.10 )/section-4.3.10 (48)681 toc23 -[(Undefining Multi-Line Macros: )2(%unmacro)](4.3.11 )/section-4.3.11 (48)664 toc23 -[(Exiting Multi-Line Macros: )2(%exitmacro)](4.3.12 )/section-4.3.12 (48)647 toc23 -[(Conditional Assembly)](4.4 )/section-4.4 (49)630 toc13 -[2(%ifdef)0(: Testing Single-Line Macro Existence)](4.4.1 )/section-4.4.1 (49)613 toc23 -[2(%ifmacro)0(: Testing Multi-Line Macro Existence)](4.4.2 )/section-4.4.2 (49)596 toc23 -[2(%ifctx)0(: Testing the Context Stack)](4.4.3 )/section-4.4.3 (50)579 toc23 -[2(%if)0(: Testing Arbitrary Numeric Expressions)](4.4.4 )/section-4.4.4 (50)562 toc23 -[2(%ifidn)0( and )2(%ifidni)0(: Testing Exact Text Identity)](4.4.5 )/section-4.4.5 (50)545 toc23 -[2(%ifid)0(, )2(%ifnum)0(, )2(%ifstr)0(: Testing Token Types)](4.4.6 )/section-4.4.6 (51)528 toc23 -[2(%iftoken)0(: Test for a Single Token)](4.4.7 )/section-4.4.7 (52)511 toc23 -[2(%ifempty)0(: Test for Empty Expansion)](4.4.8 )/section-4.4.8 (52)494 toc23 -[(Preprocessor Loops: )2(%rep)](4.5 )/section-4.5 (52)477 toc13 -[(Source Files and Dependencies)](4.6 )/section-4.6 (53)460 toc13 -[2(%include)0(: Including Other Files)](4.6.1 )/section-4.6.1 (53)443 toc23 -[2(%pathsearch)0(: Search the Include Path)](4.6.2 )/section-4.6.2 (53)426 toc23 -[2(%depend)0(: Add Dependent Files)](4.6.3 )/section-4.6.3 (53)409 toc23 -[2(%use)0(: Include Standard Macro Package)](4.6.4 )/section-4.6.4 (54)392 toc23 -[(The Context Stack)](4.7 )/section-4.7 (54)375 toc13 -[2(%push)0( and )2(%pop)0(: Creating and Removing Contexts)](4.7.1 )/section-4.7.1 (54)358 toc23 -[(Context-Local Labels)](4.7.2 )/section-4.7.2 (54)341 toc23 -[(Context-Local Single-Line Macros)](4.7.3 )/section-4.7.3 (55)324 toc23 -[2(%repl)0(: Renaming a Context)](4.7.4 )/section-4.7.4 (55)307 toc23 -[(Example Use of the Context Stack: Block IFs)](4.7.5 )/section-4.7.5 (55)290 toc23 -[(Stack Relative Preprocessor Directives)](4.8 )/section-4.8 (57)273 toc13 -[2(%arg)0( Directive)](4.8.1 )/section-4.8.1 (57)256 toc23 -[2(%stacksize)0( Directive)](4.8.2 )/section-4.8.2 (57)239 toc23 -[2(%local)0( Directive)](4.8.3 )/section-4.8.3 (58)222 toc23 -[(Reporting User-Defined Errors: )2(%error)0(, )2(%warning)0(, )2(%fatal)](4.9 )/section-4.9 (58)205 toc13 -[(Other Preprocessor Directives)](4.10 )/section-4.10 (59)188 toc13 -[2(%line)0( Directive)](4.10.1 )/section-4.10.1 (59)171 toc23 -[2(%!<env>)0(: Read an environment variable.)](4.10.2 )/section-4.10.2 (60)154 toc23 -[(Standard Macros)](4.11 )/section-4.11 (60)137 toc13 -[(NASM Version Macros)](4.11.1 )/section-4.11.1 (60)120 toc23 -[2(__NASM_VERSION_ID__)0(: NASM Version ID)](4.11.2 )/section-4.11.2 (60)103 toc23 -(6)pageeven -restore showpage -%%Page: 7 7 -%%BeginPageSetup -save -%%EndPageSetup -/7 pa -[2(__NASM_VER__)0(: NASM Version string)](4.11.3 )/section-4.11.3 (60)681 toc23 -[2(__FILE__)0( and )2(__LINE__)0(: File Name and Line Number)](4.11.4 )/section-4.11.4 (61)664 toc23 -[2(__BITS__)0(: Current BITS Mode)](4.11.5 )/section-4.11.5 (61)647 toc23 -[2(__OUTPUT_FORMAT__)0(: Current Output Format)](4.11.6 )/section-4.11.6 (61)630 toc23 -[(Assembly Date and Time Macros)](4.11.7 )/section-4.11.7 (61)613 toc23 -[2(__USE_)1(package)2(__)0(: Package Include Test)](4.11.8 )/section-4.11.8 (62)596 toc23 -[2(__PASS__)0(: Assembly Pass)](4.11.9 )/section-4.11.9 (62)579 toc23 -[2(STRUC)0( and )2(ENDSTRUC)0(: Declaring Structure Data Types)](4.11.10 )/section-4.11.10 (62)562 toc23 -[2(ISTRUC)0(, )2(AT)0( and )2(IEND)0(: Declaring Instances of Structures)](4.11.11 )/section-4.11.11 (63)545 toc23 -[2(ALIGN)0( and )2(ALIGNB)0(: Data Alignment)](4.11.12 )/section-4.11.12 (64)528 toc23 -[(Standard Macro Packages)](Chapter 5: )/chapter-5 (66)511 toc03 -[2(altreg)0(: Alternate Register Names)](5.1 )/section-5.1 (66)494 toc13 -[2(smartalign)0(: Smart )2(ALIGN)0( Macro)](5.2 )/section-5.2 (66)477 toc13 -[(Assembler Directives)](Chapter 6: )/chapter-6 (67)460 toc03 -[2(BITS)0(: Specifying Target Processor Mode)](6.1 )/section-6.1 (67)443 toc13 -[2(USE16)0( & )2(USE32)0(: Aliases for BITS)](6.1.1 )/section-6.1.1 (68)426 toc23 -[2(DEFAULT)0(: Change the assembler defaults)](6.2 )/section-6.2 (68)409 toc13 -[2(SECTION)0( or )2(SEGMENT)0(: Changing and Defining Sections)](6.3 )/section-6.3 (68)392 toc13 -[(The )2(__SECT__)0( Macro)](6.3.1 )/section-6.3.1 (68)375 toc23 -[2(ABSOLUTE)0(: Defining Absolute Labels)](6.4 )/section-6.4 (69)358 toc13 -[2(EXTERN)0(: Importing Symbols from Other Modules)](6.5 )/section-6.5 (70)341 toc13 -[2(GLOBAL)0(: Exporting Symbols to Other Modules)](6.6 )/section-6.6 (70)324 toc13 -[2(COMMON)0(: Defining Common Data Areas)](6.7 )/section-6.7 (70)307 toc13 -[2(CPU)0(: Defining CPU Dependencies)](6.8 )/section-6.8 (71)290 toc13 -[2(FLOAT)0(: Handling of floating-point constants)](6.9 )/section-6.9 (71)273 toc13 -[(Output Formats)](Chapter 7: )/chapter-7 (73)256 toc03 -[2(bin)0(: Flat-Form Binary Output)](7.1 )/section-7.1 (73)239 toc13 -[2(ORG)0(: Binary File Program Origin)](7.1.1 )/section-7.1.1 (73)222 toc23 -[2(bin)0( Extensions to the )2(SECTION)0( Directive)](7.1.2 )/section-7.1.2 (73)205 toc23 -[(Multisection Support for the )2(bin)0( Format)](7.1.3 )/section-7.1.3 (74)188 toc23 -[(Map Files)](7.1.4 )/section-7.1.4 (74)171 toc23 -[2(ith)0(: Intel Hex Output)](7.2 )/section-7.2 (74)154 toc13 -[2(srec)0(: Motorola S-Records Output)](7.3 )/section-7.3 (74)137 toc13 -[2(obj)0(: Microsoft OMF Object Files)](7.4 )/section-7.4 (75)120 toc13 -[2(obj)0( Extensions to the )2(SEGMENT)0( Directive)](7.4.1 )/section-7.4.1 (75)103 toc23 -(7)pageodd -restore showpage -%%Page: 8 8 -%%BeginPageSetup -save -%%EndPageSetup -/8 pa -[2(GROUP)0(: Defining Groups of Segments)](7.4.2 )/section-7.4.2 (76)681 toc23 -[2(UPPERCASE)0(: Disabling Case Sensitivity in Output)](7.4.3 )/section-7.4.3 (77)664 toc23 -[2(IMPORT)0(: Importing DLL Symbols)](7.4.4 )/section-7.4.4 (77)647 toc23 -[2(EXPORT)0(: Exporting DLL Symbols)](7.4.5 )/section-7.4.5 (77)630 toc23 -[2(..start)0(: Defining the Program Entry Point)](7.4.6 )/section-7.4.6 (78)613 toc23 -[2(obj)0( Extensions to the )2(EXTERN)0( Directive)](7.4.7 )/section-7.4.7 (78)596 toc23 -[2(obj)0( Extensions to the )2(COMMON)0( Directive)](7.4.8 )/section-7.4.8 (78)579 toc23 -[2(win32)0(: Microsoft Win32 Object Files)](7.5 )/section-7.5 (79)562 toc13 -[2(win32)0( Extensions to the )2(SECTION)0( Directive)](7.5.1 )/section-7.5.1 (79)545 toc23 -[2(win32)0(: Safe Structured Exception Handling)](7.5.2 )/section-7.5.2 (80)528 toc23 -[2(win64)0(: Microsoft Win64 Object Files)](7.6 )/section-7.6 (81)511 toc13 -[2(win64)0(: Writing Position-Independent Code)](7.6.1 )/section-7.6.1 (81)494 toc23 -[2(win64)0(: Structured Exception Handling)](7.6.2 )/section-7.6.2 (82)477 toc23 -[2(coff)0(: Common Object File Format)](7.7 )/section-7.7 (85)460 toc13 -[2(macho32)0( and )2(macho64)0(: Mach Object File Format)](7.8 )/section-7.8 (85)443 toc13 -[2(elf32)0( and )2(elf64)0(: Executable and Linkable Format Object Files)](7.9 )/section-7.9 (85)426 toc13 -[(ELF specific directive )2(osabi)](7.9.1 )/section-7.9.1 (85)409 toc23 -[2(elf)0( Extensions to the )2(SECTION)0( Directive)](7.9.2 )/section-7.9.2 (85)392 toc23 -[(Position-Independent Code: )2(elf)0( Special Symbols and )2(WRT)](7.9.3 )/section-7.9.3 (86)375 toc23 -[(Thread Local Storage: )2(elf)0( Special Symbols and )2(WRT)](7.9.4 )/section-7.9.4 (87)358 toc23 -[2(elf)0( Extensions to the )2(GLOBAL)0( Directive)](7.9.5 )/section-7.9.5 (87)341 toc23 -[2(elf)0( Extensions to the )2(COMMON)0( Directive )](7.9.6 )/section-7.9.6 (87)324 toc23 -[(16-bit code and ELF )](7.9.7 )/section-7.9.7 (88)307 toc23 -[(Debug formats and ELF )](7.9.8 )/section-7.9.8 (88)290 toc23 -[2(aout)0(: Linux )2(a.out)0( Object Files)](7.10 )/section-7.10 (88)273 toc13 -[2(aoutb)0(: NetBSD/FreeBSD/OpenBSD )2(a.out)0( Object Files)](7.11 )/section-7.11 (88)256 toc13 -[2(as86)0(: Minix/Linux )2(as86)0( Object Files)](7.12 )/section-7.12 (88)239 toc13 -[2(rdf)0(: Relocatable Dynamic Object File Format)](7.13 )/section-7.13 (88)222 toc13 -[(Requiring a Library: The )2(LIBRARY)0( Directive)](7.13.1 )/section-7.13.1 (89)205 toc23 -[(Specifying a Module Name: The )2(MODULE)0( Directive)](7.13.2 )/section-7.13.2 (89)188 toc23 -[2(rdf)0( Extensions to the )2(GLOBAL)0( Directive)](7.13.3 )/section-7.13.3 (89)171 toc23 -[2(rdf)0( Extensions to the )2(EXTERN)0( Directive)](7.13.4 )/section-7.13.4 (89)154 toc23 -[2(dbg)0(: Debugging Format)](7.14 )/section-7.14 (90)137 toc13 -[(Writing 16-bit Code \(DOS, Windows 3/3.1\))](Chapter 8: )/chapter-8 (91)120 toc03 -[(Producing )2(.EXE)0( Files)](8.1 )/section-8.1 (91)103 toc13 -(8)pageeven -restore showpage -%%Page: 9 9 -%%BeginPageSetup -save -%%EndPageSetup -/9 pa -[(Using the )2(obj)0( Format To Generate )2(.EXE)0( Files)](8.1.1 )/section-8.1.1 (91)681 toc23 -[(Using the )2(bin)0( Format To Generate )2(.EXE)0( Files)](8.1.2 )/section-8.1.2 (92)664 toc23 -[(Producing )2(.COM)0( Files)](8.2 )/section-8.2 (93)647 toc13 -[(Using the )2(bin)0( Format To Generate )2(.COM)0( Files)](8.2.1 )/section-8.2.1 (93)630 toc23 -[(Using the )2(obj)0( Format To Generate )2(.COM)0( Files)](8.2.2 )/section-8.2.2 (93)613 toc23 -[(Producing )2(.SYS)0( Files)](8.3 )/section-8.3 (94)596 toc13 -[(Interfacing to 16-bit C Programs)](8.4 )/section-8.4 (94)579 toc13 -[(External Symbol Names)](8.4.1 )/section-8.4.1 (94)562 toc23 -[(Memory Models)](8.4.2 )/section-8.4.2 (95)545 toc23 -[(Function Definitions and Function Calls)](8.4.3 )/section-8.4.3 (96)528 toc23 -[(Accessing Data Items)](8.4.4 )/section-8.4.4 (98)511 toc23 -[2(c16.mac)0(: Helper Macros for the 16-bit C Interface)](8.4.5 )/section-8.4.5 (98)494 toc23 -[(Interfacing to Borland Pascal Programs)](8.5 )/section-8.5 (99)477 toc13 -[(The Pascal Calling Convention)](8.5.1 )/section-8.5.1 (100)460 toc23 -[(Borland Pascal Segment Name Restrictions)](8.5.2 )/section-8.5.2 (101)443 toc23 -[(Using )2(c16.mac)0( With Pascal Programs)](8.5.3 )/section-8.5.3 (101)426 toc23 -[(Writing 32-bit Code \(Unix, Win32, DJGPP\))](Chapter 9: )/chapter-9 (103)409 toc03 -[(Interfacing to 32-bit C Programs)](9.1 )/section-9.1 (103)392 toc13 -[(External Symbol Names)](9.1.1 )/section-9.1.1 (103)375 toc23 -[(Function Definitions and Function Calls)](9.1.2 )/section-9.1.2 (103)358 toc23 -[(Accessing Data Items)](9.1.3 )/section-9.1.3 (105)341 toc23 -[2(c32.mac)0(: Helper Macros for the 32-bit C Interface)](9.1.4 )/section-9.1.4 (105)324 toc23 -[(Writing NetBSD/FreeBSD/OpenBSD and Linux/ELF Shared Libraries)](9.2 )/section-9.2 (106)307 toc13 -[(Obtaining the Address of the GOT)](9.2.1 )/section-9.2.1 (106)290 toc23 -[(Finding Your Local Data Items)](9.2.2 )/section-9.2.2 (107)273 toc23 -[(Finding External and Common Data Items)](9.2.3 )/section-9.2.3 (107)256 toc23 -[(Exporting Symbols to the Library User)](9.2.4 )/section-9.2.4 (108)239 toc23 -[(Calling Procedures Outside the Library)](9.2.5 )/section-9.2.5 (109)222 toc23 -[(Generating the Library File)](9.2.6 )/section-9.2.6 (109)205 toc23 -[(Mixing 16 and 32 Bit Code)](Chapter 10: )/chapter-10 (110)188 toc03 -[(Mixed-Size Jumps)](10.1 )/section-10.1 (110)171 toc13 -[(Addressing Between Different-Size Segments)](10.2 )/section-10.2 (110)154 toc13 -[(Other Mixed-Size Instructions)](10.3 )/section-10.3 (111)137 toc13 -[(Writing 64-bit Code \(Unix, Win64\))](Chapter 11: )/chapter-11 (113)120 toc03 -[(Register Names in 64-bit Mode)](11.1 )/section-11.1 (113)103 toc13 -(9)pageodd -restore showpage -%%Page: 10 10 -%%BeginPageSetup -save -%%EndPageSetup -/10 pa -[(Immediates and Displacements in 64-bit Mode)](11.2 )/section-11.2 (113)681 toc13 -[(Interfacing to 64-bit C Programs \(Unix\))](11.3 )/section-11.3 (114)664 toc13 -[(Interfacing to 64-bit C Programs \(Win64\))](11.4 )/section-11.4 (114)647 toc13 -[(Troubleshooting)](Chapter 12: )/chapter-12 (116)630 toc03 -[(Common Problems)](12.1 )/section-12.1 (116)613 toc13 -[(NASM Generates Inefficient Code)](12.1.1 )/section-12.1.1 (116)596 toc23 -[(My Jumps are Out of Range)](12.1.2 )/section-12.1.2 (116)579 toc23 -[2(ORG)0( Doesn't Work)](12.1.3 )/section-12.1.3 (116)562 toc23 -[2(TIMES)0( Doesn't Work)](12.1.4 )/section-12.1.4 (117)545 toc23 -[(Bugs)](12.2 )/section-12.2 (117)528 toc13 -[(Ndisasm)](Appendix A: )/appendix-A (119)511 toc03 -[(Introduction)](A.1 )/section-A.1 (119)494 toc13 -[(Getting Started: Installation)](A.2 )/section-A.2 (119)477 toc13 -[(Running NDISASM)](A.3 )/section-A.3 (119)460 toc13 -[(COM Files: Specifying an Origin)](A.3.1 )/section-A.3.1 (119)443 toc23 -[(Code Following Data: Synchronisation)](A.3.2 )/section-A.3.2 (119)426 toc23 -[(Mixed Code and Data: Automatic \(Intelligent\) Synchronisation )](A.3.3 )/section-A.3.3 (120)409 toc23 -[(Other Options)](A.3.4 )/section-A.3.4 (121)392 toc23 -[(Bugs and Improvements)](A.4 )/section-A.4 (121)375 toc13 -[(Instruction List)](Appendix B: )/appendix-B (122)358 toc03 -[(Introduction)](B.1 )/section-B.1 (122)341 toc13 -[(Special instructions...)](B.1.1 )/section-B.1.1 (122)324 toc23 -[(Conventional instructions)](B.1.2 )/section-B.1.2 (122)307 toc23 -[(Katmai Streaming SIMD instructions \(SSE \226\226 a.k.a. KNI, XMM, MMX2\))](B.1.3 )/section-B.1.3 (148)290 toc23 -[(Introduced in Deschutes but necessary for SSE support)](B.1.4 )/section-B.1.4 (149)273 toc23 -[(XSAVE group \(AVX and extended state\))](B.1.5 )/section-B.1.5 (149)256 toc23 -[(Generic memory operations)](B.1.6 )/section-B.1.6 (149)239 toc23 -[(New MMX instructions introduced in Katmai)](B.1.7 )/section-B.1.7 (150)222 toc23 -[(AMD Enhanced 3DNow! \(Athlon\) instructions)](B.1.8 )/section-B.1.8 (150)205 toc23 -[(Willamette SSE2 Cacheability Instructions)](B.1.9 )/section-B.1.9 (150)188 toc23 -[(Willamette MMX instructions \(SSE2 SIMD Integer Instructions\))](B.1.10 )/section-B.1.10 (150)171 toc23 -[(Willamette Streaming SIMD instructions \(SSE2\))](B.1.11 )/section-B.1.11 (152)154 toc23 -[(Prescott New Instructions \(SSE3\))](B.1.12 )/section-B.1.12 (154)137 toc23 -[(VMX Instructions)](B.1.13 )/section-B.1.13 (154)120 toc23 -[(Extended Page Tables VMX instructions)](B.1.14 )/section-B.1.14 (154)103 toc23 -(10)pageeven -restore showpage -%%Page: 11 11 -%%BeginPageSetup -save -%%EndPageSetup -/11 pa -[(Tejas New Instructions \(SSSE3\))](B.1.15 )/section-B.1.15 (155)681 toc23 -[(AMD SSE4A)](B.1.16 )/section-B.1.16 (155)664 toc23 -[(New instructions in Barcelona)](B.1.17 )/section-B.1.17 (155)647 toc23 -[(Penryn New Instructions \(SSE4.1\))](B.1.18 )/section-B.1.18 (155)630 toc23 -[(Nehalem New Instructions \(SSE4.2\))](B.1.19 )/section-B.1.19 (157)613 toc23 -[(Intel SMX)](B.1.20 )/section-B.1.20 (157)596 toc23 -[(Geode \(Cyrix\) 3DNow! additions)](B.1.21 )/section-B.1.21 (157)579 toc23 -[(Intel new instructions in ???)](B.1.22 )/section-B.1.22 (157)562 toc23 -[(Intel AES instructions)](B.1.23 )/section-B.1.23 (157)545 toc23 -[(Intel AVX AES instructions)](B.1.24 )/section-B.1.24 (157)528 toc23 -[(Intel AVX instructions)](B.1.25 )/section-B.1.25 (158)511 toc23 -[(Intel Carry-Less Multiplication instructions \(CLMUL\))](B.1.26 )/section-B.1.26 (170)494 toc23 -[(Intel AVX Carry-Less Multiplication instructions \(CLMUL\))](B.1.27 )/section-B.1.27 (170)477 toc23 -[(Intel Fused Multiply-Add instructions \(FMA\))](B.1.28 )/section-B.1.28 (170)460 toc23 -[(VIA \(Centaur\) security instructions)](B.1.29 )/section-B.1.29 (174)443 toc23 -[(AMD Lightweight Profiling \(LWP\) instructions)](B.1.30 )/section-B.1.30 (174)426 toc23 -[(AMD XOP, FMA4 and CVT16 instructions \(SSE5\))](B.1.31 )/section-B.1.31 (174)409 toc23 -[(Systematic names for the hinting nop instructions)](B.1.32 )/section-B.1.32 (177)392 toc23 -[(NASM Version History)](Appendix C: )/appendix-C (181)375 toc03 -[(NASM 2 Series)](C.1 )/section-C.1 (181)358 toc13 -[(Version 2.08)](C.1.1 )/section-C.1.1 (181)341 toc23 -[(Version 2.07)](C.1.2 )/section-C.1.2 (181)324 toc23 -[(Version 2.06)](C.1.3 )/section-C.1.3 (182)307 toc23 -[(Version 2.05.01)](C.1.4 )/section-C.1.4 (182)290 toc23 -[(Version 2.05)](C.1.5 )/section-C.1.5 (182)273 toc23 -[(Version 2.04)](C.1.6 )/section-C.1.6 (183)256 toc23 -[(Version 2.03.01)](C.1.7 )/section-C.1.7 (184)239 toc23 -[(Version 2.03)](C.1.8 )/section-C.1.8 (184)222 toc23 -[(Version 2.02)](C.1.9 )/section-C.1.9 (184)205 toc23 -[(Version 2.01)](C.1.10 )/section-C.1.10 (185)188 toc23 -[(Version 2.00)](C.1.11 )/section-C.1.11 (185)171 toc23 -[(NASM 0.98 Series)](C.2 )/section-C.2 (186)154 toc13 -[(Version 0.98.39)](C.2.1 )/section-C.2.1 (186)137 toc23 -[(Version 0.98.38)](C.2.2 )/section-C.2.2 (186)120 toc23 -[(Version 0.98.37)](C.2.3 )/section-C.2.3 (187)103 toc23 -(11)pageodd -restore showpage -%%Page: 12 12 -%%BeginPageSetup -save -%%EndPageSetup -/12 pa -[(Version 0.98.36)](C.2.4 )/section-C.2.4 (187)681 toc23 -[(Version 0.98.35)](C.2.5 )/section-C.2.5 (187)664 toc23 -[(Version 0.98.34)](C.2.6 )/section-C.2.6 (187)647 toc23 -[(Version 0.98.33)](C.2.7 )/section-C.2.7 (188)630 toc23 -[(Version 0.98.32)](C.2.8 )/section-C.2.8 (188)613 toc23 -[(Version 0.98.31)](C.2.9 )/section-C.2.9 (188)596 toc23 -[(Version 0.98.30)](C.2.10 )/section-C.2.10 (189)579 toc23 -[(Version 0.98.28)](C.2.11 )/section-C.2.11 (189)562 toc23 -[(Version 0.98.26)](C.2.12 )/section-C.2.12 (189)545 toc23 -[(Version 0.98.25alt)](C.2.13 )/section-C.2.13 (189)528 toc23 -[(Version 0.98.25)](C.2.14 )/section-C.2.14 (189)511 toc23 -[(Version 0.98.24p1)](C.2.15 )/section-C.2.15 (189)494 toc23 -[(Version 0.98.24)](C.2.16 )/section-C.2.16 (189)477 toc23 -[(Version 0.98.23)](C.2.17 )/section-C.2.17 (189)460 toc23 -[(Version 0.98.22)](C.2.18 )/section-C.2.18 (189)443 toc23 -[(Version 0.98.21)](C.2.19 )/section-C.2.19 (189)426 toc23 -[(Version 0.98.20)](C.2.20 )/section-C.2.20 (190)409 toc23 -[(Version 0.98.19)](C.2.21 )/section-C.2.21 (190)392 toc23 -[(Version 0.98.18)](C.2.22 )/section-C.2.22 (190)375 toc23 -[(Version 0.98.17)](C.2.23 )/section-C.2.23 (190)358 toc23 -[(Version 0.98.16)](C.2.24 )/section-C.2.24 (190)341 toc23 -[(Version 0.98.15)](C.2.25 )/section-C.2.25 (190)324 toc23 -[(Version 0.98.14)](C.2.26 )/section-C.2.26 (190)307 toc23 -[(Version 0.98.13)](C.2.27 )/section-C.2.27 (190)290 toc23 -[(Version 0.98.12)](C.2.28 )/section-C.2.28 (190)273 toc23 -[(Version 0.98.11)](C.2.29 )/section-C.2.29 (190)256 toc23 -[(Version 0.98.10)](C.2.30 )/section-C.2.30 (190)239 toc23 -[(Version 0.98.09)](C.2.31 )/section-C.2.31 (190)222 toc23 -[(Version 0.98.08)](C.2.32 )/section-C.2.32 (191)205 toc23 -[(Version 0.98.09b with John Coffman patches released 28-Oct-2001)](C.2.33 )/section-C.2.33 (191)188 toc23 -[(Version 0.98.07 released 01/28/01)](C.2.34 )/section-C.2.34 (191)171 toc23 -[(Version 0.98.06f released 01/18/01)](C.2.35 )/section-C.2.35 (191)154 toc23 -[(Version 0.98.06e released 01/09/01)](C.2.36 )/section-C.2.36 (191)137 toc23 -[(Version 0.98p1)](C.2.37 )/section-C.2.37 (192)120 toc23 -[(Version 0.98bf \(bug-fixed\))](C.2.38 )/section-C.2.38 (192)103 toc23 -(12)pageeven -restore showpage -%%Page: 13 13 -%%BeginPageSetup -save -%%EndPageSetup -/13 pa -[(Version 0.98.03 with John Coffman's changes released 27-Jul-2000)](C.2.39 )/section-C.2.39 (192)681 toc23 -[(Version 0.98.03)](C.2.40 )/section-C.2.40 (192)664 toc23 -[(Version 0.98)](C.2.41 )/section-C.2.41 (195)647 toc23 -[(Version 0.98p9)](C.2.42 )/section-C.2.42 (196)630 toc23 -[(Version 0.98p8)](C.2.43 )/section-C.2.43 (196)613 toc23 -[(Version 0.98p7)](C.2.44 )/section-C.2.44 (196)596 toc23 -[(Version 0.98p6)](C.2.45 )/section-C.2.45 (197)579 toc23 -[(Version 0.98p3.7)](C.2.46 )/section-C.2.46 (197)562 toc23 -[(Version 0.98p3.6)](C.2.47 )/section-C.2.47 (197)545 toc23 -[(Version 0.98p3.5)](C.2.48 )/section-C.2.48 (197)528 toc23 -[(Version 0.98p3.4)](C.2.49 )/section-C.2.49 (198)511 toc23 -[(Version 0.98p3.3)](C.2.50 )/section-C.2.50 (198)494 toc23 -[(Version 0.98p3.2)](C.2.51 )/section-C.2.51 (198)477 toc23 -[(Version 0.98p3-hpa)](C.2.52 )/section-C.2.52 (198)460 toc23 -[(Version 0.98 pre-release 3)](C.2.53 )/section-C.2.53 (198)443 toc23 -[(Version 0.98 pre-release 2)](C.2.54 )/section-C.2.54 (199)426 toc23 -[(Version 0.98 pre-release 1)](C.2.55 )/section-C.2.55 (199)409 toc23 -[(NASM 0.9 Series)](C.3 )/section-C.3 (200)392 toc13 -[(Version 0.97 released December 1997)](C.3.1 )/section-C.3.1 (200)375 toc23 -[(Version 0.96 released November 1997)](C.3.2 )/section-C.3.2 (200)358 toc23 -[(Version 0.95 released July 1997)](C.3.3 )/section-C.3.3 (202)341 toc23 -[(Version 0.94 released April 1997)](C.3.4 )/section-C.3.4 (204)324 toc23 -[(Version 0.93 released January 1997)](C.3.5 )/section-C.3.5 (204)307 toc23 -[(Version 0.92 released January 1997)](C.3.6 )/section-C.3.6 (205)290 toc23 -[(Version 0.91 released November 1996)](C.3.7 )/section-C.3.7 (205)273 toc23 -[(Version 0.90 released October 1996)](C.3.8 )/section-C.3.8 (205)256 toc23 -(13)pageodd -restore showpage -%%Page: 14 14 -%%BeginPageSetup -save -%%EndPageSetup -/14 pa -[{/chapter-1 xa}(Chapter 1: Introduction)]642.8 chap3 -[{/section-1.1 xa}(What Is NASM?)](1.1)603.4 head3 -[(The Netwide Assembler, NASM, is an 80x86 and x86-64 assembler designed for portability and modularity.)]586.4 norm1 -[(It supports a range of object file formats, including Linux and )2(*BSD)0( )2(a.out)0(, )2(ELF)0(, )2(COFF)0(, )2(Mach-O)0(,)]575.4 norm0 -[(Microsoft 16-bit )2(OBJ)0(, )2(Win32)0( and )2(Win64)0(. It will also output plain binary files. Its syntax is designed to be)]564.4 norm0 -[(simple and easy to understand, similar to Intel's but less complex. It supports all currently known x86)]553.4 norm0 -[(architectural extensions, and has strong support for macros.)]542.4 norm2 -[{/section-1.1.1 xa}(Why Yet Another Assembler?)](1.1.1)523.2 subh3 -[(The Netwide Assembler grew out of an idea on )2(comp.lang.asm.x86)0( \(or possibly )2(alt.lang.asm)0( \226 I)]506.2 norm1 -[(forget which\), which was essentially that there didn't seem to be a good )1(free)0( x86-series assembler around,)]495.2 norm0 -[(and that maybe someone ought to write one.)]484.2 norm2 -[2(a86)0( is good, but not free, and in particular you don't get any 32-bit capability until you pay. It's DOS)]467.2 bull1 -[(only, too.)]456.2 bull2 -[2(gas)0( is free, and ports over to DOS and Unix, but it's not very good, since it's designed to be a back end to)]439.2 bull1 -[2(gcc)0(, which always feeds it correct code. So its error checking is minimal. Also, its syntax is horrible, from)]428.2 bull0 -[(the point of view of anyone trying to actually )1(write)0( anything in it. Plus you can't write 16-bit code in it)]417.2 bull0 -[(\(properly.\))]406.2 bull2 -[2(as86)0( is specific to Minix and Linux, and \(my version at least\) doesn't seem to have much \(or any\))]389.2 bull1 -[(documentation.)]378.2 bull2 -[2(MASM)0( isn't very good, and it's \(was\) expensive, and it runs only under DOS.)]361.2 bull3 -[2(TASM)0( is better, but still strives for MASM compatibility, which means millions of directives and tons of)]344.2 bull1 -[(red tape. And its syntax is essentially MASM's, with the contradictions and quirks that entails \(although it)]333.2 bull0 -[(sorts out some of those by means of Ideal mode.\) It's expensive too. And it's DOS-only.)]322.2 bull2 -[(So here, for your coding pleasure, is NASM. At present it's still in prototype stage \226 we don't promise that it)]305.2 norm1 -[(can outperform any of these assemblers. But please, )1(please)0( send us bug reports, fixes, helpful information,)]294.2 norm0 -[(and anything else you can get your hands on \(and thanks to the many people who've done this already! You)]283.2 norm0 -[(all know who you are\), and we'll improve it out of all recognition. Again.)]272.2 norm2 -[{/section-1.1.2 xa}(License Conditions)](1.1.2)253 subh3 -[(Please see the file )2(LICENSE)0(, supplied as part of any NASM distribution archive, for the license conditions)]236 norm1 -[(under which you may use NASM. NASM is now under the so-called 2-clause BSD license, also known as)]225 norm0 -[(the simplified BSD license.)]214 norm2 -[(Copyright 1996-2009 the NASM Authors \226 All rights reserved.)]197 norm3 -[(Redistribution and use in source and binary forms, with or without modification, are permitted provided that)]180 norm1 -[(the following conditions are met:)]169 norm2 -[(Redistributions of source code must retain the above copyright notice, this list of conditions and the)]152 bull1 -[(following disclaimer.)]141 bull2 -[(Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the)]124 bull1 -[(following disclaimer in the documentation and/or other materials provided with the distribution.)]113 bull2 -(14)pageeven -restore showpage -%%Page: 15 15 -%%BeginPageSetup -save -%%EndPageSetup -/15 pa -[(THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS")]681 norm1 -[(AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE)]670 norm0 -[(IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE)]659 norm0 -[(ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE)]648 norm0 -[(LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR)]637 norm0 -[(CONSEQUENTIAL DAMAGES \(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF)]626 norm0 -[(SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS)]615 norm0 -[(INTERRUPTION\) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN)]604 norm0 -[(CONTRACT, STRICT LIABILITY, OR TORT \(INCLUDING NEGLIGENCE OR OTHERWISE\))]593 norm0 -[(ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE)]582 norm0 -[(POSSIBILITY OF SUCH DAMAGE.)]571 norm2 -[{/section-1.2 xa}(Contact Information)](1.2)549.6 head3 -[(The current version of NASM \(since about 0.98.08\) is maintained by a team of developers, accessible through)]532.6 norm1 -[(the )2(nasm-devel)0( mailing list \(see below for the link\). If you want to report a bug, please read ){/section-12.2 xl}(section 12.2){el}]521.6 norm0 -[(first.)]510.6 norm2 -[(NASM has a )(website at ){(http://www.nasm.us/)wl}2(http://www.nasm.us/){el}0(. If it's not there, google for us!)]493.6 norm3 -[(New releases, )(release candidates, and )(daily development snapshots of NASM are available from the official)]476.6 norm1 -[(web site.)]465.6 norm2 -[(Announcements are posted to ){(news:comp.lang.asm.x86)wl}2(comp.lang.asm.x86){el}0(, and to the web site)]448.6 norm1 -[{(http://www.freshmeat.net/)wl}2(http://www.freshmeat.net/){el}0(.)]437.6 norm2 -[(If you want information about the current development status, please subscribe to the )2(nasm-devel)0( email)]420.6 norm1 -[(list; see link from the website.)]409.6 norm2 -[{/section-1.3 xa}(Installation)](1.3)388.2 head3 -[{/section-1.3.1 xa}(Installing NASM under MS-)(DOS or Windows)](1.3.1)369 subh3 -[(Once you've obtained the appropriate archive for NASM, )2(nasm-XXX-dos.zip)0( or)]352 norm1 -[2(nasm-XXX-win32.zip)0( \(where )2(XXX)0( denotes the version number of NASM contained in the archive\),)]341 norm0 -[(unpack it into its own directory \(for example )2(c:\\nasm)0(\).)]330 norm2 -[(The archive will contain a set of executable files: the NASM executable file )2(nasm.exe)0(, the NDISASM)]313 norm1 -[(executable file )2(ndisasm.exe)0(, and possibly additional utilities to handle the RDOFF file format.)]302 norm2 -[(The only file NASM needs to run is its own executable, so copy )2(nasm.exe)0( to a directory on your PATH, or)]285 norm1 -[(alternatively edit )2(autoexec.bat)0( to add the )2(nasm)0( directory to your )2(PATH)0( \(to do that under Windows XP,)]274 norm0 -[(go to Start > Control Panel > System > Advanced > Environment Variables; these instructions may work)]263 norm0 -[(under other versions of Windows as well.\))]252 norm2 -[(That's it \226 NASM is installed. You don't need the nasm directory to be present to run NASM \(unless you've)]235 norm1 -[(added it to your )2(PATH)0(\), so you can delete it if you need to save space; however, you may want to keep the)]224 norm0 -[(documentation or test programs.)]213 norm2 -[(If you've downloaded the )(DOS source archive, )2(nasm-XXX.zip)0(, the )2(nasm)0( directory will also contain the)]196 norm1 -[(full NASM )(source code, and a selection of )(Makefiles you can \(hopefully\) use to rebuild your copy of NASM)]185 norm0 -[(from scratch. See the file )2(INSTALL)0( in the source archive.)]174 norm2 -[(Note that a number of files are generated from other files by Perl scripts. Although the NASM source)]157 norm1 -[(distribution includes these generated files, you will need to rebuild them \(and hence, will need a Perl)]146 norm0 -[(interpreter\) if you change insns.dat, standard.mac or the documentation. It is possible future source)]135 norm0 -[(distributions may not include these files at all. Ports of )(Perl for a variety of platforms, including DOS and)]124 norm0 -[(Windows, are available from ){(http://www.cpan.org/ports/)wl}(www.cpan.org){el}(.)]113 norm2 -(15)pageodd -restore showpage -%%Page: 16 16 -%%BeginPageSetup -save -%%EndPageSetup -/16 pa -[{/section-1.3.2 xa}(Installing NASM under )(Unix)](1.3.2)678.8 subh3 -[(Once you've obtained the )(Unix source archive for NASM, )2(nasm-XXX.tar.gz)0( \(where )2(XXX)0( denotes the)]661.8 norm1 -[(version number of NASM contained in the archive\), unpack it into a directory such as )2(/usr/local/src)0(.)]650.8 norm0 -[(The archive, when unpacked, will create its own subdirectory )2(nasm-XXX)0(.)]639.8 norm2 -[(NASM is an )(auto-configuring package: once you've unpacked it, )2(cd)0( to the directory it's been unpacked into)]622.8 norm1 -[(and type )2(./configure)0(. This shell script will find the best C compiler to use for building NASM and set up)]611.8 norm0 -[(Makefiles accordingly.)]600.8 norm2 -[(Once NASM has auto-configured, you can type )2(make)0( to build the )2(nasm)0( and )2(ndisasm)0( binaries, and then)]583.8 norm1 -[2(make install)0( to install them in )2(/usr/local/bin)0( and install the )(man pages )2(nasm.1)0( and)]572.8 norm0 -[2(ndisasm.1)0( in )2(/usr/local/man/man1)0(. Alternatively, you can give options such as )2(--prefix)0( to the)]561.8 norm0 -[(configure script \(see the file )2(INSTALL)0( for more details\), or install the programs yourself.)]550.8 norm2 -[(NASM also comes with a set of utilities for handling the )2(RDOFF)0( custom object-file format, which are in the)]533.8 norm1 -[2(rdoff)0( subdirectory of the NASM archive. You can build these with )2(make rdf)0( and install them with)]522.8 norm0 -[2(make rdf_install)0(, if you want them.)]511.8 norm2 -(16)pageeven -restore showpage -%%Page: 17 17 -%%BeginPageSetup -save -%%EndPageSetup -/17 pa -[{/chapter-2 xa}(Chapter 2: Running NASM)]642.8 chap3 -[{/section-2.1 xa}(NASM )(Command-Line Syntax)](2.1)603.4 head3 -[(To assemble a file, you issue a command of the form)]586.4 norm3 -[2(nasm -f <format> <filename> [-o <output>])]569.4 code3 -[(For example,)]552.4 norm3 -[2(nasm -f elf myfile.asm)]535.4 code3 -[(will assemble )2(myfile.asm)0( into an )2(ELF)0( object file )2(myfile.o)0(. And)]518.4 norm3 -[2(nasm -f bin myfile.asm -o myfile.com)]501.4 code3 -[(will assemble )2(myfile.asm)0( into a raw binary file )2(myfile.com)0(.)]484.4 norm3 -[(To produce a listing file, with the hex codes output from NASM displayed on the left of the original sources,)]467.4 norm1 -[(use the )2(-l)0( option to give a listing file name, for example:)]456.4 norm2 -[2(nasm -f coff myfile.asm -l myfile.lst)]439.4 code3 -[(To get further usage instructions from NASM, try typing)]422.4 norm3 -[2(nasm -h)]405.4 code3 -[(As )2(-hf)0(, this will also list the available output file formats, and what they are.)]388.4 norm3 -[(If you use Linux but aren't sure whether your system is )2(a.out)0( or )2(ELF)0(, type)]371.4 norm3 -[2(file nasm)]354.4 code3 -[(\(in the directory in which you put the NASM binary when you installed it\). If it says something like)]337.4 norm3 -[2(nasm: ELF 32-bit LSB executable i386 \(386 and up\) Version 1)]320.4 code3 -[(then your system is )2(ELF)0(, and you should use the option )2(-f elf)0( when you want NASM to produce Linux)]303.4 norm1 -[(object files. If it says)]292.4 norm2 -[2(nasm: Linux/i386 demand-paged executable \(QMAGIC\))]275.4 code3 -[(or something similar, your system is )2(a.out)0(, and you should use )2(-f aout)0( instead \(Linux )2(a.out)0( systems)]258.4 norm1 -[(have long been obsolete, and are rare these days.\))]247.4 norm2 -[(Like Unix compilers and assemblers, NASM is silent unless it goes wrong: you won't see any output at all,)]230.4 norm1 -[(unless it gives error messages.)]219.4 norm2 -[{/section-2.1.1 xa}(The )2(-o)0( Option: Specifying the Output File Name)](2.1.1)200.2 subh3 -[(NASM will normally choose the name of your output file for you; precisely how it does this is dependent on)]183.2 norm1 -[(the object file format. For Microsoft object file formats \()2(obj)0(, )2(win32)0( and )2(win64)0(\), it will remove the )2(.asm)]172.2 norm0 -[(extension \(or whatever extension you like to use \226 NASM doesn't care\) from your source file name and)]161.2 norm0 -[(substitute )2(.obj)0(. For Unix object file formats \()2(aout)0(, )2(as86)0(, )2(coff)0(, )2(elf32)0(, )2(elf64)0(, )2(ieee)0(, )2(macho32)0( and)]150.2 norm0 -[2(macho64)0(\) it will substitute )2(.o)0(. For )2(dbg)0(, )2(rdf)0(, )2(ith)0( and )2(srec)0(, it will use )2(.dbg)0(, )2(.rdf)0(, )2(.ith)0( and )2(.srec)0(,)]139.2 norm0 -[(respectively, and for the )2(bin)0( format it will simply remove the extension, so that )2(myfile.asm)0( produces the)]128.2 norm0 -[(output file )2(myfile)0(.)]117.2 norm2 -(17)pageodd -restore showpage -%%Page: 18 18 -%%BeginPageSetup -save -%%EndPageSetup -/18 pa -[(If the output file already exists, NASM will overwrite it, unless it has the same name as the input file, in)]681 norm1 -[(which case it will give a warning and use )2(nasm.out)0( as the output file name instead.)]670 norm2 -[(For situations in which this behaviour is unacceptable, NASM provides the )2(-o)0( command-line option, which)]653 norm1 -[(allows you to specify your desired output file name. You invoke )2(-o)0( by following it with the name you wish)]642 norm0 -[(for the output file, either with or without an intervening space. For example:)]631 norm2 -[2(nasm -f bin program.asm -o program.com )]614 code1 -[2(nasm -f bin driver.asm -odriver.sys)]603 code2 -[(Note that this is a small o, and is different from a capital O , which is used to specify the number of)]586 norm1 -[(optimisation passes required. See ){/section-2.1.22 xl}(section 2.1.22){el}(.)]575 norm2 -[{/section-2.1.2 xa}(The )2(-f)0( Option: Specifying the )(Output File Format)](2.1.2)555.8 subh3 -[(If you do not supply the )2(-f)0( option to NASM, it will choose an output file format for you itself. In the)]538.8 norm1 -[(distribution versions of NASM, the default is always )2(bin)0(; if you've compiled your own copy of NASM, you)]527.8 norm0 -[(can redefine )2(OF_DEFAULT)0( at compile time and choose what you want the default to be.)]516.8 norm2 -[(Like )2(-o)0(, the intervening space between )2(-f)0( and the output file format is optional; so )2(-f elf)0( and )2(-felf)0( are)]499.8 norm1 -[(both valid.)]488.8 norm2 -[(A complete list of the available output file formats can be given by issuing the command )2(nasm -hf)0(.)]471.8 norm3 -[{/section-2.1.3 xa}(The )2(-l)0( Option: Generating a )(Listing File)](2.1.3)452.6 subh3 -[(If you supply the )2(-l)0( option to NASM, followed \(with the usual optional space\) by a file name, NASM will)]435.6 norm1 -[(generate a )(source-listing file for you, in which addresses and generated code are listed on the left, and the)]424.6 norm0 -[(actual source code, with expansions of multi-line macros \(except those which specifically request no)]413.6 norm0 -[(expansion in source listings: see ){/section-4.3.10 xl}(section 4.3.10){el}(\) on the right. For example:)]402.6 norm2 -[2(nasm -f elf myfile.asm -l myfile.lst)]385.6 code3 -[(If a list file is selected, you may turn off listing for a section of your source with )2([list -])0(, and turn it back)]368.6 norm1 -[(on with )2([list +])0(, \(the default, obviously\). There is no "user form" \(without the brackets\). This can be used)]357.6 norm0 -[(to list only sections of interest, avoiding excessively long listings.)]346.6 norm2 -[{/section-2.1.4 xa}(The )2(-M)0( Option: Generate )(Makefile Dependencies)](2.1.4)327.4 subh3 -[(This option can be used to generate makefile dependencies on stdout. This can be redirected to a file for)]310.4 norm1 -[(further processing. For example:)]299.4 norm2 -[2(nasm -M myfile.asm > myfile.dep)]282.4 code3 -[{/section-2.1.5 xa}(The )2(-MG)0( Option: Generate )(Makefile Dependencies)](2.1.5)263.2 subh3 -[(This option can be used to generate makefile dependencies on stdout. This differs from the )2(-M)0( option in that if)]246.2 norm1 -[(a nonexisting file is encountered, it is assumed to be a generated file and is added to the dependency list)]235.2 norm0 -[(without a prefix.)]224.2 norm2 -[{/section-2.1.6 xa}(The )2(-MF)0( Option: Set Makefile Dependency File)](2.1.6)205 subh3 -[(This option can be used with the )2(-M)0( or )2(-MG)0( options to send the output to a file, rather than to stdout. For)]188 norm1 -[(example:)]177 norm2 -[2(nasm -M -MF myfile.dep myfile.asm)]160 code3 -[{/section-2.1.7 xa}(The )2(-MD)0( Option: Assemble and Generate Dependencies)](2.1.7)140.8 subh3 -[(The )2(-MD)0( option acts as the combination of the )2(-M)0( and )2(-MF)0( options \(i.e. a filename has to be specified.\))]123.8 norm1 -[(However, unlike the )2(-M)0( or )2(-MG)0( options, )2(-MD)0( does )1(not)0( inhibit the normal operation of the assembler. Use this)]112.8 norm0 -[(to automatically generate updated dependencies with every assembly session. For example:)]101.8 norm2 -(18)pageeven -restore showpage -%%Page: 19 19 -%%BeginPageSetup -save -%%EndPageSetup -/19 pa -[2(nasm -f elf -o myfile.o -MD myfile.dep myfile.asm)]681 code3 -[{/section-2.1.8 xa}(The )2(-MT)0( Option: Dependency Target Name)](2.1.8)661.8 subh3 -[(The )2(-MT)0( option can be used to override the default name of the dependency target. This is normally the same)]644.8 norm1 -[(as the output filename, specified by the )2(-o)0( option.)]633.8 norm2 -[{/section-2.1.9 xa}(The )2(-MQ)0( Option: Dependency Target Name \(Quoted\))](2.1.9)614.6 subh3 -[(The )2(-MQ)0( option acts as the )2(-MT)0( option, except it tries to quote characters that have special meaning in)]597.6 norm1 -[(Makefile syntax. This is not foolproof, as not all characters with special meaning are quotable in Make.)]586.6 norm2 -[{/section-2.1.10 xa}(The )2(-MP)0( Option: Emit phony targets)](2.1.10)567.4 subh3 -[(When used with any of the dependency generation options, the )2(-MP)0( option causes NASM to emit a phony)]550.4 norm1 -[(target without dependencies for each header file. This prevents Make from complaining if a header file has)]539.4 norm0 -[(been removed.)]528.4 norm2 -[{/section-2.1.11 xa}(The )2(-F)0( Option: Selecting a )(Debug Information Format)](2.1.11)509.2 subh3 -[(This option is used to select the format of the debug information emitted into the output file, to be used by a)]492.2 norm1 -[(debugger \(or )1(will)0( be\). Prior to version 2.03.01, the use of this switch did )1(not)0( enable output of the selected)]481.2 norm0 -[(debug info format. Use )2(-g)0(, see ){/section-2.1.12 xl}(section 2.1.12){el}(, to enable output. Versions 2.03.01 and later automatically)]470.2 norm0 -[(enable )2(-g)0( if )2(-F)0( is specified.)]459.2 norm2 -[(A complete list of the available debug file formats for an output format can be seen by issuing the command)]442.2 norm1 -[2(nasm -f <format> -y)0(. Not all output formats currently support debugging output. See ){/section-2.1.26 xl}(section 2.1.26){el}(.)]431.2 norm2 -[(This should not be confused with the )2(-f dbg)0( output format option which is not built into NASM by default.)]414.2 norm1 -[(For information on how to enable it when building from the sources, see ){/section-7.14 xl}(section 7.14){el}(.)]403.2 norm2 -[{/section-2.1.12 xa}(The )2(-g)0( Option: Enabling )(Debug Information.)](2.1.12)384 subh3 -[(This option can be used to generate debugging information in the specified format. See ){/section-2.1.11 xl}(section 2.1.11){el}(. Using)]367 norm1 -[2(-g)0( without )2(-F)0( results in emitting debug info in the default format, if any, for the selected output format. If no)]356 norm0 -[(debug information is currently implemented in the selected output format, )2(-g)0( is )1(silently ignored)0(.)]345 norm2 -[{/section-2.1.13 xa}(The )2(-X)0( Option: Selecting an )(Error Reporting Format)](2.1.13)325.8 subh3 -[(This option can be used to select an error reporting format for any error messages that might be produced by)]308.8 norm1 -[(NASM.)]297.8 norm2 -[(Currently, two error reporting formats may be selected. They are the )2(-Xvc)0( option and the )2(-Xgnu)0( option. The)]280.8 norm1 -[(GNU format is the default and looks like this:)]269.8 norm2 -[2(filename.asm:65: error: specific error message)]252.8 code3 -[(where )2(filename.asm)0( is the name of the source file in which the error was detected, )2(65)0( is the source file)]235.8 norm1 -[(line number on which the error was detected, )2(error)0( is the severity of the error \(this could be )2(warning)0(\),)]224.8 norm0 -[(and )2(specific error message)0( is a more detailed text message which should help pinpoint the exact)]213.8 norm0 -[(problem.)]202.8 norm2 -[(The other format, specified by )2(-Xvc)0( is the style used by Microsoft Visual C++ and some other programs. It)]185.8 norm1 -[(looks like this:)]174.8 norm2 -[2(filename.asm\(65\) : error: specific error message)]157.8 code3 -[(where the only difference is that the line number is in parentheses instead of being delimited by colons.)]140.8 norm3 -[(See also the )2(Visual C++)0( output format, ){/section-7.5 xl}(section 7.5){el}(.)]123.8 norm3 -(19)pageodd -restore showpage -%%Page: 20 20 -%%BeginPageSetup -save -%%EndPageSetup -/20 pa -[{/section-2.1.14 xa}(The )2(-Z)0( Option: Send Errors to a File)](2.1.14)678.8 subh3 -[(Under )2(MS-DOS)0( it can be difficult \(though there are ways\) to redirect the standard-error output of a program)]661.8 norm1 -[(to a file. Since NASM usually produces its warning and )(error messages on )2(stderr)0(, this can make it hard to)]650.8 norm0 -[(capture the errors if \(for example\) you want to load them into an editor.)]639.8 norm2 -[(NASM therefore provides the )2(-Z)0( option, taking a filename argument which causes errors to be sent to the)]622.8 norm1 -[(specified files rather than standard error. Therefore you can )(redirect the errors into a file by typing)]611.8 norm2 -[2(nasm -Z myfile.err -f obj myfile.asm)]594.8 code3 -[(In earlier versions of NASM, this option was called )2(-E)0(, but it was changed since )2(-E)0( is an option)]577.8 norm1 -[(conventionally used for preprocessing only, with disastrous results. See ){/section-2.1.20 xl}(section 2.1.20){el}(.)]566.8 norm2 -[{/section-2.1.15 xa}(The )2(-s)0( Option: Send Errors to )2(stdout)](2.1.15)547.6 subh3 -[(The )2(-s)0( option redirects )(error messages to )2(stdout)0( rather than )2(stderr)0(, so it can be redirected under)]530.6 norm1 -[2(MS-DOS)0(. To assemble the file )2(myfile.asm)0( and pipe its output to the )2(more)0( program, you can type:)]519.6 norm2 -[2(nasm -s -f obj myfile.asm | more)]502.6 code3 -[(See also the )2(-Z)0( option, ){/section-2.1.14 xl}(section 2.1.14){el}(.)]485.6 norm3 -[{/section-2.1.16 xa}(The )2(-i)0( Option: Include File Search Directories)](2.1.16)466.4 subh3 -[(When NASM sees the )2(%include)0( or )2(%pathsearch)0( directive in a source file \(see ){/section-4.6.1 xl}(section 4.6.1){el}(, ){/section-4.6.2 xl}(section){el}]449.4 norm1 -[{/section-4.6.2 xl}(4.6.2){el}( or ){/section-3.2.3 xl}(section 3.2.3){el}(\), it will search for the given file not only in the current directory, but also in any)]438.4 norm0 -[(directories specified on the command line by the use of the )2(-i)0( option. Therefore you can include files from a)]427.4 norm0 -[(macro library, for example, by typing)]416.4 norm2 -[2(nasm -ic:\\macrolib\\ -f obj myfile.asm)]399.4 code3 -[(\(As usual, a space between )2(-i)0( and the path name is allowed, and optional\).)]382.4 norm3 -[(NASM, in the interests of complete source-code portability, does not understand the file naming conventions)]365.4 norm1 -[(of the OS it is running on; the string you provide as an argument to the )2(-i)0( option will be prepended exactly as)]354.4 norm0 -[(written to the name of the include file. Therefore the trailing backslash in the above example is necessary.)]343.4 norm0 -[(Under Unix, a trailing forward slash is similarly necessary.)]332.4 norm2 -[(\(You can use this to your advantage, if you're really )(perverse, by noting that the option )2(-ifoo)0( will cause)]315.4 norm1 -[2(%include "bar.i")0( to search for the file )2(foobar.i)0(...\))]304.4 norm2 -[(If you want to define a )1(standard)0( )(include search path, similar to )2(/usr/include)0( on Unix systems, you)]287.4 norm1 -[(should place one or more )2(-i)0( directives in the )2(NASMENV)0( environment variable \(see ){/section-2.1.28 xl}(section 2.1.28){el}(\).)]276.4 norm2 -[(For Makefile compatibility with many C compilers, this option can also be specified as )2(-I)0(.)]259.4 norm3 -[{/section-2.1.17 xa}(The )2(-p)0( Option: )(Pre-Include a File)](2.1.17)240.2 subh3 -[(NASM allows you to specify files to be )1(pre-included)0( into your source file, by the use of the )2(-p)0( option. So)]223.2 norm1 -[(running)]212.2 norm2 -[2(nasm myfile.asm -p myinc.inc)]195.2 code3 -[(is equivalent to running )2(nasm myfile.asm)0( and placing the directive )2(%include "myinc.inc")0( at the)]178.2 norm1 -[(start of the file.)]167.2 norm2 -[(For consistency with the )2(-I)0(, )2(-D)0( and )2(-U)0( options, this option can also be specified as )2(-P)0(.)]150.2 norm3 -[{/section-2.1.18 xa}(The )2(-d)0( Option: )(Pre-Define a Macro)](2.1.18)131 subh3 -[(Just as the )2(-p)0( option gives an alternative to placing )2(%include)0( directives at the start of a source file, the )2(-d)]114 norm1 -[(option gives an alternative to placing a )2(%define)0( directive. You could code)]103 norm2 -(20)pageeven -restore showpage -%%Page: 21 21 -%%BeginPageSetup -save -%%EndPageSetup -/21 pa -[2(nasm myfile.asm -dFOO=100)]681 code3 -[(as an alternative to placing the directive)]664 norm3 -[2(%define FOO 100)]647 code3 -[(at the start of the file. You can miss off the macro value, as well: the option )2(-dFOO)0( is equivalent to coding)]630 norm1 -[2(%define FOO)0(. This form of the directive may be useful for selecting )(assembly-time options which are then)]619 norm0 -[(tested using )2(%ifdef)0(, for example )2(-dDEBUG)0(.)]608 norm2 -[(For Makefile compatibility with many C compilers, this option can also be specified as )2(-D)0(.)]591 norm3 -[{/section-2.1.19 xa}(The )2(-u)0( Option: )(Undefine a Macro)](2.1.19)571.8 subh3 -[(The )2(-u)0( option undefines a macro that would otherwise have been pre-defined, either automatically or by a)]554.8 norm1 -[2(-p)0( or )2(-d)0( option specified earlier on the command lines.)]543.8 norm2 -[(For example, the following command line:)]526.8 norm3 -[2(nasm myfile.asm -dFOO=100 -uFOO)]509.8 code3 -[(would result in )2(FOO)0( )1(not)0( being a predefined macro in the program. This is useful to override options specified)]492.8 norm1 -[(at a different point in a Makefile.)]481.8 norm2 -[(For Makefile compatibility with many C compilers, this option can also be specified as )2(-U)0(.)]464.8 norm3 -[{/section-2.1.20 xa}(The )2(-E)0( Option: Preprocess Only)](2.1.20)445.6 subh3 -[(NASM allows the )(preprocessor to be run on its own, up to a point. Using the )2(-E)0( option \(which requires no)]428.6 norm1 -[(arguments\) will cause NASM to preprocess its input file, expand all the macro references, remove all the)]417.6 norm0 -[(comments and preprocessor directives, and print the resulting file on standard output \(or save it to a file, if the)]406.6 norm0 -[2(-o)0( option is also used\).)]395.6 norm2 -[(This option cannot be applied to programs which require the preprocessor to evaluate )(expressions which)]378.6 norm1 -[(depend on the values of symbols: so code such as)]367.6 norm2 -[2(%assign tablesize \($-tablestart\))]350.6 code3 -[(will cause an error in )(preprocess-only mode.)]333.6 norm3 -[(For compatiblity with older version of NASM, this option can also be written )2(-e)0(. )2(-E)0( in older versions of)]316.6 norm1 -[(NASM was the equivalent of the current )2(-Z)0( option, ){/section-2.1.14 xl}(section 2.1.14){el}(.)]305.6 norm2 -[{/section-2.1.21 xa}(The )2(-a)0( Option: Don't Preprocess At All)](2.1.21)286.4 subh3 -[(If NASM is being used as the back end to a compiler, it might be desirable to )(suppress preprocessing)]269.4 norm1 -[(completely and assume the compiler has already done it, to save time and increase compilation speeds. The)]258.4 norm0 -[2(-a)0( option, requiring no argument, instructs NASM to replace its powerful )(preprocessor with a )(stub)]247.4 norm0 -[(preprocessor which does nothing.)]236.4 norm2 -[{/section-2.1.22 xa}(The )2(-O)0( Option: Specifying )(Multipass Optimization)](2.1.22)217.2 subh3 -[(NASM defaults to not optimizing operands which can fit into a signed byte. This means that if you want the)]200.2 norm1 -[(shortest possible object code, you have to enable optimization.)]189.2 norm2 -[(Using the )2(-O)0( option, you can tell NASM to carry out different levels of optimization. The syntax is:)]172.2 norm3 -[2(-O0)0(: No optimization. All operands take their long forms, if a short form is not specified, except)]155.2 bull1 -[(conditional jumps. This is intended to match NASM 0.98 behavior.)]144.2 bull2 -[2(-O1)0(: Minimal optimization. As above, but immediate operands which will fit in a signed byte are)]127.2 bull1 -[(optimized, unless the long form is specified. Conditional jumps default to the long form unless otherwise)]116.2 bull0 -[(specified.)]105.2 bull2 -(21)pageodd -restore showpage -%%Page: 22 22 -%%BeginPageSetup -save -%%EndPageSetup -/22 pa -[2(-Ox)0( \(where )2(x)0( is the actual letter )2(x)0(\): Multipass optimization. Minimize branch offsets and signed)]681 bull1 -[(immediate bytes, overriding size specification unless the )2(strict)0( keyword has been used \(see ){/section-3.7 xl}(section){el}]670 bull0 -[{/section-3.7 xl}(3.7){el}(\). For compatability with earlier releases, the letter )2(x)0( may also be any number greater than one. This)]659 bull0 -[(number has no effect on the actual number of passes.)]648 bull2 -[(The )2(-Ox)0( mode is recommended for most uses.)]631 norm3 -[(Note that this is a capital )2(O)0(, and is different from a small )2(o)0(, which is used to specify the output file name. See)]614 norm1 -[{/section-2.1.1 xl}(section 2.1.1){el}(.)]603 norm2 -[{/section-2.1.23 xa}(The )2(-t)0( Option: Enable TASM Compatibility Mode)](2.1.23)583.8 subh3 -[(NASM includes a limited form of compatibility with Borland's )2(TASM)0(. When NASM's )2(-t)0( option is used, the)]566.8 norm1 -[(following changes are made:)]555.8 norm2 -[(local labels may be prefixed with )2(@@)0( instead of )2(.)]538.8 bull3 -[(size override is supported within brackets. In TASM compatible mode, a size override inside square)]521.8 bull1 -[(brackets changes the size of the operand, and not the address type of the operand as it does in NASM)]510.8 bull0 -[(syntax. E.g. )2(mov eax,[DWORD val])0( is valid syntax in TASM compatibility mode. Note that you lose)]499.8 bull0 -[(the ability to override the default address type for the instruction.)]488.8 bull2 -[(unprefixed forms of some directives supported \()2(arg)0(, )2(elif)0(, )2(else)0(, )2(endif)0(, )2(if)0(, )2(ifdef)0(, )2(ifdifi)0(,)]471.8 bull1 -[2(ifndef)0(, )2(include)0(, )2(local)0(\))]460.8 bull2 -[{/section-2.1.24 xa}(The )2(-w)0( and )2(-W)0( Options: Enable or Disable Assembly )(Warnings)](2.1.24)441.6 subh3 -[(NASM can observe many conditions during the course of assembly which are worth mentioning to the user,)]424.6 norm1 -[(but not a sufficiently severe error to justify NASM refusing to generate an output file. These conditions are)]413.6 norm0 -[(reported like errors, but come up with the word `warning' before the message. Warnings do not prevent)]402.6 norm0 -[(NASM from generating an output file and returning a success status to the operating system.)]391.6 norm2 -[(Some conditions are even less severe than that: they are only sometimes worth mentioning to the user.)]374.6 norm1 -[(Therefore NASM supports the )2(-w)0( command-line option, which enables or disables certain classes of)]363.6 norm0 -[(assembly warning. Such warning classes are described by a name, for example )2(orphan-labels)0(; you can)]352.6 norm0 -[(enable warnings of this class by the command-line option )2(-w+orphan-labels)0( and disable it by)]341.6 norm0 -[2(-w-orphan-labels)0(.)]330.6 norm2 -[(The )(suppressible warning classes are:)]313.6 norm3 -[2(macro-params)0( covers warnings about )(multi-line macros being invoked with the wrong number of)]296.6 bull1 -[(parameters. This warning class is enabled by default; see ){/section-4.3.2 xl}(section 4.3.2){el}( for an example of why you might)]285.6 bull0 -[(want to disable it.)]274.6 bull2 -[2(macro-selfref)0( warns if a macro references itself. This warning class is disabled by default.)]257.6 bull3 -[2(macro-defaults)0( warns when a macro has more default parameters than optional parameters. This)]240.6 bull1 -[(warning class is enabled by default; see ){/section-4.3.5 xl}(section 4.3.5){el}( for why you might want to disable it.)]229.6 bull2 -[2(orphan-labels)0( covers warnings about source lines which contain no instruction but define a label)]212.6 bull1 -[(without a trailing colon. NASM warns about this somewhat obscure condition by default; see ){/section-3.1 xl}(section 3.1){el}]201.6 bull0 -[(for more information.)]190.6 bull2 -[2(number-overflow)0( covers warnings about numeric constants which don't fit in 64 bits. This warning)]173.6 bull1 -[(class is enabled by default.)]162.6 bull2 -[2(gnu-elf-extensions)0( warns if 8-bit or 16-bit relocations are used in )2(-f elf)0( format. The GNU)]145.6 bull1 -[(extensions allow this. This warning class is disabled by default.)]134.6 bull2 -[2(float-overflow)0( warns about floating point overflow. Enabled by default.)]117.6 bull3 -[2(float-denorm)0( warns about floating point denormals. Disabled by default.)]100.6 bull3 -(22)pageeven -restore showpage -%%Page: 23 23 -%%BeginPageSetup -save -%%EndPageSetup -/23 pa -[2(float-underflow)0( warns about floating point underflow. Disabled by default.)]681 bull3 -[2(float-toolong)0( warns about too many digits in floating-point numbers. Enabled by default.)]664 bull3 -[2(user)0( controls )2(%warning)0( directives \(see ){/section-4.9 xl}(section 4.9){el}(\). Enabled by default.)]647 bull3 -[2(error)0( causes warnings to be treated as errors. Disabled by default.)]630 bull3 -[2(all)0( is an alias for )1(all)0( suppressible warning classes \(not including )2(error)0(\). Thus, )2(-w+all)0( enables all)]613 bull1 -[(available warnings.)]602 bull2 -[(In addition, you can set warning classes across sections. Warning classes may be enabled with)]585 norm1 -[2([warning +warning-name])0(, disabled with )2([warning -warning-name])0( or reset to their original)]574 norm0 -[(value with )2([warning *warning-name])0(. No "user form" \(without the brackets\) exists.)]563 norm2 -[(Since version 2.00, NASM has also supported the gcc-like syntax )2(-Wwarning)0( and )2(-Wno-warning)]546 norm1 -[(instead of )2(-w+warning)0( and )2(-w-warning)0(, respectively.)]535 norm2 -[{/section-2.1.25 xa}(The )2(-v)0( Option: Display )(Version Info)](2.1.25)515.8 subh3 -[(Typing )2(NASM -v)0( will display the version of NASM which you are using, and the date on which it was)]498.8 norm1 -[(compiled.)]487.8 norm2 -[(You will need the version number if you report a bug.)]470.8 norm3 -[{/section-2.1.26 xa}(The )2(-y)0( Option: Display Available Debug Info Formats)](2.1.26)451.6 subh3 -[(Typing )2(nasm -f <option> -y)0( will display a list of the available debug info formats for the given output)]434.6 norm1 -[(format. The default format is indicated by an asterisk. For example:)]423.6 norm2 -[2(nasm -f elf -y)]406.6 code3 -[2(valid debug formats for 'elf32' output format are )]389.6 code1 -[2( \('*' denotes default\): )]378.6 code0 -[2( * stabs ELF32 \(i386\) stabs debug format for Linux )]367.6 code0 -[2( dwarf elf32 \(i386\) dwarf debug format for Linux)]356.6 code2 -[{/section-2.1.27 xa}(The )2(--prefix)0( and )2(--postfix)0( Options.)](2.1.27)337.4 subh3 -[(The )2(--prefix)0( and )2(--postfix)0( options prepend or append \(respectively\) the given argument to all)]320.4 norm1 -[2(global)0( or )2(extern)0( variables. E.g. )2(--prefix _)0( will prepend the underscore to all global and external)]309.4 norm0 -[(variables, as C sometimes \(but not always\) likes it.)]298.4 norm2 -[{/section-2.1.28 xa}(The )2(NASMENV)0( )(Environment Variable)](2.1.28)279.2 subh3 -[(If you define an environment variable called )2(NASMENV)0(, the program will interpret it as a list of extra)]262.2 norm1 -[(command-line options, which are processed before the real command line. You can use this to define)]251.2 norm0 -[(standard search directories for include files, by putting )2(-i)0( options in the )2(NASMENV)0( variable.)]240.2 norm2 -[(The value of the variable is split up at white space, so that the value )2(-s -ic:\\nasmlib\\)0( will be treated as)]223.2 norm1 -[(two separate options. However, that means that the value )2(-dNAME="my name")0( won't do what you might)]212.2 norm0 -[(want, because it will be split at the space and the NASM command-line processing will get confused by the)]201.2 norm0 -[(two nonsensical words )2(-dNAME="my)0( and )2(name")0(.)]190.2 norm2 -[(To get round this, NASM provides a feature whereby, if you begin the )2(NASMENV)0( environment variable with)]173.2 norm1 -[(some character that isn't a minus sign, then NASM will treat this character as the )(separator character for)]162.2 norm0 -[(options. So setting the )2(NASMENV)0( variable to the value )2(!-s!-ic:\\nasmlib\\)0( is equivalent to setting it to)]151.2 norm0 -[2(-s -ic:\\nasmlib\\)0(, but )2(!-dNAME="my name")0( will work.)]140.2 norm2 -[(This environment variable was previously called )2(NASM)0(. This was changed with version 0.98.31.)]123.2 norm3 -(23)pageodd -restore showpage -%%Page: 24 24 -%%BeginPageSetup -save -%%EndPageSetup -/24 pa -[{/section-2.2 xa}(Quick Start for )(MASM Users)](2.2)676.6 head3 -[(If you're used to writing programs with MASM, or with )(TASM in MASM-compatible \(non-Ideal\) mode, or)]659.6 norm1 -[(with )2(a86)0(, this section attempts to outline the major differences between MASM's syntax and NASM's. If)]648.6 norm0 -[(you're not already used to MASM, it's probably worth skipping this section.)]637.6 norm2 -[{/section-2.2.1 xa}(NASM Is )(Case-Sensitive)](2.2.1)618.4 subh3 -[(One simple difference is that NASM is case-sensitive. It makes a difference whether you call your label )2(foo)0(,)]601.4 norm1 -[2(Foo)0( or )2(FOO)0(. If you're assembling to )2(DOS)0( or )2(OS/2)0( )2(.OBJ)0( files, you can invoke the )2(UPPERCASE)0( directive)]590.4 norm0 -[(\(documented in ){/section-7.4 xl}(section 7.4){el}(\) to ensure that all symbols exported to other code modules are forced to be upper)]579.4 norm0 -[(case; but even then, )1(within)0( a single module, NASM will distinguish between labels differing only in case.)]568.4 norm2 -[{/section-2.2.2 xa}(NASM Requires )(Square Brackets For )(Memory References)](2.2.2)549.2 subh3 -[(NASM was designed with simplicity of syntax in mind. One of the )(design goals of NASM is that it should be)]532.2 norm1 -[(possible, as far as is practical, for the user to look at a single line of NASM code and tell what opcode is)]521.2 norm0 -[(generated by it. You can't do this in MASM: if you declare, for example,)]510.2 norm2 -[2(foo equ 1 )]493.2 code1 -[2(bar dw 2)]482.2 code2 -[(then the two lines of code)]465.2 norm3 -[2( mov ax,foo )]448.2 code1 -[2( mov ax,bar)]437.2 code2 -[(generate completely different opcodes, despite having identical-looking syntaxes.)]420.2 norm3 -[(NASM avoids this undesirable situation by having a much simpler syntax for memory references. The rule is)]403.2 norm1 -[(simply that any access to the )1(contents)0( of a memory location requires square brackets around the address, and)]392.2 norm0 -[(any access to the )1(address)0( of a variable doesn't. So an instruction of the form )2(mov ax,foo)0( will )1(always)0( refer)]381.2 norm0 -[(to a compile-time constant, whether it's an )2(EQU)0( or the address of a variable; and to access the )1(contents)0( of the)]370.2 norm0 -[(variable )2(bar)0(, you must code )2(mov ax,[bar])0(.)]359.2 norm2 -[(This also means that NASM has no need for MASM's )2(OFFSET)0( keyword, since the MASM code)]342.2 norm1 -[2(mov ax,offset bar)0( means exactly the same thing as NASM's )2(mov ax,bar)0(. If you're trying to get)]331.2 norm0 -[(large amounts of MASM code to assemble sensibly under NASM, you can always code)]320.2 norm0 -[2(%idefine offset)0( to make the preprocessor treat the )2(OFFSET)0( keyword as a no-op.)]309.2 norm2 -[(This issue is even more confusing in )2(a86)0(, where declaring a label with a trailing colon defines it to be a)]292.2 norm1 -[(`label' as opposed to a `variable' and causes )2(a86)0( to adopt NASM-style semantics; so in )2(a86)0(, )2(mov ax,var)]281.2 norm0 -[(has different behaviour depending on whether )2(var)0( was declared as )2(var: dw 0)0( \(a label\) or )2(var dw 0)0( \(a)]270.2 norm0 -[(word-size variable\). NASM is very simple by comparison: )1(everything)0( is a label.)]259.2 norm2 -[(NASM, in the interests of simplicity, also does not support the )(hybrid syntaxes supported by MASM and its)]242.2 norm1 -[(clones, such as )2(mov ax,table[bx])0(, where a memory reference is denoted by one portion outside square)]231.2 norm0 -[(brackets and another portion inside. The correct syntax for the above is )2(mov ax,[table+bx])0(. Likewise,)]220.2 norm0 -[2(mov ax,es:[di])0( is wrong and )2(mov ax,[es:di])0( is right.)]209.2 norm2 -[{/section-2.2.3 xa}(NASM Doesn't Store )(Variable Types)](2.2.3)190 subh3 -[(NASM, by design, chooses not to remember the types of variables you declare. Whereas MASM will)]173 norm1 -[(remember, on seeing )2(var dw 0)0(, that you declared )2(var)0( as a word-size variable, and will then be able to fill)]162 norm0 -[(in the )(ambiguity in the size of the instruction )2(mov var,2)0(, NASM will deliberately remember nothing about)]151 norm0 -[(the symbol )2(var)0( except where it begins, and so you must explicitly code )2(mov word [var],2)0(.)]140 norm2 -[(For this reason, NASM doesn't support the )2(LODS)0(, )2(MOVS)0(, )2(STOS)0(, )2(SCAS)0(, )2(CMPS)0(, )2(INS)0(, or )2(OUTS)0( instructions,)]123 norm1 -[(but only supports the forms such as )2(LODSB)0(, )2(MOVSW)0(, and )2(SCASD)0(, which explicitly specify the size of the)]112 norm0 -[(components of the strings being manipulated.)]101 norm2 -(24)pageeven -restore showpage -%%Page: 25 25 -%%BeginPageSetup -save -%%EndPageSetup -/25 pa -[{/section-2.2.4 xa}(NASM Doesn't )2(ASSUME)](2.2.4)678.8 subh3 -[(As part of NASM's drive for simplicity, it also does not support the )2(ASSUME)0( directive. NASM will not keep)]661.8 norm1 -[(track of what values you choose to put in your segment registers, and will never )1(automatically)0( generate a)]650.8 norm0 -[(segment override prefix.)]639.8 norm2 -[{/section-2.2.5 xa}(NASM Doesn't Support )(Memory Models)](2.2.5)620.6 subh3 -[(NASM also does not have any directives to support different 16-bit memory models. The programmer has to)]603.6 norm1 -[(keep track of which functions are supposed to be called with a )(far call and which with a )(near call, and is)]592.6 norm0 -[(responsible for putting the correct form of )2(RET)0( instruction \()2(RETN)0( or )2(RETF)0(; NASM accepts )2(RET)0( itself as an)]581.6 norm0 -[(alternate form for )2(RETN)0(\); in addition, the programmer is responsible for coding CALL FAR instructions)]570.6 norm0 -[(where necessary when calling )1(external)0( functions, and must also keep track of which external variable)]559.6 norm0 -[(definitions are far and which are near.)]548.6 norm2 -[{/section-2.2.6 xa}(Floating-Point Differences)](2.2.6)529.4 subh3 -[(NASM uses different names to refer to floating-point registers from MASM: where MASM would call them)]512.4 norm1 -[2(ST\(0\))0(, )2(ST\(1\))0( and so on, and )2(a86)0( would call them simply )2(0)0(, )2(1)0( and so on, NASM chooses to call them)]501.4 norm0 -[2(st0)0(, )2(st1)0( etc.)]490.4 norm2 -[(As of version 0.96, NASM now treats the instructions with )(`nowait' forms in the same way as)]473.4 norm1 -[(MASM-compatible assemblers. The idiosyncratic treatment employed by 0.95 and earlier was based on a)]462.4 norm0 -[(misunderstanding by the authors.)]451.4 norm2 -[{/section-2.2.7 xa}(Other Differences)](2.2.7)432.2 subh3 -[(For historical reasons, NASM uses the keyword )2(TWORD)0( where MASM and compatible assemblers use)]415.2 norm1 -[2(TBYTE)0(.)]404.2 norm2 -[(NASM does not declare )(uninitialized storage in the same way as MASM: where a MASM programmer might)]387.2 norm1 -[(use )2(stack db 64 dup \(?\))0(, NASM requires )2(stack resb 64)0(, intended to be read as `reserve 64)]376.2 norm0 -[(bytes'. For a limited amount of compatibility, since NASM treats )2(?)0( as a valid character in symbol names, you)]365.2 norm0 -[(can code )2(? equ 0)0( and then writing )2(dw ?)0( will at least do something vaguely useful. )2(DUP)0( is still not a)]354.2 norm0 -[(supported syntax, however.)]343.2 norm2 -[(In addition to all of this, macros and directives work completely differently to MASM. See ){/chapter-4 xl}(chapter 4){el}( and)]326.2 norm1 -[{/chapter-6 xl}(chapter 6){el}( for further details.)]315.2 norm2 -(25)pageodd -restore showpage -%%Page: 26 26 -%%BeginPageSetup -save -%%EndPageSetup -/26 pa -[{/chapter-3 xa}(Chapter 3: The NASM Language)]642.8 chap3 -[{/section-3.1 xa}(Layout of a NASM Source Line)](3.1)603.4 head3 -[(Like most assemblers, each NASM source line contains \(unless it is a macro, a preprocessor directive or an)]586.4 norm1 -[(assembler directive: see ){/chapter-4 xl}(chapter 4){el}( and ){/chapter-6 xl}(chapter 6){el}(\) some combination of the four fields)]575.4 norm2 -[2(label: instruction operands ; comment)]558.4 code3 -[(As usual, most of these fields are optional; the presence or absence of any combination of a label, an)]541.4 norm1 -[(instruction and a comment is allowed. Of course, the operand field is either required or forbidden by the)]530.4 norm0 -[(presence and nature of the instruction field.)]519.4 norm2 -[(NASM uses backslash \(\\\) as the line continuation character; if a line ends with backslash, the next line is)]502.4 norm1 -[(considered to be a part of the backslash-ended line.)]491.4 norm2 -[(NASM places no restrictions on white space within a line: labels may have white space before them, or)]474.4 norm1 -[(instructions may have no space before them, or anything. The )(colon after a label is also optional. \(Note that)]463.4 norm0 -[(this means that if you intend to code )2(lodsb)0( alone on a line, and type )2(lodab)0( by accident, then that's still a)]452.4 norm0 -[(valid source line which does nothing but define a label. Running NASM with the command-line option)]441.4 norm0 -[2(-w+orphan-labels)0( will cause it to warn you if you define a label alone on a line without a )(trailing colon.\))]430.4 norm2 -[(Valid characters in labels are letters, numbers, )2(_)0(, )2($)0(, )2(#)0(, )2(@)0(, )2(~)0(, )2(.)0(, and )2(?)0(. The only characters which may be used)]413.4 norm1 -[(as the )1(first)0( character of an identifier are letters, )2(.)0( \(with special meaning: see ){/section-3.9 xl}(section 3.9){el}(\), )2(_)0( and )2(?)0(. An)]402.4 norm0 -[(identifier may also be prefixed with a )2($)0( to indicate that it is intended to be read as an identifier and not a)]391.4 norm0 -[(reserved word; thus, if some other module you are linking with defines a symbol called )2(eax)0(, you can refer to)]380.4 norm0 -[2($eax)0( in NASM code to distinguish the symbol from the register. Maximum length of an identifier is 4095)]369.4 norm0 -[(characters.)]358.4 norm2 -[(The instruction field may contain any machine instruction: Pentium and P6 instructions, FPU instructions,)]341.4 norm1 -[(MMX instructions and even undocumented instructions are all supported. The instruction may be prefixed by)]330.4 norm0 -[2(LOCK)0(, )2(REP)0(, )2(REPE)0(/)2(REPZ)0( or )2(REPNE)0(/)2(REPNZ)0(, in the usual way. Explicit )(address-size and )(operand-size)]319.4 norm0 -[(prefixes )2(A16)0(, )2(A32)0(, )2(A64)0(, )2(O16)0( and )2(O32)0(, )2(O64)0( are provided \226 one example of their use is given in ){/chapter-10 xl}(chapter 10){el}(.)]308.4 norm0 -[(You can also use the name of a )(segment register as an instruction prefix: coding )2(es mov [bx],ax)0( is)]297.4 norm0 -[(equivalent to coding )2(mov [es:bx],ax)0(. We recommend the latter syntax, since it is consistent with other)]286.4 norm0 -[(syntactic features of the language, but for instructions such as )2(LODSB)0(, which has no operands and yet can)]275.4 norm0 -[(require a segment override, there is no clean syntactic way to proceed apart from )2(es lodsb)0(.)]264.4 norm2 -[(An instruction is not required to use a prefix: prefixes such as )2(CS)0(, )2(A32)0(, )2(LOCK)0( or )2(REPE)0( can appear on a line)]247.4 norm1 -[(by themselves, and NASM will just generate the prefix bytes.)]236.4 norm2 -[(In addition to actual machine instructions, NASM also supports a number of pseudo-instructions, described in)]219.4 norm1 -[{/section-3.2 xl}(section 3.2){el}(.)]208.4 norm2 -[(Instruction )(operands may take a number of forms: they can be registers, described simply by the register name)]191.4 norm1 -[(\(e.g. )2(ax)0(, )2(bp)0(, )2(ebx)0(, )2(cr0)0(: NASM does not use the )2(gas)0(\226style syntax in which register names must be prefixed)]180.4 norm0 -[(by a )2(%)0( sign\), or they can be )(effective addresses \(see ){/section-3.3 xl}(section 3.3){el}(\), constants \(){/section-3.4 xl}(section 3.4){el}(\) or expressions)]169.4 norm0 -[(\(){/section-3.5 xl}(section 3.5){el}(\).)]158.4 norm2 -[(For x87 )(floating-point instructions, NASM accepts a wide range of syntaxes: you can use two-operand forms)]141.4 norm1 -[(like MASM supports, or you can use NASM's native single-operand forms in most cases. For example, you)]130.4 norm0 -[(can code:)]119.4 norm2 -(26)pageeven -restore showpage -%%Page: 27 27 -%%BeginPageSetup -save -%%EndPageSetup -/27 pa -[2( fadd st1 ; this sets st0 := st0 + st1 )]681 code1 -[2( fadd st0,st1 ; so does this )]670 code0 -[2()]659 code0 -[2( fadd st1,st0 ; this sets st1 := st1 + st0 )]648 code0 -[2( fadd to st1 ; so does this)]637 code2 -[(Almost any x87 floating-point instruction that references memory must use one of the prefixes )2(DWORD)0(,)]620 norm1 -[2(QWORD)0( or )2(TWORD)0( to indicate what size of )(memory operand it refers to.)]609 norm2 -[{/section-3.2 xa}(Pseudo-Instructions)](3.2)587.6 head3 -[(Pseudo-instructions are things which, though not real x86 machine instructions, are used in the instruction)]570.6 norm1 -[(field anyway because that's the most convenient place to put them. The current pseudo-instructions are )2(DB)0(,)]559.6 norm0 -[2(DW)0(, )2(DD)0(, )2(DQ)0(, )2(DT)0(, )2(DO)0( and )2(DY)0(; their )(uninitialized counterparts )2(RESB)0(, )2(RESW)0(, )2(RESD)0(, )2(RESQ)0(, )2(REST)0(, )2(RESO)0( and)]548.6 norm0 -[2(RESY)0(; the )2(INCBIN)0( command, the )2(EQU)0( command, and the )2(TIMES)0( prefix.)]537.6 norm2 -[{/section-3.2.1 xa}2(DB)0( and Friends: Declaring Initialized Data)](3.2.1)518.4 subh3 -[2(DB)0(, )2(DW)0(, )2(DD)0(, )2(DQ)0(, )2(DT)0(, )2(DO)0( and )2(DY)0( are used, much as in MASM, to declare initialized data in the output file.)]501.4 norm1 -[(They can be invoked in a wide range of ways: )]490.4 norm2 -[2( db 0x55 ; just the byte 0x55 )]473.4 code1 -[2( db 0x55,0x56,0x57 ; three bytes in succession )]462.4 code0 -[2( db 'a',0x55 ; character constants are OK )]451.4 code0 -[2( db 'hello',13,10,'$' ; so are string constants )]440.4 code0 -[2( dw 0x1234 ; 0x34 0x12 )]429.4 code0 -[2( dw 'a' ; 0x61 0x00 \(it's just a number\) )]418.4 code0 -[2( dw 'ab' ; 0x61 0x62 \(character constant\) )]407.4 code0 -[2( dw 'abc' ; 0x61 0x62 0x63 0x00 \(string\) )]396.4 code0 -[2( dd 0x12345678 ; 0x78 0x56 0x34 0x12 )]385.4 code0 -[2( dd 1.234567e20 ; floating-point constant )]374.4 code0 -[2( dq 0x123456789abcdef0 ; eight byte constant )]363.4 code0 -[2( dq 1.234567e20 ; double-precision float )]352.4 code0 -[2( dt 1.234567e20 ; extended-precision float)]341.4 code2 -[2(DT)0(, )2(DO)0( and )2(DY)0( do not accept )(numeric constants as operands.)]324.4 norm3 -[{/section-3.2.2 xa}2(RESB)0( and Friends: Declaring )(Uninitialized Data)](3.2.2)305.2 subh3 -[2(RESB)0(, )2(RESW)0(, )2(RESD)0(, )2(RESQ)0(, )2(REST)0(, )2(RESO)0( and )2(RESY)0( are designed to be used in the BSS section of a module:)]288.2 norm1 -[(they declare )1(uninitialized)0( storage space. Each takes a single operand, which is the number of bytes, words,)]277.2 norm0 -[(doublewords or whatever to reserve. As stated in ){/section-2.2.7 xl}(section 2.2.7){el}(, NASM does not support the MASM/TASM)]266.2 norm0 -[(syntax of reserving uninitialized space by writing )2(DW ?)0( or similar things: this is what it does instead. The)]255.2 norm0 -[(operand to a )2(RESB)0(\226type pseudo-instruction is a )1(critical expression)0(: see ){/section-3.8 xl}(section 3.8){el}(.)]244.2 norm2 -[(For example:)]227.2 norm3 -[2(buffer: resb 64 ; reserve 64 bytes )]210.2 code1 -[2(wordvar: resw 1 ; reserve a word )]199.2 code0 -[2(realarray resq 10 ; array of ten reals )]188.2 code0 -[2(ymmval: resy 1 ; one YMM register)]177.2 code2 -[{/section-3.2.3 xa}2(INCBIN)0(: Including External )(Binary Files)](3.2.3)158 subh3 -[2(INCBIN)0( is borrowed from the old Amiga assembler )(DevPac: it includes a binary file verbatim into the output)]141 norm1 -[(file. This can be handy for \(for example\) including )(graphics and )(sound data directly into a game executable)]130 norm0 -[(file. It can be called in one of these three ways:)]119 norm2 -(27)pageodd -restore showpage -%%Page: 28 28 -%%BeginPageSetup -save -%%EndPageSetup -/28 pa -[2( incbin "file.dat" ; include the whole file )]681 code1 -[2( incbin "file.dat",1024 ; skip the first 1024 bytes )]670 code0 -[2( incbin "file.dat",1024,512 ; skip the first 1024, and )]659 code0 -[2( ; actually include at most 512)]648 code2 -[2(INCBIN)0( is both a directive and a standard macro; the standard macro version searches for the file in the)]631 norm1 -[(include file search path and adds the file to the dependency lists. This macro can be overridden if desired.)]620 norm2 -[{/section-3.2.4 xa}2(EQU)0(: Defining Constants)](3.2.4)600.8 subh3 -[2(EQU)0( defines a symbol to a given constant value: when )2(EQU)0( is used, the source line must contain a label. The)]583.8 norm1 -[(action of )2(EQU)0( is to define the given label name to the value of its \(only\) operand. This definition is absolute,)]572.8 norm0 -[(and cannot change later. So, for example,)]561.8 norm2 -[2(message db 'hello, world' )]544.8 code1 -[2(msglen equ $-message)]533.8 code2 -[(defines )2(msglen)0( to be the constant 12. )2(msglen)0( may not then be redefined later. This is not a )(preprocessor)]516.8 norm1 -[(definition either: the value of )2(msglen)0( is evaluated )1(once)0(, using the value of )2($)0( \(see ){/section-3.5 xl}(section 3.5){el}( for an)]505.8 norm0 -[(explanation of )2($)0(\) at the point of definition, rather than being evaluated wherever it is referenced and using the)]494.8 norm0 -[(value of )2($)0( at the point of reference.)]483.8 norm2 -[{/section-3.2.5 xa}2(TIMES)0(: )(Repeating Instructions or Data)](3.2.5)464.6 subh3 -[(The )2(TIMES)0( prefix causes the instruction to be assembled multiple times. This is partly present as NASM's)]447.6 norm1 -[(equivalent of the )2(DUP)0( syntax supported by )(MASM\226compatible assemblers, in that you can code)]436.6 norm2 -[2(zerobuf: times 64 db 0)]419.6 code3 -[(or similar things; but )2(TIMES)0( is more versatile than that. The argument to )2(TIMES)0( is not just a numeric)]402.6 norm1 -[(constant, but a numeric )1(expression)0(, so you can do things like)]391.6 norm2 -[2(buffer: db 'hello, world' )]374.6 code1 -[2( times 64-$+buffer db ' ')]363.6 code2 -[(which will store exactly enough spaces to make the total length of )2(buffer)0( up to 64. Finally, )2(TIMES)0( can be)]346.6 norm1 -[(applied to ordinary instructions, so you can code trivial )(unrolled loops in it:)]335.6 norm2 -[2( times 100 movsb)]318.6 code3 -[(Note that there is no effective difference between )2(times 100 resb 1)0( and )2(resb 100)0(, except that the)]301.6 norm1 -[(latter will be assembled about 100 times faster due to the internal structure of the assembler.)]290.6 norm2 -[(The operand to )2(TIMES)0( is a critical expression \(){/section-3.8 xl}(section 3.8){el}(\).)]273.6 norm3 -[(Note also that )2(TIMES)0( can't be applied to )(macros: the reason for this is that )2(TIMES)0( is processed after the)]256.6 norm1 -[(macro phase, which allows the argument to )2(TIMES)0( to contain expressions such as )2(64-$+buffer)0( as above.)]245.6 norm0 -[(To repeat more than one line of code, or a complex macro, use the preprocessor )2(%rep)0( directive.)]234.6 norm2 -[{/section-3.3 xa}(Effective Addresses)](3.3)213.2 head3 -[(An )(effective address is any operand to an instruction which )(references memory. Effective addresses, in)]196.2 norm1 -[(NASM, have a very simple syntax: they consist of an expression evaluating to the desired address, enclosed in)]185.2 norm0 -[(square brackets. For example:)]174.2 norm2 -[2(wordvar dw 123 )]157.2 code1 -[2( mov ax,[wordvar] )]146.2 code0 -[2( mov ax,[wordvar+1] )]135.2 code0 -[2( mov ax,[es:wordvar+bx])]124.2 code2 -(28)pageeven -restore showpage -%%Page: 29 29 -%%BeginPageSetup -save -%%EndPageSetup -/29 pa -[(Anything not conforming to this simple system is not a valid memory reference in NASM, for example)]681 norm1 -[2(es:wordvar[bx])0(.)]670 norm2 -[(More complicated effective addresses, such as those involving more than one register, work in exactly the)]653 norm1 -[(same way:)]642 norm2 -[2( mov eax,[ebx*2+ecx+offset] )]625 code1 -[2( mov ax,[bp+di+8])]614 code2 -[(NASM is capable of doing )(algebra on these effective addresses, so that things which don't necessarily )1(look)]597 norm1 -[(legal are perfectly all right:)]586 norm2 -[2( mov eax,[ebx*5] ; assembles as [ebx*4+ebx] )]569 code1 -[2( mov eax,[label1*2-label2] ; ie [label1+\(label1-label2\)])]558 code2 -[(Some forms of effective address have more than one assembled form; in most such cases NASM will generate)]541 norm1 -[(the smallest form it can. For example, there are distinct assembled forms for the 32-bit effective addresses)]530 norm0 -[2([eax*2+0])0( and )2([eax+eax])0(, and NASM will generally generate the latter on the grounds that the former)]519 norm0 -[(requires four bytes to store a zero offset.)]508 norm2 -[(NASM has a hinting mechanism which will cause )2([eax+ebx])0( and )2([ebx+eax])0( to generate different)]491 norm1 -[(opcodes; this is occasionally useful because )2([esi+ebp])0( and )2([ebp+esi])0( have different default segment)]480 norm0 -[(registers.)]469 norm2 -[(However, you can force NASM to generate an effective address in a particular form by the use of the)]452 norm1 -[(keywords )2(BYTE)0(, )2(WORD)0(, )2(DWORD)0( and )2(NOSPLIT)0(. If you need )2([eax+3])0( to be assembled using a double-word)]441 norm0 -[(offset field instead of the one byte NASM will normally generate, you can code )2([dword eax+3])0(.)]430 norm0 -[(Similarly, you can force NASM to use a byte offset for a small value which it hasn't seen on the first pass \(see)]419 norm0 -[{/section-3.8 xl}(section 3.8){el}( for an example of such a code fragment\) by using )2([byte eax+offset])0(. As special cases,)]408 norm0 -[2([byte eax])0( will code )2([eax+0])0( with a byte offset of zero, and )2([dword eax])0( will code it with a)]397 norm0 -[(double-word offset of zero. The normal form, )2([eax])0(, will be coded with no offset field.)]386 norm2 -[(The form described in the previous paragraph is also useful if you are trying to access data in a 32-bit)]369 norm1 -[(segment from within 16 bit code. For more information on this see the section on mixed-size addressing)]358 norm0 -[(\(){/section-10.2 xl}(section 10.2){el}(\). In particular, if you need to access data with a known offset that is larger than will fit in a)]347 norm0 -[(16-bit value, if you don't specify that it is a dword offset, nasm will cause the high word of the offset to be)]336 norm0 -[(lost.)]325 norm2 -[(Similarly, NASM will split )2([eax*2])0( into )2([eax+eax])0( because that allows the offset field to be absent and)]308 norm1 -[(space to be saved; in fact, it will also split )2([eax*2+offset])0( into )2([eax+eax+offset])0(. You can combat)]297 norm0 -[(this behaviour by the use of the )2(NOSPLIT)0( keyword: )2([nosplit eax*2])0( will force )2([eax*2+0])0( to be)]286 norm0 -[(generated literally.)]275 norm2 -[(In 64-bit mode, NASM will by default generate absolute addresses. The )2(REL)0( keyword makes it produce)]258 norm1 -[2(RIP)0(\226relative addresses. Since this is frequently the normally desired behaviour, see the )2(DEFAULT)0( directive)]247 norm0 -[(\(){/section-6.2 xl}(section 6.2){el}(\). The keyword )2(ABS)0( overrides )2(REL)0(.)]236 norm2 -[{/section-3.4 xa}(Constants)](3.4)214.6 head3 -[(NASM understands four different types of constant: numeric, character, string and floating-point.)]197.6 norm3 -[{/section-3.4.1 xa}(Numeric Constants)](3.4.1)178.4 subh3 -[(A numeric constant is simply a number. NASM allows you to specify numbers in a variety of number bases,)]161.4 norm1 -[(in a variety of ways: you can suffix )2(H)0( or )2(X)0(, )2(Q)0( or )2(O)0(, and )2(B)0( for )(hexadecimal, )(octal and )(binary respectively, or)]150.4 norm0 -[(you can prefix )2(0x)0( for hexadecimal in the style of C, or you can prefix )2($)0( for hexadecimal in the style of)]139.4 norm0 -[(Borland Pascal. Note, though, that the )2($)0( prefix does double duty as a prefix on identifiers \(see ){/section-3.1 xl}(section 3.1){el}(\), so)]128.4 norm0 -[(a hex number prefixed with a )2($)0( sign must have a digit after the )2($)0( rather than a letter. In addition, current)]117.4 norm0 -(29)pageodd -restore showpage -%%Page: 30 30 -%%BeginPageSetup -save -%%EndPageSetup -/30 pa -[(versions of NASM accept the prefix )2(0h)0( for hexadecimal, )2(0o)0( or )2(0q)0( for octal, and )2(0b)0( for binary. Please note)]681 norm0 -[(that unlike C, a )2(0)0( prefix by itself does )1(not)0( imply an octal constant!)]670 norm2 -[(Numeric constants can have underscores \()2(_)0(\) interspersed to break up long strings.)]653 norm3 -[(Some examples \(all producing exactly the same code\):)]636 norm3 -[2( mov ax,200 ; decimal )]619 code1 -[2( mov ax,0200 ; still decimal )]608 code0 -[2( mov ax,0200d ; explicitly decimal )]597 code0 -[2( mov ax,0d200 ; also decimal )]586 code0 -[2( mov ax,0c8h ; hex )]575 code0 -[2( mov ax,$0c8 ; hex again: the 0 is required )]564 code0 -[2( mov ax,0xc8 ; hex yet again )]553 code0 -[2( mov ax,0hc8 ; still hex )]542 code0 -[2( mov ax,310q ; octal )]531 code0 -[2( mov ax,310o ; octal again )]520 code0 -[2( mov ax,0o310 ; octal yet again )]509 code0 -[2( mov ax,0q310 ; hex yet again )]498 code0 -[2( mov ax,11001000b ; binary )]487 code0 -[2( mov ax,1100_1000b ; same binary constant )]476 code0 -[2( mov ax,0b1100_1000 ; same binary constant yet again)]465 code2 -[{/section-3.4.2 xa}(Character Strings)](3.4.2)445.8 subh3 -[(A character string consists of up to eight characters enclosed in either single quotes \()2('...')0(\), double quotes)]428.8 norm1 -[(\()2("...")0(\) or backquotes \()2(`...`)0(\). Single or double quotes are equivalent to NASM \(except of course that)]417.8 norm0 -[(surrounding the constant with single quotes allows double quotes to appear within it and vice versa\); the)]406.8 norm0 -[(contents of those are represented verbatim. Strings enclosed in backquotes support C-style )2(\\)0(\226escapes for)]395.8 norm0 -[(special characters.)]384.8 norm2 -[(The following )(escape sequences are recognized by backquoted strings:)]367.8 norm3 -[2( \\' single quote \('\) )]350.8 code1 -[2( \\" double quote \("\) )]339.8 code0 -[2( \\` backquote \(`\) )]328.8 code0 -[2( \\\\ backslash \(\\\) )]317.8 code0 -[2( \\? question mark \(?\) )]306.8 code0 -[2( \\a BEL \(ASCII 7\) )]295.8 code0 -[2( \\b BS \(ASCII 8\) )]284.8 code0 -[2( \\t TAB \(ASCII 9\) )]273.8 code0 -[2( \\n LF \(ASCII 10\) )]262.8 code0 -[2( \\v VT \(ASCII 11\) )]251.8 code0 -[2( \\f FF \(ASCII 12\) )]240.8 code0 -[2( \\r CR \(ASCII 13\) )]229.8 code0 -[2( \\e ESC \(ASCII 27\) )]218.8 code0 -[2( \\377 Up to 3 octal digits - literal byte )]207.8 code0 -[2( \\xFF Up to 2 hexadecimal digits - literal byte )]196.8 code0 -[2( \\u1234 4 hexadecimal digits - Unicode character )]185.8 code0 -[2( \\U12345678 8 hexadecimal digits - Unicode character)]174.8 code2 -[(All other escape sequences are reserved. Note that )2(\\0)0(, meaning a )2(NUL)0( character \(ASCII 0\), is a special case)]157.8 norm1 -[(of the octal escape sequence.)]146.8 norm2 -[(Unicode characters specified with )2(\\u)0( or )2(\\U)0( are converted to )(UTF-8. For example, the following lines are all)]129.8 norm1 -[(equivalent:)]118.8 norm2 -(30)pageeven -restore showpage -%%Page: 31 31 -%%BeginPageSetup -save -%%EndPageSetup -/31 pa -[2( db `\\u263a` ; UTF-8 smiley face )]681 code1 -[2( db `\\xe2\\x98\\xba` ; UTF-8 smiley face )]670 code0 -[2( db 0E2h, 098h, 0BAh ; UTF-8 smiley face)]659 code2 -[{/section-3.4.3 xa}(Character Constants)](3.4.3)639.8 subh3 -[(A character constant consists of a string up to eight bytes long, used in an expression context. It is treated as if)]622.8 norm1 -[(it was an integer.)]611.8 norm2 -[(A character constant with more than one byte will be arranged with )(little-endian order in mind: if you code)]594.8 norm3 -[2( mov eax,'abcd')]577.8 code3 -[(then the constant generated is not )2(0x61626364)0(, but )2(0x64636261)0(, so that if you were then to store the)]560.8 norm1 -[(value into memory, it would read )2(abcd)0( rather than )2(dcba)0(. This is also the sense of character constants)]549.8 norm0 -[(understood by the Pentium's )2(CPUID)0( instruction.)]538.8 norm2 -[{/section-3.4.4 xa}(String Constants)](3.4.4)519.6 subh3 -[(String constants are character strings used in the context of some pseudo-instructions, namely the )2(DB)0( family)]502.6 norm1 -[(and )2(INCBIN)0( \(where it represents a filename.\) They are also used in certain preprocessor directives.)]491.6 norm2 -[(A string constant looks like a character constant, only longer. It is treated as a concatenation of)]474.6 norm1 -[(maximum-size character constants for the conditions. So the following are equivalent:)]463.6 norm2 -[2( db 'hello' ; string constant )]446.6 code1 -[2( db 'h','e','l','l','o' ; equivalent character constants)]435.6 code2 -[(And the following are also equivalent:)]418.6 norm3 -[2( dd 'ninechars' ; doubleword string constant )]401.6 code1 -[2( dd 'nine','char','s' ; becomes three doublewords )]390.6 code0 -[2( db 'ninechars',0,0,0 ; and really looks like this)]379.6 code2 -[(Note that when used in a string-supporting context, quoted strings are treated as a string constants even if)]362.6 norm1 -[(they are short enough to be a character constant, because otherwise )2(db 'ab')0( would have the same effect as)]351.6 norm0 -[2(db 'a')0(, which would be silly. Similarly, three-character or four-character constants are treated as strings)]340.6 norm0 -[(when they are operands to )2(DW)0(, and so forth.)]329.6 norm2 -[{/section-3.4.5 xa}(Unicode Strings)](3.4.5)310.4 subh3 -[(The special operators )2(__utf16__)0( and )2(__utf32__)0( allows definition of Unicode strings. They take a string)]293.4 norm1 -[(in UTF-8 format and converts it to \(littleendian\) UTF-16 or UTF-32, respectively.)]282.4 norm2 -[(For example:)]265.4 norm3 -[2(%define u\(x\) __utf16__\(x\) )]248.4 code1 -[2(%define w\(x\) __utf32__\(x\) )]237.4 code0 -[2()]226.4 code0 -[2( dw u\('C:\\WINDOWS'\), 0 ; Pathname in UTF-16 )]215.4 code0 -[2( dd w\(`A + B = \\u206a`\), 0 ; String in UTF-32)]204.4 code2 -[2(__utf16__)0( and )2(__utf32__)0( can be applied either to strings passed to the )2(DB)0( family instructions, or to)]187.4 norm1 -[(character constants in an expression context.)]176.4 norm2 -[{/section-3.4.6 xa}(Floating-Point Constants)](3.4.6)157.2 subh3 -[(Floating-point constants are acceptable only as arguments to )2(DB)0(, )2(DW)0(, )2(DD)0(, )2(DQ)0(, )2(DT)0(, and )2(DO)0(, or as arguments to)]140.2 norm1 -[(the special operators )2(__float8__)0(, )2(__float16__)0(, )2(__float32__)0(, )2(__float64__)0(, )2(__float80m__)0(,)]129.2 norm0 -[2(__float80e__)0(, )2(__float128l__)0(, and )2(__float128h__)0(.)]118.2 norm2 -(31)pageodd -restore showpage -%%Page: 32 32 -%%BeginPageSetup -save -%%EndPageSetup -/32 pa -[(Floating-point constants are expressed in the traditional form: digits, then a period, then optionally more)]681 norm1 -[(digits, then optionally an )2(E)0( followed by an exponent. The period is mandatory, so that NASM can distinguish)]670 norm0 -[(between )2(dd 1)0(, which declares an integer constant, and )2(dd 1.0)0( which declares a floating-point constant.)]659 norm0 -[(NASM also support C99-style hexadecimal floating-point: )2(0x)0(, hexadecimal digits, period, optionally more)]648 norm0 -[(hexadeximal digits, then optionally a )2(P)0( followed by a )1(binary)0( \(not hexadecimal\) exponent in decimal notation.)]637 norm2 -[(Underscores to break up groups of digits are permitted in floating-point constants as well.)]620 norm3 -[(Some examples:)]603 norm3 -[2( db -0.2 ; "Quarter precision" )]586 code1 -[2( dw -0.5 ; IEEE 754r/SSE5 half precision )]575 code0 -[2( dd 1.2 ; an easy one )]564 code0 -[2( dd 1.222_222_222 ; underscores are permitted )]553 code0 -[2( dd 0x1p+2 ; 1.0x2^2 = 4.0 )]542 code0 -[2( dq 0x1p+32 ; 1.0x2^32 = 4 294 967 296.0 )]531 code0 -[2( dq 1.e10 ; 10 000 000 000.0 )]520 code0 -[2( dq 1.e+10 ; synonymous with 1.e10 )]509 code0 -[2( dq 1.e-10 ; 0.000 000 000 1 )]498 code0 -[2( dt 3.141592653589793238462 ; pi )]487 code0 -[2( do 1.e+4000 ; IEEE 754r quad precision)]476 code2 -[(The 8-bit "quarter-precision" floating-point format is sign:exponent:mantissa = 1:4:3 with an exponent bias)]459 norm1 -[(of 7. This appears to be the most frequently used 8-bit floating-point format, although it is not covered by)]448 norm0 -[(any formal standard. This is sometimes called a ")(minifloat.")]437 norm2 -[(The special operators are used to produce floating-point numbers in other contexts. They produce the binary)]420 norm1 -[(representation of a specific floating-point number as an integer, and can use anywhere integer constants are)]409 norm0 -[(used in an expression. )2(__float80m__)0( and )2(__float80e__)0( produce the 64-bit mantissa and 16-bit)]398 norm0 -[(exponent of an 80-bit floating-point number, and )2(__float128l__)0( and )2(__float128h__)0( produce the)]387 norm0 -[(lower and upper 64-bit halves of a 128-bit floating-point number, respectively.)]376 norm2 -[(For example:)]359 norm3 -[2( mov rax,__float64__\(3.141592653589793238462\))]342 code3 -[(... would assign the binary representation of pi as a 64-bit floating point number into )2(RAX)0(. This is exactly)]325 norm1 -[(equivalent to:)]314 norm2 -[2( mov rax,0x400921fb54442d18)]297 code3 -[(NASM cannot do compile-time arithmetic on floating-point constants. This is because NASM is designed to)]280 norm1 -[(be portable \226 although it always generates code to run on x86 processors, the assembler itself can run on any)]269 norm0 -[(system with an ANSI C compiler. Therefore, the assembler cannot guarantee the presence of a floating-point)]258 norm0 -[(unit capable of handling the )(Intel number formats, and so for NASM to be able to do floating arithmetic it)]247 norm0 -[(would have to include its own complete set of floating-point routines, which would significantly increase the)]236 norm0 -[(size of the assembler for very little benefit.)]225 norm2 -[(The special tokens )2(__Infinity__)0(, )2(__QNaN__)0( \(or )2(__NaN__)0(\) and )2(__SNaN__)0( can be used to generate)]208 norm1 -[(infinities, quiet )(NaNs, and signalling NaNs, respectively. These are normally used as macros:)]197 norm2 -[2(%define Inf __Infinity__ )]180 code1 -[2(%define NaN __QNaN__ )]169 code0 -[2()]158 code0 -[2( dq +1.5, -Inf, NaN ; Double-precision constants)]147 code2 -(32)pageeven -restore showpage -%%Page: 33 33 -%%BeginPageSetup -save -%%EndPageSetup -/33 pa -[{/section-3.4.7 xa}(Packed BCD Constants)](3.4.7)678.8 subh3 -[(x87-style packed BCD constants can be used in the same contexts as 80-bit floating-point numbers. They)]661.8 norm1 -[(are suffixed with )2(p)0( or prefixed with )2(0p)0(, and can include up to 18 decimal digits.)]650.8 norm2 -[(As with other numeric constants, underscores can be used to separate digits.)]633.8 norm3 -[(For example:)]616.8 norm3 -[2( dt 12_345_678_901_245_678p )]599.8 code1 -[2( dt -12_345_678_901_245_678p )]588.8 code0 -[2( dt +0p33 )]577.8 code0 -[2( dt 33p)]566.8 code2 -[{/section-3.5 xa}(Expressions)](3.5)545.4 head3 -[(Expressions in NASM are similar in syntax to those in C. Expressions are evaluated as 64-bit integers which)]528.4 norm1 -[(are then adjusted to the appropriate size.)]517.4 norm2 -[(NASM supports two special tokens in expressions, allowing calculations to involve the current assembly)]500.4 norm1 -[(position: the )2($)0( and )2($$)0( tokens. )2($)0( evaluates to the assembly position at the beginning of the line containing the)]489.4 norm0 -[(expression; so you can code an )(infinite loop using )2(JMP $)0(. )2($$)0( evaluates to the beginning of the current)]478.4 norm0 -[(section; so you can tell how far into the section you are by using )2(\($-$$\))0(.)]467.4 norm2 -[(The arithmetic )(operators provided by NASM are listed here, in increasing order of )(precedence.)]450.4 norm3 -[{/section-3.5.1 xa}2(|)0(: )(Bitwise OR Operator)](3.5.1)431.2 subh3 -[(The )2(|)0( operator gives a bitwise OR, exactly as performed by the )2(OR)0( machine instruction. Bitwise OR is the)]414.2 norm1 -[(lowest-priority arithmetic operator supported by NASM.)]403.2 norm2 -[{/section-3.5.2 xa}2(^)0(: )(Bitwise XOR Operator)](3.5.2)384 subh3 -[2(^)0( provides the bitwise XOR operation.)]367 norm3 -[{/section-3.5.3 xa}2(&)0(: )(Bitwise AND Operator)](3.5.3)347.8 subh3 -[2(&)0( provides the bitwise AND operation.)]330.8 norm3 -[{/section-3.5.4 xa}2(<<)0( and )2(>>)0(: )(Bit Shift Operators)](3.5.4)311.6 subh3 -[2(<<)0( gives a bit-shift to the left, just as it does in C. So )2(5<<3)0( evaluates to 5 times 8, or 40. )2(>>)0( gives a bit-shift)]294.6 norm1 -[(to the right; in NASM, such a shift is )1(always)0( unsigned, so that the bits shifted in from the left-hand end are)]283.6 norm0 -[(filled with zero rather than a sign-extension of the previous highest bit.)]272.6 norm2 -[{/section-3.5.5 xa}2(+)0( and )2(-)0(: )(Addition and )(Subtraction Operators)](3.5.5)253.4 subh3 -[(The )2(+)0( and )2(-)0( operators do perfectly ordinary addition and subtraction.)]236.4 norm3 -[{/section-3.5.6 xa}2(*)0(, )2(/)0(, )2(//)0(, )2(%)0( and )2(%%)0(: )(Multiplication and )(Division)](3.5.6)217.2 subh3 -[2(*)0( is the multiplication operator. )2(/)0( and )2(//)0( are both division operators: )2(/)0( is )(unsigned division and )2(//)0( is )(signed)]200.2 norm1 -[(division. Similarly, )2(%)0( and )2(%%)0( provide )(unsigned and )(signed modulo operators respectively.)]189.2 norm2 -[(NASM, like ANSI C, provides no guarantees about the sensible operation of the signed modulo operator.)]172.2 norm3 -[(Since the )2(%)0( character is used extensively by the macro )(preprocessor, you should ensure that both the signed)]155.2 norm1 -[(and unsigned modulo operators are followed by white space wherever they appear.)]144.2 norm2 -(33)pageodd -restore showpage -%%Page: 34 34 -%%BeginPageSetup -save -%%EndPageSetup -/34 pa -[{/section-3.5.7 xa}(Unary Operators: )2(+)0(, )2(-)0(, )2(~)0(, )2(!)0( and )2(SEG)](3.5.7)678.8 subh3 -[(The highest-priority operators in NASM's expression grammar are those which only apply to one argument.)]661.8 norm1 -[2(-)0( negates its operand, )2(+)0( does nothing \(it's provided for symmetry with )2(-)0(\), )2(~)0( computes the )(one's complement)]650.8 norm0 -[(of its operand, )2(!)0( is the )(logical negation operator, and )2(SEG)0( provides the )(segment address of its operand)]639.8 norm0 -[(\(explained in more detail in ){/section-3.6 xl}(section 3.6){el}(\).)]628.8 norm2 -[{/section-3.6 xa}2(SEG)0( and )2(WRT)](3.6)607.4 head3 -[(When writing large 16-bit programs, which must be split into multiple )(segments, it is often necessary to be)]590.4 norm1 -[(able to refer to the )(segment part of the address of a symbol. NASM supports the )2(SEG)0( operator to perform this)]579.4 norm0 -[(function.)]568.4 norm2 -[(The )2(SEG)0( operator returns the )1(preferred)0( segment base of a symbol, defined as the segment base relative to)]551.4 norm1 -[(which the offset of the symbol makes sense. So the code)]540.4 norm2 -[2( mov ax,seg symbol )]523.4 code1 -[2( mov es,ax )]512.4 code0 -[2( mov bx,symbol)]501.4 code2 -[(will load )2(ES:BX)0( with a valid pointer to the symbol )2(symbol)0(.)]484.4 norm3 -[(Things can be more complex than this: since 16-bit segments and )(groups may )(overlap, you might)]467.4 norm1 -[(occasionally want to refer to some symbol using a different segment base from the preferred one. NASM lets)]456.4 norm0 -[(you do this, by the use of the )2(WRT)0( \(With Reference To\) keyword. So you can do things like)]445.4 norm2 -[2( mov ax,weird_seg ; weird_seg is a segment base )]428.4 code1 -[2( mov es,ax )]417.4 code0 -[2( mov bx,symbol wrt weird_seg)]406.4 code2 -[(to load )2(ES:BX)0( with a different, but functionally equivalent, pointer to the symbol )2(symbol)0(.)]389.4 norm3 -[(NASM supports far \(inter-segment\) calls and jumps by means of the syntax )2(call segment:offset)0(,)]372.4 norm1 -[(where )2(segment)0( and )2(offset)0( both represent immediate values. So to call a far procedure, you could code)]361.4 norm0 -[(either of)]350.4 norm2 -[2( call \(seg procedure\):procedure )]333.4 code1 -[2( call weird_seg:\(procedure wrt weird_seg\))]322.4 code2 -[(\(The parentheses are included for clarity, to show the intended parsing of the above instructions. They are not)]305.4 norm1 -[(necessary in practice.\))]294.4 norm2 -[(NASM supports the syntax )2(call far procedure)0( as a synonym for the first of the above usages. )2(JMP)]277.4 norm1 -[(works identically to )2(CALL)0( in these examples.)]266.4 norm2 -[(To declare a )(far pointer to a data item in a data segment, you must code)]249.4 norm3 -[2( dw symbol, seg symbol)]232.4 code3 -[(NASM supports no convenient synonym for this, though you can always invent one using the macro)]215.4 norm1 -[(processor.)]204.4 norm2 -[{/section-3.7 xa}2(STRICT)0(: Inhibiting Optimization)](3.7)183 head3 -[(When assembling with the optimizer set to level 2 or higher \(see ){/section-2.1.22 xl}(section 2.1.22){el}(\), NASM will use size)]166 norm1 -[(specifiers \()2(BYTE)0(, )2(WORD)0(, )2(DWORD)0(, )2(QWORD)0(, )2(TWORD)0(, )2(OWORD)0( or )2(YWORD)0(\), but will give them the smallest)]155 norm0 -[(possible size. The keyword )2(STRICT)0( can be used to inhibit optimization and force a particular operand to be)]144 norm0 -[(emitted in the specified size. For example, with the optimizer on, and in )2(BITS 16)0( mode,)]133 norm2 -[2( push dword 33)]116 code3 -(34)pageeven -restore showpage -%%Page: 35 35 -%%BeginPageSetup -save -%%EndPageSetup -/35 pa -[(is encoded in three bytes )2(66 6A 21)0(, whereas)]681 norm3 -[2( push strict dword 33)]664 code3 -[(is encoded in six bytes, with a full dword immediate operand )2(66 68 21 00 00 00)0(.)]647 norm3 -[(With the optimizer off, the same code \(six bytes\) is generated whether the )2(STRICT)0( keyword was used or not.)]630 norm3 -[{/section-3.8 xa}(Critical Expressions)](3.8)608.6 head3 -[(Although NASM has an optional multi-pass optimizer, there are some expressions which must be resolvable)]591.6 norm1 -[(on the first pass. These are called )1(Critical Expressions)0(.)]580.6 norm2 -[(The first pass is used to determine the size of all the assembled code and data, so that the second pass, when)]563.6 norm1 -[(generating all the code, knows all the symbol addresses the code refers to. So one thing NASM can't handle is)]552.6 norm0 -[(code whose size depends on the value of a symbol declared after the code in question. For example,)]541.6 norm2 -[2( times \(label-$\) db 0 )]524.6 code1 -[2(label: db 'Where am I?')]513.6 code2 -[(The argument to )2(TIMES)0( in this case could equally legally evaluate to anything at all; NASM will reject this)]496.6 norm1 -[(example because it cannot tell the size of the )2(TIMES)0( line when it first sees it. It will just as firmly reject the)]485.6 norm0 -[(slightly )(paradoxical code)]474.6 norm2 -[2( times \(label-$+1\) db 0 )]457.6 code1 -[2(label: db 'NOW where am I?')]446.6 code2 -[(in which )1(any)0( value for the )2(TIMES)0( argument is by definition wrong!)]429.6 norm3 -[(NASM rejects these examples by means of a concept called a )1(critical expression)0(, which is defined to be an)]412.6 norm1 -[(expression whose value is required to be computable in the first pass, and which must therefore depend only)]401.6 norm0 -[(on symbols defined before it. The argument to the )2(TIMES)0( prefix is a critical expression.)]390.6 norm2 -[{/section-3.9 xa}(Local Labels)](3.9)369.2 head3 -[(NASM gives special treatment to symbols beginning with a )(period. A label beginning with a single period is)]352.2 norm1 -[(treated as a )1(local)0( label, which means that it is associated with the previous non-local label. So, for example:)]341.2 norm2 -[2(label1 ; some code )]324.2 code1 -[2()]313.2 code0 -[2(.loop )]302.2 code0 -[2( ; some more code )]291.2 code0 -[2()]280.2 code0 -[2( jne .loop )]269.2 code0 -[2( ret )]258.2 code0 -[2()]247.2 code0 -[2(label2 ; some code )]236.2 code0 -[2()]225.2 code0 -[2(.loop )]214.2 code0 -[2( ; some more code )]203.2 code0 -[2()]192.2 code0 -[2( jne .loop )]181.2 code0 -[2( ret)]170.2 code2 -[(In the above code fragment, each )2(JNE)0( instruction jumps to the line immediately before it, because the two)]153.2 norm1 -[(definitions of )2(.loop)0( are kept separate by virtue of each being associated with the previous non-local label.)]142.2 norm2 -[(This form of local label handling is borrowed from the old Amiga assembler )(DevPac; however, NASM goes)]125.2 norm1 -[(one step further, in allowing access to local labels from other parts of the code. This is achieved by means of)]114.2 norm0 -[1(defining)0( a local label in terms of the previous non-local label: the first definition of )2(.loop)0( above is really)]103.2 norm0 -(35)pageodd -restore showpage -%%Page: 36 36 -%%BeginPageSetup -save -%%EndPageSetup -/36 pa -[(defining a symbol called )2(label1.loop)0(, and the second defines a symbol called )2(label2.loop)0(. So, if you)]681 norm0 -[(really needed to, you could write)]670 norm2 -[2(label3 ; some more code )]653 code1 -[2( ; and some more )]642 code0 -[2()]631 code0 -[2( jmp label1.loop)]620 code2 -[(Sometimes it is useful \226 in a macro, for instance \226 to be able to define a label which can be referenced from)]603 norm1 -[(anywhere but which doesn't interfere with the normal local-label mechanism. Such a label can't be non-local)]592 norm0 -[(because it would interfere with subsequent definitions of, and references to, local labels; and it can't be local)]581 norm0 -[(because the macro that defined it wouldn't know the label's full name. NASM therefore introduces a third)]570 norm0 -[(type of label, which is probably only useful in macro definitions: if a label begins with the )(special prefix )2(..@)0(,)]559 norm0 -[(then it does nothing to the local label mechanism. So you could code)]548 norm2 -[2(label1: ; a non-local label )]531 code1 -[2(.local: ; this is really label1.local )]520 code0 -[2(..@foo: ; this is a special symbol )]509 code0 -[2(label2: ; another non-local label )]498 code0 -[2(.local: ; this is really label2.local )]487 code0 -[2()]476 code0 -[2( jmp ..@foo ; this will jump three lines up)]465 code2 -[(NASM has the capacity to define other special symbols beginning with a double period: for example,)]448 norm1 -[2(..start)0( is used to specify the entry point in the )2(obj)0( output format \(see ){/section-7.4.6 xl}(section 7.4.6){el}(\).)]437 norm2 -(36)pageeven -restore showpage -%%Page: 37 37 -%%BeginPageSetup -save -%%EndPageSetup -/37 pa -[{/chapter-4 xa}(Chapter 4: The NASM )(Preprocessor)]642.8 chap3 -[(NASM contains a powerful )(macro processor, which supports conditional assembly, multi-level file inclusion,)]607.8 norm1 -[(two forms of macro \(single-line and multi-line\), and a `context stack' mechanism for extra macro power.)]596.8 norm0 -[(Preprocessor directives all begin with a )2(%)0( sign.)]585.8 norm2 -[(The preprocessor collapses all lines which end with a backslash \(\\\) character into a single line. Thus:)]568.8 norm3 -[2(%define THIS_VERY_LONG_MACRO_NAME_IS_DEFINED_TO \\ )]551.8 code1 -[2( THIS_VALUE)]540.8 code2 -[(will work like a single-line macro without the backslash-newline sequence.)]523.8 norm3 -[{/section-4.1 xa}(Single-Line Macros)](4.1)502.4 head3 -[{/section-4.1.1 xa}(The Normal Way: )2(%define)](4.1.1)483.2 subh3 -[(Single-line macros are defined using the )2(%define)0( preprocessor directive. The definitions work in a similar)]466.2 norm1 -[(way to C; so you can do things like)]455.2 norm2 -[2(%define ctrl 0x1F & )]438.2 code1 -[2(%define param\(a,b\) \(\(a\)+\(a\)*\(b\)\) )]427.2 code0 -[2()]416.2 code0 -[2( mov byte [param\(2,ebx\)], ctrl 'D')]405.2 code2 -[(which will expand to)]388.2 norm3 -[2( mov byte [\(2\)+\(2\)*\(ebx\)], 0x1F & 'D')]371.2 code3 -[(When the expansion of a single-line macro contains tokens which invoke another macro, the expansion is)]354.2 norm1 -[(performed at invocation time, not at definition time. Thus the code)]343.2 norm2 -[2(%define a\(x\) 1+b\(x\) )]326.2 code1 -[2(%define b\(x\) 2*x )]315.2 code0 -[2()]304.2 code0 -[2( mov ax,a\(8\))]293.2 code2 -[(will evaluate in the expected way to )2(mov ax,1+2*8)0(, even though the macro )2(b)0( wasn't defined at the time of)]276.2 norm1 -[(definition of )2(a)0(.)]265.2 norm2 -[(Macros defined with )2(%define)0( are )(case sensitive: after )2(%define foo bar)0(, only )2(foo)0( will expand to )2(bar)0(:)]248.2 norm1 -[2(Foo)0( or )2(FOO)0( will not. By using )2(%idefine)0( instead of )2(%define)0( \(the `i' stands for `insensitive'\) you can)]237.2 norm0 -[(define all the case variants of a macro at once, so that )2(%idefine foo bar)0( would cause )2(foo)0(, )2(Foo)0(, )2(FOO)0(,)]226.2 norm0 -[2(fOO)0( and so on all to expand to )2(bar)0(.)]215.2 norm2 -[(There is a mechanism which detects when a macro call has occurred as a result of a previous expansion of the)]198.2 norm1 -[(same macro, to guard against )(circular references and infinite loops. If this happens, the preprocessor will only)]187.2 norm0 -[(expand the first occurrence of the macro. Hence, if you code)]176.2 norm2 -[2(%define a\(x\) 1+a\(x\) )]159.2 code1 -[2()]148.2 code0 -[2( mov ax,a\(3\))]137.2 code2 -[(the macro )2(a\(3\))0( will expand once, becoming )2(1+a\(3\))0(, and will then expand no further. This behaviour can)]120.2 norm1 -[(be useful: see ){/section-9.1 xl}(section 9.1){el}( for an example of its use.)]109.2 norm2 -(37)pageodd -restore showpage -%%Page: 38 38 -%%BeginPageSetup -save -%%EndPageSetup -/38 pa -[(You can )(overload single-line macros: if you write)]681 norm3 -[2(%define foo\(x\) 1+x )]664 code1 -[2(%define foo\(x,y\) 1+x*y)]653 code2 -[(the preprocessor will be able to handle both types of macro call, by counting the parameters you pass; so)]636 norm1 -[2(foo\(3\))0( will become )2(1+3)0( whereas )2(foo\(ebx,2\))0( will become )2(1+ebx*2)0(. However, if you define)]625 norm2 -[2(%define foo bar)]608 code3 -[(then no other definition of )2(foo)0( will be accepted: a macro with no parameters prohibits the definition of the)]591 norm1 -[(same name as a macro )1(with)0( parameters, and vice versa.)]580 norm2 -[(This doesn't prevent single-line macros being )1(redefined)0(: you can perfectly well define a macro with)]563 norm3 -[2(%define foo bar)]546 code3 -[(and then re-define it later in the same source file with)]529 norm3 -[2(%define foo baz)]512 code3 -[(Then everywhere the macro )2(foo)0( is invoked, it will be expanded according to the most recent definition. This)]495 norm1 -[(is particularly useful when defining single-line macros with )2(%assign)0( \(see ){/section-4.1.7 xl}(section 4.1.7){el}(\).)]484 norm2 -[(You can )(pre-define single-line macros using the `-d' option on the NASM command line: see ){/section-2.1.18 xl}(section 2.1.18){el}(.)]467 norm3 -[{/section-4.1.2 xa}(Resolving )2(%define)0(: )2(%xdefine)](4.1.2)447.8 subh3 -[(To have a reference to an embedded single-line macro resolved at the time that the embedding macro is)]430.8 norm1 -[1(defined)0(, as opposed to when the embedding macro is )1(expanded)0(, you need a different mechanism to the one)]419.8 norm0 -[(offered by )2(%define)0(. The solution is to use )2(%xdefine)0(, or it's )(case-insensitive counterpart )2(%ixdefine)0(.)]408.8 norm2 -[(Suppose you have the following code:)]391.8 norm3 -[2(%define isTrue 1 )]374.8 code1 -[2(%define isFalse isTrue )]363.8 code0 -[2(%define isTrue 0 )]352.8 code0 -[2()]341.8 code0 -[2(val1: db isFalse )]330.8 code0 -[2()]319.8 code0 -[2(%define isTrue 1 )]308.8 code0 -[2()]297.8 code0 -[2(val2: db isFalse)]286.8 code2 -[(In this case, )2(val1)0( is equal to 0, and )2(val2)0( is equal to 1. This is because, when a single-line macro is defined)]269.8 norm1 -[(using )2(%define)0(, it is expanded only when it is called. As )2(isFalse)0( expands to )2(isTrue)0(, the expansion will)]258.8 norm0 -[(be the current value of )2(isTrue)0(. The first time it is called that is 0, and the second time it is 1.)]247.8 norm2 -[(If you wanted )2(isFalse)0( to expand to the value assigned to the embedded macro )2(isTrue)0( at the time that)]230.8 norm1 -[2(isFalse)0( was defined, you need to change the above code to use )2(%xdefine)0(.)]219.8 norm2 -[2(%xdefine isTrue 1 )]202.8 code1 -[2(%xdefine isFalse isTrue )]191.8 code0 -[2(%xdefine isTrue 0 )]180.8 code0 -[2()]169.8 code0 -[2(val1: db isFalse )]158.8 code0 -[2()]147.8 code0 -[2(%xdefine isTrue 1 )]136.8 code0 -[2()]125.8 code0 -[2(val2: db isFalse)]114.8 code2 -(38)pageeven -restore showpage -%%Page: 39 39 -%%BeginPageSetup -save -%%EndPageSetup -/39 pa -[(Now, each time that )2(isFalse)0( is called, it expands to 1, as that is what the embedded macro )2(isTrue)]681 norm1 -[(expanded to at the time that )2(isFalse)0( was defined.)]670 norm2 -[{/section-4.1.3 xa}(Macro Indirection: )2(%[...])](4.1.3)650.8 subh3 -[(The )2(%[...])0( construct can be used to expand macros in contexts where macro expansion would otherwise)]633.8 norm1 -[(not occur, including in the names other macros. For example, if you have a set of macros named )2(Foo16)0(,)]622.8 norm0 -[2(Foo32)0( and )2(Foo64)0(, you could write:)]611.8 norm2 -[2( mov ax,Foo%[__BITS__] ; The Foo value)]594.8 code3 -[(to use the builtin macro )2(__BITS__)0( \(see ){/section-4.11.5 xl}(section 4.11.5){el}(\) to automatically select between them. Similarly, the)]577.8 norm1 -[(two statements:)]566.8 norm2 -[2(%xdefine Bar Quux ; Expands due to %xdefine )]549.8 code1 -[2(%define Bar %[Quux] ; Expands due to %[...])]538.8 code2 -[(have, in fact, exactly the same effect.)]521.8 norm3 -[2(%[...])0( concatenates to adjacent tokens in the same way that multi-line macro parameters do, see ){/section-4.3.8 xl}(section){el}]504.8 norm1 -[{/section-4.3.8 xl}(4.3.8){el}( for details.)]493.8 norm2 -[{/section-4.1.4 xa}(Concatenating Single Line Macro Tokens: )2(%+)](4.1.4)474.6 subh3 -[(Individual tokens in single line macros can be concatenated, to produce longer tokens for later processing.)]457.6 norm1 -[(This can be useful if there are several similar macros that perform similar functions.)]446.6 norm2 -[(Please note that a space is required after )2(%+)0(, in order to disambiguate it from the syntax )2(%+1)0( used in multiline)]429.6 norm1 -[(macros.)]418.6 norm2 -[(As an example, consider the following:)]401.6 norm3 -[2(%define BDASTART 400h ; Start of BIOS data area)]384.6 code3 -[2(struc tBIOSDA ; its structure )]367.6 code1 -[2( .COM1addr RESW 1 )]356.6 code0 -[2( .COM2addr RESW 1 )]345.6 code0 -[2( ; ..and so on )]334.6 code0 -[2(endstruc)]323.6 code2 -[(Now, if we need to access the elements of tBIOSDA in different places, we can end up with:)]306.6 norm3 -[2( mov ax,BDASTART + tBIOSDA.COM1addr )]289.6 code1 -[2( mov bx,BDASTART + tBIOSDA.COM2addr)]278.6 code2 -[(This will become pretty ugly \(and tedious\) if used in many places, and can be reduced in size significantly by)]261.6 norm1 -[(using the following macro:)]250.6 norm2 -[2(; Macro to access BIOS variables by their names \(from tBDA\):)]233.6 code3 -[2(%define BDA\(x\) BDASTART + tBIOSDA. %+ x)]216.6 code3 -[(Now the above code can be written as:)]199.6 norm3 -[2( mov ax,BDA\(COM1addr\) )]182.6 code1 -[2( mov bx,BDA\(COM2addr\))]171.6 code2 -[(Using this feature, we can simplify references to a lot of macros \(and, in turn, reduce typing errors\).)]154.6 norm3 -[{/section-4.1.5 xa}(The Macro Name Itself: )2(%?)0( and )2(%??)](4.1.5)135.4 subh3 -[(The special symbols )2(%?)0( and )2(%??)0( can be used to reference the macro name itself inside a macro expansion,)]118.4 norm1 -[(this is supported for both single-and multi-line macros. )2(%?)0( refers to the macro name as )1(invoked)0(, whereas)]107.4 norm0 -(39)pageodd -restore showpage -%%Page: 40 40 -%%BeginPageSetup -save -%%EndPageSetup -/40 pa -[2(%??)0( refers to the macro name as )1(declared)0(. The two are always the same for case-sensitive macros, but for)]681 norm0 -[(case-insensitive macros, they can differ.)]670 norm2 -[(For example:)]653 norm3 -[2(%idefine Foo mov %?,%?? )]636 code1 -[2()]625 code0 -[2( foo )]614 code0 -[2( FOO)]603 code2 -[(will expand to:)]586 norm3 -[2( mov foo,Foo )]569 code1 -[2( mov FOO,Foo)]558 code2 -[(The sequence:)]541 norm3 -[2(%idefine keyword $%?)]524 code3 -[(can be used to make a keyword "disappear", for example in case a new instruction has been used as a label in)]507 norm1 -[(older code. For example:)]496 norm2 -[2(%idefine pause $%? ; Hide the PAUSE instruction)]479 code3 -[{/section-4.1.6 xa}(Undefining Single-Line Macros: )2(%undef)](4.1.6)459.8 subh3 -[(Single-line macros can be removed with the )2(%undef)0( directive. For example, the following sequence:)]442.8 norm3 -[2(%define foo bar )]425.8 code1 -[2(%undef foo )]414.8 code0 -[2()]403.8 code0 -[2( mov eax, foo)]392.8 code2 -[(will expand to the instruction )2(mov eax, foo)0(, since after )2(%undef)0( the macro )2(foo)0( is no longer defined.)]375.8 norm3 -[(Macros that would otherwise be pre-defined can be undefined on the command-line using the `-u' option on)]358.8 norm1 -[(the NASM command line: see ){/section-2.1.19 xl}(section 2.1.19){el}(.)]347.8 norm2 -[{/section-4.1.7 xa}(Preprocessor Variables: )2(%assign)](4.1.7)328.6 subh3 -[(An alternative way to define single-line macros is by means of the )2(%assign)0( command \(and its)]311.6 norm1 -[(case-insensitive counterpart )2(%iassign)0(, which differs from )2(%assign)0( in exactly the same way that)]300.6 norm0 -[2(%idefine)0( differs from )2(%define)0(\).)]289.6 norm2 -[2(%assign)0( is used to define single-line macros which take no parameters and have a numeric value. This)]272.6 norm1 -[(value can be specified in the form of an expression, and it will be evaluated once, when the )2(%assign)]261.6 norm0 -[(directive is processed.)]250.6 norm2 -[(Like )2(%define)0(, macros defined using )2(%assign)0( can be re-defined later, so you can do things like)]233.6 norm3 -[2(%assign i i+1)]216.6 code3 -[(to increment the numeric value of a macro.)]199.6 norm3 -[2(%assign)0( is useful for controlling the termination of )2(%rep)0( preprocessor loops: see ){/section-4.5 xl}(section 4.5){el}( for an)]182.6 norm1 -[(example of this. Another use for )2(%assign)0( is given in ){/section-8.4 xl}(section 8.4){el}( and ){/section-9.1 xl}(section 9.1){el}(.)]171.6 norm2 -[(The expression passed to )2(%assign)0( is a )(critical expression \(see ){/section-3.8 xl}(section 3.8){el}(\), and must also evaluate to a pure)]154.6 norm1 -[(number \(rather than a relocatable reference such as a code or data address, or anything involving a register\).)]143.6 norm2 -(40)pageeven -restore showpage -%%Page: 41 41 -%%BeginPageSetup -save -%%EndPageSetup -/41 pa -[{/section-4.1.8 xa}(Defining Strings: )2(%defstr)](4.1.8)678.8 subh3 -[2(%defstr)0(, and its case-insensitive counterpart )2(%idefstr)0(, define or redefine a single-line macro without)]661.8 norm1 -[(parameters but converts the entire right-hand side, after macro expansion, to a quoted string before definition.)]650.8 norm2 -[(For example:)]633.8 norm3 -[2(%defstr test TEST)]616.8 code3 -[(is equivalent to)]599.8 norm3 -[2(%define test 'TEST')]582.8 code3 -[(This can be used, for example, with the )2(%!)0( construct \(see ){/section-4.10.2 xl}(section 4.10.2){el}(\):)]565.8 norm3 -[2(%defstr PATH %!PATH ; The operating system PATH variable)]548.8 code3 -[{/section-4.1.9 xa}(Defining Tokens: )2(%deftok)](4.1.9)529.6 subh3 -[2(%deftok)0(, and its case-insensitive counterpart )2(%ideftok)0(, define or redefine a single-line macro without)]512.6 norm1 -[(parameters but converts the second parameter, after string conversion, to a sequence of tokens.)]501.6 norm2 -[(For example:)]484.6 norm3 -[2(%deftok test 'TEST')]467.6 code3 -[(is equivalent to)]450.6 norm3 -[2(%define test TEST)]433.6 code3 -[{/section-4.2 xa}(String Manipulation in Macros)](4.2)412.2 head3 -[(It's often useful to be able to handle strings in macros. NASM supports a few simple string handling macro)]395.2 norm1 -[(operators from which more complex operations can be constructed.)]384.2 norm2 -[(All the string operators define or redefine a value \(either a string or a numeric value\) to a single-line macro.)]367.2 norm1 -[(When producing a string value, it may change the style of quoting of the input string or strings, and possibly)]356.2 norm0 -[(use )2(\\)0(\226escapes inside )2(`)0(\226quoted strings.)]345.2 norm2 -[{/section-4.2.1 xa}(Concatenating Strings: )2(%strcat)](4.2.1)326 subh3 -[(The )2(%strcat)0( operator concatenates quoted strings and assign them to a single-line macro.)]309 norm3 -[(For example:)]292 norm3 -[2(%strcat alpha "Alpha: ", '12" screen')]275 code3 -[(... would assign the value )2('Alpha: 12" screen')0( to )2(alpha)0(. Similarly:)]258 norm3 -[2(%strcat beta '"foo"\\', "'bar'")]241 code3 -[(... would assign the value )2(`"foo"\\\\'bar'`)0( to )2(beta)0(.)]224 norm3 -[(The use of commas to separate strings is permitted but optional.)]207 norm3 -[{/section-4.2.2 xa}(String Length: )2(%strlen)](4.2.2)187.8 subh3 -[(The )2(%strlen)0( operator assigns the length of a string to a macro. For example:)]170.8 norm3 -[2(%strlen charcnt 'my string')]153.8 code3 -[(In this example, )2(charcnt)0( would receive the value 9, just as if an )2(%assign)0( had been used. In this example,)]136.8 norm1 -[2('my string')0( was a literal string but it could also have been a single-line macro that expands to a string, as)]125.8 norm0 -[(in the following example:)]114.8 norm2 -(41)pageodd -restore showpage -%%Page: 42 42 -%%BeginPageSetup -save -%%EndPageSetup -/42 pa -[2(%define sometext 'my string' )]681 code1 -[2(%strlen charcnt sometext)]670 code2 -[(As in the first case, this would result in )2(charcnt)0( being assigned the value of 9.)]653 norm3 -[{/section-4.2.3 xa}(Extracting Substrings: )2(%substr)](4.2.3)633.8 subh3 -[(Individual letters or substrings in strings can be extracted using the )2(%substr)0( operator. An example of its use)]616.8 norm1 -[(is probably more useful than the description:)]605.8 norm2 -[2(%substr mychar 'xyzw' 1 ; equivalent to %define mychar 'x' )]588.8 code1 -[2(%substr mychar 'xyzw' 2 ; equivalent to %define mychar 'y' )]577.8 code0 -[2(%substr mychar 'xyzw' 3 ; equivalent to %define mychar 'z' )]566.8 code0 -[2(%substr mychar 'xyzw' 2,2 ; equivalent to %define mychar 'yz' )]555.8 code0 -[2(%substr mychar 'xyzw' 2,-1 ; equivalent to %define mychar 'yzw' )]544.8 code0 -[2(%substr mychar 'xyzw' 2,-2 ; equivalent to %define mychar 'yz')]533.8 code2 -[(As with )2(%strlen)0( \(see ){/section-4.2.2 xl}(section 4.2.2){el}(\), the first parameter is the single-line macro to be created and the)]516.8 norm1 -[(second is the string. The third parameter specifies the first character to be selected, and the optional fourth)]505.8 norm0 -[(parameter preceeded by comma\) is the length. Note that the first index is 1, not 0 and the last index is equal to)]494.8 norm0 -[(the value that )2(%strlen)0( would assign given the same string. Index values out of range result in an empty)]483.8 norm0 -[(string. A negative length means "until N-1 characters before the end of string", i.e. )2(-1)0( means until end of)]472.8 norm0 -[(string, )2(-2)0( until one character before, etc.)]461.8 norm2 -[{/section-4.3 xa}(Multi-Line Macros: )2(%macro)](4.3)440.4 head3 -[(Multi-line macros are much more like the type of macro seen in MASM and TASM: a multi-line macro)]423.4 norm1 -[(definition in NASM looks something like this.)]412.4 norm2 -[2(%macro prologue 1 )]395.4 code1 -[2()]384.4 code0 -[2( push ebp )]373.4 code0 -[2( mov ebp,esp )]362.4 code0 -[2( sub esp,%1 )]351.4 code0 -[2()]340.4 code0 -[2(%endmacro)]329.4 code2 -[(This defines a C-like function prologue as a macro: so you would invoke the macro with a call such as)]312.4 norm3 -[2(myfunc: prologue 12)]295.4 code3 -[(which would expand to the three lines of code)]278.4 norm3 -[2(myfunc: push ebp )]261.4 code1 -[2( mov ebp,esp )]250.4 code0 -[2( sub esp,12)]239.4 code2 -[(The number )2(1)0( after the macro name in the )2(%macro)0( line defines the number of parameters the macro)]222.4 norm1 -[2(prologue)0( expects to receive. The use of )2(%1)0( inside the macro definition refers to the first parameter to the)]211.4 norm0 -[(macro call. With a macro taking more than one parameter, subsequent parameters would be referred to as )2(%2)0(,)]200.4 norm0 -[2(%3)0( and so on.)]189.4 norm2 -[(Multi-line macros, like single-line macros, are )(case-sensitive, unless you define them using the alternative)]172.4 norm1 -[(directive )2(%imacro)0(.)]161.4 norm2 -[(If you need to pass a comma as )1(part)0( of a parameter to a multi-line macro, you can do that by enclosing the)]144.4 norm1 -[(entire parameter in )(braces. So you could code things like)]133.4 norm2 -[2(%macro silly 2 )]116.4 code1 -[2()]105.4 code0 -(42)pageeven -restore showpage -%%Page: 43 43 -%%BeginPageSetup -save -%%EndPageSetup -/43 pa -[2( %2: db %1 )]681 code0 -[2()]670 code0 -[2(%endmacro )]659 code0 -[2()]648 code0 -[2( silly 'a', letter_a ; letter_a: db 'a' )]637 code0 -[2( silly 'ab', string_ab ; string_ab: db 'ab' )]626 code0 -[2( silly {13,10}, crlf ; crlf: db 13,10)]615 code2 -[{/section-4.3.1 xa}(Recursive Multi-Line Macros: )2(%rmacro)](4.3.1)595.8 subh3 -[(A multi-line macro cannot be referenced within itself, in order to prevent accidental infinite recursion.)]578.8 norm3 -[(Recursive multi-line macros allow for self-referencing, with the caveat that the user is aware of the)]561.8 norm1 -[(existence, use and purpose of recursive multi-line macros. There is also a generous, but sane, upper limit to)]550.8 norm0 -[(the number of recursions, in order to prevent run-away memory consumption in case of accidental infinite)]539.8 norm0 -[(recursion.)]528.8 norm2 -[(As with non-recursive multi-line macros, recursive multi-line macros are )(case-sensitive, unless you define)]511.8 norm1 -[(them using the alternative directive )2(%irmacro)0(.)]500.8 norm2 -[{/section-4.3.2 xa}(Overloading Multi-Line Macros)](4.3.2)481.6 subh3 -[(As with single-line macros, multi-line macros can be overloaded by defining the same macro name several)]464.6 norm1 -[(times with different numbers of parameters. This time, no exception is made for macros with no parameters at)]453.6 norm0 -[(all. So you could define)]442.6 norm2 -[2(%macro prologue 0 )]425.6 code1 -[2()]414.6 code0 -[2( push ebp )]403.6 code0 -[2( mov ebp,esp )]392.6 code0 -[2()]381.6 code0 -[2(%endmacro)]370.6 code2 -[(to define an alternative form of the function prologue which allocates no local stack space.)]353.6 norm3 -[(Sometimes, however, you might want to `overload' a machine instruction; for example, you might want to)]336.6 norm1 -[(define)]325.6 norm2 -[2(%macro push 2 )]308.6 code1 -[2()]297.6 code0 -[2( push %1 )]286.6 code0 -[2( push %2 )]275.6 code0 -[2()]264.6 code0 -[2(%endmacro)]253.6 code2 -[(so that you could code)]236.6 norm3 -[2( push ebx ; this line is not a macro call )]219.6 code1 -[2( push eax,ecx ; but this one is)]208.6 code2 -[(Ordinarily, NASM will give a warning for the first of the above two lines, since )2(push)0( is now defined to be a)]191.6 norm1 -[(macro, and is being invoked with a number of parameters for which no definition has been given. The correct)]180.6 norm0 -[(code will still be generated, but the assembler will give a warning. This warning can be disabled by the use of)]169.6 norm0 -[(the )2(-w-macro-params)0( command-line option \(see ){/section-2.1.24 xl}(section 2.1.24){el}(\).)]158.6 norm2 -[{/section-4.3.3 xa}(Macro-Local Labels)](4.3.3)139.4 subh3 -[(NASM allows you to define labels within a multi-line macro definition in such a way as to make them local)]122.4 norm1 -[(to the macro call: so calling the same macro multiple times will use a different label each time. You do this by)]111.4 norm0 -(43)pageodd -restore showpage -%%Page: 44 44 -%%BeginPageSetup -save -%%EndPageSetup -/44 pa -[(prefixing )2(%%)0( to the label name. So you can invent an instruction which executes a )2(RET)0( if the )2(Z)0( flag is set by)]681 norm0 -[(doing this:)]670 norm2 -[2(%macro retz 0 )]653 code1 -[2()]642 code0 -[2( jnz %%skip )]631 code0 -[2( ret )]620 code0 -[2( %%skip: )]609 code0 -[2()]598 code0 -[2(%endmacro)]587 code2 -[(You can call this macro as many times as you want, and every time you call it NASM will make up a different)]570 norm1 -[(`real' name to substitute for the label )2(%%skip)0(. The names NASM invents are of the form )2(..@2345.skip)0(,)]559 norm0 -[(where the number 2345 changes with every macro call. The )2(..@)0( prefix prevents macro-local labels from)]548 norm0 -[(interfering with the local label mechanism, as described in ){/section-3.9 xl}(section 3.9){el}(. You should avoid defining your own)]537 norm0 -[(labels in this form \(the )2(..@)0( prefix, then a number, then another period\) in case they interfere with)]526 norm0 -[(macro-local labels.)]515 norm2 -[{/section-4.3.4 xa}(Greedy Macro Parameters)](4.3.4)495.8 subh3 -[(Occasionally it is useful to define a macro which lumps its entire command line into one parameter definition,)]478.8 norm1 -[(possibly after extracting one or two smaller parameters from the front. An example might be a macro to write)]467.8 norm0 -[(a text string to a file in MS-DOS, where you might want to be able to write)]456.8 norm2 -[2( writefile [filehandle],"hello, world",13,10)]439.8 code3 -[(NASM allows you to define the last parameter of a macro to be )1(greedy)0(, meaning that if you invoke the macro)]422.8 norm1 -[(with more parameters than it expects, all the spare parameters get lumped into the last defined one along with)]411.8 norm0 -[(the separating commas. So if you code:)]400.8 norm2 -[2(%macro writefile 2+ )]383.8 code1 -[2()]372.8 code0 -[2( jmp %%endstr )]361.8 code0 -[2( %%str: db %2 )]350.8 code0 -[2( %%endstr: )]339.8 code0 -[2( mov dx,%%str )]328.8 code0 -[2( mov cx,%%endstr-%%str )]317.8 code0 -[2( mov bx,%1 )]306.8 code0 -[2( mov ah,0x40 )]295.8 code0 -[2( int 0x21 )]284.8 code0 -[2()]273.8 code0 -[2(%endmacro)]262.8 code2 -[(then the example call to )2(writefile)0( above will work as expected: the text before the first comma,)]245.8 norm1 -[2([filehandle])0(, is used as the first macro parameter and expanded when )2(%1)0( is referred to, and all the)]234.8 norm0 -[(subsequent text is lumped into )2(%2)0( and placed after the )2(db)0(.)]223.8 norm2 -[(The greedy nature of the macro is indicated to NASM by the use of the )2(+)0( sign after the parameter count on the)]206.8 norm1 -[2(%macro)0( line.)]195.8 norm2 -[(If you define a greedy macro, you are effectively telling NASM how it should expand the macro given )1(any)]178.8 norm1 -[(number of parameters from the actual number specified up to infinity; in this case, for example, NASM now)]167.8 norm0 -[(knows what to do when it sees a call to )2(writefile)0( with 2, 3, 4 or more parameters. NASM will take this)]156.8 norm0 -[(into account when overloading macros, and will not allow you to define another form of )2(writefile)0( taking)]145.8 norm0 -[(4 parameters \(for example\).)]134.8 norm2 -[(Of course, the above macro could have been implemented as a non-greedy macro, in which case the call to it)]117.8 norm1 -[(would have had to look like)]106.8 norm2 -(44)pageeven -restore showpage -%%Page: 45 45 -%%BeginPageSetup -save -%%EndPageSetup -/45 pa -[2( writefile [filehandle], {"hello, world",13,10})]681 code3 -[(NASM provides both mechanisms for putting )(commas in macro parameters, and you choose which one you)]664 norm1 -[(prefer for each macro definition.)]653 norm2 -[(See ){/section-6.3.1 xl}(section 6.3.1){el}( for a better way to write the above macro.)]636 norm3 -[{/section-4.3.5 xa}(Default Macro Parameters)](4.3.5)616.8 subh3 -[(NASM also allows you to define a multi-line macro with a )1(range)0( of allowable parameter counts. If you do)]599.8 norm1 -[(this, you can specify defaults for )(omitted parameters. So, for example:)]588.8 norm2 -[2(%macro die 0-1 "Painful program death has occurred." )]571.8 code1 -[2()]560.8 code0 -[2( writefile 2,%1 )]549.8 code0 -[2( mov ax,0x4c01 )]538.8 code0 -[2( int 0x21 )]527.8 code0 -[2()]516.8 code0 -[2(%endmacro)]505.8 code2 -[(This macro \(which makes use of the )2(writefile)0( macro defined in ){/section-4.3.4 xl}(section 4.3.4){el}(\) can be called with an)]488.8 norm1 -[(explicit error message, which it will display on the error output stream before exiting, or it can be called with)]477.8 norm0 -[(no parameters, in which case it will use the default error message supplied in the macro definition.)]466.8 norm2 -[(In general, you supply a minimum and maximum number of parameters for a macro of this type; the)]449.8 norm1 -[(minimum number of parameters are then required in the macro call, and then you provide defaults for the)]438.8 norm0 -[(optional ones. So if a macro definition began with the line)]427.8 norm2 -[2(%macro foobar 1-3 eax,[ebx+2])]410.8 code3 -[(then it could be called with between one and three parameters, and )2(%1)0( would always be taken from the macro)]393.8 norm1 -[(call. )2(%2)0(, if not specified by the macro call, would default to )2(eax)0(, and )2(%3)0( if not specified would default to)]382.8 norm0 -[2([ebx+2])0(.)]371.8 norm2 -[(You can provide extra information to a macro by providing too many default parameters:)]354.8 norm3 -[2(%macro quux 1 something)]337.8 code3 -[(This will trigger a warning by default; see ){/section-2.1.24 xl}(section 2.1.24){el}( for more information. When )2(quux)0( is invoked, it)]320.8 norm1 -[(receives not one but two parameters. )2(something)0( can be referred to as )2(%2)0(. The difference between passing)]309.8 norm0 -[2(something)0( this way and writing )2(something)0( in the macro body is that with this way )2(something)0( is)]298.8 norm0 -[(evaluated when the macro is defined, not when it is expanded.)]287.8 norm2 -[(You may omit parameter defaults from the macro definition, in which case the parameter default is taken to be)]270.8 norm1 -[(blank. This can be useful for macros which can take a variable number of parameters, since the )2(%0)0( token \(see)]259.8 norm0 -[{/section-4.3.6 xl}(section 4.3.6){el}(\) allows you to determine how many parameters were really passed to the macro call.)]248.8 norm2 -[(This defaulting mechanism can be combined with the greedy-parameter mechanism; so the )2(die)0( macro above)]231.8 norm1 -[(could be made more powerful, and more useful, by changing the first line of the definition to)]220.8 norm2 -[2(%macro die 0-1+ "Painful program death has occurred.",13,10)]203.8 code3 -[(The maximum parameter count can be infinite, denoted by )2(*)0(. In this case, of course, it is impossible to)]186.8 norm1 -[(provide a )1(full)0( set of default parameters. Examples of this usage are shown in ){/section-4.3.7 xl}(section 4.3.7){el}(.)]175.8 norm2 -[{/section-4.3.6 xa}2(%0)0(: )(Macro Parameter Counter)](4.3.6)156.6 subh3 -[(The parameter reference )2(%0)0( will return a numeric constant giving the number of parameters received, that is,)]139.6 norm1 -[(if )2(%0)0( is n then )2(%)0(n is the last parameter. )2(%0)0( is mostly useful for macros that can take a variable number of)]128.6 norm0 -[(parameters. It can be used as an argument to )2(%rep)0( \(see ){/section-4.5 xl}(section 4.5){el}(\) in order to iterate through all the)]117.6 norm0 -[(parameters of a macro. Examples are given in ){/section-4.3.7 xl}(section 4.3.7){el}(.)]106.6 norm2 -(45)pageodd -restore showpage -%%Page: 46 46 -%%BeginPageSetup -save -%%EndPageSetup -/46 pa -[{/section-4.3.7 xa}2(%rotate)0(: )(Rotating Macro Parameters)](4.3.7)678.8 subh3 -[(Unix shell programmers will be familiar with the )2(shift)0( shell command, which allows the arguments passed)]661.8 norm1 -[(to a shell script \(referenced as )2($1)0(, )2($2)0( and so on\) to be moved left by one place, so that the argument)]650.8 norm0 -[(previously referenced as )2($2)0( becomes available as )2($1)0(, and the argument previously referenced as )2($1)0( is no)]639.8 norm0 -[(longer available at all.)]628.8 norm2 -[(NASM provides a similar mechanism, in the form of )2(%rotate)0(. As its name suggests, it differs from the)]611.8 norm1 -[(Unix )2(shift)0( in that no parameters are lost: parameters rotated off the left end of the argument list reappear on)]600.8 norm0 -[(the right, and vice versa.)]589.8 norm2 -[2(%rotate)0( is invoked with a single numeric argument \(which may be an expression\). The macro parameters)]572.8 norm1 -[(are rotated to the left by that many places. If the argument to )2(%rotate)0( is negative, the macro parameters are)]561.8 norm0 -[(rotated to the right.)]550.8 norm2 -[(So a pair of macros to save and restore a set of registers might work as follows:)]533.8 norm3 -[2(%macro multipush 1-* )]516.8 code1 -[2()]505.8 code0 -[2( %rep %0 )]494.8 code0 -[2( push %1 )]483.8 code0 -[2( %rotate 1 )]472.8 code0 -[2( %endrep )]461.8 code0 -[2()]450.8 code0 -[2(%endmacro)]439.8 code2 -[(This macro invokes the )2(PUSH)0( instruction on each of its arguments in turn, from left to right. It begins by)]422.8 norm1 -[(pushing its first argument, )2(%1)0(, then invokes )2(%rotate)0( to move all the arguments one place to the left, so that)]411.8 norm0 -[(the original second argument is now available as )2(%1)0(. Repeating this procedure as many times as there were)]400.8 norm0 -[(arguments \(achieved by supplying )2(%0)0( as the argument to )2(%rep)0(\) causes each argument in turn to be pushed.)]389.8 norm2 -[(Note also the use of )2(*)0( as the maximum parameter count, indicating that there is no upper limit on the number)]372.8 norm1 -[(of parameters you may supply to the )2(multipush)0( macro.)]361.8 norm2 -[(It would be convenient, when using this macro, to have a )2(POP)0( equivalent, which )1(didn't)0( require the arguments)]344.8 norm1 -[(to be given in reverse order. Ideally, you would write the )2(multipush)0( macro call, then cut-and-paste the)]333.8 norm0 -[(line to where the pop needed to be done, and change the name of the called macro to )2(multipop)0(, and the)]322.8 norm0 -[(macro would take care of popping the registers in the opposite order from the one in which they were pushed.)]311.8 norm2 -[(This can be done by the following definition:)]294.8 norm3 -[2(%macro multipop 1-* )]277.8 code1 -[2()]266.8 code0 -[2( %rep %0 )]255.8 code0 -[2( %rotate -1 )]244.8 code0 -[2( pop %1 )]233.8 code0 -[2( %endrep )]222.8 code0 -[2()]211.8 code0 -[2(%endmacro)]200.8 code2 -[(This macro begins by rotating its arguments one place to the )1(right)0(, so that the original )1(last)0( argument appears)]183.8 norm1 -[(as )2(%1)0(. This is then popped, and the arguments are rotated right again, so the second-to-last argument)]172.8 norm0 -[(becomes )2(%1)0(. Thus the arguments are iterated through in reverse order.)]161.8 norm2 -[{/section-4.3.8 xa}(Concatenating Macro Parameters)](4.3.8)142.6 subh3 -[(NASM can concatenate macro parameters and macro indirection constructs on to other text surrounding them.)]125.6 norm1 -[(This allows you to declare a family of symbols, for example, in a macro definition. If, for example, you)]114.6 norm0 -[(wanted to generate a table of key codes along with offsets into the table, you could code something like)]103.6 norm2 -(46)pageeven -restore showpage -%%Page: 47 47 -%%BeginPageSetup -save -%%EndPageSetup -/47 pa -[2(%macro keytab_entry 2 )]681 code1 -[2()]670 code0 -[2( keypos%1 equ $-keytab )]659 code0 -[2( db %2 )]648 code0 -[2()]637 code0 -[2(%endmacro )]626 code0 -[2()]615 code0 -[2(keytab: )]604 code0 -[2( keytab_entry F1,128+1 )]593 code0 -[2( keytab_entry F2,128+2 )]582 code0 -[2( keytab_entry Return,13)]571 code2 -[(which would expand to)]554 norm3 -[2(keytab: )]537 code1 -[2(keyposF1 equ $-keytab )]526 code0 -[2( db 128+1 )]515 code0 -[2(keyposF2 equ $-keytab )]504 code0 -[2( db 128+2 )]493 code0 -[2(keyposReturn equ $-keytab )]482 code0 -[2( db 13)]471 code2 -[(You can just as easily concatenate text on to the other end of a macro parameter, by writing )2(%1foo)0(.)]454 norm3 -[(If you need to append a )1(digit)0( to a macro parameter, for example defining labels )2(foo1)0( and )2(foo2)0( when passed)]437 norm1 -[(the parameter )2(foo)0(, you can't code )2(%11)0( because that would be taken as the eleventh macro parameter.)]426 norm0 -[(Instead, you must code )2(%{1}1)0(, which will separate the first )2(1)0( \(giving the number of the macro parameter\))]415 norm0 -[(from the second \(literal text to be concatenated to the parameter\).)]404 norm2 -[(This concatenation can also be applied to other preprocessor in-line objects, such as macro-local labels)]387 norm1 -[(\(){/section-4.3.3 xl}(section 4.3.3){el}(\) and context-local labels \(){/section-4.7.2 xl}(section 4.7.2){el}(\). In all cases, ambiguities in syntax can be resolved by)]376 norm0 -[(enclosing everything after the )2(%)0( sign and before the literal text in braces: so )2(%{%foo}bar)0( concatenates the)]365 norm0 -[(text )2(bar)0( to the end of the real name of the macro-local label )2(%%foo)0(. \(This is unnecessary, since the form)]354 norm0 -[(NASM uses for the real names of macro-local labels means that the two usages )2(%{%foo}bar)0( and)]343 norm0 -[2(%%foobar)0( would both expand to the same thing anyway; nevertheless, the capability is there.\))]332 norm2 -[(The single-line macro indirection construct, )2(%[...])0( \(){/section-4.1.3 xl}(section 4.1.3){el}(\), behaves the same way as macro)]315 norm1 -[(parameters for the purpose of concatenation.)]304 norm2 -[(See also the )2(%+)0( operator, ){/section-4.1.4 xl}(section 4.1.4){el}(.)]287 norm3 -[{/section-4.3.9 xa}(Condition Codes as Macro Parameters)](4.3.9)267.8 subh3 -[(NASM can give special treatment to a macro parameter which contains a condition code. For a start, you can)]250.8 norm1 -[(refer to the macro parameter )2(%1)0( by means of the alternative syntax )2(%+1)0(, which informs NASM that this)]239.8 norm0 -[(macro parameter is supposed to contain a condition code, and will cause the preprocessor to report an error)]228.8 norm0 -[(message if the macro is called with a parameter which is )1(not)0( a valid condition code.)]217.8 norm2 -[(Far more usefully, though, you can refer to the macro parameter by means of )2(%-1)0(, which NASM will expand)]200.8 norm1 -[(as the )1(inverse)0( condition code. So the )2(retz)0( macro defined in ){/section-4.3.3 xl}(section 4.3.3){el}( can be replaced by a general)]189.8 norm0 -[(conditional-return macro like this:)]178.8 norm2 -[2(%macro retc 1 )]161.8 code1 -[2()]150.8 code0 -[2( j%-1 %%skip )]139.8 code0 -[2( ret )]128.8 code0 -[2( %%skip: )]117.8 code0 -(47)pageodd -restore showpage -%%Page: 48 48 -%%BeginPageSetup -save -%%EndPageSetup -/48 pa -[2()]681 code0 -[2(%endmacro)]670 code2 -[(This macro can now be invoked using calls like )2(retc ne)0(, which will cause the conditional-jump instruction)]653 norm1 -[(in the macro expansion to come out as )2(JE)0(, or )2(retc po)0( which will make the jump a )2(JPE)0(.)]642 norm2 -[(The )2(%+1)0( macro-parameter reference is quite happy to interpret the arguments )2(CXZ)0( and )2(ECXZ)0( as valid)]625 norm1 -[(condition codes; however, )2(%-1)0( will report an error if passed either of these, because no inverse condition)]614 norm0 -[(code exists.)]603 norm2 -[{/section-4.3.10 xa}(Disabling Listing Expansion)](4.3.10)583.8 subh3 -[(When NASM is generating a listing file from your program, it will generally expand multi-line macros by)]566.8 norm1 -[(means of writing the macro call and then listing each line of the expansion. This allows you to see which)]555.8 norm0 -[(instructions in the macro expansion are generating what code; however, for some macros this clutters the)]544.8 norm0 -[(listing up unnecessarily.)]533.8 norm2 -[(NASM therefore provides the )2(.nolist)0( qualifier, which you can include in a macro definition to inhibit the)]516.8 norm1 -[(expansion of the macro in the listing file. The )2(.nolist)0( qualifier comes directly after the number of)]505.8 norm0 -[(parameters, like this:)]494.8 norm2 -[2(%macro foo 1.nolist)]477.8 code3 -[(Or like this:)]460.8 norm3 -[2(%macro bar 1-5+.nolist a,b,c,d,e,f,g,h)]443.8 code3 -[{/section-4.3.11 xa}(Undefining Multi-Line Macros: )2(%unmacro)](4.3.11)424.6 subh3 -[(Multi-line macros can be removed with the )2(%unmacro)0( directive. Unlike the )2(%undef)0( directive, however,)]407.6 norm1 -[2(%unmacro)0( takes an argument specification, and will only remove )(exact matches with that argument)]396.6 norm0 -[(specification.)]385.6 norm2 -[(For example:)]368.6 norm3 -[2(%macro foo 1-3 )]351.6 code1 -[2( ; Do something )]340.6 code0 -[2(%endmacro )]329.6 code0 -[2(%unmacro foo 1-3)]318.6 code2 -[(removes the previously defined macro )2(foo)0(, but)]301.6 norm3 -[2(%macro bar 1-3 )]284.6 code1 -[2( ; Do something )]273.6 code0 -[2(%endmacro )]262.6 code0 -[2(%unmacro bar 1)]251.6 code2 -[(does )1(not)0( remove the macro )2(bar)0(, since the argument specification does not match exactly.)]234.6 norm3 -[{/section-4.3.12 xa}(Exiting Multi-Line Macros: )2(%exitmacro)](4.3.12)215.4 subh3 -[(Multi-line macro expansions can be arbitrarily terminated with the )2(%exitmacro)0( directive.)]198.4 norm3 -[(For example:)]181.4 norm3 -[2(%macro foo 1-3 )]164.4 code1 -[2( ; Do something )]153.4 code0 -[2( %if<condition> )]142.4 code0 -[2( %exitmacro )]131.4 code0 -[2( %endif )]120.4 code0 -(48)pageeven -restore showpage -%%Page: 49 49 -%%BeginPageSetup -save -%%EndPageSetup -/49 pa -[2( ; Do something )]681 code0 -[2(%endmacro)]670 code2 -[{/section-4.4 xa}(Conditional Assembly)](4.4)648.6 head3 -[(Similarly to the C preprocessor, NASM allows sections of a source file to be assembled only if certain)]631.6 norm1 -[(conditions are met. The general syntax of this feature looks like this:)]620.6 norm2 -[2(%if<condition> )]603.6 code1 -[2( ; some code which only appears if <condition> is met )]592.6 code0 -[2(%elif<condition2> )]581.6 code0 -[2( ; only appears if <condition> is not met but <condition2> is )]570.6 code0 -[2(%else )]559.6 code0 -[2( ; this appears if neither <condition> nor <condition2> was met )]548.6 code0 -[2(%endif)]537.6 code2 -[(The inverse forms )2(%ifn)0( and )2(%elifn)0( are also supported.)]520.6 norm3 -[(The )2(%else)0( clause is optional, as is the )2(%elif)0( clause. You can have more than one )2(%elif)0( clause as well.)]503.6 norm3 -[(There are a number of variants of the )2(%if)0( directive. Each has its corresponding )2(%elif)0(, )2(%ifn)0(, and )2(%elifn)]486.6 norm1 -[(directives; for example, the equivalents to the )2(%ifdef)0( directive are )2(%elifdef)0(, )2(%ifndef)0(, and)]475.6 norm0 -[2(%elifndef)0(.)]464.6 norm2 -[{/section-4.4.1 xa}2(%ifdef)0(: Testing Single-Line Macro Existence)](4.4.1)445.4 subh3 -[(Beginning a conditional-assembly block with the line )2(%ifdef MACRO)0( will assemble the subsequent code if,)]428.4 norm1 -[(and only if, a single-line macro called )2(MACRO)0( is defined. If not, then the )2(%elif)0( and )2(%else)0( blocks \(if any\))]417.4 norm0 -[(will be processed instead.)]406.4 norm2 -[(For example, when debugging a program, you might want to write code such as)]389.4 norm3 -[2( ; perform some function )]372.4 code1 -[2(%ifdef DEBUG )]361.4 code0 -[2( writefile 2,"Function performed successfully",13,10 )]350.4 code0 -[2(%endif )]339.4 code0 -[2( ; go and do something else)]328.4 code2 -[(Then you could use the command-line option )2(-dDEBUG)0( to create a version of the program which produced)]311.4 norm1 -[(debugging messages, and remove the option to generate the final release version of the program.)]300.4 norm2 -[(You can test for a macro )1(not)0( being defined by using )2(%ifndef)0( instead of )2(%ifdef)0(. You can also test for)]283.4 norm1 -[(macro definitions in )2(%elif)0( blocks by using )2(%elifdef)0( and )2(%elifndef)0(.)]272.4 norm2 -[{/section-4.4.2 xa}2(%ifmacro)0(: Testing Multi-Line Macro Existence)](4.4.2)253.2 subh3 -[(The )2(%ifmacro)0( directive operates in the same way as the )2(%ifdef)0( directive, except that it checks for the)]236.2 norm1 -[(existence of a multi-line macro.)]225.2 norm2 -[(For example, you may be working with a large project and not have control over the macros in a library. You)]208.2 norm1 -[(may want to create a macro with one name if it doesn't already exist, and another name if one with that name)]197.2 norm0 -[(does exist.)]186.2 norm2 -[(The )2(%ifmacro)0( is considered true if defining a macro with the given name and number of arguments would)]169.2 norm1 -[(cause a definitions conflict. For example:)]158.2 norm2 -[2(%ifmacro MyMacro 1-3 )]141.2 code1 -[2()]130.2 code0 -[2( %error "MyMacro 1-3" causes a conflict with an existing macro. )]119.2 code0 -[2()]108.2 code0 -(49)pageodd -restore showpage -%%Page: 50 50 -%%BeginPageSetup -save -%%EndPageSetup -/50 pa -[2(%else )]681 code0 -[2()]670 code0 -[2( %macro MyMacro 1-3 )]659 code0 -[2()]648 code0 -[2( ; insert code to define the macro )]637 code0 -[2()]626 code0 -[2( %endmacro )]615 code0 -[2()]604 code0 -[2(%endif)]593 code2 -[(This will create the macro "MyMacro 1-3" if no macro already exists which would conflict with it, and emits)]576 norm1 -[(a warning if there would be a definition conflict.)]565 norm2 -[(You can test for the macro not existing by using the )2(%ifnmacro)0( instead of )2(%ifmacro)0(. Additional tests can)]548 norm1 -[(be performed in )2(%elif)0( blocks by using )2(%elifmacro)0( and )2(%elifnmacro)0(.)]537 norm2 -[{/section-4.4.3 xa}2(%ifctx)0(: Testing the Context Stack)](4.4.3)517.8 subh3 -[(The conditional-assembly construct )2(%ifctx)0( will cause the subsequent code to be assembled if and only if)]500.8 norm1 -[(the top context on the preprocessor's context stack has the same name as one of the arguments. As with)]489.8 norm0 -[2(%ifdef)0(, the inverse and )2(%elif)0( forms )2(%ifnctx)0(, )2(%elifctx)0( and )2(%elifnctx)0( are also supported.)]478.8 norm2 -[(For more details of the context stack, see ){/section-4.7 xl}(section 4.7){el}(. For a sample use of )2(%ifctx)0(, see ){/section-4.7.5 xl}(section 4.7.5){el}(.)]461.8 norm3 -[{/section-4.4.4 xa}2(%if)0(: Testing Arbitrary Numeric Expressions)](4.4.4)442.6 subh3 -[(The conditional-assembly construct )2(%if expr)0( will cause the subsequent code to be assembled if and only if)]425.6 norm1 -[(the value of the numeric expression )2(expr)0( is non-zero. An example of the use of this feature is in deciding)]414.6 norm0 -[(when to break out of a )2(%rep)0( preprocessor loop: see ){/section-4.5 xl}(section 4.5){el}( for a detailed example.)]403.6 norm2 -[(The expression given to )2(%if)0(, and its counterpart )2(%elif)0(, is a critical expression \(see ){/section-3.8 xl}(section 3.8){el}(\).)]386.6 norm3 -[2(%if)0( extends the normal NASM expression syntax, by providing a set of )(relational operators which are not)]369.6 norm1 -[(normally available in expressions. The operators )2(=)0(, )2(<)0(, )2(>)0(, )2(<=)0(, )2(>=)0( and )2(<>)0( test equality, less-than, greater-than,)]358.6 norm0 -[(less-or-equal, greater-or-equal and not-equal respectively. The C-like forms )2(==)0( and )2(!=)0( are supported as)]347.6 norm0 -[(alternative forms of )2(=)0( and )2(<>)0(. In addition, low-priority logical operators )2(&&)0(, )2(^^)0( and )2(||)0( are provided,)]336.6 norm0 -[(supplying )(logical AND, )(logical XOR and )(logical OR. These work like the C logical operators \(although C has)]325.6 norm0 -[(no logical XOR\), in that they always return either 0 or 1, and treat any non-zero input as 1 \(so that )2(^^)0(, for)]314.6 norm0 -[(example, returns 1 if exactly one of its inputs is zero, and 0 otherwise\). The relational operators also return 1)]303.6 norm0 -[(for true and 0 for false.)]292.6 norm2 -[(Like other )2(%if)0( constructs, )2(%if)0( has a counterpart )2(%elif)0(, and negative forms )2(%ifn)0( and )2(%elifn)0(.)]275.6 norm3 -[{/section-4.4.5 xa}2(%ifidn)0( and )2(%ifidni)0(: Testing Exact Text Identity)](4.4.5)256.4 subh3 -[(The construct )2(%ifidn text1,text2)0( will cause the subsequent code to be assembled if and only if)]239.4 norm1 -[2(text1)0( and )2(text2)0(, after expanding single-line macros, are identical pieces of text. Differences in white)]228.4 norm0 -[(space are not counted.)]217.4 norm2 -[2(%ifidni)0( is similar to )2(%ifidn)0(, but is )(case-insensitive.)]200.4 norm3 -[(For example, the following macro pushes a register or number on the stack, and allows you to treat )2(IP)0( as a)]183.4 norm1 -[(real register:)]172.4 norm2 -[2(%macro pushparam 1 )]155.4 code1 -[2()]144.4 code0 -[2( %ifidni %1,ip )]133.4 code0 -[2( call %%label )]122.4 code0 -[2( %%label: )]111.4 code0 -[2( %else )]100.4 code0 -(50)pageeven -restore showpage -%%Page: 51 51 -%%BeginPageSetup -save -%%EndPageSetup -/51 pa -[2( push %1 )]681 code0 -[2( %endif )]670 code0 -[2()]659 code0 -[2(%endmacro)]648 code2 -[(Like other )2(%if)0( constructs, )2(%ifidn)0( has a counterpart )2(%elifidn)0(, and negative forms )2(%ifnidn)0( and)]631 norm1 -[2(%elifnidn)0(. Similarly, )2(%ifidni)0( has counterparts )2(%elifidni)0(, )2(%ifnidni)0( and )2(%elifnidni)0(.)]620 norm2 -[{/section-4.4.6 xa}2(%ifid)0(, )2(%ifnum)0(, )2(%ifstr)0(: Testing Token Types)](4.4.6)600.8 subh3 -[(Some macros will want to perform different tasks depending on whether they are passed a number, a string, or)]583.8 norm1 -[(an identifier. For example, a string output macro might want to be able to cope with being passed either a)]572.8 norm0 -[(string constant or a pointer to an existing string.)]561.8 norm2 -[(The conditional assembly construct )2(%ifid)0(, taking one parameter \(which may be blank\), assembles the)]544.8 norm1 -[(subsequent code if and only if the first token in the parameter exists and is an identifier. )2(%ifnum)0( works)]533.8 norm0 -[(similarly, but tests for the token being a numeric constant; )2(%ifstr)0( tests for it being a string.)]522.8 norm2 -[(For example, the )2(writefile)0( macro defined in ){/section-4.3.4 xl}(section 4.3.4){el}( can be extended to take advantage of )2(%ifstr)]505.8 norm1 -[(in the following fashion:)]494.8 norm2 -[2(%macro writefile 2-3+ )]477.8 code1 -[2()]466.8 code0 -[2( %ifstr %2 )]455.8 code0 -[2( jmp %%endstr )]444.8 code0 -[2( %if %0 = 3 )]433.8 code0 -[2( %%str: db %2,%3 )]422.8 code0 -[2( %else )]411.8 code0 -[2( %%str: db %2 )]400.8 code0 -[2( %endif )]389.8 code0 -[2( %%endstr: mov dx,%%str )]378.8 code0 -[2( mov cx,%%endstr-%%str )]367.8 code0 -[2( %else )]356.8 code0 -[2( mov dx,%2 )]345.8 code0 -[2( mov cx,%3 )]334.8 code0 -[2( %endif )]323.8 code0 -[2( mov bx,%1 )]312.8 code0 -[2( mov ah,0x40 )]301.8 code0 -[2( int 0x21 )]290.8 code0 -[2()]279.8 code0 -[2(%endmacro)]268.8 code2 -[(Then the )2(writefile)0( macro can cope with being called in either of the following two ways:)]251.8 norm3 -[2( writefile [file], strpointer, length )]234.8 code1 -[2( writefile [file], "hello", 13, 10)]223.8 code2 -[(In the first, )2(strpointer)0( is used as the address of an already-declared string, and )2(length)0( is used as its)]206.8 norm1 -[(length; in the second, a string is given to the macro, which therefore declares it itself and works out the)]195.8 norm0 -[(address and length for itself.)]184.8 norm2 -[(Note the use of )2(%if)0( inside the )2(%ifstr)0(: this is to detect whether the macro was passed two arguments \(so the)]167.8 norm1 -[(string would be a single string constant, and )2(db %2)0( would be adequate\) or more \(in which case, all but the)]156.8 norm0 -[(first two would be lumped together into )2(%3)0(, and )2(db %2,%3)0( would be required\).)]145.8 norm2 -[(The usual )2(%elif)0(..., )2(%ifn)0(..., and )2(%elifn)0(... versions exist for each of )2(%ifid)0(, )2(%ifnum)0( and )2(%ifstr)0(.)]128.8 norm3 -(51)pageodd -restore showpage -%%Page: 52 52 -%%BeginPageSetup -save -%%EndPageSetup -/52 pa -[{/section-4.4.7 xa}2(%iftoken)0(: Test for a Single Token)](4.4.7)678.8 subh3 -[(Some macros will want to do different things depending on if it is passed a single token \(e.g. paste it to)]661.8 norm1 -[(something else using )2(%+)0(\) versus a multi-token sequence.)]650.8 norm2 -[(The conditional assembly construct )2(%iftoken)0( assembles the subsequent code if and only if the expanded)]633.8 norm1 -[(parameters consist of exactly one token, possibly surrounded by whitespace.)]622.8 norm2 -[(For example:)]605.8 norm3 -[2(%iftoken 1)]588.8 code3 -[(will assemble the subsequent code, but)]571.8 norm3 -[2(%iftoken -1)]554.8 code3 -[(will not, since )2(-1)0( contains two tokens: the unary minus operator )2(-)0(, and the number )2(1)0(.)]537.8 norm3 -[(The usual )2(%eliftoken)0(, )2(%ifntoken)0(, and )2(%elifntoken)0( variants are also provided.)]520.8 norm3 -[{/section-4.4.8 xa}2(%ifempty)0(: Test for Empty Expansion)](4.4.8)501.6 subh3 -[(The conditional assembly construct )2(%ifempty)0( assembles the subsequent code if and only if the expanded)]484.6 norm1 -[(parameters do not contain any tokens at all, whitespace excepted.)]473.6 norm2 -[(The usual )2(%elifempty)0(, )2(%ifnempty)0(, and )2(%elifnempty)0( variants are also provided.)]456.6 norm3 -[{/section-4.5 xa}(Preprocessor Loops)(: )2(%rep)](4.5)435.2 head3 -[(NASM's )2(TIMES)0( prefix, though useful, cannot be used to invoke a multi-line macro multiple times, because)]418.2 norm1 -[(it is processed by NASM after macros have already been expanded. Therefore NASM provides another form)]407.2 norm0 -[(of loop, this time at the preprocessor level: )2(%rep)0(.)]396.2 norm2 -[(The directives )2(%rep)0( and )2(%endrep)0( \()2(%rep)0( takes a numeric argument, which can be an expression; )2(%endrep)]379.2 norm1 -[(takes no arguments\) can be used to enclose a chunk of code, which is then replicated as many times as)]368.2 norm0 -[(specified by the preprocessor:)]357.2 norm2 -[2(%assign i 0 )]340.2 code1 -[2(%rep 64 )]329.2 code0 -[2( inc word [table+2*i] )]318.2 code0 -[2(%assign i i+1 )]307.2 code0 -[2(%endrep)]296.2 code2 -[(This will generate a sequence of 64 )2(INC)0( instructions, incrementing every word of memory from )2([table])0( to)]279.2 norm1 -[2([table+126])0(.)]268.2 norm2 -[(For more complex termination conditions, or to break out of a repeat loop part way along, you can use the)]251.2 norm1 -[2(%exitrep)0( directive to terminate the loop, like this:)]240.2 norm2 -[2(fibonacci: )]223.2 code1 -[2(%assign i 0 )]212.2 code0 -[2(%assign j 1 )]201.2 code0 -[2(%rep 100 )]190.2 code0 -[2(%if j > 65535 )]179.2 code0 -[2( %exitrep )]168.2 code0 -[2(%endif )]157.2 code0 -[2( dw j )]146.2 code0 -[2(%assign k j+i )]135.2 code0 -[2(%assign i j )]124.2 code0 -[2(%assign j k )]113.2 code0 -[2(%endrep )]102.2 code0 -(52)pageeven -restore showpage -%%Page: 53 53 -%%BeginPageSetup -save -%%EndPageSetup -/53 pa -[2()]681 code0 -[2(fib_number equ \($-fibonacci\)/2)]670 code2 -[(This produces a list of all the Fibonacci numbers that will fit in 16 bits. Note that a maximum repeat count)]653 norm1 -[(must still be given to )2(%rep)0(. This is to prevent the possibility of NASM getting into an infinite loop in the)]642 norm0 -[(preprocessor, which \(on multitasking or multi-user systems\) would typically cause all the system memory to)]631 norm0 -[(be gradually used up and other applications to start crashing.)]620 norm2 -[{/section-4.6 xa}(Source Files and Dependencies)](4.6)598.6 head3 -[(These commands allow you to split your sources into multiple files.)]581.6 norm3 -[{/section-4.6.1 xa}2(%include)0(: )(Including Other Files)](4.6.1)562.4 subh3 -[(Using, once again, a very similar syntax to the C preprocessor, NASM's preprocessor lets you include other)]545.4 norm1 -[(source files into your code. This is done by the use of the )2(%include)0( directive:)]534.4 norm2 -[2(%include "macros.mac")]517.4 code3 -[(will include the contents of the file )2(macros.mac)0( into the source file containing the )2(%include)0( directive.)]500.4 norm3 -[(Include files are )(searched for in the current directory \(the directory you're in when you run NASM, as)]483.4 norm1 -[(opposed to the location of the NASM executable or the location of the source file\), plus any directories)]472.4 norm0 -[(specified on the NASM command line using the )2(-i)0( option.)]461.4 norm2 -[(The standard C idiom for preventing a file being included more than once is just as applicable in NASM: if)]444.4 norm1 -[(the file )2(macros.mac)0( has the form)]433.4 norm2 -[2(%ifndef MACROS_MAC )]416.4 code1 -[2( %define MACROS_MAC )]405.4 code0 -[2( ; now define some macros )]394.4 code0 -[2(%endif)]383.4 code2 -[(then including the file more than once will not cause errors, because the second time the file is included)]366.4 norm1 -[(nothing will happen because the macro )2(MACROS_MAC)0( will already be defined.)]355.4 norm2 -[(You can force a file to be included even if there is no )2(%include)0( directive that explicitly includes it, by using)]338.4 norm1 -[(the )2(-p)0( option on the NASM command line \(see ){/section-2.1.17 xl}(section 2.1.17){el}(\).)]327.4 norm2 -[{/section-4.6.2 xa}2(%pathsearch)0(: Search the Include Path)](4.6.2)308.2 subh3 -[(The )2(%pathsearch)0( directive takes a single-line macro name and a filename, and declare or redefines the)]291.2 norm1 -[(specified single-line macro to be the include-path-resolved version of the filename, if the file exists)]280.2 norm0 -[(\(otherwise, it is passed unchanged.\))]269.2 norm2 -[(For example,)]252.2 norm3 -[2(%pathsearch MyFoo "foo.bin")]235.2 code3 -[(... with )2(-Ibins/)0( in the include path may end up defining the macro )2(MyFoo)0( to be )2("bins/foo.bin")0(.)]218.2 norm3 -[{/section-4.6.3 xa}2(%depend)0(: Add Dependent Files)](4.6.3)199 subh3 -[(The )2(%depend)0( directive takes a filename and adds it to the list of files to be emitted as dependency generation)]182 norm1 -[(when the )2(-M)0( options and its relatives \(see ){/section-2.1.4 xl}(section 2.1.4){el}(\) are used. It produces no output.)]171 norm2 -[(This is generally used in conjunction with )2(%pathsearch)0(. For example, a simplified version of the standard)]154 norm1 -[(macro wrapper for the )2(INCBIN)0( directive looks like:)]143 norm2 -[2(%imacro incbin 1-2+ 0 )]126 code1 -[2(%pathsearch dep %1 )]115 code0 -[2(%depend dep )]104 code0 -(53)pageodd -restore showpage -%%Page: 54 54 -%%BeginPageSetup -save -%%EndPageSetup -/54 pa -[2( incbin dep,%2 )]681 code0 -[2(%endmacro)]670 code2 -[(This first resolves the location of the file into the macro )2(dep)0(, then adds it to the dependency lists, and finally)]653 norm1 -[(issues the assembler-level )2(INCBIN)0( directive.)]642 norm2 -[{/section-4.6.4 xa}2(%use)0(: Include Standard Macro Package)](4.6.4)622.8 subh3 -[(The )2(%use)0( directive is similar to )2(%include)0(, but rather than including the contents of a file, it includes a)]605.8 norm1 -[(named standard macro package. The standard macro packages are part of NASM, and are described in ){/chapter-5 xl}(chapter){el}]594.8 norm0 -[{/chapter-5 xl}(5){el}(.)]583.8 norm2 -[(Unlike the )2(%include)0( directive, package names for the )2(%use)0( directive do not require quotes, but quotes are)]566.8 norm1 -[(permitted. In NASM 2.04 and 2.05 the unquoted form would be macro-expanded; this is no longer true. Thus,)]555.8 norm0 -[(the following lines are equivalent:)]544.8 norm2 -[2(%use altreg )]527.8 code1 -[2(%use 'altreg')]516.8 code2 -[(Standard macro packages are protected from multiple inclusion. When a standard macro package is used, a)]499.8 norm1 -[(testable single-line macro of the form )2(__USE_)1(package)2(__)0( is also defined, see ){/section-4.11.8 xl}(section 4.11.8){el}(.)]488.8 norm2 -[{/section-4.7 xa}(The )(Context Stack)](4.7)467.4 head3 -[(Having labels that are local to a macro definition is sometimes not quite powerful enough: sometimes you)]450.4 norm1 -[(want to be able to share labels between several macro calls. An example might be a )2(REPEAT)0( ... )2(UNTIL)0( loop,)]439.4 norm0 -[(in which the expansion of the )2(REPEAT)0( macro would need to be able to refer to a label which the )2(UNTIL)]428.4 norm0 -[(macro had defined. However, for such a macro you would also want to be able to nest these loops.)]417.4 norm2 -[(NASM provides this level of power by means of a )1(context stack)0(. The preprocessor maintains a stack of)]400.4 norm1 -[1(contexts)0(, each of which is characterized by a name. You add a new context to the stack using the )2(%push)]389.4 norm0 -[(directive, and remove one using )2(%pop)0(. You can define labels that are local to a particular context on the stack.)]378.4 norm2 -[{/section-4.7.1 xa}2(%push)0( and )2(%pop)0(: )(Creating and Removing Contexts)](4.7.1)359.2 subh3 -[(The )2(%push)0( directive is used to create a new context and place it on the top of the context stack. )2(%push)0( takes)]342.2 norm1 -[(an optional argument, which is the name of the context. For example:)]331.2 norm2 -[2(%push foobar)]314.2 code3 -[(This pushes a new context called )2(foobar)0( on the stack. You can have several contexts on the stack with the)]297.2 norm1 -[(same name: they can still be distinguished. If no name is given, the context is unnamed \(this is normally used)]286.2 norm0 -[(when both the )2(%push)0( and the )2(%pop)0( are inside a single macro definition.\))]275.2 norm2 -[(The directive )2(%pop)0(, taking one optional argument, removes the top context from the context stack and)]258.2 norm1 -[(destroys it, along with any labels associated with it. If an argument is given, it must match the name of the)]247.2 norm0 -[(current context, otherwise it will issue an error.)]236.2 norm2 -[{/section-4.7.2 xa}(Context-Local Labels)](4.7.2)217 subh3 -[(Just as the usage )2(%%foo)0( defines a label which is local to the particular macro call in which it is used, the)]200 norm1 -[(usage )2(%$foo)0( is used to define a label which is local to the context on the top of the context stack. So the)]189 norm0 -[2(REPEAT)0( and )2(UNTIL)0( example given above could be implemented by means of:)]178 norm2 -[2(%macro repeat 0 )]161 code1 -[2()]150 code0 -[2( %push repeat )]139 code0 -[2( %$begin: )]128 code0 -[2()]117 code0 -[2(%endmacro )]106 code0 -(54)pageeven -restore showpage -%%Page: 55 55 -%%BeginPageSetup -save -%%EndPageSetup -/55 pa -[2()]681 code0 -[2(%macro until 1 )]670 code0 -[2()]659 code0 -[2( j%-1 %$begin )]648 code0 -[2( %pop )]637 code0 -[2()]626 code0 -[2(%endmacro)]615 code2 -[(and invoked by means of, for example,)]598 norm3 -[2( mov cx,string )]581 code1 -[2( repeat )]570 code0 -[2( add cx,3 )]559 code0 -[2( scasb )]548 code0 -[2( until e)]537 code2 -[(which would scan every fourth byte of a string in search of the byte in )2(AL)0(.)]520 norm3 -[(If you need to define, or access, labels local to the context )1(below)0( the top one on the stack, you can use)]503 norm1 -[2(%$$foo)0(, or )2(%$$$foo)0( for the context below that, and so on.)]492 norm2 -[{/section-4.7.3 xa}(Context-Local Single-Line Macros)](4.7.3)472.8 subh3 -[(NASM also allows you to define single-line macros which are local to a particular context, in just the same)]455.8 norm1 -[(way:)]444.8 norm2 -[2(%define %$localmac 3)]427.8 code3 -[(will define the single-line macro )2(%$localmac)0( to be local to the top context on the stack. Of course, after a)]410.8 norm1 -[(subsequent )2(%push)0(, it can then still be accessed by the name )2(%$$localmac)0(.)]399.8 norm2 -[{/section-4.7.4 xa}2(%repl)0(: )(Renaming a Context)](4.7.4)380.6 subh3 -[(If you need to change the name of the top context on the stack \(in order, for example, to have it respond)]363.6 norm1 -[(differently to )2(%ifctx)0(\), you can execute a )2(%pop)0( followed by a )2(%push)0(; but this will have the side effect of)]352.6 norm0 -[(destroying all context-local labels and macros associated with the context that was just popped.)]341.6 norm2 -[(NASM provides the directive )2(%repl)0(, which )1(replaces)0( a context with a different name, without touching the)]324.6 norm1 -[(associated macros and labels. So you could replace the destructive code)]313.6 norm2 -[2(%pop )]296.6 code1 -[2(%push newname)]285.6 code2 -[(with the non-destructive version )2(%repl newname)0(.)]268.6 norm3 -[{/section-4.7.5 xa}(Example Use of the )(Context Stack: )(Block IFs)](4.7.5)249.4 subh3 -[(This example makes use of almost all the context-stack features, including the conditional-assembly)]232.4 norm1 -[(construct )2(%ifctx)0(, to implement a block IF statement as a set of macros.)]221.4 norm2 -[2(%macro if 1 )]204.4 code1 -[2()]193.4 code0 -[2( %push if )]182.4 code0 -[2( j%-1 %$ifnot )]171.4 code0 -[2()]160.4 code0 -[2(%endmacro )]149.4 code0 -[2()]138.4 code0 -[2(%macro else 0 )]127.4 code0 -[2()]116.4 code0 -[2( %ifctx if )]105.4 code0 -(55)pageodd -restore showpage -%%Page: 56 56 -%%BeginPageSetup -save -%%EndPageSetup -/56 pa -[2( %repl else )]681 code0 -[2( jmp %$ifend )]670 code0 -[2( %$ifnot: )]659 code0 -[2( %else )]648 code0 -[2( %error "expected `if' before `else'" )]637 code0 -[2( %endif )]626 code0 -[2()]615 code0 -[2(%endmacro )]604 code0 -[2()]593 code0 -[2(%macro endif 0 )]582 code0 -[2()]571 code0 -[2( %ifctx if )]560 code0 -[2( %$ifnot: )]549 code0 -[2( %pop )]538 code0 -[2( %elifctx else )]527 code0 -[2( %$ifend: )]516 code0 -[2( %pop )]505 code0 -[2( %else )]494 code0 -[2( %error "expected `if' or `else' before `endif'" )]483 code0 -[2( %endif )]472 code0 -[2()]461 code0 -[2(%endmacro)]450 code2 -[(This code is more robust than the )2(REPEAT)0( and )2(UNTIL)0( macros given in ){/section-4.7.2 xl}(section 4.7.2){el}(, because it uses)]433 norm1 -[(conditional assembly to check that the macros are issued in the right order \(for example, not calling )2(endif)]422 norm0 -[(before )2(if)0(\) and issues a )2(%error)0( if they're not.)]411 norm2 -[(In addition, the )2(endif)0( macro has to be able to cope with the two distinct cases of either directly following an)]394 norm1 -[2(if)0(, or following an )2(else)0(. It achieves this, again, by using conditional assembly to do different things)]383 norm0 -[(depending on whether the context on top of the stack is )2(if)0( or )2(else)0(.)]372 norm2 -[(The )2(else)0( macro has to preserve the context on the stack, in order to have the )2(%$ifnot)0( referred to by the )2(if)]355 norm1 -[(macro be the same as the one defined by the )2(endif)0( macro, but has to change the context's name so that)]344 norm0 -[2(endif)0( will know there was an intervening )2(else)0(. It does this by the use of )2(%repl)0(.)]333 norm2 -[(A sample usage of these macros might look like:)]316 norm3 -[2( cmp ax,bx )]299 code1 -[2()]288 code0 -[2( if ae )]277 code0 -[2( cmp bx,cx )]266 code0 -[2()]255 code0 -[2( if ae )]244 code0 -[2( mov ax,cx )]233 code0 -[2( else )]222 code0 -[2( mov ax,bx )]211 code0 -[2( endif )]200 code0 -[2()]189 code0 -[2( else )]178 code0 -[2( cmp ax,cx )]167 code0 -[2()]156 code0 -[2( if ae )]145 code0 -[2( mov ax,cx )]134 code0 -[2( endif )]123 code0 -[2()]112 code0 -[2( endif)]101 code2 -(56)pageeven -restore showpage -%%Page: 57 57 -%%BeginPageSetup -save -%%EndPageSetup -/57 pa -[(The block-)2(IF)0( macros handle nesting quite happily, by means of pushing another context, describing the inner)]681 norm1 -[2(if)0(, on top of the one describing the outer )2(if)0(; thus )2(else)0( and )2(endif)0( always refer to the last unmatched )2(if)]670 norm0 -[(or )2(else)0(.)]659 norm2 -[{/section-4.8 xa}(Stack Relative Preprocessor Directives)](4.8)637.6 head3 -[(The following preprocessor directives provide a way to use labels to refer to local variables allocated on the)]620.6 norm1 -[(stack.)]609.6 norm2 -[2(%arg)0( \(see ){/section-4.8.1 xl}(section 4.8.1){el}(\))]592.6 bull3 -[2(%stacksize)0( \(see ){/section-4.8.2 xl}(section 4.8.2){el}(\))]575.6 bull3 -[2(%local)0( \(see ){/section-4.8.3 xl}(section 4.8.3){el}(\))]558.6 bull3 -[{/section-4.8.1 xa}2(%arg)0( Directive)](4.8.1)539.4 subh3 -[(The )2(%arg)0( directive is used to simplify the handling of parameters passed on the stack. Stack based parameter)]522.4 norm1 -[(passing is used by many high level languages, including C, C++ and Pascal.)]511.4 norm2 -[(While NASM has macros which attempt to duplicate this functionality \(see ){/section-8.4.5 xl}(section 8.4.5){el}(\), the syntax is not)]494.4 norm1 -[(particularly convenient to use. and is not TASM compatible. Here is an example which shows the use of)]483.4 norm0 -[2(%arg)0( without any external macros:)]472.4 norm2 -[2(some_function: )]455.4 code1 -[2()]444.4 code0 -[2( %push mycontext ; save the current context )]433.4 code0 -[2( %stacksize large ; tell NASM to use bp )]422.4 code0 -[2( %arg i:word, j_ptr:word )]411.4 code0 -[2()]400.4 code0 -[2( mov ax,[i] )]389.4 code0 -[2( mov bx,[j_ptr] )]378.4 code0 -[2( add ax,[bx] )]367.4 code0 -[2( ret )]356.4 code0 -[2()]345.4 code0 -[2( %pop ; restore original context)]334.4 code2 -[(This is similar to the procedure defined in ){/section-8.4.5 xl}(section 8.4.5){el}( and adds the value in i to the value pointed to by j_ptr)]317.4 norm1 -[(and returns the sum in the ax register. See ){/section-4.7.1 xl}(section 4.7.1){el}( for an explanation of )2(push)0( and )2(pop)0( and the use of)]306.4 norm0 -[(context stacks.)]295.4 norm2 -[{/section-4.8.2 xa}2(%stacksize)0( Directive)](4.8.2)276.2 subh3 -[(The )2(%stacksize)0( directive is used in conjunction with the )2(%arg)0( \(see ){/section-4.8.1 xl}(section 4.8.1){el}(\) and the )2(%local)0( \(see)]259.2 norm1 -[{/section-4.8.3 xl}(section 4.8.3){el}(\) directives. It tells NASM the default size to use for subsequent )2(%arg)0( and )2(%local)0( directives.)]248.2 norm0 -[(The )2(%stacksize)0( directive takes one required argument which is one of )2(flat)0(, )2(flat64)0(, )2(large)0( or )2(small)0(.)]237.2 norm2 -[2(%stacksize flat)]220.2 code3 -[(This form causes NASM to use stack-based parameter addressing relative to )2(ebp)0( and it assumes that a near)]203.2 norm1 -[(form of call was used to get to this label \(i.e. that )2(eip)0( is on the stack\).)]192.2 norm2 -[2(%stacksize flat64)]175.2 code3 -[(This form causes NASM to use stack-based parameter addressing relative to )2(rbp)0( and it assumes that a near)]158.2 norm1 -[(form of call was used to get to this label \(i.e. that )2(rip)0( is on the stack\).)]147.2 norm2 -[2(%stacksize large)]130.2 code3 -[(This form uses )2(bp)0( to do stack-based parameter addressing and assumes that a far form of call was used to get)]113.2 norm1 -[(to this address \(i.e. that )2(ip)0( and )2(cs)0( are on the stack\).)]102.2 norm2 -(57)pageodd -restore showpage -%%Page: 58 58 -%%BeginPageSetup -save -%%EndPageSetup -/58 pa -[2(%stacksize small)]681 code3 -[(This form also uses )2(bp)0( to address stack parameters, but it is different from )2(large)0( because it also assumes)]664 norm1 -[(that the old value of bp is pushed onto the stack \(i.e. it expects an )2(ENTER)0( instruction\). In other words, it)]653 norm0 -[(expects that )2(bp)0(, )2(ip)0( and )2(cs)0( are on the top of the stack, underneath any local space which may have been)]642 norm0 -[(allocated by )2(ENTER)0(. This form is probably most useful when used in combination with the )2(%local)0( directive)]631 norm0 -[(\(see ){/section-4.8.3 xl}(section 4.8.3){el}(\).)]620 norm2 -[{/section-4.8.3 xa}2(%local)0( Directive)](4.8.3)600.8 subh3 -[(The )2(%local)0( directive is used to simplify the use of local temporary stack variables allocated in a stack)]583.8 norm1 -[(frame. Automatic local variables in C are an example of this kind of variable. The )2(%local)0( directive is most)]572.8 norm0 -[(useful when used with the )2(%stacksize)0( \(see ){/section-4.8.2 xl}(section 4.8.2){el}( and is also compatible with the )2(%arg)0( directive)]561.8 norm0 -[(\(see ){/section-4.8.1 xl}(section 4.8.1){el}(\). It allows simplified reference to variables on the stack which have been allocated typically)]550.8 norm0 -[(by using the )2(ENTER)0( instruction. An example of its use is the following:)]539.8 norm2 -[2(silly_swap: )]522.8 code1 -[2()]511.8 code0 -[2( %push mycontext ; save the current context )]500.8 code0 -[2( %stacksize small ; tell NASM to use bp )]489.8 code0 -[2( %assign %$localsize 0 ; see text for explanation )]478.8 code0 -[2( %local old_ax:word, old_dx:word )]467.8 code0 -[2()]456.8 code0 -[2( enter %$localsize,0 ; see text for explanation )]445.8 code0 -[2( mov [old_ax],ax ; swap ax & bx )]434.8 code0 -[2( mov [old_dx],dx ; and swap dx & cx )]423.8 code0 -[2( mov ax,bx )]412.8 code0 -[2( mov dx,cx )]401.8 code0 -[2( mov bx,[old_ax] )]390.8 code0 -[2( mov cx,[old_dx] )]379.8 code0 -[2( leave ; restore old bp )]368.8 code0 -[2( ret ; )]357.8 code0 -[2()]346.8 code0 -[2( %pop ; restore original context)]335.8 code2 -[(The )2(%$localsize)0( variable is used internally by the )2(%local)0( directive and )1(must)0( be defined within the)]318.8 norm1 -[(current context before the )2(%local)0( directive may be used. Failure to do so will result in one expression)]307.8 norm0 -[(syntax error for each )2(%local)0( variable declared. It then may be used in the construction of an appropriately)]296.8 norm0 -[(sized ENTER instruction as shown in the example.)]285.8 norm2 -[{/section-4.9 xa}(Reporting )(User-Defined Errors: )2(%error)0(, )2(%warning)0(, )2(%fatal)](4.9)264.4 head3 -[(The preprocessor directive )2(%error)0( will cause NASM to report an error if it occurs in assembled code. So if)]247.4 norm1 -[(other users are going to try to assemble your source files, you can ensure that they define the right macros by)]236.4 norm0 -[(means of code like this:)]225.4 norm2 -[2(%ifdef F1 )]208.4 code1 -[2( ; do some setup )]197.4 code0 -[2(%elifdef F2 )]186.4 code0 -[2( ; do some different setup )]175.4 code0 -[2(%else )]164.4 code0 -[2( %error "Neither F1 nor F2 was defined." )]153.4 code0 -[2(%endif)]142.4 code2 -[(Then any user who fails to understand the way your code is supposed to be assembled will be quickly warned)]125.4 norm1 -[(of their mistake, rather than having to wait until the program crashes on being run and then not knowing what)]114.4 norm0 -[(went wrong.)]103.4 norm2 -(58)pageeven -restore showpage -%%Page: 59 59 -%%BeginPageSetup -save -%%EndPageSetup -/59 pa -[(Similarly, )2(%warning)0( issues a warning, but allows assembly to continue:)]681 norm3 -[2(%ifdef F1 )]664 code1 -[2( ; do some setup )]653 code0 -[2(%elifdef F2 )]642 code0 -[2( ; do some different setup )]631 code0 -[2(%else )]620 code0 -[2( %warning "Neither F1 nor F2 was defined, assuming F1." )]609 code0 -[2( %define F1 )]598 code0 -[2(%endif)]587 code2 -[2(%error)0( and )2(%warning)0( are issued only on the final assembly pass. This makes them safe to use in)]570 norm1 -[(conjunction with tests that depend on symbol values.)]559 norm2 -[2(%fatal)0( terminates assembly immediately, regardless of pass. This is useful when there is no point in)]542 norm1 -[(continuing the assembly further, and doing so is likely just going to cause a spew of confusing error messages.)]531 norm2 -[(It is optional for the message string after )2(%error)0(, )2(%warning)0( or )2(%fatal)0( to be quoted. If it is )1(not)0(, then)]514 norm1 -[(single-line macros are expanded in it, which can be used to display more information to the user. For)]503 norm0 -[(example:)]492 norm2 -[2(%if foo > 64 )]475 code1 -[2( %assign foo_over foo-64 )]464 code0 -[2( %error foo is foo_over bytes too large )]453 code0 -[2(%endif)]442 code2 -[{/section-4.10 xa}(Other Preprocessor Directives)](4.10)420.6 head3 -[(NASM also has preprocessor directives which allow access to information from external sources. Currently)]403.6 norm1 -[(they include:)]392.6 norm2 -[2(%line)0( enables NASM to correctly handle the output of another preprocessor \(see ){/section-4.10.1 xl}(section 4.10.1){el}(\).)]375.6 bull3 -[2(%!)0( enables NASM to read in the value of an environment variable, which can then be used in your)]358.6 bull1 -[(program \(see ){/section-4.10.2 xl}(section 4.10.2){el}(\).)]347.6 bull2 -[{/section-4.10.1 xa}2(%line)0( Directive)](4.10.1)328.4 subh3 -[(The )2(%line)0( directive is used to notify NASM that the input line corresponds to a specific line number in)]311.4 norm1 -[(another file. Typically this other file would be an original source file, with the current NASM input being the)]300.4 norm0 -[(output of a pre-processor. The )2(%line)0( directive allows NASM to output messages which indicate the line)]289.4 norm0 -[(number of the original source file, instead of the file that is being read by NASM.)]278.4 norm2 -[(This preprocessor directive is not generally of use to programmers, by may be of interest to preprocessor)]261.4 norm1 -[(authors. The usage of the )2(%line)0( preprocessor directive is as follows:)]250.4 norm2 -[2(%line nnn[+mmm] [filename])]233.4 code3 -[(In this directive, )2(nnn)0( identifies the line of the original source file which this line corresponds to. )2(mmm)0( is an)]216.4 norm1 -[(optional parameter which specifies a line increment value; each line of the input file read in is considered to)]205.4 norm0 -[(correspond to )2(mmm)0( lines of the original source file. Finally, )2(filename)0( is an optional parameter which)]194.4 norm0 -[(specifies the file name of the original source file.)]183.4 norm2 -[(After reading a )2(%line)0( preprocessor directive, NASM will report all file name and line numbers relative to)]166.4 norm1 -[(the values specified therein.)]155.4 norm2 -(59)pageodd -restore showpage -%%Page: 60 60 -%%BeginPageSetup -save -%%EndPageSetup -/60 pa -[{/section-4.10.2 xa}2(%!<env>)0(: Read an environment variable.)](4.10.2)678.8 subh3 -[(The )2(%!<env>)0( directive makes it possible to read the value of an environment variable at assembly time. This)]661.8 norm1 -[(could, for example, be used to store the contents of an environment variable into a string, which could be used)]650.8 norm0 -[(at some other point in your code.)]639.8 norm2 -[(For example, suppose that you have an environment variable )2(FOO)0(, and you want the contents of )2(FOO)0( to be)]622.8 norm1 -[(embedded in your program. You could do that as follows:)]611.8 norm2 -[2(%defstr FOO %!FOO)]594.8 code3 -[(See ){/section-4.1.8 xl}(section 4.1.8){el}( for notes on the )2(%defstr)0( directive.)]577.8 norm3 -[{/section-4.11 xa}(Standard Macros)](4.11)556.4 head3 -[(NASM defines a set of standard macros, which are already defined when it starts to process any source file. If)]539.4 norm1 -[(you really need a program to be assembled with no pre-defined macros, you can use the )2(%clear)0( directive to)]528.4 norm0 -[(empty the preprocessor of everything but context-local preprocessor variables and single-line macros.)]517.4 norm2 -[(Most )(user-level assembler directives \(see ){/chapter-6 xl}(chapter 6){el}(\) are implemented as macros which invoke primitive)]500.4 norm1 -[(directives; these are described in ){/chapter-6 xl}(chapter 6){el}(. The rest of the standard macro set is described here.)]489.4 norm2 -[{/section-4.11.1 xa}(NASM Version Macros)](4.11.1)470.2 subh3 -[(The single-line macros )2(__NASM_MAJOR__)0(, )2(__NASM_MINOR__)0(, )2(__NASM_SUBMINOR__)0( and)]453.2 norm1 -[2(___NASM_PATCHLEVEL__)0( expand to the major, minor, subminor and patch level parts of the )(version)]442.2 norm0 -[(number of NASM being used. So, under NASM 0.98.32p1 for example, )2(__NASM_MAJOR__)0( would be)]431.2 norm0 -[(defined to be 0, )2(__NASM_MINOR__)0( would be defined as 98, )2(__NASM_SUBMINOR__)0( would be defined to)]420.2 norm0 -[(32, and )2(___NASM_PATCHLEVEL__)0( would be defined as 1.)]409.2 norm2 -[(Additionally, the macro )2(__NASM_SNAPSHOT__)0( is defined for automatically generated snapshot releases)]392.2 norm1 -[1(only)0(.)]381.2 norm2 -[{/section-4.11.2 xa}2(__NASM_VERSION_ID__)0(: )(NASM Version ID)](4.11.2)362 subh3 -[(The single-line macro )2(__NASM_VERSION_ID__)0( expands to a dword integer representing the full version)]345 norm1 -[(number of the version of nasm being used. The value is the equivalent to )2(__NASM_MAJOR__)0(,)]334 norm0 -[2(__NASM_MINOR__)0(, )2(__NASM_SUBMINOR__)0( and )2(___NASM_PATCHLEVEL__)0( concatenated to produce a)]323 norm0 -[(single doubleword. Hence, for 0.98.32p1, the returned number would be equivalent to:)]312 norm2 -[2( dd 0x00622001)]295 code3 -[(or)]278 norm3 -[2( db 1,32,98,0)]261 code3 -[(Note that the above lines are generate exactly the same code, the second line is used just to give an indication)]244 norm1 -[(of the order that the separate values will be present in memory.)]233 norm2 -[{/section-4.11.3 xa}2(__NASM_VER__)0(: )(NASM Version string)](4.11.3)213.8 subh3 -[(The single-line macro )2(__NASM_VER__)0( expands to a string which defines the version number of nasm being)]196.8 norm1 -[(used. So, under NASM 0.98.32 for example,)]185.8 norm2 -[2( db __NASM_VER__)]168.8 code3 -[(would expand to)]151.8 norm3 -[2( db "0.98.32")]134.8 code3 -(60)pageeven -restore showpage -%%Page: 61 61 -%%BeginPageSetup -save -%%EndPageSetup -/61 pa -[{/section-4.11.4 xa}2(__FILE__)0( and )2(__LINE__)0(: File Name and Line Number)](4.11.4)678.8 subh3 -[(Like the C preprocessor, NASM allows the user to find out the file name and line number containing the)]661.8 norm1 -[(current instruction. The macro )2(__FILE__)0( expands to a string constant giving the name of the current input)]650.8 norm0 -[(file \(which may change through the course of assembly if )2(%include)0( directives are used\), and )2(__LINE__)]639.8 norm0 -[(expands to a numeric constant giving the current line number in the input file.)]628.8 norm2 -[(These macros could be used, for example, to communicate debugging information to a macro, since invoking)]611.8 norm1 -[2(__LINE__)0( inside a macro definition \(either single-line or multi-line\) will return the line number of the)]600.8 norm0 -[(macro )1(call)0(, rather than )1(definition)0(. So to determine where in a piece of code a crash is occurring, for example,)]589.8 norm0 -[(one could write a routine )2(stillhere)0(, which is passed a line number in )2(EAX)0( and outputs something like)]578.8 norm0 -[(`line 155: still here'. You could then write a macro)]567.8 norm2 -[2(%macro notdeadyet 0 )]550.8 code1 -[2()]539.8 code0 -[2( push eax )]528.8 code0 -[2( mov eax,__LINE__ )]517.8 code0 -[2( call stillhere )]506.8 code0 -[2( pop eax )]495.8 code0 -[2()]484.8 code0 -[2(%endmacro)]473.8 code2 -[(and then pepper your code with calls to )2(notdeadyet)0( until you find the crash point.)]456.8 norm3 -[{/section-4.11.5 xa}2(__BITS__)0(: Current BITS Mode)](4.11.5)437.6 subh3 -[(The )2(__BITS__)0( standard macro is updated every time that the BITS mode is set using the )2(BITS XX)0( or)]420.6 norm1 -[2([BITS XX])0( directive, where XX is a valid mode number of 16, 32 or 64. )2(__BITS__)0( receives the specified)]409.6 norm0 -[(mode number and makes it globally available. This can be very useful for those who utilize mode-dependent)]398.6 norm0 -[(macros.)]387.6 norm2 -[{/section-4.11.6 xa}2(__OUTPUT_FORMAT__)0(: Current Output Format)](4.11.6)368.4 subh3 -[(The )2(__OUTPUT_FORMAT__)0( standard macro holds the current Output Format, as given by the )2(-f)0( option or)]351.4 norm1 -[(NASM's default. Type )2(nasm -hf)0( for a list.)]340.4 norm2 -[2(%ifidn __OUTPUT_FORMAT__, win32 )]323.4 code1 -[2( %define NEWLINE 13, 10 )]312.4 code0 -[2(%elifidn __OUTPUT_FORMAT__, elf32 )]301.4 code0 -[2( %define NEWLINE 10 )]290.4 code0 -[2(%endif)]279.4 code2 -[{/section-4.11.7 xa}(Assembly Date and Time Macros)](4.11.7)260.2 subh3 -[(NASM provides a variety of macros that represent the timestamp of the assembly session.)]243.2 norm3 -[(The )2(__DATE__)0( and )2(__TIME__)0( macros give the assembly date and time as strings, in ISO 8601 format)]226.2 bull1 -[(\()2("YYYY-MM-DD")0( and )2("HH:MM:SS")0(, respectively.\))]215.2 bull2 -[(The )2(__DATE_NUM__)0( and )2(__TIME_NUM__)0( macros give the assembly date and time in numeric form; in)]198.2 bull1 -[(the format )2(YYYYMMDD)0( and )2(HHMMSS)0( respectively.)]187.2 bull2 -[(The )2(__UTC_DATE__)0( and )2(__UTC_TIME__)0( macros give the assembly date and time in universal time)]170.2 bull1 -[(\(UTC\) as strings, in ISO 8601 format \()2("YYYY-MM-DD")0( and )2("HH:MM:SS")0(, respectively.\) If the host)]159.2 bull0 -[(platform doesn't provide UTC time, these macros are undefined.)]148.2 bull2 -[(The )2(__UTC_DATE_NUM__)0( and )2(__UTC_TIME_NUM__)0( macros give the assembly date and time)]131.2 bull1 -[(universal time \(UTC\) in numeric form; in the format )2(YYYYMMDD)0( and )2(HHMMSS)0( respectively. If the host)]120.2 bull0 -[(platform doesn't provide UTC time, these macros are undefined.)]109.2 bull2 -(61)pageodd -restore showpage -%%Page: 62 62 -%%BeginPageSetup -save -%%EndPageSetup -/62 pa -[(The )2(__POSIX_TIME__)0( macro is defined as a number containing the number of seconds since the POSIX)]681 bull1 -[(epoch, 1 January 1970 00:00:00 UTC; excluding any leap seconds. This is computed using UTC time if)]670 bull0 -[(available on the host platform, otherwise it is computed using the local time as if it was UTC.)]659 bull2 -[(All instances of time and date macros in the same assembly session produce consistent output. For example,)]642 norm1 -[(in an assembly session started at 42 seconds after midnight on January 1, 2010 in Moscow \(timezone UTC+3\))]631 norm0 -[(these macros would have the following values, assuming, of course, a properly configured environment with a)]620 norm0 -[(correct clock:)]609 norm2 -[2( __DATE__ "2010-01-01" )]592 code1 -[2( __TIME__ "00:00:42" )]581 code0 -[2( __DATE_NUM__ 20100101 )]570 code0 -[2( __TIME_NUM__ 000042 )]559 code0 -[2( __UTC_DATE__ "2009-12-31" )]548 code0 -[2( __UTC_TIME__ "21:00:42" )]537 code0 -[2( __UTC_DATE_NUM__ 20091231 )]526 code0 -[2( __UTC_TIME_NUM__ 210042 )]515 code0 -[2( __POSIX_TIME__ 1262293242)]504 code2 -[{/section-4.11.8 xa}2(__USE_)1(package)2(__)0(: Package Include Test)](4.11.8)484.8 subh3 -[(When a standard macro package \(see ){/chapter-5 xl}(chapter 5){el}(\) is included with the )2(%use)0( directive \(see ){/section-4.6.4 xl}(section 4.6.4){el}(\), a)]467.8 norm1 -[(single-line macro of the form )2(__USE_)1(package)2(__)0( is automatically defined. This allows testing if a particular)]456.8 norm0 -[(package is invoked or not.)]445.8 norm2 -[(For example, if the )2(altreg)0( package is included \(see ){/section-5.1 xl}(section 5.1){el}(\), then the macro )2(__USE_ALTREG__)0( is)]428.8 norm1 -[(defined.)]417.8 norm2 -[{/section-4.11.9 xa}2(__PASS__)0(: Assembly Pass)](4.11.9)398.6 subh3 -[(The macro )2(__PASS__)0( is defined to be )2(1)0( on preparatory passes, and )2(2)0( on the final pass. In preprocess-only)]381.6 norm1 -[(mode, it is set to )2(3)0(, and when running only to generate dependencies \(due to the )2(-M)0( or )2(-MG)0( option, see)]370.6 norm0 -[{/section-2.1.4 xl}(section 2.1.4){el}(\) it is set to )2(0)0(.)]359.6 norm2 -[1(Avoid using this macro if at all possible. It is tremendously easy to generate very strange errors by misusing)]342.6 norm1 -[1(it, and the semantics may change in future versions of NASM.)]331.6 norm2 -[{/section-4.11.10 xa}2(STRUC)0( and )2(ENDSTRUC)0(: )(Declaring Structure Data Types)](4.11.10)312.4 subh3 -[(The core of NASM contains no intrinsic means of defining data structures; instead, the preprocessor is)]295.4 norm1 -[(sufficiently powerful that data structures can be implemented as a set of macros. The macros )2(STRUC)0( and)]284.4 norm0 -[2(ENDSTRUC)0( are used to define a structure data type.)]273.4 norm2 -[2(STRUC)0( takes one or two parameters. The first parameter is the name of the data type. The second, optional)]256.4 norm1 -[(parameter is the base offset of the structure. The name of the data type is defined as a symbol with the value)]245.4 norm0 -[(of the base offset, and the name of the data type with the suffix )2(_size)0( appended to it is defined as an )2(EQU)]234.4 norm0 -[(giving the size of the structure. Once )2(STRUC)0( has been issued, you are defining the structure, and should)]223.4 norm0 -[(define fields using the )2(RESB)0( family of pseudo-instructions, and then invoke )2(ENDSTRUC)0( to finish the)]212.4 norm0 -[(definition.)]201.4 norm2 -[(For example, to define a structure called )2(mytype)0( containing a longword, a word, a byte and a string of bytes,)]184.4 norm1 -[(you might code)]173.4 norm2 -[2(struc mytype )]156.4 code1 -[2()]145.4 code0 -[2( mt_long: resd 1 )]134.4 code0 -[2( mt_word: resw 1 )]123.4 code0 -[2( mt_byte: resb 1 )]112.4 code0 -[2( mt_str: resb 32 )]101.4 code0 -(62)pageeven -restore showpage -%%Page: 63 63 -%%BeginPageSetup -save -%%EndPageSetup -/63 pa -[2()]681 code0 -[2(endstruc)]670 code2 -[(The above code defines six symbols: )2(mt_long)0( as 0 \(the offset from the beginning of a )2(mytype)0( structure to)]653 norm1 -[(the longword field\), )2(mt_word)0( as 4, )2(mt_byte)0( as 6, )2(mt_str)0( as 7, )2(mytype_size)0( as 39, and )2(mytype)0( itself)]642 norm0 -[(as zero.)]631 norm2 -[(The reason why the structure type name is defined at zero by default is a side effect of allowing structures to)]614 norm1 -[(work with the local label mechanism: if your structure members tend to have the same names in more than)]603 norm0 -[(one structure, you can define the above structure like this:)]592 norm2 -[2(struc mytype )]575 code1 -[2()]564 code0 -[2( .long: resd 1 )]553 code0 -[2( .word: resw 1 )]542 code0 -[2( .byte: resb 1 )]531 code0 -[2( .str: resb 32 )]520 code0 -[2()]509 code0 -[2(endstruc)]498 code2 -[(This defines the offsets to the structure fields as )2(mytype.long)0(, )2(mytype.word)0(, )2(mytype.byte)0( and)]481 norm1 -[2(mytype.str)0(.)]470 norm2 -[(NASM, since it has no )1(intrinsic)0( structure support, does not support any form of period notation to refer to the)]453 norm1 -[(elements of a structure once you have one \(except the above local-label notation\), so code such as)]442 norm0 -[2(mov ax,[mystruc.mt_word])0( is not valid. )2(mt_word)0( is a constant just like any other constant, so the)]431 norm0 -[(correct syntax is )2(mov ax,[mystruc+mt_word])0( or )2(mov ax,[mystruc+mytype.word])0(.)]420 norm2 -[(Sometimes you only have the address of the structure displaced by an offset. For example, consider this)]403 norm1 -[(standard stack frame setup:)]392 norm2 -[2(push ebp )]375 code1 -[2(mov ebp, esp )]364 code0 -[2(sub esp, 40)]353 code2 -[(In this case, you could access an element by subtracting the offset:)]336 norm3 -[2(mov [ebp - 40 + mytype.word], ax)]319 code3 -[(However, if you do not want to repeat this offset, you can use \22640 as a base offset:)]302 norm3 -[2(struc mytype, -40)]285 code3 -[(And access an element this way:)]268 norm3 -[2(mov [ebp + mytype.word], ax)]251 code3 -[{/section-4.11.11 xa}2(ISTRUC)0(, )2(AT)0( and )2(IEND)0(: Declaring )(Instances of Structures)](4.11.11)231.8 subh3 -[(Having defined a structure type, the next thing you typically want to do is to declare instances of that structure)]214.8 norm1 -[(in your data segment. NASM provides an easy way to do this in the )2(ISTRUC)0( mechanism. To declare a)]203.8 norm0 -[(structure of type )2(mytype)0( in a program, you code something like this:)]192.8 norm2 -[2(mystruc: )]175.8 code1 -[2( istruc mytype )]164.8 code0 -[2()]153.8 code0 -[2( at mt_long, dd 123456 )]142.8 code0 -[2( at mt_word, dw 1024 )]131.8 code0 -[2( at mt_byte, db 'x' )]120.8 code0 -[2( at mt_str, db 'hello, world', 13, 10, 0 )]109.8 code0 -(63)pageodd -restore showpage -%%Page: 64 64 -%%BeginPageSetup -save -%%EndPageSetup -/64 pa -[2()]681 code0 -[2( iend)]670 code2 -[(The function of the )2(AT)0( macro is to make use of the )2(TIMES)0( prefix to advance the assembly position to the)]653 norm1 -[(correct point for the specified structure field, and then to declare the specified data. Therefore the structure)]642 norm0 -[(fields must be declared in the same order as they were specified in the structure definition.)]631 norm2 -[(If the data to go in a structure field requires more than one source line to specify, the remaining source lines)]614 norm1 -[(can easily come after the )2(AT)0( line. For example:)]603 norm2 -[2( at mt_str, db 123,134,145,156,167,178,189 )]586 code1 -[2( db 190,100,0)]575 code2 -[(Depending on personal taste, you can also omit the code part of the )2(AT)0( line completely, and start the structure)]558 norm1 -[(field on the next line:)]547 norm2 -[2( at mt_str )]530 code1 -[2( db 'hello, world' )]519 code0 -[2( db 13,10,0)]508 code2 -[{/section-4.11.12 xa}2(ALIGN)0( and )2(ALIGNB)0(: Data Alignment)](4.11.12)488.8 subh3 -[(The )2(ALIGN)0( and )2(ALIGNB)0( macros provides a convenient way to align code or data on a word, longword,)]471.8 norm1 -[(paragraph or other boundary. \(Some assemblers call this directive )2(EVEN)0(.\) The syntax of the )2(ALIGN)0( and)]460.8 norm0 -[2(ALIGNB)0( macros is)]449.8 norm2 -[2( align 4 ; align on 4-byte boundary )]432.8 code1 -[2( align 16 ; align on 16-byte boundary )]421.8 code0 -[2( align 8,db 0 ; pad with 0s rather than NOPs )]410.8 code0 -[2( align 4,resb 1 ; align to 4 in the BSS )]399.8 code0 -[2( alignb 4 ; equivalent to previous line)]388.8 code2 -[(Both macros require their first argument to be a power of two; they both compute the number of additional)]371.8 norm1 -[(bytes required to bring the length of the current section up to a multiple of that power of two, and then apply)]360.8 norm0 -[(the )2(TIMES)0( prefix to their second argument to perform the alignment.)]349.8 norm2 -[(If the second argument is not specified, the default for )2(ALIGN)0( is )2(NOP)0(, and the default for )2(ALIGNB)0( is)]332.8 norm1 -[2(RESB 1)0(. So if the second argument is specified, the two macros are equivalent. Normally, you can just use)]321.8 norm0 -[2(ALIGN)0( in code and data sections and )2(ALIGNB)0( in BSS sections, and never need the second argument except)]310.8 norm0 -[(for special purposes.)]299.8 norm2 -[2(ALIGN)0( and )2(ALIGNB)0(, being simple macros, perform no error checking: they cannot warn you if their first)]282.8 norm1 -[(argument fails to be a power of two, or if their second argument generates more than one byte of code. In each)]271.8 norm0 -[(of these cases they will silently do the wrong thing.)]260.8 norm2 -[2(ALIGNB)0( \(or )2(ALIGN)0( with a second argument of )2(RESB 1)0(\) can be used within structure definitions:)]243.8 norm3 -[2(struc mytype2 )]226.8 code1 -[2()]215.8 code0 -[2( mt_byte: )]204.8 code0 -[2( resb 1 )]193.8 code0 -[2( alignb 2 )]182.8 code0 -[2( mt_word: )]171.8 code0 -[2( resw 1 )]160.8 code0 -[2( alignb 4 )]149.8 code0 -[2( mt_long: )]138.8 code0 -[2( resd 1 )]127.8 code0 -[2( mt_str: )]116.8 code0 -[2( resb 32 )]105.8 code0 -(64)pageeven -restore showpage -%%Page: 65 65 -%%BeginPageSetup -save -%%EndPageSetup -/65 pa -[2()]681 code0 -[2(endstruc)]670 code2 -[(This will ensure that the structure members are sensibly aligned relative to the base of the structure.)]653 norm3 -[(A final caveat: )2(ALIGN)0( and )2(ALIGNB)0( work relative to the beginning of the )1(section)0(, not the beginning of the)]636 norm1 -[(address space in the final executable. Aligning to a 16-byte boundary when the section you're in is only)]625 norm0 -[(guaranteed to be aligned to a 4-byte boundary, for example, is a waste of effort. Again, NASM does not)]614 norm0 -[(check that the section's alignment characteristics are sensible for the use of )2(ALIGN)0( or )2(ALIGNB)0(.)]603 norm2 -[(See also the )2(smartalign)0( standard macro package, ){/section-5.2 xl}(section 5.2){el}(.)]586 norm3 -(65)pageodd -restore showpage -%%Page: 66 66 -%%BeginPageSetup -save -%%EndPageSetup -/66 pa -[{/chapter-5 xa}(Chapter 5: )(Standard Macro Packages)]642.8 chap3 -[(The )2(%use)0( directive \(see ){/section-4.6.4 xl}(section 4.6.4){el}(\) includes one of the standard macro packages included with the NASM)]607.8 norm1 -[(distribution and compiled into the NASM binary. It operates like the )2(%include)0( directive \(see ){/section-4.6.1 xl}(section 4.6.1){el}(\),)]596.8 norm0 -[(but the included contents is provided by NASM itself.)]585.8 norm2 -[(The names of standard macro packages are case insensitive, and can be quoted or not.)]568.8 norm3 -[{/section-5.1 xa}2(altreg)0(: )(Alternate Register Names)](5.1)547.4 head3 -[(The )2(altreg)0( standard macro package provides alternate register names. It provides numeric register names)]530.4 norm1 -[(for all registers \(not just )2(R8)0(\226)2(R15)0(\), the Intel-defined aliases )2(R8L)0(\226)2(R15L)0( for the low bytes of register \(as)]519.4 norm0 -[(opposed to the NASM/AMD standard names )2(R8B)0(\226)2(R15B)0(\), and the names )2(R0H)0(\226)2(R3H)0( \(by analogy with)]508.4 norm0 -[2(R0L)0(\226)2(R3L)0(\) for )2(AH)0(, )2(CH)0(, )2(DH)0(, and )2(BH)0(.)]497.4 norm2 -[(Example use:)]480.4 norm3 -[2(%use altreg )]463.4 code1 -[2()]452.4 code0 -[2(proc: )]441.4 code0 -[2( mov r0l,r3h ; mov al,bh )]430.4 code0 -[2( ret)]419.4 code2 -[(See also ){/section-11.1 xl}(section 11.1){el}(.)]402.4 norm3 -[{/section-5.2 xa}2(smartalign)0(: Smart )2(ALIGN)0( Macro)](5.2)381 head3 -[(The )2(smartalign)0( standard macro package provides for an )2(ALIGN)0( macro which is more powerful than the)]364 norm1 -[(default \(and backwards-compatible\) one \(see ){/section-4.11.12 xl}(section 4.11.12){el}(\). When the )2(smartalign)0( package is enabled,)]353 norm0 -[(when )2(ALIGN)0( is used without a second argument, NASM will generate a sequence of instructions more)]342 norm0 -[(efficient than a series of )2(NOP)0(. Furthermore, if the padding exceeds a specific threshold, then NASM will)]331 norm0 -[(generate a jump over the entire padding sequence.)]320 norm2 -[(The specific instructions generated can be controlled with the new )2(ALIGNMODE)0( macro. This macro takes two)]303 norm1 -[(parameters: one mode, and an optional jump threshold override. The modes are as follows:)]292 norm2 -[2(generic)0(: Works on all x86 CPUs and should have reasonable performance. The default jump threshold)]275 bull1 -[(is 8. This is the default.)]264 bull2 -[2(nop)0(: Pad out with )2(NOP)0( instructions. The only difference compared to the standard )2(ALIGN)0( macro is that)]247 bull1 -[(NASM can still jump over a large padding area. The default jump threshold is 16.)]236 bull2 -[2(k7)0(: Optimize for the AMD K7 \(Athlon/Althon XP\). These instructions should still work on all x86 CPUs.)]219 bull1 -[(The default jump threshold is 16.)]208 bull2 -[2(k8)0(: Optimize for the AMD K8 \(Opteron/Althon 64\). These instructions should still work on all x86 CPUs.)]191 bull1 -[(The default jump threshold is 16.)]180 bull2 -[2(p6)0(: Optimize for Intel CPUs. This uses the long )2(NOP)0( instructions first introduced in Pentium Pro. This is)]163 bull1 -[(incompatible with all CPUs of family 5 or lower, as well as some VIA CPUs and several virtualization)]152 bull0 -[(solutions. The default jump threshold is 16.)]141 bull2 -[(The macro )2(__ALIGNMODE__)0( is defined to contain the current alignment mode. A number of other macros)]124 norm1 -[(beginning with )2(__ALIGN_)0( are used internally by this macro package.)]113 norm2 -(66)pageeven -restore showpage -%%Page: 67 67 -%%BeginPageSetup -save -%%EndPageSetup -/67 pa -[{/chapter-6 xa}(Chapter 6: )(Assembler Directives)]642.8 chap3 -[(NASM, though it attempts to avoid the bureaucracy of assemblers like MASM and TASM, is nevertheless)]607.8 norm1 -[(forced to support a )1(few)0( directives. These are described in this chapter.)]596.8 norm2 -[(NASM's directives come in two types: )1(user-level)0( directives and )1(primitive)0( directives. Typically, each)]579.8 norm1 -[(directive has a user-level form and a primitive form. In almost all cases, we recommend that users use the)]568.8 norm0 -[(user-level forms of the directives, which are implemented as macros which call the primitive forms.)]557.8 norm2 -[(Primitive directives are enclosed in square brackets; user-level directives are not.)]540.8 norm3 -[(In addition to the universal directives described in this chapter, each object file format can optionally supply)]523.8 norm1 -[(extra directives in order to control particular features of that file format. These )1(format-specific)0( directives are)]512.8 norm0 -[(documented along with the formats that implement them, in ){/chapter-7 xl}(chapter 7){el}(.)]501.8 norm2 -[{/section-6.1 xa}2(BITS)0(: Specifying Target )(Processor Mode)](6.1)480.4 head3 -[(The )2(BITS)0( directive specifies whether NASM should generate code )(designed to run on a processor operating)]463.4 norm1 -[(in 16-bit mode, 32-bit mode or 64-bit mode. The syntax is )2(BITS XX)0(, where XX is 16, 32 or 64.)]452.4 norm2 -[(In most cases, you should not need to use )2(BITS)0( explicitly. The )2(aout)0(, )2(coff)0(, )2(elf)0(, )2(macho)0(, )2(win32)0( and)]435.4 norm1 -[2(win64)0( object formats, which are designed for use in 32-bit or 64-bit operating systems, all cause NASM to)]424.4 norm0 -[(select 32-bit or 64-bit mode, respectively, by default. The )2(obj)0( object format allows you to specify each)]413.4 norm0 -[(segment you define as either )2(USE16)0( or )2(USE32)0(, and NASM will set its operating mode accordingly, so the)]402.4 norm0 -[(use of the )2(BITS)0( directive is once again unnecessary.)]391.4 norm2 -[(The most likely reason for using the )2(BITS)0( directive is to write 32-bit or 64-bit code in a flat binary file; this)]374.4 norm1 -[(is because the )2(bin)0( output format defaults to 16-bit mode in anticipation of it being used most frequently to)]363.4 norm0 -[(write DOS )2(.COM)0( programs, DOS )2(.SYS)0( device drivers and boot loader software.)]352.4 norm2 -[(You do )1(not)0( need to specify )2(BITS 32)0( merely in order to use 32-bit instructions in a 16-bit DOS program; if)]335.4 norm1 -[(you do, the assembler will generate incorrect code because it will be writing code targeted at a 32-bit)]324.4 norm0 -[(platform, to be run on a 16-bit one.)]313.4 norm2 -[(When NASM is in )2(BITS 16)0( mode, instructions which use 32-bit data are prefixed with an 0x66 byte, and)]296.4 norm1 -[(those referring to 32-bit addresses have an 0x67 prefix. In )2(BITS 32)0( mode, the reverse is true: 32-bit)]285.4 norm0 -[(instructions require no prefixes, whereas instructions using 16-bit data need an 0x66 and those working on)]274.4 norm0 -[(16-bit addresses need an 0x67.)]263.4 norm2 -[(When NASM is in )2(BITS 64)0( mode, most instructions operate the same as they do for )2(BITS 32)0( mode.)]246.4 norm1 -[(However, there are 8 more general and SSE registers, and 16-bit addressing is no longer supported.)]235.4 norm2 -[(The default address size is 64 bits; 32-bit addressing can be selected with the 0x67 prefix. The default)]218.4 norm1 -[(operand size is still 32 bits, however, and the 0x66 prefix selects 16-bit operand size. The )2(REX)0( prefix is used)]207.4 norm0 -[(both to select 64-bit operand size, and to access the new registers. NASM automatically inserts REX prefixes)]196.4 norm0 -[(when necessary.)]185.4 norm2 -[(When the )2(REX)0( prefix is used, the processor does not know how to address the AH, BH, CH or DH \(high 8-bit)]168.4 norm1 -[(legacy\) registers. Instead, it is possible to access the the low 8-bits of the SP, BP SI and DI registers as SPL,)]157.4 norm0 -[(BPL, SIL and DIL, respectively; but only when the REX prefix is used.)]146.4 norm2 -[(The )2(BITS)0( directive has an exactly equivalent primitive form, )2([BITS 16])0(, )2([BITS 32])0( and )2([BITS 64])0(.)]129.4 norm1 -[(The user-level form is a macro which has no function other than to call the primitive form.)]118.4 norm2 -[(Note that the space is neccessary, e.g. )2(BITS32)0( will )1(not)0( work!)]101.4 norm3 -(67)pageodd -restore showpage -%%Page: 68 68 -%%BeginPageSetup -save -%%EndPageSetup -/68 pa -[{/section-6.1.1 xa}2(USE16)0( & )2(USE32)0(: Aliases for BITS)](6.1.1)678.8 subh3 -[(The `)2(USE16)0(' and `)2(USE32)0(' directives can be used in place of `)2(BITS 16)0(' and `)2(BITS 32)0(', for compatibility)]661.8 norm1 -[(with other assemblers.)]650.8 norm2 -[{/section-6.2 xa}2(DEFAULT)0(: Change the assembler defaults)](6.2)629.4 head3 -[(The )2(DEFAULT)0( directive changes the assembler defaults. Normally, NASM defaults to a mode where the)]612.4 norm1 -[(programmer is expected to explicitly specify most features directly. However, this is occationally obnoxious,)]601.4 norm0 -[(as the explicit form is pretty much the only one one wishes to use.)]590.4 norm2 -[(Currently, the only )2(DEFAULT)0( that is settable is whether or not registerless instructions in 64-bit mode are)]573.4 norm1 -[2(RIP)0(\226relative or not. By default, they are absolute unless overridden with the )2(REL)0( specifier \(see ){/section-3.3 xl}(section 3.3){el}(\).)]562.4 norm0 -[(However, if )2(DEFAULT REL)0( is specified, )2(REL)0( is default, unless overridden with the )2(ABS)0( specifier, )1(except)]551.4 norm0 -[1(when used with an FS or GS segment override)0(.)]540.4 norm2 -[(The special handling of )2(FS)0( and )2(GS)0( overrides are due to the fact that these registers are generally used as)]523.4 norm1 -[(thread pointers or other special functions in 64-bit mode, and generating )2(RIP)0(\226relative addresses would be)]512.4 norm0 -[(extremely confusing.)]501.4 norm2 -[2(DEFAULT REL)0( is disabled with )2(DEFAULT ABS)0(.)]484.4 norm3 -[{/section-6.3 xa}2(SECTION)0( or )2(SEGMENT)0(: Changing and )(Defining Sections)](6.3)463 head3 -[(The )2(SECTION)0( directive \()2(SEGMENT)0( is an exactly equivalent synonym\) changes which section of the output)]446 norm1 -[(file the code you write will be assembled into. In some object file formats, the number and names of sections)]435 norm0 -[(are fixed; in others, the user may make up as many as they wish. Hence )2(SECTION)0( may sometimes give an)]424 norm0 -[(error message, or may define a new section, if you try to switch to a section that does not \(yet\) exist.)]413 norm2 -[(The Unix object formats, and the )2(bin)0( object format \(but see ){/section-7.1.3 xl}(section 7.1.3){el}(, all support the )(standardized section)]396 norm1 -[(names )2(.text)0(, )2(.data)0( and )2(.bss)0( for the code, data and uninitialized-data sections. The )2(obj)0( format, by)]385 norm0 -[(contrast, does not recognize these section names as being special, and indeed will strip off the leading period)]374 norm0 -[(of any section name that has one.)]363 norm2 -[{/section-6.3.1 xa}(The )2(__SECT__)0( Macro)](6.3.1)343.8 subh3 -[(The )2(SECTION)0( directive is unusual in that its user-level form functions differently from its primitive form.)]326.8 norm1 -[(The primitive form, )2([SECTION xyz])0(, simply switches the current target section to the one given. The)]315.8 norm0 -[(user-level form, )2(SECTION xyz)0(, however, first defines the single-line macro )2(__SECT__)0( to be the primitive)]304.8 norm0 -[2([SECTION])0( directive which it is about to issue, and then issues it. So the user-level directive)]293.8 norm2 -[2( SECTION .text)]276.8 code3 -[(expands to the two lines)]259.8 norm3 -[2(%define __SECT__ [SECTION .text] )]242.8 code1 -[2( [SECTION .text])]231.8 code2 -[(Users may find it useful to make use of this in their own macros. For example, the )2(writefile)0( macro)]214.8 norm1 -[(defined in ){/section-4.3.4 xl}(section 4.3.4){el}( can be usefully rewritten in the following more sophisticated form:)]203.8 norm2 -[2(%macro writefile 2+ )]186.8 code1 -[2()]175.8 code0 -[2( [section .data] )]164.8 code0 -[2()]153.8 code0 -[2( %%str: db %2 )]142.8 code0 -[2( %%endstr: )]131.8 code0 -[2()]120.8 code0 -[2( __SECT__ )]109.8 code0 -(68)pageeven -restore showpage -%%Page: 69 69 -%%BeginPageSetup -save -%%EndPageSetup -/69 pa -[2()]681 code0 -[2( mov dx,%%str )]670 code0 -[2( mov cx,%%endstr-%%str )]659 code0 -[2( mov bx,%1 )]648 code0 -[2( mov ah,0x40 )]637 code0 -[2( int 0x21 )]626 code0 -[2()]615 code0 -[2(%endmacro)]604 code2 -[(This form of the macro, once passed a string to output, first switches temporarily to the data section of the file,)]587 norm1 -[(using the primitive form of the )2(SECTION)0( directive so as not to modify )2(__SECT__)0(. It then declares its string)]576 norm0 -[(in the data section, and then invokes )2(__SECT__)0( to switch back to )1(whichever)0( section the user was previously)]565 norm0 -[(working in. It thus avoids the need, in the previous version of the macro, to include a )2(JMP)0( instruction to jump)]554 norm0 -[(over the data, and also does not fail if, in a complicated )2(OBJ)0( format module, the user could potentially be)]543 norm0 -[(assembling the code in any of several separate code sections.)]532 norm2 -[{/section-6.4 xa}2(ABSOLUTE)0(: Defining Absolute Labels)](6.4)510.6 head3 -[(The )2(ABSOLUTE)0( directive can be thought of as an alternative form of )2(SECTION)0(: it causes the subsequent)]493.6 norm1 -[(code to be directed at no physical section, but at the hypothetical section starting at the given absolute address.)]482.6 norm0 -[(The only instructions you can use in this mode are the )2(RESB)0( family.)]471.6 norm2 -[2(ABSOLUTE)0( is used as follows:)]454.6 norm3 -[2(absolute 0x1A )]437.6 code1 -[2()]426.6 code0 -[2( kbuf_chr resw 1 )]415.6 code0 -[2( kbuf_free resw 1 )]404.6 code0 -[2( kbuf resw 16)]393.6 code2 -[(This example describes a section of the PC BIOS data area, at segment address 0x40: the above code defines)]376.6 norm1 -[2(kbuf_chr)0( to be 0x1A, )2(kbuf_free)0( to be 0x1C, and )2(kbuf)0( to be 0x1E.)]365.6 norm2 -[(The user-level form of )2(ABSOLUTE)0(, like that of )2(SECTION)0(, redefines the )2(__SECT__)0( macro when it is)]348.6 norm1 -[(invoked.)]337.6 norm2 -[2(STRUC)0( and )2(ENDSTRUC)0( are defined as macros which use )2(ABSOLUTE)0( \(and also )2(__SECT__)0(\).)]320.6 norm3 -[2(ABSOLUTE)0( doesn't have to take an absolute constant as an argument: it can take an expression \(actually, a)]303.6 norm1 -[(critical expression: see ){/section-3.8 xl}(section 3.8){el}(\) and it can be a value in a segment. For example, a TSR can re-use its)]292.6 norm0 -[(setup code as run-time BSS like this:)]281.6 norm2 -[2( org 100h ; it's a .COM program )]264.6 code1 -[2()]253.6 code0 -[2( jmp setup ; setup code comes last )]242.6 code0 -[2()]231.6 code0 -[2( ; the resident part of the TSR goes here )]220.6 code0 -[2(setup: )]209.6 code0 -[2( ; now write the code that installs the TSR here )]198.6 code0 -[2()]187.6 code0 -[2(absolute setup )]176.6 code0 -[2()]165.6 code0 -[2(runtimevar1 resw 1 )]154.6 code0 -[2(runtimevar2 resd 20 )]143.6 code0 -[2()]132.6 code0 -[2(tsr_end:)]121.6 code2 -(69)pageodd -restore showpage -%%Page: 70 70 -%%BeginPageSetup -save -%%EndPageSetup -/70 pa -[(This defines some variables `on top of' the setup code, so that after the setup has finished running, the space it)]681 norm1 -[(took up can be re-used as data storage for the running TSR. The symbol `tsr_end' can be used to calculate the)]670 norm0 -[(total size of the part of the TSR that needs to be made resident.)]659 norm2 -[{/section-6.5 xa}2(EXTERN)0(: )(Importing Symbols from Other Modules)](6.5)637.6 head3 -[2(EXTERN)0( is similar to the MASM directive )2(EXTRN)0( and the C keyword )2(extern)0(: it is used to declare a symbol)]620.6 norm1 -[(which is not defined anywhere in the module being assembled, but is assumed to be defined in some other)]609.6 norm0 -[(module and needs to be referred to by this one. Not every object-file format can support external variables:)]598.6 norm0 -[(the )2(bin)0( format cannot.)]587.6 norm2 -[(The )2(EXTERN)0( directive takes as many arguments as you like. Each argument is the name of a symbol:)]570.6 norm3 -[2(extern _printf )]553.6 code1 -[2(extern _sscanf,_fscanf)]542.6 code2 -[(Some object-file formats provide extra features to the )2(EXTERN)0( directive. In all cases, the extra features are)]525.6 norm1 -[(used by suffixing a colon to the symbol name followed by object-format specific text. For example, the )2(obj)]514.6 norm0 -[(format allows you to declare that the default segment base of an external should be the group )2(dgroup)0( by)]503.6 norm0 -[(means of the directive)]492.6 norm2 -[2(extern _variable:wrt dgroup)]475.6 code3 -[(The primitive form of )2(EXTERN)0( differs from the user-level form only in that it can take only one argument at)]458.6 norm1 -[(a time: the support for multiple arguments is implemented at the preprocessor level.)]447.6 norm2 -[(You can declare the same variable as )2(EXTERN)0( more than once: NASM will quietly ignore the second and)]430.6 norm1 -[(later redeclarations. You can't declare a variable as )2(EXTERN)0( as well as something else, though.)]419.6 norm2 -[{/section-6.6 xa}2(GLOBAL)0(: )(Exporting Symbols to Other Modules)](6.6)398.2 head3 -[2(GLOBAL)0( is the other end of )2(EXTERN)0(: if one module declares a symbol as )2(EXTERN)0( and refers to it, then in)]381.2 norm1 -[(order to prevent linker errors, some other module must actually )1(define)0( the symbol and declare it as )2(GLOBAL)0(.)]370.2 norm0 -[(Some assemblers use the name )2(PUBLIC)0( for this purpose.)]359.2 norm2 -[(The )2(GLOBAL)0( directive applying to a symbol must appear )1(before)0( the definition of the symbol.)]342.2 norm3 -[2(GLOBAL)0( uses the same syntax as )2(EXTERN)0(, except that it must refer to symbols which )1(are)0( defined in the same)]325.2 norm1 -[(module as the )2(GLOBAL)0( directive. For example:)]314.2 norm2 -[2(global _main )]297.2 code1 -[2(_main: )]286.2 code0 -[2( ; some code)]275.2 code2 -[2(GLOBAL)0(, like )2(EXTERN)0(, allows object formats to define private extensions by means of a colon. The )2(elf)]258.2 norm1 -[(object format, for example, lets you specify whether global data items are functions or data:)]247.2 norm2 -[2(global hashlookup:function, hashtable:data)]230.2 code3 -[(Like )2(EXTERN)0(, the primitive form of )2(GLOBAL)0( differs from the user-level form only in that it can take only)]213.2 norm1 -[(one argument at a time.)]202.2 norm2 -[{/section-6.7 xa}2(COMMON)0(: Defining Common Data Areas)](6.7)180.8 head3 -[(The )2(COMMON)0( directive is used to declare )1(common variables)0(. A common variable is much like a global)]163.8 norm1 -[(variable declared in the uninitialized data section, so that)]152.8 norm2 -[2(common intvar 4)]135.8 code3 -[(is similar in function to)]118.8 norm3 -(70)pageeven -restore showpage -%%Page: 71 71 -%%BeginPageSetup -save -%%EndPageSetup -/71 pa -[2(global intvar )]681 code1 -[2(section .bss )]670 code0 -[2()]659 code0 -[2(intvar resd 1)]648 code2 -[(The difference is that if more than one module defines the same common variable, then at link time those)]631 norm1 -[(variables will be )1(merged)0(, and references to )2(intvar)0( in all modules will point at the same piece of memory.)]620 norm2 -[(Like )2(GLOBAL)0( and )2(EXTERN)0(, )2(COMMON)0( supports object-format specific extensions. For example, the )2(obj)]603 norm1 -[(format allows common variables to be NEAR or FAR, and the )2(elf)0( format allows you to specify the)]592 norm0 -[(alignment requirements of a common variable:)]581 norm2 -[2(common commvar 4:near ; works in OBJ )]564 code1 -[2(common intarray 100:4 ; works in ELF: 4 byte aligned)]553 code2 -[(Once again, like )2(EXTERN)0( and )2(GLOBAL)0(, the primitive form of )2(COMMON)0( differs from the user-level form only)]536 norm1 -[(in that it can take only one argument at a time.)]525 norm2 -[{/section-6.8 xa}2(CPU)0(: Defining CPU Dependencies)](6.8)503.6 head3 -[(The )2(CPU)0( directive restricts assembly to those instructions which are available on the specified CPU.)]486.6 norm3 -[(Options are:)]469.6 norm3 -[2(CPU 8086)0( Assemble only 8086 instruction set)]452.6 bull3 -[2(CPU 186)0( Assemble instructions up to the 80186 instruction set)]435.6 bull3 -[2(CPU 286)0( Assemble instructions up to the 286 instruction set)]418.6 bull3 -[2(CPU 386)0( Assemble instructions up to the 386 instruction set)]401.6 bull3 -[2(CPU 486)0( 486 instruction set)]384.6 bull3 -[2(CPU 586)0( Pentium instruction set)]367.6 bull3 -[2(CPU PENTIUM)0( Same as 586)]350.6 bull3 -[2(CPU 686)0( P6 instruction set)]333.6 bull3 -[2(CPU PPRO)0( Same as 686)]316.6 bull3 -[2(CPU P2)0( Same as 686)]299.6 bull3 -[2(CPU P3)0( Pentium III \(Katmai\) instruction sets)]282.6 bull3 -[2(CPU KATMAI)0( Same as P3)]265.6 bull3 -[2(CPU P4)0( Pentium 4 \(Willamette\) instruction set)]248.6 bull3 -[2(CPU WILLAMETTE)0( Same as P4)]231.6 bull3 -[2(CPU PRESCOTT)0( Prescott instruction set)]214.6 bull3 -[2(CPU X64)0( x86-64 \(x64/AMD64/Intel 64\) instruction set)]197.6 bull3 -[2(CPU IA64)0( IA64 CPU \(in x86 mode\) instruction set)]180.6 bull3 -[(All options are case insensitive. All instructions will be selected only if they apply to the selected CPU or)]163.6 norm1 -[(lower. By default, all instructions are available.)]152.6 norm2 -[{/section-6.9 xa}2(FLOAT)0(: Handling of )(floating-point constants)](6.9)131.2 head3 -[(By default, floating-point constants are rounded to nearest, and IEEE denormals are supported. The following)]114.2 norm1 -[(options can be set to alter this behaviour:)]103.2 norm2 -(71)pageodd -restore showpage -%%Page: 72 72 -%%BeginPageSetup -save -%%EndPageSetup -/72 pa -[2(FLOAT DAZ)0( Flush denormals to zero)]681 bull3 -[2(FLOAT NODAZ)0( Do not flush denormals to zero \(default\))]664 bull3 -[2(FLOAT NEAR)0( Round to nearest \(default\))]647 bull3 -[2(FLOAT UP)0( Round up \(toward +Infinity\))]630 bull3 -[2(FLOAT DOWN)0( Round down \(toward \226Infinity\))]613 bull3 -[2(FLOAT ZERO)0( Round toward zero)]596 bull3 -[2(FLOAT DEFAULT)0( Restore default settings)]579 bull3 -[(The standard macros )2(__FLOAT_DAZ__)0(, )2(__FLOAT_ROUND__)0(, and )2(__FLOAT__)0( contain the current state,)]562 norm1 -[(as long as the programmer has avoided the use of the brackeded primitive form, \()2([FLOAT])0(\).)]551 norm2 -[2(__FLOAT__)0( contains the full set of floating-point settings; this value can be saved away and invoked later to)]534 norm1 -[(restore the setting.)]523 norm2 -(72)pageeven -restore showpage -%%Page: 73 73 -%%BeginPageSetup -save -%%EndPageSetup -/73 pa -[{/chapter-7 xa}(Chapter 7: )(Output Formats)]642.8 chap3 -[(NASM is a portable assembler, designed to be able to compile on any ANSI C-supporting platform and)]607.8 norm1 -[(produce output to run on a variety of Intel x86 operating systems. For this reason, it has a large number of)]596.8 norm0 -[(available output formats, selected using the )2(-f)0( option on the NASM )(command line. Each of these formats,)]585.8 norm0 -[(along with its extensions to the base NASM syntax, is detailed in this chapter.)]574.8 norm2 -[(As stated in ){/section-2.1.1 xl}(section 2.1.1){el}(, NASM chooses a )(default name for your output file based on the input file name and)]557.8 norm1 -[(the chosen output format. This will be generated by removing the )(extension \()2(.asm)0(, )2(.s)0(, or whatever you like)]546.8 norm0 -[(to use\) from the input file name, and substituting an extension defined by the output format. The extensions)]535.8 norm0 -[(are given with each format below.)]524.8 norm2 -[{/section-7.1 xa}2(bin)0(: )(Flat-Form Binary)( Output)](7.1)503.4 head3 -[(The )2(bin)0( format does not produce object files: it generates nothing in the output file except the code you)]486.4 norm1 -[(wrote. Such `pure binary' files are used by )(MS-DOS: )2(.COM)0( executables and )2(.SYS)0( device drivers are pure)]475.4 norm0 -[(binary files. Pure binary output is also useful for )(operating system and )(boot loader development.)]464.4 norm2 -[(The )2(bin)0( format supports )(multiple section names. For details of how NASM handles sections in the )2(bin)]447.4 norm1 -[(format, see ){/section-7.1.3 xl}(section 7.1.3){el}(.)]436.4 norm2 -[(Using the )2(bin)0( format puts NASM by default into 16-bit mode \(see ){/section-6.1 xl}(section 6.1){el}(\). In order to use )2(bin)0( to write)]419.4 norm1 -[(32-bit or 64-bit code, such as an OS kernel, you need to explicitly issue the )2(BITS 32)0( or )2(BITS 64)0( directive.)]408.4 norm2 -[2(bin)0( has no default output file name extension: instead, it leaves your file name as it is once the original)]391.4 norm1 -[(extension has been removed. Thus, the default is for NASM to assemble )2(binprog.asm)0( into a binary file)]380.4 norm0 -[(called )2(binprog)0(.)]369.4 norm2 -[{/section-7.1.1 xa}2(ORG)0(: Binary File )(Program Origin)](7.1.1)350.2 subh3 -[(The )2(bin)0( format provides an additional directive to the list given in ){/chapter-6 xl}(chapter 6){el}(: )2(ORG)0(. The function of the )2(ORG)]333.2 norm1 -[(directive is to specify the origin address which NASM will assume the program begins at when it is loaded)]322.2 norm0 -[(into memory.)]311.2 norm2 -[(For example, the following code will generate the longword )2(0x00000104)0(:)]294.2 norm3 -[2( org 0x100 )]277.2 code1 -[2( dd label )]266.2 code0 -[2(label:)]255.2 code2 -[(Unlike the )2(ORG)0( directive provided by MASM-compatible assemblers, which allows you to jump around in)]238.2 norm1 -[(the object file and overwrite code you have already generated, NASM's )2(ORG)0( does exactly what the directive)]227.2 norm0 -[(says: )1(origin)0(. Its sole function is to specify one offset which is added to all internal address references within)]216.2 norm0 -[(the section; it does not permit any of the trickery that MASM's version does. See ){/section-12.1.3 xl}(section 12.1.3){el}( for further)]205.2 norm0 -[(comments.)]194.2 norm2 -[{/section-7.1.2 xa}2(bin)0( Extensions to the )2(SECTION)0( Directive)](7.1.2)175 subh3 -[(The )2(bin)0( output format extends the )2(SECTION)0( \(or )2(SEGMENT)0(\) directive to allow you to specify the alignment)]158 norm1 -[(requirements of segments. This is done by appending the )2(ALIGN)0( qualifier to the end of the section-definition)]147 norm0 -[(line. For example,)]136 norm2 -[2(section .data align=16)]119 code3 -[(switches to the section )2(.data)0( and also specifies that it must be aligned on a 16-byte boundary.)]102 norm3 -(73)pageodd -restore showpage -%%Page: 74 74 -%%BeginPageSetup -save -%%EndPageSetup -/74 pa -[(The parameter to )2(ALIGN)0( specifies how many low bits of the section start address must be forced to zero. The)]681 norm1 -[(alignment value given may be any power of two.)]670 norm2 -[{/section-7.1.3 xa}(Multisection)( Support for the )2(bin)0( Format)](7.1.3)650.8 subh3 -[(The )2(bin)0( format allows the use of multiple sections, of arbitrary names, besides the "known" )2(.text)0(, )2(.data)0(,)]633.8 norm1 -[(and )2(.bss)0( names.)]622.8 norm2 -[(Sections may be designated )2(progbits)0( or )2(nobits)0(. Default is )2(progbits)0( \(except )2(.bss)0(, which defaults)]605.8 bull1 -[(to )2(nobits)0(, of course\).)]594.8 bull2 -[(Sections can be aligned at a specified boundary following the previous section with )2(align=)0(, or at an)]577.8 bull1 -[(arbitrary byte-granular position with )2(start=)0(.)]566.8 bull2 -[(Sections can be given a virtual start address, which will be used for the calculation of all memory)]549.8 bull1 -[(references within that section with )2(vstart=)0(.)]538.8 bull2 -[(Sections can be ordered using )2(follows=<section>)0( or )2(vfollows=<section>)0( as an alternative to)]521.8 bull1 -[(specifying an explicit start address.)]510.8 bull2 -[(Arguments to )2(org)0(, )2(start)0(, )2(vstart)0(, and )2(align=)0( are critical expressions. See ){/section-3.8 xl}(section 3.8){el}(. E.g.)]493.8 bull1 -[2(align=\(1 << ALIGN_SHIFT\))0( \226 )2(ALIGN_SHIFT)0( must be defined before it is used here.)]482.8 bull2 -[(Any code which comes before an explicit )2(SECTION)0( directive is directed by default into the )2(.text)]465.8 bull1 -[(section.)]454.8 bull2 -[(If an )2(ORG)0( statement is not given, )2(ORG 0)0( is used by default.)]437.8 bull3 -[(The )2(.bss)0( section will be placed after the last )2(progbits)0( section, unless )2(start=)0(, )2(vstart=)0(,)]420.8 bull1 -[2(follows=)0(, or )2(vfollows=)0( has been specified.)]409.8 bull2 -[(All sections are aligned on dword boundaries, unless a different alignment has been specified.)]392.8 bull3 -[(Sections may not overlap.)]375.8 bull3 -[(NASM creates the )2(section.<secname>.start)0( for each section, which may be used in your code.)]358.8 bull3 -[{/section-7.1.4 xa}(Map Files)](7.1.4)339.6 subh3 -[(Map files can be generated in )2(-f bin)0( format by means of the )2([map])0( option. Map types of )2(all)0( \(default\),)]322.6 norm1 -[2(brief)0(, )2(sections)0(, )2(segments)0(, or )2(symbols)0( may be specified. Output may be directed to )2(stdout)]311.6 norm0 -[(\(default\), )2(stderr)0(, or a specified file. E.g. )2([map symbols myfile.map])0(. No "user form" exists, the)]300.6 norm0 -[(square brackets must be used.)]289.6 norm2 -[{/section-7.2 xa}2(ith)0(: )(Intel Hex Output)](7.2)268.2 head3 -[(The )2(ith)0( file format produces Intel hex-format files. Just as the )2(bin)0( format, this is a flat memory image)]251.2 norm1 -[(format with no support for relocation or linking. It is usually used with ROM programmers and similar)]240.2 norm0 -[(utilities.)]229.2 norm2 -[(All extensions supported by the )2(bin)0( file format is also supported by the )2(ith)0( file format.)]212.2 norm3 -[2(ith)0( provides a default output file-name extension of )2(.ith)0(.)]195.2 norm3 -[{/section-7.3 xa}2(srec)0(: )(Motorola S-Records Output)](7.3)173.8 head3 -[(The )2(srec)0( file format produces Motorola S-records files. Just as the )2(bin)0( format, this is a flat memory image)]156.8 norm1 -[(format with no support for relocation or linking. It is usually used with ROM programmers and similar)]145.8 norm0 -[(utilities.)]134.8 norm2 -[(All extensions supported by the )2(bin)0( file format is also supported by the )2(srec)0( file format.)]117.8 norm3 -[2(srec)0( provides a default output file-name extension of )2(.srec)0(.)]100.8 norm3 -(74)pageeven -restore showpage -%%Page: 75 75 -%%BeginPageSetup -save -%%EndPageSetup -/75 pa -[{/section-7.4 xa}2(obj)0(: )(Microsoft OMF)( Object Files)](7.4)676.6 head3 -[(The )2(obj)0( file format \(NASM calls it )2(obj)0( rather than )2(omf)0( for historical reasons\) is the one produced by)]659.6 norm1 -[(MASM and )(TASM, which is typically fed to 16-bit DOS linkers to produce )2(.EXE)0( files. It is also the format)]648.6 norm0 -[(used by )(OS/2.)]637.6 norm2 -[2(obj)0( provides a default output file-name extension of )2(.obj)0(.)]620.6 norm3 -[2(obj)0( is not exclusively a 16-bit format, though: NASM has full support for the 32-bit extensions to the)]603.6 norm1 -[(format. In particular, 32-bit )2(obj)0( format files are used by )(Borland's Win32 compilers, instead of using)]592.6 norm0 -[(Microsoft's newer )2(win32)0( object file format.)]581.6 norm2 -[(The )2(obj)0( format does not define any special segment names: you can call your segments anything you like.)]564.6 norm1 -[(Typical names for segments in )2(obj)0( format files are )2(CODE)0(, )2(DATA)0( and )2(BSS)0(.)]553.6 norm2 -[(If your source file contains code before specifying an explicit )2(SEGMENT)0( directive, then NASM will invent its)]536.6 norm1 -[(own segment called )2(__NASMDEFSEG)0( for you.)]525.6 norm2 -[(When you define a segment in an )2(obj)0( file, NASM defines the segment name as a symbol as well, so that you)]508.6 norm1 -[(can access the segment address of the segment. So, for example:)]497.6 norm2 -[2(segment data )]480.6 code1 -[2()]469.6 code0 -[2(dvar: dw 1234 )]458.6 code0 -[2()]447.6 code0 -[2(segment code )]436.6 code0 -[2()]425.6 code0 -[2(function: )]414.6 code0 -[2( mov ax,data ; get segment address of data )]403.6 code0 -[2( mov ds,ax ; and move it into DS )]392.6 code0 -[2( inc word [dvar] ; now this reference will work )]381.6 code0 -[2( ret)]370.6 code2 -[(The )2(obj)0( format also enables the use of the )2(SEG)0( and )2(WRT)0( operators, so that you can write code which does)]353.6 norm1 -[(things like)]342.6 norm2 -[2(extern foo )]325.6 code1 -[2()]314.6 code0 -[2( mov ax,seg foo ; get preferred segment of foo )]303.6 code0 -[2( mov ds,ax )]292.6 code0 -[2( mov ax,data ; a different segment )]281.6 code0 -[2( mov es,ax )]270.6 code0 -[2( mov ax,[ds:foo] ; this accesses `foo' )]259.6 code0 -[2( mov [es:foo wrt data],bx ; so does this)]248.6 code2 -[{/section-7.4.1 xa}2(obj)0( Extensions to the )2(SEGMENT)0( Directive)](7.4.1)229.4 subh3 -[(The )2(obj)0( output format extends the )2(SEGMENT)0( \(or )2(SECTION)0(\) directive to allow you to specify various)]212.4 norm1 -[(properties of the segment you are defining. This is done by appending extra qualifiers to the end of the)]201.4 norm0 -[(segment-definition line. For example,)]190.4 norm2 -[2(segment code private align=16)]173.4 code3 -[(defines the segment )2(code)0(, but also declares it to be a private segment, and requires that the portion of it)]156.4 norm1 -[(described in this code module must be aligned on a 16-byte boundary.)]145.4 norm2 -[(The available qualifiers are:)]128.4 norm3 -[2(PRIVATE)0(, )2(PUBLIC)0(, )2(COMMON)0( and )2(STACK)0( specify the combination characteristics of the segment.)]111.4 bull1 -[2(PRIVATE)0( segments do not get combined with any others by the linker; )2(PUBLIC)0( and )2(STACK)0( segments get)]100.4 bull0 -(75)pageodd -restore showpage -%%Page: 76 76 -%%BeginPageSetup -save -%%EndPageSetup -/76 pa -[(concatenated together at link time; and )2(COMMON)0( segments all get overlaid on top of each other rather than)]681 bull0 -[(stuck end-to-end.)]670 bull2 -[2(ALIGN)0( is used, as shown above, to specify how many low bits of the segment start address must be forced)]653 bull1 -[(to zero. The alignment value given may be any power of two from 1 to 4096; in reality, the only values)]642 bull0 -[(supported are 1, 2, 4, 16, 256 and 4096, so if 8 is specified it will be rounded up to 16, and 32, 64 and 128)]631 bull0 -[(will all be rounded up to 256, and so on. Note that alignment to 4096-byte boundaries is a )(PharLap)]620 bull0 -[(extension to the format and may not be supported by all linkers.)]609 bull2 -[2(CLASS)0( can be used to specify the segment class; this feature indicates to the linker that segments of the)]592 bull1 -[(same class should be placed near each other in the output file. The class name can be any word, e.g.)]581 bull0 -[2(CLASS=CODE)0(.)]570 bull2 -[2(OVERLAY)0(, like )2(CLASS)0(, is specified with an arbitrary word as an argument, and provides overlay)]553 bull1 -[(information to an overlay-capable linker.)]542 bull2 -[(Segments can be declared as )2(USE16)0( or )2(USE32)0(, which has the effect of recording the choice in the object)]525 bull1 -[(file and also ensuring that NASM's default assembly mode when assembling in that segment is 16-bit or)]514 bull0 -[(32-bit respectively.)]503 bull2 -[(When writing )(OS/2 object files, you should declare 32-bit segments as )2(FLAT)0(, which causes the default)]486 bull1 -[(segment base for anything in the segment to be the special group )2(FLAT)0(, and also defines the group if it is)]475 bull0 -[(not already defined.)]464 bull2 -[(The )2(obj)0( file format also allows segments to be declared as having a pre-defined absolute segment)]447 bull1 -[(address, although no linkers are currently known to make sensible use of this feature; nevertheless, NASM)]436 bull0 -[(allows you to declare a segment such as )2(SEGMENT SCREEN ABSOLUTE=0xB800)0( if you need to. The)]425 bull0 -[2(ABSOLUTE)0( and )2(ALIGN)0( keywords are mutually exclusive.)]414 bull2 -[(NASM's default segment attributes are )2(PUBLIC)0(, )2(ALIGN=1)0(, no class, no overlay, and )2(USE16)0(.)]397 norm3 -[{/section-7.4.2 xa}2(GROUP)0(: Defining Groups of Segments)](7.4.2)377.8 subh3 -[(The )2(obj)0( format also allows segments to be grouped, so that a single segment register can be used to refer to)]360.8 norm1 -[(all the segments in a group. NASM therefore supplies the )2(GROUP)0( directive, whereby you can code)]349.8 norm2 -[2(segment data )]332.8 code1 -[2()]321.8 code0 -[2( ; some data )]310.8 code0 -[2()]299.8 code0 -[2(segment bss )]288.8 code0 -[2()]277.8 code0 -[2( ; some uninitialized data )]266.8 code0 -[2()]255.8 code0 -[2(group dgroup data bss)]244.8 code2 -[(which will define a group called )2(dgroup)0( to contain the segments )2(data)0( and )2(bss)0(. Like )2(SEGMENT)0(, )2(GROUP)]227.8 norm1 -[(causes the group name to be defined as a symbol, so that you can refer to a variable )2(var)0( in the )2(data)0( segment)]216.8 norm0 -[(as )2(var wrt data)0( or as )2(var wrt dgroup)0(, depending on which segment value is currently in your)]205.8 norm0 -[(segment register.)]194.8 norm2 -[(If you just refer to )2(var)0(, however, and )2(var)0( is declared in a segment which is part of a group, then NASM will)]177.8 norm1 -[(default to giving you the offset of )2(var)0( from the beginning of the )1(group)0(, not the )1(segment)0(. Therefore)]166.8 norm0 -[2(SEG var)0(, also, will return the group base rather than the segment base.)]155.8 norm2 -[(NASM will allow a segment to be part of more than one group, but will generate a warning if you do this.)]138.8 norm1 -[(Variables declared in a segment which is part of more than one group will default to being relative to the first)]127.8 norm0 -[(group that was defined to contain the segment.)]116.8 norm2 -(76)pageeven -restore showpage -%%Page: 77 77 -%%BeginPageSetup -save -%%EndPageSetup -/77 pa -[(A group does not have to contain any segments; you can still make )2(WRT)0( references to a group which does not)]681 norm1 -[(contain the variable you are referring to. OS/2, for example, defines the special group )2(FLAT)0( with no segments)]670 norm0 -[(in it.)]659 norm2 -[{/section-7.4.3 xa}2(UPPERCASE)0(: Disabling Case Sensitivity in Output)](7.4.3)639.8 subh3 -[(Although NASM itself is )(case sensitive, some OMF linkers are not; therefore it can be useful for NASM to)]622.8 norm1 -[(output single-case object files. The )2(UPPERCASE)0( format-specific directive causes all segment, group and)]611.8 norm0 -[(symbol names that are written to the object file to be forced to upper case just before being written. Within a)]600.8 norm0 -[(source file, NASM is still case-sensitive; but the object file can be written entirely in upper case if desired.)]589.8 norm2 -[2(UPPERCASE)0( is used alone on a line; it requires no parameters.)]572.8 norm3 -[{/section-7.4.4 xa}2(IMPORT)0(: Importing DLL Symbols)](7.4.4)553.6 subh3 -[(The )2(IMPORT)0( format-specific directive defines a symbol to be imported from a DLL, for use if you are)]536.6 norm1 -[(writing a DLL's )(import library in NASM. You still need to declare the symbol as )2(EXTERN)0( as well as using)]525.6 norm0 -[(the )2(IMPORT)0( directive.)]514.6 norm2 -[(The )2(IMPORT)0( directive takes two required parameters, separated by white space, which are \(respectively\) the)]497.6 norm1 -[(name of the symbol you wish to import and the name of the library you wish to import it from. For example:)]486.6 norm2 -[2( import WSAStartup wsock32.dll)]469.6 code3 -[(A third optional parameter gives the name by which the symbol is known in the library you are importing it)]452.6 norm1 -[(from, in case this is not the same as the name you wish the symbol to be known by to your code once you)]441.6 norm0 -[(have imported it. For example:)]430.6 norm2 -[2( import asyncsel wsock32.dll WSAAsyncSelect)]413.6 code3 -[{/section-7.4.5 xa}2(EXPORT)0(: Exporting DLL Symbols)](7.4.5)394.4 subh3 -[(The )2(EXPORT)0( format-specific directive defines a global symbol to be exported as a DLL symbol, for use if)]377.4 norm1 -[(you are writing a DLL in NASM. You still need to declare the symbol as )2(GLOBAL)0( as well as using the)]366.4 norm0 -[2(EXPORT)0( directive.)]355.4 norm2 -[2(EXPORT)0( takes one required parameter, which is the name of the symbol you wish to export, as it was defined)]338.4 norm1 -[(in your source file. An optional second parameter \(separated by white space from the first\) gives the )1(external)]327.4 norm0 -[(name of the symbol: the name by which you wish the symbol to be known to programs using the DLL. If this)]316.4 norm0 -[(name is the same as the internal name, you may leave the second parameter off.)]305.4 norm2 -[(Further parameters can be given to define attributes of the exported symbol. These parameters, like the)]288.4 norm1 -[(second, are separated by white space. If further parameters are given, the external name must also be)]277.4 norm0 -[(specified, even if it is the same as the internal name. The available attributes are:)]266.4 norm2 -[2(resident)0( indicates that the exported name is to be kept resident by the system loader. This is an)]249.4 bull1 -[(optimisation for frequently used symbols imported by name.)]238.4 bull2 -[2(nodata)0( indicates that the exported symbol is a function which does not make use of any initialized data.)]221.4 bull3 -[2(parm=NNN)0(, where )2(NNN)0( is an integer, sets the number of parameter words for the case in which the symbol)]204.4 bull1 -[(is a call gate between 32-bit and 16-bit segments.)]193.4 bull2 -[(An attribute which is just a number indicates that the symbol should be exported with an identifying)]176.4 bull1 -[(number \(ordinal\), and gives the desired number.)]165.4 bull2 -[(For example:)]148.4 norm3 -[2( export myfunc )]131.4 code1 -[2( export myfunc TheRealMoreFormalLookingFunctionName )]120.4 code0 -(77)pageodd -restore showpage -%%Page: 78 78 -%%BeginPageSetup -save -%%EndPageSetup -/78 pa -[2( export myfunc myfunc 1234 ; export by ordinal )]681 code0 -[2( export myfunc myfunc resident parm=23 nodata)]670 code2 -[{/section-7.4.6 xa}2(..start)0(: Defining the )(Program Entry Point)](7.4.6)650.8 subh3 -[2(OMF)0( linkers require exactly one of the object files being linked to define the program entry point, where)]633.8 norm1 -[(execution will begin when the program is run. If the object file that defines the entry point is assembled using)]622.8 norm0 -[(NASM, you specify the entry point by declaring the special symbol )2(..start)0( at the point where you wish)]611.8 norm0 -[(execution to begin.)]600.8 norm2 -[{/section-7.4.7 xa}2(obj)0( Extensions to the )2(EXTERN)0( Directive)](7.4.7)581.6 subh3 -[(If you declare an external symbol with the directive)]564.6 norm3 -[2( extern foo)]547.6 code3 -[(then references such as )2(mov ax,foo)0( will give you the offset of )2(foo)0( from its preferred segment base \(as)]530.6 norm1 -[(specified in whichever module )2(foo)0( is actually defined in\). So to access the contents of )2(foo)0( you will usually)]519.6 norm0 -[(need to do something like)]508.6 norm2 -[2( mov ax,seg foo ; get preferred segment base )]491.6 code1 -[2( mov es,ax ; move it into ES )]480.6 code0 -[2( mov ax,[es:foo] ; and use offset `foo' from it)]469.6 code2 -[(This is a little unwieldy, particularly if you know that an external is going to be accessible from a given)]452.6 norm1 -[(segment or group, say )2(dgroup)0(. So if )2(DS)0( already contained )2(dgroup)0(, you could simply code)]441.6 norm2 -[2( mov ax,[foo wrt dgroup])]424.6 code3 -[(However, having to type this every time you want to access )2(foo)0( can be a pain; so NASM allows you to)]407.6 norm1 -[(declare )2(foo)0( in the alternative form)]396.6 norm2 -[2( extern foo:wrt dgroup)]379.6 code3 -[(This form causes NASM to pretend that the preferred segment base of )2(foo)0( is in fact )2(dgroup)0(; so the)]362.6 norm1 -[(expression )2(seg foo)0( will now return )2(dgroup)0(, and the expression )2(foo)0( is equivalent to )2(foo wrt dgroup)0(.)]351.6 norm2 -[(This )(default-)2(WRT)0( mechanism can be used to make externals appear to be relative to any group or segment in)]334.6 norm1 -[(your program. It can also be applied to common variables: see ){/section-7.4.8 xl}(section 7.4.8){el}(.)]323.6 norm2 -[{/section-7.4.8 xa}2(obj)0( Extensions to the )2(COMMON)0( Directive)](7.4.8)304.4 subh3 -[(The )2(obj)0( format allows common variables to be either near)( or far)(; NASM allows you to specify which your)]287.4 norm1 -[(variables should be by the use of the syntax)]276.4 norm2 -[2(common nearvar 2:near ; `nearvar' is a near common )]259.4 code1 -[2(common farvar 10:far ; and `farvar' is far)]248.4 code2 -[(Far common variables may be greater in size than 64Kb, and so the OMF specification says that they are)]231.4 norm1 -[(declared as a number of )1(elements)0( of a given size. So a 10-byte far common variable could be declared as ten)]220.4 norm0 -[(one-byte elements, five two-byte elements, two five-byte elements or one ten-byte element.)]209.4 norm2 -[(Some )2(OMF)0( linkers require the )(element size, as well as the variable size, to match when resolving common)]192.4 norm1 -[(variables declared in more than one module. Therefore NASM must allow you to specify the element size on)]181.4 norm0 -[(your far common variables. This is done by the following syntax:)]170.4 norm2 -[2(common c_5by2 10:far 5 ; two five-byte elements )]153.4 code1 -[2(common c_2by5 10:far 2 ; five two-byte elements)]142.4 code2 -[(If no element size is specified, the default is 1. Also, the )2(FAR)0( keyword is not required when an element size is)]125.4 norm1 -[(specified, since only far commons may have element sizes at all. So the above declarations could equivalently)]114.4 norm0 -[(be)]103.4 norm2 -(78)pageeven -restore showpage -%%Page: 79 79 -%%BeginPageSetup -save -%%EndPageSetup -/79 pa -[2(common c_5by2 10:5 ; two five-byte elements )]681 code1 -[2(common c_2by5 10:2 ; five two-byte elements)]670 code2 -[(In addition to these extensions, the )2(COMMON)0( directive in )2(obj)0( also supports default-)2(WRT)0( specification like)]653 norm1 -[2(EXTERN)0( does \(explained in ){/section-7.4.7 xl}(section 7.4.7){el}(\). So you can also declare things like)]642 norm2 -[2(common foo 10:wrt dgroup )]625 code1 -[2(common bar 16:far 2:wrt data )]614 code0 -[2(common baz 24:wrt data:6)]603 code2 -[{/section-7.5 xa}2(win32)0(: Microsoft Win32 Object Files)](7.5)581.6 head3 -[(The )2(win32)0( output format generates Microsoft Win32 object files, suitable for passing to Microsoft linkers)]564.6 norm1 -[(such as )(Visual C++. Note that Borland Win32 compilers do not use this format, but use )2(obj)0( instead \(see)]553.6 norm0 -[{/section-7.4 xl}(section 7.4){el}(\).)]542.6 norm2 -[2(win32)0( provides a default output file-name extension of )2(.obj)0(.)]525.6 norm3 -[(Note that although Microsoft say that Win32 object files follow the )2(COFF)0( \(Common Object File Format\))]508.6 norm1 -[(standard, the object files produced by Microsoft Win32 compilers are not compatible with COFF linkers such)]497.6 norm0 -[(as DJGPP's, and vice versa. This is due to a difference of opinion over the precise semantics of PC-relative)]486.6 norm0 -[(relocations. To produce COFF files suitable for DJGPP, use NASM's )2(coff)0( output format; conversely, the)]475.6 norm0 -[2(coff)0( format does not produce object files that Win32 linkers can generate correct output from.)]464.6 norm2 -[{/section-7.5.1 xa}2(win32)0( Extensions to the )2(SECTION)0( Directive)](7.5.1)445.4 subh3 -[(Like the )2(obj)0( format, )2(win32)0( allows you to specify additional information on the )2(SECTION)0( directive line, to)]428.4 norm1 -[(control the type and properties of sections you declare. Section types and properties are generated)]417.4 norm0 -[(automatically by NASM for the )(standard section names )2(.text)0(, )2(.data)0( and )2(.bss)0(, but may still be)]406.4 norm0 -[(overridden by these qualifiers.)]395.4 norm2 -[(The available qualifiers are:)]378.4 norm3 -[2(code)0(, or equivalently )2(text)0(, defines the section to be a code section. This marks the section as readable)]361.4 bull1 -[(and executable, but not writable, and also indicates to the linker that the type of the section is code.)]350.4 bull2 -[2(data)0( and )2(bss)0( define the section to be a data section, analogously to )2(code)0(. Data sections are marked as)]333.4 bull1 -[(readable and writable, but not executable. )2(data)0( declares an initialized data section, whereas )2(bss)0( declares)]322.4 bull0 -[(an uninitialized data section.)]311.4 bull2 -[2(rdata)0( declares an initialized data section that is readable but not writable. Microsoft compilers use this)]294.4 bull1 -[(section to place constants in it.)]283.4 bull2 -[2(info)0( defines the section to be an )(informational section, which is not included in the executable file by the)]266.4 bull1 -[(linker, but may \(for example\) pass information )1(to)0( the linker. For example, declaring an )2(info)0(\226type section)]255.4 bull0 -[(called )2(.drectve)0( causes the linker to interpret the contents of the section as command-line options.)]244.4 bull2 -[2(align=)0(, used with a trailing number as in )2(obj)0(, gives the )(alignment requirements of the section. The)]227.4 bull1 -[(maximum you may specify is 64: the Win32 object file format contains no means to request a greater)]216.4 bull0 -[(section alignment than this. If alignment is not explicitly specified, the defaults are 16-byte alignment for)]205.4 bull0 -[(code sections, 8-byte alignment for rdata sections and 4-byte alignment for data \(and BSS\) sections.)]194.4 bull0 -[(Informational sections get a default alignment of 1 byte \(no alignment\), though the value does not matter.)]183.4 bull2 -[(The defaults assumed by NASM if you do not specify the above qualifiers are:)]166.4 norm3 -[2(section .text code align=16 )]149.4 code1 -[2(section .data data align=4 )]138.4 code0 -[2(section .rdata rdata align=8 )]127.4 code0 -[2(section .bss bss align=4)]116.4 code2 -(79)pageodd -restore showpage -%%Page: 80 80 -%%BeginPageSetup -save -%%EndPageSetup -/80 pa -[(Any other section name is treated by default like )2(.text)0(.)]681 norm3 -[{/section-7.5.2 xa}2(win32)0(: Safe Structured Exception Handling)](7.5.2)661.8 subh3 -[(Among other improvements in Windows XP SP2 and Windows Server 2003 Microsoft has introduced)]644.8 norm1 -[(concept of "safe structured exception handling." General idea is to collect handlers' entry points in designated)]633.8 norm0 -[(read-only table and have alleged entry point verified against this table prior exception control is passed to the)]622.8 norm0 -[(handler. In order for an executable module to be equipped with such "safe exception handler table," all object)]611.8 norm0 -[(modules on linker command line has to comply with certain criteria. If one single module among them does)]600.8 norm0 -[(not, then the table in question is omitted and above mentioned run-time checks will not be performed for)]589.8 norm0 -[(application in question. Table omission is by default silent and therefore can be easily overlooked. One can)]578.8 norm0 -[(instruct linker to refuse to produce binary without such table by passing )2(/safeseh)0( command line option.)]567.8 norm2 -[(Without regard to this run-time check merits it's natural to expect NASM to be capable of generating)]550.8 norm1 -[(modules suitable for )2(/safeseh)0( linking. From developer's viewpoint the problem is two-fold:)]539.8 norm2 -[(how to adapt modules not deploying exception handlers of their own;)]522.8 bull3 -[(how to adapt/develop modules utilizing custom exception handling;)]505.8 bull3 -[(Former can be easily achieved with any NASM version by adding following line to source code:)]488.8 norm3 -[2($@feat.00 equ 1)]471.8 code3 -[(As of version 2.03 NASM adds this absolute symbol automatically. If it's not already present to be precise.)]454.8 norm1 -[(I.e. if for whatever reason developer would choose to assign another value in source file, it would still be)]443.8 norm0 -[(perfectly possible.)]432.8 norm2 -[(Registering custom exception handler on the other hand requires certain "magic." As of version 2.03)]415.8 norm1 -[(additional directive is implemented, )2(safeseh)0(, which instructs the assembler to produce appropriately)]404.8 norm0 -[(formatted input data for above mentioned "safe exception handler table." Its typical use would be:)]393.8 norm2 -[2(section .text )]376.8 code1 -[2(extern _MessageBoxA@16 )]365.8 code0 -[2(%if __NASM_VERSION_ID__ >= 0x02030000 )]354.8 code0 -[2(safeseh handler ; register handler as "safe handler" )]343.8 code0 -[2(%endif )]332.8 code0 -[2(handler: )]321.8 code0 -[2( push DWORD 1 ; MB_OKCANCEL )]310.8 code0 -[2( push DWORD caption )]299.8 code0 -[2( push DWORD text )]288.8 code0 -[2( push DWORD 0 )]277.8 code0 -[2( call _MessageBoxA@16 )]266.8 code0 -[2( sub eax,1 ; incidentally suits as return value )]255.8 code0 -[2( ; for exception handler )]244.8 code0 -[2( ret )]233.8 code0 -[2(global _main )]222.8 code0 -[2(_main: )]211.8 code0 -[2( push DWORD handler )]200.8 code0 -[2( push DWORD [fs:0] )]189.8 code0 -[2( mov DWORD [fs:0],esp ; engage exception handler )]178.8 code0 -[2( xor eax,eax )]167.8 code0 -[2( mov eax,DWORD[eax] ; cause exception )]156.8 code0 -[2( pop DWORD [fs:0] ; disengage exception handler )]145.8 code0 -[2( add esp,4 )]134.8 code0 -[2( ret )]123.8 code0 -[2(text: db 'OK to rethrow, CANCEL to generate core dump',0 )]112.8 code0 -[2(caption:db 'SEGV',0 )]101.8 code0 -(80)pageeven -restore showpage -%%Page: 81 81 -%%BeginPageSetup -save -%%EndPageSetup -/81 pa -[2()]681 code0 -[2(section .drectve info )]670 code0 -[2( db '/defaultlib:user32.lib /defaultlib:msvcrt.lib ')]659 code2 -[(As you might imagine, it's perfectly possible to produce .exe binary with "safe exception handler table" and)]642 norm1 -[(yet engage unregistered exception handler. Indeed, handler is engaged by simply manipulating )2([fs:0])]631 norm0 -[(location at run-time, something linker has no power over, run-time that is. It should be explicitly mentioned)]620 norm0 -[(that such failure to register handler's entry point with )2(safeseh)0( directive has undesired side effect at)]609 norm0 -[(run-time. If exception is raised and unregistered handler is to be executed, the application is abruptly)]598 norm0 -[(terminated without any notification whatsoever. One can argue that system could at least have logged some)]587 norm0 -[(kind "non-safe exception handler in x.exe at address n" message in event log, but no, literally no notification)]576 norm0 -[(is provided and user is left with no clue on what caused application failure.)]565 norm2 -[(Finally, all mentions of linker in this paragraph refer to Microsoft linker version 7.x and later. Presence of)]548 norm1 -[2(@feat.00)0( symbol and input data for "safe exception handler table" causes no backward incompatibilities)]537 norm0 -[(and "safeseh" modules generated by NASM 2.03 and later can still be linked by earlier versions or)]526 norm0 -[(non-Microsoft linkers.)]515 norm2 -[{/section-7.6 xa}2(win64)0(: Microsoft Win64 Object Files)](7.6)493.6 head3 -[(The )2(win64)0( output format generates Microsoft Win64 object files, which is nearly 100% identical to the)]476.6 norm1 -[2(win32)0( object format \(){/section-7.5 xl}(section 7.5){el}(\) with the exception that it is meant to target 64-bit code and the x86-64)]465.6 norm0 -[(platform altogether. This object file is used exactly the same as the )2(win32)0( object format \(){/section-7.5 xl}(section 7.5){el}(\), in)]454.6 norm0 -[(NASM, with regard to this exception.)]443.6 norm2 -[{/section-7.6.1 xa}2(win64)0(: Writing Position-Independent Code)](7.6.1)424.4 subh3 -[(While )2(REL)0( takes good care of RIP-relative addressing, there is one aspect that is easy to overlook for a)]407.4 norm1 -[(Win64 programmer: indirect references. Consider a switch dispatch table:)]396.4 norm2 -[2( jmp QWORD[dsptch+rax*8] )]379.4 code1 -[2( ... )]368.4 code0 -[2(dsptch: dq case0 )]357.4 code0 -[2( dq case1 )]346.4 code0 -[2( ...)]335.4 code2 -[(Even novice Win64 assembler programmer will soon realize that the code is not 64-bit savvy. Most notably)]318.4 norm1 -[(linker will refuse to link it with)]307.4 norm0 -[(")2('ADDR32' relocation to '.text' invalid without /LARGEADDRESSAWARE:NO)0(". So)]296.4 norm0 -[([s]he will have to split jmp instruction as following:)]285.4 norm2 -[2( lea rbx,[rel dsptch] )]268.4 code1 -[2( jmp QWORD[rbx+rax*8])]257.4 code2 -[(What happens behind the scene is that effective address in )2(lea)0( is encoded relative to instruction pointer, or in)]240.4 norm1 -[(perfectly position-independent manner. But this is only part of the problem! Trouble is that in .dll context)]229.4 norm0 -[2(caseN)0( relocations will make their way to the final module and might have to be adjusted at .dll load time. To)]218.4 norm0 -[(be specific when it can't be loaded at preferred address. And when this occurs, pages with such relocations)]207.4 norm0 -[(will be rendered private to current process, which kind of undermines the idea of sharing .dll. But no worry,)]196.4 norm0 -[(it's trivial to fix:)]185.4 norm2 -[2( lea rbx,[rel dsptch] )]168.4 code1 -[2( add rbx,QWORD[rbx+rax*8] )]157.4 code0 -[2( jmp rbx )]146.4 code0 -[2( ... )]135.4 code0 -[2(dsptch: dq case0-dsptch )]124.4 code0 -[2( dq case1-dsptch )]113.4 code0 -[2( ...)]102.4 code2 -(81)pageodd -restore showpage -%%Page: 82 82 -%%BeginPageSetup -save -%%EndPageSetup -/82 pa -[(NASM version 2.03 and later provides another alternative, )2(wrt ..imagebase)0( operator, which returns)]681 norm1 -[(offset from base address of the current image, be it .exe or .dll module, therefore the name. For those)]670 norm0 -[(acquainted with PE-COFF format base address denotes start of )2(IMAGE_DOS_HEADER)0( structure. Here is)]659 norm0 -[(how to implement switch with these image-relative references:)]648 norm2 -[2( lea rbx,[rel dsptch] )]631 code1 -[2( mov eax,DWORD[rbx+rax*4] )]620 code0 -[2( sub rbx,dsptch wrt ..imagebase )]609 code0 -[2( add rbx,rax )]598 code0 -[2( jmp rbx )]587 code0 -[2( ... )]576 code0 -[2(dsptch: dd case0 wrt ..imagebase )]565 code0 -[2( dd case1 wrt ..imagebase)]554 code2 -[(One can argue that the operator is redundant. Indeed, snippet before last works just fine with any NASM)]537 norm1 -[(version and is not even Windows specific... The real reason for implementing )2(wrt ..imagebase)0( will)]526 norm0 -[(become apparent in next paragraph.)]515 norm2 -[(It should be noted that )2(wrt ..imagebase)0( is defined as 32-bit operand only:)]498 norm3 -[2( dd label wrt ..imagebase ; ok )]481 code1 -[2( dq label wrt ..imagebase ; bad )]470 code0 -[2( mov eax,label wrt ..imagebase ; ok )]459 code0 -[2( mov rax,label wrt ..imagebase ; bad)]448 code2 -[{/section-7.6.2 xa}2(win64)0(: Structured Exception Handling)](7.6.2)428.8 subh3 -[(Structured exception handing in Win64 is completely different matter from Win32. Upon exception program)]411.8 norm1 -[(counter value is noted, and linker-generated table comprising start and end addresses of all the functions [in)]400.8 norm0 -[(given executable module] is traversed and compared to the saved program counter. Thus so called)]389.8 norm0 -[2(UNWIND_INFO)0( structure is identified. If it's not found, then offending subroutine is assumed to be "leaf" and)]378.8 norm0 -[(just mentioned lookup procedure is attempted for its caller. In Win64 leaf function is such function that does)]367.8 norm0 -[(not call any other function )1(nor)0( modifies any Win64 non-volatile registers, including stack pointer. The latter)]356.8 norm0 -[(ensures that it's possible to identify leaf function's caller by simply pulling the value from the top of the stack.)]345.8 norm2 -[(While majority of subroutines written in assembler are not calling any other function, requirement for)]328.8 norm1 -[(non-volatile registers' immutability leaves developer with not more than 7 registers and no stack frame,)]317.8 norm0 -[(which is not necessarily what [s]he counted with. Customarily one would meet the requirement by saving)]306.8 norm0 -[(non-volatile registers on stack and restoring them upon return, so what can go wrong? If [and only if] an)]295.8 norm0 -[(exception is raised at run-time and no )2(UNWIND_INFO)0( structure is associated with such "leaf" function, the)]284.8 norm0 -[(stack unwind procedure will expect to find caller's return address on the top of stack immediately followed by)]273.8 norm0 -[(its frame. Given that developer pushed caller's non-volatile registers on stack, would the value on top point at)]262.8 norm0 -[(some code segment or even addressable space? Well, developer can attempt copying caller's return address to)]251.8 norm0 -[(the top of stack and this would actually work in some very specific circumstances. But unless developer can)]240.8 norm0 -[(guarantee that these circumstances are always met, it's more appropriate to assume worst case scenario, i.e.)]229.8 norm0 -[(stack unwind procedure going berserk. Relevant question is what happens then? Application is abruptly)]218.8 norm0 -[(terminated without any notification whatsoever. Just like in Win32 case, one can argue that system could at)]207.8 norm0 -[(least have logged "unwind procedure went berserk in x.exe at address n" in event log, but no, no trace of)]196.8 norm0 -[(failure is left.)]185.8 norm2 -[(Now, when we understand significance of the )2(UNWIND_INFO)0( structure, let's discuss what's in it and/or how)]168.8 norm1 -[(it's processed. First of all it is checked for presence of reference to custom language-specific exception)]157.8 norm0 -[(handler. If there is one, then it's invoked. Depending on the return value, execution flow is resumed)]146.8 norm0 -[(\(exception is said to be "handled"\), )1(or)0( rest of )2(UNWIND_INFO)0( structure is processed as following. Beside)]135.8 norm0 -[(optional reference to custom handler, it carries information about current callee's stack frame and where)]124.8 norm0 -[(non-volatile registers are saved. Information is detailed enough to be able to reconstruct contents of caller's)]113.8 norm0 -[(non-volatile registers upon call to current callee. And so caller's context is reconstructed, and then unwind)]102.8 norm0 -(82)pageeven -restore showpage -%%Page: 83 83 -%%BeginPageSetup -save -%%EndPageSetup -/83 pa -[(procedure is repeated, i.e. another )2(UNWIND_INFO)0( structure is associated, this time, with caller's instruction)]681 norm0 -[(pointer, which is then checked for presence of reference to language-specific handler, etc. The procedure is)]670 norm0 -[(recursively repeated till exception is handled. As last resort system "handles" it by generating memory core)]659 norm0 -[(dump and terminating the application.)]648 norm2 -[(As for the moment of this writing NASM unfortunately does not facilitate generation of above mentioned)]631 norm1 -[(detailed information about stack frame layout. But as of version 2.03 it implements building blocks for)]620 norm0 -[(generating structures involved in stack unwinding. As simplest example, here is how to deploy custom)]609 norm0 -[(exception handler for leaf function:)]598 norm2 -[2(default rel )]581 code1 -[2(section .text )]570 code0 -[2(extern MessageBoxA )]559 code0 -[2(handler: )]548 code0 -[2( sub rsp,40 )]537 code0 -[2( mov rcx,0 )]526 code0 -[2( lea rdx,[text] )]515 code0 -[2( lea r8,[caption] )]504 code0 -[2( mov r9,1 ; MB_OKCANCEL )]493 code0 -[2( call MessageBoxA )]482 code0 -[2( sub eax,1 ; incidentally suits as return value )]471 code0 -[2( ; for exception handler )]460 code0 -[2( add rsp,40 )]449 code0 -[2( ret )]438 code0 -[2(global main )]427 code0 -[2(main: )]416 code0 -[2( xor rax,rax )]405 code0 -[2( mov rax,QWORD[rax] ; cause exception )]394 code0 -[2( ret )]383 code0 -[2(main_end: )]372 code0 -[2(text: db 'OK to rethrow, CANCEL to generate core dump',0 )]361 code0 -[2(caption:db 'SEGV',0 )]350 code0 -[2()]339 code0 -[2(section .pdata rdata align=4 )]328 code0 -[2( dd main wrt ..imagebase )]317 code0 -[2( dd main_end wrt ..imagebase )]306 code0 -[2( dd xmain wrt ..imagebase )]295 code0 -[2(section .xdata rdata align=8 )]284 code0 -[2(xmain: db 9,0,0,0 )]273 code0 -[2( dd handler wrt ..imagebase )]262 code0 -[2(section .drectve info )]251 code0 -[2( db '/defaultlib:user32.lib /defaultlib:msvcrt.lib ')]240 code2 -[(What you see in )2(.pdata)0( section is element of the "table comprising start and end addresses of function")]223 norm1 -[(along with reference to associated )2(UNWIND_INFO)0( structure. And what you see in )2(.xdata)0( section is)]212 norm0 -[2(UNWIND_INFO)0( structure describing function with no frame, but with designated exception handler.)]201 norm0 -[(References are )1(required)0( to be image-relative \(which is the real reason for implementing)]190 norm0 -[2(wrt ..imagebase)0( operator\). It should be noted that )2(rdata align=n)0(, as well as)]179 norm0 -[2(wrt ..imagebase)0(, are optional in these two segments' contexts, i.e. can be omitted. Latter means that )1(all)]168 norm0 -[(32-bit references, not only above listed required ones, placed into these two segments turn out)]157 norm0 -[(image-relative. Why is it important to understand? Developer is allowed to append handler-specific data to)]146 norm0 -[2(UNWIND_INFO)0( structure, and if [s]he adds a 32-bit reference, then [s]he will have to remember to adjust its)]135 norm0 -[(value to obtain the real pointer.)]124 norm2 -(83)pageodd -restore showpage -%%Page: 84 84 -%%BeginPageSetup -save -%%EndPageSetup -/84 pa -[(As already mentioned, in Win64 terms leaf function is one that does not call any other function )1(nor)0( modifies)]681 norm1 -[(any non-volatile register, including stack pointer. But it's not uncommon that assembler programmer plans to)]670 norm0 -[(utilize every single register and sometimes even have variable stack frame. Is there anything one can do with)]659 norm0 -[(bare building blocks? I.e. besides manually composing fully-fledged )2(UNWIND_INFO)0( structure, which would)]648 norm0 -[(surely be considered error-prone? Yes, there is. Recall that exception handler is called first, before stack)]637 norm0 -[(layout is analyzed. As it turned out, it's perfectly possible to manipulate current callee's context in custom)]626 norm0 -[(handler in manner that permits further stack unwinding. General idea is that handler would not actually)]615 norm0 -[("handle" the exception, but instead restore callee's context, as it was at its entry point and thus mimic leaf)]604 norm0 -[(function. In other words, handler would simply undertake part of unwinding procedure. Consider following)]593 norm0 -[(example:)]582 norm2 -[2(function: )]565 code1 -[2( mov rax,rsp ; copy rsp to volatile register )]554 code0 -[2( push r15 ; save non-volatile registers )]543 code0 -[2( push rbx )]532 code0 -[2( push rbp )]521 code0 -[2( mov r11,rsp ; prepare variable stack frame )]510 code0 -[2( sub r11,rcx )]499 code0 -[2( and r11,-64 )]488 code0 -[2( mov QWORD[r11],rax ; check for exceptions )]477 code0 -[2( mov rsp,r11 ; allocate stack frame )]466 code0 -[2( mov QWORD[rsp],rax ; save original rsp value )]455 code0 -[2(magic_point: )]444 code0 -[2( ... )]433 code0 -[2( mov r11,QWORD[rsp] ; pull original rsp value )]422 code0 -[2( mov rbp,QWORD[r11-24] )]411 code0 -[2( mov rbx,QWORD[r11-16] )]400 code0 -[2( mov r15,QWORD[r11-8] )]389 code0 -[2( mov rsp,r11 ; destroy frame )]378 code0 -[2( ret)]367 code2 -[(The keyword is that up to )2(magic_point)0( original )2(rsp)0( value remains in chosen volatile register and no)]350 norm1 -[(non-volatile register, except for )2(rsp)0(, is modified. While past )2(magic_point)0( )2(rsp)0( remains constant till the)]339 norm0 -[(very end of the )2(function)0(. In this case custom language-specific exception handler would look like this:)]328 norm2 -[2(EXCEPTION_DISPOSITION handler \(EXCEPTION_RECORD *rec,ULONG64 frame, )]311 code1 -[2( CONTEXT *context,DISPATCHER_CONTEXT *disp\) )]300 code0 -[2({ ULONG64 *rsp; )]289 code0 -[2( if \(context->Rip<\(ULONG64\)magic_point\) )]278 code0 -[2( rsp = \(ULONG64 *\)context->Rax; )]267 code0 -[2( else )]256 code0 -[2( { rsp = \(\(ULONG64 **\)context->Rsp\)[0]; )]245 code0 -[2( context->Rbp = rsp[-3]; )]234 code0 -[2( context->Rbx = rsp[-2]; )]223 code0 -[2( context->R15 = rsp[-1]; )]212 code0 -[2( } )]201 code0 -[2( context->Rsp = \(ULONG64\)rsp; )]190 code0 -[2()]179 code0 -[2( memcpy \(disp->ContextRecord,context,sizeof\(CONTEXT\)\); )]168 code0 -[2( RtlVirtualUnwind\(UNW_FLAG_NHANDLER,disp->ImageBase, )]157 code0 -[2( dips->ControlPc,disp->FunctionEntry,disp->ContextRecord, )]146 code0 -[2( &disp->HandlerData,&disp->EstablisherFrame,NULL\); )]135 code0 -[2( return ExceptionContinueSearch; )]124 code0 -[2(})]113 code2 -(84)pageeven -restore showpage -%%Page: 85 85 -%%BeginPageSetup -save -%%EndPageSetup -/85 pa -[(As custom handler mimics leaf function, corresponding )2(UNWIND_INFO)0( structure does not have to contain)]681 norm1 -[(any information about stack frame and its layout.)]670 norm2 -[{/section-7.7 xa}2(coff)0(: )(Common Object File Format)](7.7)648.6 head3 -[(The )2(coff)0( output type produces )2(COFF)0( object files suitable for linking with the )(DJGPP linker.)]631.6 norm3 -[2(coff)0( provides a default output file-name extension of )2(.o)0(.)]614.6 norm3 -[(The )2(coff)0( format supports the same extensions to the )2(SECTION)0( directive as )2(win32)0( does, except that the)]597.6 norm1 -[2(align)0( qualifier and the )2(info)0( section type are not supported.)]586.6 norm2 -[{/section-7.8 xa}2(macho32)0( and )2(macho64)0(: )(Mach Object File Format)](7.8)565.2 head3 -[(The )2(macho32)0( and )2(macho64)0( output formts produces )2(Mach-O)0( object files suitable for linking with the)]548.2 norm1 -[(MacOS X linker. )2(macho)0( is a synonym for )2(macho32)0(.)]537.2 norm2 -[2(macho)0( provides a default output file-name extension of )2(.o)0(.)]520.2 norm3 -[{/section-7.9 xa}2(elf32)0( and )2(elf64)0(: )(Executable and Linkable Format Object Files)](7.9)498.8 head3 -[(The )2(elf32)0( and )2(elf64)0( output formats generate )2(ELF32 and ELF64)0( \(Executable and Linkable Format\))]481.8 norm1 -[(object files, as used by Linux as well as )(Unix System V, including )(Solaris x86, )(UnixWare and )(SCO Unix.)]470.8 norm0 -[2(elf)0( provides a default output file-name extension of )2(.o)0(. )2(elf)0( is a synonym for )2(elf32)0(.)]459.8 norm2 -[{/section-7.9.1 xa}(ELF specific directive )2(osabi)](7.9.1)440.6 subh3 -[(The ELF header specifies the application binary interface for the target operating system \(OSABI\). This field)]423.6 norm1 -[(can be set by using the )2(osabi)0( directive with the numeric value \(0-255\) of the target system. If this directive)]412.6 norm0 -[(is not used, the default value will be "UNIX System V ABI" \(0\) which will work on most systems which)]401.6 norm0 -[(support ELF.)]390.6 norm2 -[{/section-7.9.2 xa}2(elf)0( Extensions to the )2(SECTION)0( Directive)](7.9.2)371.4 subh3 -[(Like the )2(obj)0( format, )2(elf)0( allows you to specify additional information on the )2(SECTION)0( directive line, to)]354.4 norm1 -[(control the type and properties of sections you declare. Section types and properties are generated)]343.4 norm0 -[(automatically by NASM for the )(standard section names, but may still be overridden by these qualifiers.)]332.4 norm2 -[(The available qualifiers are:)]315.4 norm3 -[2(alloc)0( defines the section to be one which is loaded into memory when the program is run. )2(noalloc)]298.4 bull1 -[(defines it to be one which is not, such as an informational or comment section.)]287.4 bull2 -[2(exec)0( defines the section to be one which should have execute permission when the program is run.)]270.4 bull1 -[2(noexec)0( defines it as one which should not.)]259.4 bull2 -[2(write)0( defines the section to be one which should be writable when the program is run. )2(nowrite)0( defines)]242.4 bull1 -[(it as one which should not.)]231.4 bull2 -[2(progbits)0( defines the section to be one with explicit contents stored in the object file: an ordinary code)]214.4 bull1 -[(or data section, for example, )2(nobits)0( defines the section to be one with no explicit contents given, such as)]203.4 bull0 -[(a BSS section.)]192.4 bull2 -[2(align=)0(, used with a trailing number as in )2(obj)0(, gives the )(alignment requirements of the section.)]175.4 bull3 -[2(tls)0( defines the section to be one which contains thread local variables.)]158.4 bull3 -[(The defaults assumed by NASM if you do not specify the above qualifiers are:)]141.4 norm3 -[( )( )( )( )( )( )( )( )( )]124.4 norm3 -(85)pageodd -restore showpage -%%Page: 86 86 -%%BeginPageSetup -save -%%EndPageSetup -/86 pa -[2(section .text progbits alloc exec nowrite align=16 )]681 code1 -[2(section .rodata progbits alloc noexec nowrite align=4 )]670 code0 -[2(section .lrodata progbits alloc noexec nowrite align=4 )]659 code0 -[2(section .data progbits alloc noexec write align=4 )]648 code0 -[2(section .ldata progbits alloc noexec write align=4 )]637 code0 -[2(section .bss nobits alloc noexec write align=4 )]626 code0 -[2(section .lbss nobits alloc noexec write align=4 )]615 code0 -[2(section .tdata progbits alloc noexec write align=4 tls )]604 code0 -[2(section .tbss nobits alloc noexec write align=4 tls )]593 code0 -[2(section .comment progbits noalloc noexec nowrite align=1 )]582 code0 -[2(section other progbits alloc noexec nowrite align=1)]571 code2 -[(\(Any section name other than those in the above table is treated by default like )2(other)0( in the above table.)]554 norm1 -[(Please note that section names are case sensitive.\))]543 norm2 -[{/section-7.9.3 xa}(Position-Independent Code)(: )2(elf)0( Special Symbols and )2(WRT)](7.9.3)523.8 subh3 -[(The )2(ELF)0( specification contains enough features to allow position-independent code \(PIC\) to be written,)]506.8 norm1 -[(which makes )(ELF shared libraries very flexible. However, it also means NASM has to be able to generate a)]495.8 norm0 -[(variety of ELF specific relocation types in ELF object files, if it is to be an assembler which can write PIC.)]484.8 norm2 -[(Since )2(ELF)0( does not support segment-base references, the )2(WRT)0( operator is not used for its normal purpose;)]467.8 norm1 -[(therefore NASM's )2(elf)0( output format makes use of )2(WRT)0( for a different purpose, namely the PIC-specific)]456.8 norm0 -[(relocation types.)]445.8 norm2 -[2(elf)0( defines five special symbols which you can use as the right-hand side of the )2(WRT)0( operator to obtain PIC)]428.8 norm1 -[(relocation types. They are )2(..gotpc)0(, )2(..gotoff)0(, )2(..got)0(, )2(..plt)0( and )2(..sym)0(. Their functions are)]417.8 norm0 -[(summarized here:)]406.8 norm2 -[(Referring to the symbol marking the global offset table base using )2(wrt ..gotpc)0( will end up giving the)]389.8 bull1 -[(distance from the beginning of the current section to the global offset table.)]378.8 bull0 -[(\()2(_GLOBAL_OFFSET_TABLE_)0( is the standard symbol name used to refer to the )(GOT.\) So you would then)]367.8 bull0 -[(need to add )2($$)0( to the result to get the real address of the GOT.)]356.8 bull2 -[(Referring to a location in one of your own sections using )2(wrt ..gotoff)0( will give the distance from the)]339.8 bull1 -[(beginning of the GOT to the specified location, so that adding on the address of the GOT would give the)]328.8 bull0 -[(real address of the location you wanted.)]317.8 bull2 -[(Referring to an external or global symbol using )2(wrt ..got)0( causes the linker to build an entry )1(in)0( the)]300.8 bull1 -[(GOT containing the address of the symbol, and the reference gives the distance from the beginning of the)]289.8 bull0 -[(GOT to the entry; so you can add on the address of the GOT, load from the resulting address, and end up)]278.8 bull0 -[(with the address of the symbol.)]267.8 bull2 -[(Referring to a procedure name using )2(wrt ..plt)0( causes the linker to build a )(procedure linkage table)]250.8 bull1 -[(entry for the symbol, and the reference gives the address of the )(PLT entry. You can only use this in)]239.8 bull0 -[(contexts which would generate a PC-relative relocation normally \(i.e. as the destination for )2(CALL)0( or )2(JMP)0(\),)]228.8 bull0 -[(since ELF contains no relocation type to refer to PLT entries absolutely.)]217.8 bull2 -[(Referring to a symbol name using )2(wrt ..sym)0( causes NASM to write an ordinary relocation, but instead)]200.8 bull1 -[(of making the relocation relative to the start of the section and then adding on the offset to the symbol, it)]189.8 bull0 -[(will write a relocation record aimed directly at the symbol in question. The distinction is a necessary one)]178.8 bull0 -[(due to a peculiarity of the dynamic linker.)]167.8 bull2 -[(A fuller explanation of how to use these relocation types to write shared libraries entirely in NASM is given in)]150.8 norm1 -[{/section-9.2 xl}(section 9.2){el}(.)]139.8 norm2 -(86)pageeven -restore showpage -%%Page: 87 87 -%%BeginPageSetup -save -%%EndPageSetup -/87 pa -[{/section-7.9.4 xa}(Thread Local Storage)(: )2(elf)0( Special Symbols and )2(WRT)](7.9.4)678.8 subh3 -[(In ELF32 mode, referring to an external or global symbol using )2(wrt ..tlsie)0( )( causes the linker to build)]661.8 bull1 -[(an entry )1(in)0( the GOT containing the offset of the symbol within the TLS block, so you can access the value)]650.8 bull0 -[(of the symbol with code such as:)]639.8 bull2 -[2( mov eax,[tid wrt ..tlsie] )]622.8 code1 -[2( mov [gs:eax],ebx)]611.8 code2 -[(In ELF64 mode, referring to an external or global symbol using )2(wrt ..gottpoff)0( )( causes the linker to)]594.8 bull1 -[(build an entry )1(in)0( the GOT containing the offset of the symbol within the TLS block, so you can access the)]583.8 bull0 -[(value of the symbol with code such as:)]572.8 bull2 -[2( mov rax,[rel tid wrt ..gottpoff] )]555.8 code1 -[2( mov rcx,[fs:rax])]544.8 code2 -[{/section-7.9.5 xa}2(elf)0( Extensions to the )2(GLOBAL)0( Directive)](7.9.5)525.6 subh3 -[2(ELF)0( object files can contain more information about a global symbol than just its address: they can contain)]508.6 norm1 -[(the )(size of the symbol and its )(type as well. These are not merely debugger conveniences, but are actually)]497.6 norm0 -[(necessary when the program being written is a )(shared library. NASM therefore supports some extensions to)]486.6 norm0 -[(the )2(GLOBAL)0( directive, allowing you to specify these features.)]475.6 norm2 -[(You can specify whether a global variable is a function or a data object by suffixing the name with a colon)]458.6 norm1 -[(and the word )2(function)0( or )2(data)0(. \()2(object)0( is a synonym for )2(data)0(.\) For example:)]447.6 norm2 -[2(global hashlookup:function, hashtable:data)]430.6 code3 -[(exports the global symbol )2(hashlookup)0( as a function and )2(hashtable)0( as a data object.)]413.6 norm3 -[(Optionally, you can control the ELF visibility of the symbol. Just add one of the visibility keywords:)]396.6 norm1 -[2(default)0(, )2(internal)0(, )2(hidden)0(, or )2(protected)0(. The default is )2(default)0( of course. For example, to make)]385.6 norm0 -[2(hashlookup)0( hidden:)]374.6 norm2 -[2(global hashlookup:function hidden)]357.6 code3 -[(You can also specify the size of the data associated with the symbol, as a numeric expression \(which may)]340.6 norm1 -[(involve labels, and even forward references\) after the type specifier. Like this:)]329.6 norm2 -[2(global hashtable:data \(hashtable.end - hashtable\) )]312.6 code1 -[2()]301.6 code0 -[2(hashtable: )]290.6 code0 -[2( db this,that,theother ; some data here )]279.6 code0 -[2(.end:)]268.6 code2 -[(This makes NASM automatically calculate the length of the table and place that information into the )2(ELF)]251.6 norm1 -[(symbol table.)]240.6 norm2 -[(Declaring the type and size of global symbols is necessary when writing shared library code. For more)]223.6 norm1 -[(information, see ){/section-9.2.4 xl}(section 9.2.4){el}(.)]212.6 norm2 -[{/section-7.9.6 xa}2(elf)0( Extensions to the )2(COMMON)0( Directive )](7.9.6)193.4 subh3 -[2(ELF)0( also allows you to specify alignment requirements )(on common variables. This is done by putting a)]176.4 norm1 -[(number \(which must be a power of two\) after the name and size of the common variable, separated \(as usual\))]165.4 norm0 -[(by a colon. For example, an array of doublewords would benefit from 4-byte alignment:)]154.4 norm2 -[2(common dwordarray 128:4)]137.4 code3 -[(This declares the total size of the array to be 128 bytes, and requires that it be aligned on a 4-byte boundary.)]120.4 norm3 -(87)pageodd -restore showpage -%%Page: 88 88 -%%BeginPageSetup -save -%%EndPageSetup -/88 pa -[{/section-7.9.7 xa}(16-bit code and ELF )](7.9.7)678.8 subh3 -[(The )2(ELF32)0( specification doesn't provide relocations for 8- and 16-bit values, but the GNU )2(ld)0( linker adds)]661.8 norm1 -[(these as an extension. NASM can generate GNU-compatible relocations, to allow 16-bit code to be linked as)]650.8 norm0 -[(ELF using GNU )2(ld)0(. If NASM is used with the )2(-w+gnu-elf-extensions)0( option, a warning is issued)]639.8 norm0 -[(when one of these relocations is generated.)]628.8 norm2 -[{/section-7.9.8 xa}(Debug formats and ELF )](7.9.8)609.6 subh3 -[2(ELF32)0( and )2(ELF64)0( provide debug information in )2(STABS)0( and )2(DWARF)0( formats. Line number information is)]592.6 norm1 -[(generated for all executable sections, but please note that only the ".text" section is executable by default.)]581.6 norm2 -[{/section-7.10 xa}2(aout)0(: Linux )2(a.out)0( Object Files)](7.10)560.2 head3 -[(The )2(aout)0( format generates )2(a.out)0( object files, in the form used by early Linux systems \(current Linux)]543.2 norm1 -[(systems use ELF, see ){/section-7.9 xl}(section 7.9){el}(.\) These differ from other )2(a.out)0( object files in that the magic number in the)]532.2 norm0 -[(first four bytes of the file is different; also, some implementations of )2(a.out)0(, for example NetBSD's, support)]521.2 norm0 -[(position-independent code, which Linux's implementation does not.)]510.2 norm2 -[2(a.out)0( provides a default output file-name extension of )2(.o)0(.)]493.2 norm3 -[2(a.out)0( is a very simple object format. It supports no special directives, no special symbols, no use of )2(SEG)0( or)]476.2 norm1 -[2(WRT)0(, and no extensions to any standard directives. It supports only the three )(standard section names )2(.text)0(,)]465.2 norm0 -[2(.data)0( and )2(.bss)0(.)]454.2 norm2 -[{/section-7.11 xa}2(aoutb)0(: )(NetBSD/)(FreeBSD/)(OpenBSD )2(a.out)0( Object Files)](7.11)432.8 head3 -[(The )2(aoutb)0( format generates )2(a.out)0( object files, in the form used by the various free )2(BSD Unix)0( clones,)]415.8 norm1 -[2(NetBSD)0(, )2(FreeBSD)0( and )2(OpenBSD)0(. For simple object files, this object format is exactly the same as )2(aout)]404.8 norm0 -[(except for the magic number in the first four bytes of the file. However, the )2(aoutb)0( format supports)]393.8 norm0 -[(position-independent code in the same way as the )2(elf)0( format, so you can use it to write )2(BSD)0( )(shared libraries.)]382.8 norm2 -[2(aoutb)0( provides a default output file-name extension of )2(.o)0(.)]365.8 norm3 -[2(aoutb)0( supports no special directives, no special symbols, and only the three )(standard section names )2(.text)0(,)]348.8 norm1 -[2(.data)0( and )2(.bss)0(. However, it also supports the same use of )2(WRT)0( as )2(elf)0( does, to provide)]337.8 norm0 -[(position-independent code relocation types. See ){/section-7.9.3 xl}(section 7.9.3){el}( for full documentation of this feature.)]326.8 norm2 -[2(aoutb)0( also supports the same extensions to the )2(GLOBAL)0( directive as )2(elf)0( does: see ){/section-7.9.5 xl}(section 7.9.5){el}( for)]309.8 norm1 -[(documentation of this.)]298.8 norm2 -[{/section-7.12 xa}2(as86)0(: )(Minix/Linux)( )2(as86)0( Object Files)](7.12)277.4 head3 -[(The Minix/Linux 16-bit assembler )2(as86)0( has its own non-standard object file format. Although its)]260.4 norm1 -[(companion linker )2(ld86)0( produces something close to ordinary )2(a.out)0( binaries as output, the object file)]249.4 norm0 -[(format used to communicate between )2(as86)0( and )2(ld86)0( is not itself )2(a.out)0(.)]238.4 norm2 -[(NASM supports this format, just in case it is useful, as )2(as86)0(. )2(as86)0( provides a default output file-name)]221.4 norm1 -[(extension of )2(.o)0(.)]210.4 norm2 -[2(as86)0( is a very simple object format \(from the NASM user's point of view\). It supports no special directives,)]193.4 norm1 -[(no use of )2(SEG)0( or )2(WRT)0(, and no extensions to any standard directives. It supports only the three )(standard section)]182.4 norm0 -[(names )2(.text)0(, )2(.data)0( and )2(.bss)0(. The only special symbol supported is )2(..start)0(.)]171.4 norm2 -[{/section-7.13 xa}2(rdf)0(: )(Relocatable Dynamic Object File Format)](7.13)150 head3 -[(The )2(rdf)0( output format produces )2(RDOFF)0( object files. )2(RDOFF)0( \(Relocatable Dynamic Object File Format\) is a)]133 norm1 -[(home-grown object-file format, designed alongside NASM itself and reflecting in its file format the internal)]122 norm0 -[(structure of the assembler.)]111 norm2 -(88)pageeven -restore showpage -%%Page: 89 89 -%%BeginPageSetup -save -%%EndPageSetup -/89 pa -[2(RDOFF)0( is not used by any well-known operating systems. Those writing their own systems, however, may)]681 norm1 -[(well wish to use )2(RDOFF)0( as their object format, on the grounds that it is designed primarily for simplicity and)]670 norm0 -[(contains very little file-header bureaucracy.)]659 norm2 -[(The Unix NASM archive, and the DOS archive which includes sources, both contain an )2(rdoff)0( subdirectory)]642 norm1 -[(holding a set of RDOFF utilities: an RDF linker, an )2(RDF)0( static-library manager, an RDF file dump utility,)]631 norm0 -[(and a program which will load and execute an RDF executable under Linux.)]620 norm2 -[2(rdf)0( supports only the )(standard section names )2(.text)0(, )2(.data)0( and )2(.bss)0(.)]603 norm3 -[{/section-7.13.1 xa}(Requiring a Library: The )2(LIBRARY)0( Directive)](7.13.1)583.8 subh3 -[2(RDOFF)0( contains a mechanism for an object file to demand a given library to be linked to the module, either at)]566.8 norm1 -[(load time or run time. This is done by the )2(LIBRARY)0( directive, which takes one argument which is the name)]555.8 norm0 -[(of the module:)]544.8 norm2 -[2( library mylib.rdl)]527.8 code3 -[{/section-7.13.2 xa}(Specifying a Module Name: The )2(MODULE)0( Directive)](7.13.2)508.6 subh3 -[(Special )2(RDOFF)0( header record is used to store the name of the module. It can be used, for example, by)]491.6 norm1 -[(run-time loader to perform dynamic linking. )2(MODULE)0( directive takes one argument which is the name of)]480.6 norm0 -[(current module:)]469.6 norm2 -[2( module mymodname)]452.6 code3 -[(Note that when you statically link modules and tell linker to strip the symbols from output file, all module)]435.6 norm1 -[(names will be stripped too. To avoid it, you should start module names with )2($)0(, like:)]424.6 norm2 -[2( module $kernel.core)]407.6 code3 -[{/section-7.13.3 xa}2(rdf)0( Extensions to the )2(GLOBAL)0( Directive)](7.13.3)388.4 subh3 -[2(RDOFF)0( global symbols can contain additional information needed by the static linker. You can mark a global)]371.4 norm1 -[(symbol as exported, thus telling the linker do not strip it from target executable or library file. Like in )2(ELF)0(,)]360.4 norm0 -[(you can also specify whether an exported symbol is a procedure \(function\) or data object.)]349.4 norm2 -[(Suffixing the name with a colon and the word )2(export)0( you make the symbol exported:)]332.4 norm3 -[2( global sys_open:export)]315.4 code3 -[(To specify that exported symbol is a procedure \(function\), you add the word )2(proc)0( or )2(function)0( after)]298.4 norm1 -[(declaration:)]287.4 norm2 -[2( global sys_open:export proc)]270.4 code3 -[(Similarly, to specify exported data object, add the word )2(data)0( or )2(object)0( to the directive:)]253.4 norm3 -[2( global kernel_ticks:export data)]236.4 code3 -[{/section-7.13.4 xa}2(rdf)0( Extensions to the )2(EXTERN)0( Directive)](7.13.4)217.2 subh3 -[(By default the )2(EXTERN)0( directive in )2(RDOFF)0( declares a "pure external" symbol \(i.e. the static linker will)]200.2 norm1 -[(complain if such a symbol is not resolved\). To declare an "imported" symbol, which must be resolved later)]189.2 norm0 -[(during a dynamic linking phase, )2(RDOFF)0( offers an additional )2(import)0( modifier. As in )2(GLOBAL)0(, you can also)]178.2 norm0 -[(specify whether an imported symbol is a procedure \(function\) or data object. For example:)]167.2 norm2 -[2( library $libc )]150.2 code1 -[2( extern _open:import )]139.2 code0 -[2( extern _printf:import proc )]128.2 code0 -[2( extern _errno:import data)]117.2 code2 -(89)pageodd -restore showpage -%%Page: 90 90 -%%BeginPageSetup -save -%%EndPageSetup -/90 pa -[(Here the directive )2(LIBRARY)0( is also included, which gives the dynamic linker a hint as to where to find)]681 norm1 -[(requested symbols.)]670 norm2 -[{/section-7.14 xa}2(dbg)0(: Debugging Format)](7.14)648.6 head3 -[(The )2(dbg)0( output format is not built into NASM in the default configuration. If you are building your own)]631.6 norm1 -[(NASM executable from the sources, you can define )2(OF_DBG)0( in )2(output/outform.h)0( or on the compiler)]620.6 norm0 -[(command line, and obtain the )2(dbg)0( output format.)]609.6 norm2 -[(The )2(dbg)0( format does not output an object file as such; instead, it outputs a text file which contains a complete)]592.6 norm1 -[(list of all the transactions between the main body of NASM and the output-format back end module. It is)]581.6 norm0 -[(primarily intended to aid people who want to write their own output drivers, so that they can get a clearer idea)]570.6 norm0 -[(of the various requests the main program makes of the output driver, and in what order they happen.)]559.6 norm2 -[(For simple files, one can easily use the )2(dbg)0( format like this:)]542.6 norm3 -[2(nasm -f dbg filename.asm)]525.6 code3 -[(which will generate a diagnostic file called )2(filename.dbg)0(. However, this will not work well on files)]508.6 norm1 -[(which were designed for a different object format, because each object format defines its own macros \(usually)]497.6 norm0 -[(user-level forms of directives\), and those macros will not be defined in the )2(dbg)0( format. Therefore it can be)]486.6 norm0 -[(useful to run NASM twice, in order to do the preprocessing with the native object format selected:)]475.6 norm2 -[2(nasm -e -f rdf -o rdfprog.i rdfprog.asm )]458.6 code1 -[2(nasm -a -f dbg rdfprog.i)]447.6 code2 -[(This preprocesses )2(rdfprog.asm)0( into )2(rdfprog.i)0(, keeping the )2(rdf)0( object format selected in order to)]430.6 norm1 -[(make sure RDF special directives are converted into primitive form correctly. Then the preprocessed source is)]419.6 norm0 -[(fed through the )2(dbg)0( format to generate the final diagnostic output.)]408.6 norm2 -[(This workaround will still typically not work for programs intended for )2(obj)0( format, because the )2(obj)]391.6 norm1 -[2(SEGMENT)0( and )2(GROUP)0( directives have side effects of defining the segment and group names as symbols; )2(dbg)]380.6 norm0 -[(will not do this, so the program will not assemble. You will have to work around that by defining the symbols)]369.6 norm0 -[(yourself \(using )2(EXTERN)0(, for example\) if you really need to get a )2(dbg)0( trace of an )2(obj)0(\226specific source file.)]358.6 norm2 -[2(dbg)0( accepts any section name and any directives at all, and logs them all to its output file.)]341.6 norm3 -(90)pageeven -restore showpage -%%Page: 91 91 -%%BeginPageSetup -save -%%EndPageSetup -/91 pa -[{/chapter-8 xa}(Chapter 8: Writing 16-bit Code \(DOS, Windows 3/3.1\))]642.8 chap3 -[(This chapter attempts to cover some of the common issues encountered when writing 16-bit code to run)]607.8 norm1 -[(under )2(MS-DOS)0( or )2(Windows 3.x)0(. It covers how to link programs to produce )2(.EXE)0( or )2(.COM)0( files, how to)]596.8 norm0 -[(write )2(.SYS)0( device drivers, and how to interface assembly language code with 16-bit C compilers and with)]585.8 norm0 -[(Borland Pascal.)]574.8 norm2 -[{/section-8.1 xa}(Producing )2(.EXE)0( Files)](8.1)553.4 head3 -[(Any large program written under DOS needs to be built as a )2(.EXE)0( file: only )2(.EXE)0( files have the necessary)]536.4 norm1 -[(internal structure required to span more than one 64K segment. )(Windows programs, also, have to be built as)]525.4 norm0 -[2(.EXE)0( files, since Windows does not support the )2(.COM)0( format.)]514.4 norm2 -[(In general, you generate )2(.EXE)0( files by using the )2(obj)0( output format to produce one or more )2(.OBJ)0( files, and)]497.4 norm1 -[(then linking them together using a linker. However, NASM also supports the direct generation of simple DOS)]486.4 norm0 -[2(.EXE)0( files using the )2(bin)0( output format \(by using )2(DB)0( and )2(DW)0( to construct the )2(.EXE)0( file header\), and a macro)]475.4 norm0 -[(package is supplied to do this. Thanks to Yann Guidon for contributing the code for this.)]464.4 norm2 -[(NASM may also support )2(.EXE)0( natively as another output format in future releases.)]447.4 norm3 -[{/section-8.1.1 xa}(Using the )2(obj)0( Format To Generate )2(.EXE)0( Files)](8.1.1)428.2 subh3 -[(This section describes the usual method of generating )2(.EXE)0( files by linking )2(.OBJ)0( files together.)]411.2 norm3 -[(Most 16-bit programming language packages come with a suitable linker; if you have none of these, there is a)]394.2 norm1 -[(free linker called )(VAL)(, available in )2(LZH)0( archive format from ){(ftp://x2ftp.oulu.fi/pub/msdos/programming/lang/)wl}2(x2ftp.oulu.fi){el}0(. An LZH archiver can be)]383.2 norm0 -[(found at ){(ftp://ftp.simtel.net/pub/simtelnet/msdos/arcers)wl}2(ftp.simtel.net){el}0(. There is another `free' linker \(though this one doesn't come with sources\))]372.2 norm0 -[(called )(FREELINK, available from ){(http://www.pcorner.com/tpc/old/3-101.html)wl}2(www.pcorner.com){el}0(. A third, )2(djlink)0(, written by DJ Delorie, is)]361.2 norm0 -[(available at ){(http://www.delorie.com/djgpp/16bit/djlink/)wl}2(www.delorie.com){el}0(. A fourth linker, )2(ALINK)0(, written by Anthony A.J. Williams, is available at)]350.2 norm0 -[{(http://alink.sourceforge.net)wl}2(alink.sourceforge.net){el}0(.)]339.2 norm2 -[(When linking several )2(.OBJ)0( files into a )2(.EXE)0( file, you should ensure that exactly one of them has a start point)]322.2 norm1 -[(defined \(using the )2(..start)0( special symbol defined by the )2(obj)0( format: see ){/section-7.4.6 xl}(section 7.4.6){el}(\). If no module)]311.2 norm0 -[(defines a start point, the linker will not know what value to give the entry-point field in the output file header;)]300.2 norm0 -[(if more than one defines a start point, the linker will not know )1(which)0( value to use.)]289.2 norm2 -[(An example of a NASM source file which can be assembled to a )2(.OBJ)0( file and linked on its own to a )2(.EXE)]272.2 norm1 -[(is given here. It demonstrates the basic principles of defining a stack, initialising the segment registers, and)]261.2 norm0 -[(declaring a start point. This file is also provided in the )2(test)0( subdirectory of the NASM archives, under the)]250.2 norm0 -[(name )2(objexe.asm)0(.)]239.2 norm2 -[2(segment code )]222.2 code1 -[2()]211.2 code0 -[2(..start: )]200.2 code0 -[2( mov ax,data )]189.2 code0 -[2( mov ds,ax )]178.2 code0 -[2( mov ax,stack )]167.2 code0 -[2( mov ss,ax )]156.2 code0 -[2( mov sp,stacktop)]145.2 code2 -[(This initial piece of code sets up )2(DS)0( to point to the data segment, and initializes )2(SS)0( and )2(SP)0( to point to the top)]128.2 norm1 -[(of the provided stack. Notice that interrupts are implicitly disabled for one instruction after a move into )2(SS)0(,)]117.2 norm0 -(91)pageodd -restore showpage -%%Page: 92 92 -%%BeginPageSetup -save -%%EndPageSetup -/92 pa -[(precisely for this situation, so that there's no chance of an interrupt occurring between the loads of )2(SS)0( and )2(SP)]681 norm0 -[(and not having a stack to execute on.)]670 norm2 -[(Note also that the special symbol )2(..start)0( is defined at the beginning of this code, which means that will be)]653 norm1 -[(the entry point into the resulting executable file.)]642 norm2 -[2( mov dx,hello )]625 code1 -[2( mov ah,9 )]614 code0 -[2( int 0x21)]603 code2 -[(The above is the main program: load )2(DS:DX)0( with a pointer to the greeting message \()2(hello)0( is implicitly)]586 norm1 -[(relative to the segment )2(data)0(, which was loaded into )2(DS)0( in the setup code, so the full pointer is valid\), and)]575 norm0 -[(call the DOS print-string function.)]564 norm2 -[2( mov ax,0x4c00 )]547 code1 -[2( int 0x21)]536 code2 -[(This terminates the program using another DOS system call.)]519 norm3 -[2(segment data )]502 code1 -[2()]491 code0 -[2(hello: db 'hello, world', 13, 10, '$')]480 code2 -[(The data segment contains the string we want to display.)]463 norm3 -[2(segment stack stack )]446 code1 -[2( resb 64 )]435 code0 -[2(stacktop:)]424 code2 -[(The above code declares a stack segment containing 64 bytes of uninitialized stack space, and points)]407 norm1 -[2(stacktop)0( at the top of it. The directive )2(segment stack stack)0( defines a segment )1(called)0( )2(stack)0(, and)]396 norm0 -[(also of )1(type)0( )2(STACK)0(. The latter is not necessary to the correct running of the program, but linkers are likely to)]385 norm0 -[(issue warnings or errors if your program has no segment of type )2(STACK)0(.)]374 norm2 -[(The above file, when assembled into a )2(.OBJ)0( file, will link on its own to a valid )2(.EXE)0( file, which when run)]357 norm1 -[(will print `hello, world' and then exit.)]346 norm2 -[{/section-8.1.2 xa}(Using the )2(bin)0( Format To Generate )2(.EXE)0( Files)](8.1.2)326.8 subh3 -[(The )2(.EXE)0( file format is simple enough that it's possible to build a )2(.EXE)0( file by writing a pure-binary)]309.8 norm1 -[(program and sticking a 32-byte header on the front. This header is simple enough that it can be generated)]298.8 norm0 -[(using )2(DB)0( and )2(DW)0( commands by NASM itself, so that you can use the )2(bin)0( output format to directly generate)]287.8 norm0 -[2(.EXE)0( files.)]276.8 norm2 -[(Included in the NASM archives, in the )2(misc)0( subdirectory, is a file )2(exebin.mac)0( of macros. It defines three)]259.8 norm1 -[(macros: )2(EXE_begin)0(, )2(EXE_stack)0( and )2(EXE_end)0(.)]248.8 norm2 -[(To produce a )2(.EXE)0( file using this method, you should start by using )2(%include)0( to load the )2(exebin.mac)]231.8 norm1 -[(macro package into your source file. You should then issue the )2(EXE_begin)0( macro call \(which takes no)]220.8 norm0 -[(arguments\) to generate the file header data. Then write code as normal for the )2(bin)0( format \226 you can use all)]209.8 norm0 -[(three standard sections )2(.text)0(, )2(.data)0( and )2(.bss)0(. At the end of the file you should call the )2(EXE_end)0( macro)]198.8 norm0 -[(\(again, no arguments\), which defines some symbols to mark section sizes, and these symbols are referred to in)]187.8 norm0 -[(the header code generated by )2(EXE_begin)0(.)]176.8 norm2 -[(In this model, the code you end up writing starts at )2(0x100)0(, just like a )2(.COM)0( file \226 in fact, if you strip off the)]159.8 norm1 -[(32-byte header from the resulting )2(.EXE)0( file, you will have a valid )2(.COM)0( program. All the segment bases are)]148.8 norm0 -[(the same, so you are limited to a 64K program, again just like a )2(.COM)0( file. Note that an )2(ORG)0( directive is)]137.8 norm0 -[(issued by the )2(EXE_begin)0( macro, so you should not explicitly issue one of your own.)]126.8 norm2 -(92)pageeven -restore showpage -%%Page: 93 93 -%%BeginPageSetup -save -%%EndPageSetup -/93 pa -[(You can't directly refer to your segment base value, unfortunately, since this would require a relocation in the)]681 norm1 -[(header, and things would get a lot more complicated. So you should get your segment base by copying it out)]670 norm0 -[(of )2(CS)0( instead.)]659 norm2 -[(On entry to your )2(.EXE)0( file, )2(SS:SP)0( are already set up to point to the top of a 2Kb stack. You can adjust the)]642 norm1 -[(default stack size of 2Kb by calling the )2(EXE_stack)0( macro. For example, to change the stack size of your)]631 norm0 -[(program to 64 bytes, you would call )2(EXE_stack 64)0(.)]620 norm2 -[(A sample program which generates a )2(.EXE)0( file in this way is given in the )2(test)0( subdirectory of the NASM)]603 norm1 -[(archive, as )2(binexe.asm)0(.)]592 norm2 -[{/section-8.2 xa}(Producing )2(.COM)0( Files)](8.2)570.6 head3 -[(While large DOS programs must be written as )2(.EXE)0( files, small ones are often better written as )2(.COM)0( files.)]553.6 norm1 -[2(.COM)0( files are pure binary, and therefore most easily produced using the )2(bin)0( output format.)]542.6 norm2 -[{/section-8.2.1 xa}(Using the )2(bin)0( Format To Generate )2(.COM)0( Files)](8.2.1)523.4 subh3 -[2(.COM)0( files expect to be loaded at offset )2(100h)0( into their segment \(though the segment may change\).)]506.4 norm1 -[(Execution then begins at )2(100h)0(, i.e. right at the start of the program. So to write a )2(.COM)0( program, you would)]495.4 norm0 -[(create a source file looking like)]484.4 norm2 -[2( org 100h )]467.4 code1 -[2()]456.4 code0 -[2(section .text )]445.4 code0 -[2()]434.4 code0 -[2(start: )]423.4 code0 -[2( ; put your code here )]412.4 code0 -[2()]401.4 code0 -[2(section .data )]390.4 code0 -[2()]379.4 code0 -[2( ; put data items here )]368.4 code0 -[2()]357.4 code0 -[2(section .bss )]346.4 code0 -[2()]335.4 code0 -[2( ; put uninitialized data here)]324.4 code2 -[(The )2(bin)0( format puts the )2(.text)0( section first in the file, so you can declare data or BSS items before)]307.4 norm1 -[(beginning to write code if you want to and the code will still end up at the front of the file where it belongs.)]296.4 norm2 -[(The BSS \(uninitialized data\) section does not take up space in the )2(.COM)0( file itself: instead, addresses of BSS)]279.4 norm1 -[(items are resolved to point at space beyond the end of the file, on the grounds that this will be free memory)]268.4 norm0 -[(when the program is run. Therefore you should not rely on your BSS being initialized to all zeros when you)]257.4 norm0 -[(run.)]246.4 norm2 -[(To assemble the above program, you should use a command line like)]229.4 norm3 -[2(nasm myprog.asm -fbin -o myprog.com)]212.4 code3 -[(The )2(bin)0( format would produce a file called )2(myprog)0( if no explicit output file name were specified, so you)]195.4 norm1 -[(have to override it and give the desired file name.)]184.4 norm2 -[{/section-8.2.2 xa}(Using the )2(obj)0( Format To Generate )2(.COM)0( Files)](8.2.2)165.2 subh3 -[(If you are writing a )2(.COM)0( program as more than one module, you may wish to assemble several )2(.OBJ)0( files)]148.2 norm1 -[(and link them together into a )2(.COM)0( program. You can do this, provided you have a linker capable of)]137.2 norm0 -[(outputting )2(.COM)0( files directly \()(TLINK does this\), or alternatively a converter program such as )2(EXE2BIN)0( to)]126.2 norm0 -[(transform the )2(.EXE)0( file output from the linker into a )2(.COM)0( file.)]115.2 norm2 -(93)pageodd -restore showpage -%%Page: 94 94 -%%BeginPageSetup -save -%%EndPageSetup -/94 pa -[(If you do this, you need to take care of several things:)]681 norm3 -[(The first object file containing code should start its code segment with a line like )2(RESB 100h)0(. This is to)]664 bull1 -[(ensure that the code begins at offset )2(100h)0( relative to the beginning of the code segment, so that the linker)]653 bull0 -[(or converter program does not have to adjust address references within the file when generating the )2(.COM)]642 bull0 -[(file. Other assemblers use an )2(ORG)0( directive for this purpose, but )2(ORG)0( in NASM is a format-specific)]631 bull0 -[(directive to the )2(bin)0( output format, and does not mean the same thing as it does in MASM-compatible)]620 bull0 -[(assemblers.)]609 bull2 -[(You don't need to define a stack segment.)]592 bull3 -[(All your segments should be in the same group, so that every time your code or data references a symbol)]575 bull1 -[(offset, all offsets are relative to the same segment base. This is because, when a )2(.COM)0( file is loaded, all the)]564 bull0 -[(segment registers contain the same value.)]553 bull2 -[{/section-8.3 xa}(Producing )2(.SYS)0( Files)](8.3)531.6 head3 -[(MS-DOS device drivers \226 )2(.SYS)0( files \226 are pure binary files, similar to )2(.COM)0( files, except that they start at)]514.6 norm1 -[(origin zero rather than )2(100h)0(. Therefore, if you are writing a device driver using the )2(bin)0( format, you do not)]503.6 norm0 -[(need the )2(ORG)0( directive, since the default origin for )2(bin)0( is zero. Similarly, if you are using )2(obj)0(, you do not)]492.6 norm0 -[(need the )2(RESB 100h)0( at the start of your code segment.)]481.6 norm2 -[2(.SYS)0( files start with a header structure, containing pointers to the various routines inside the driver which do)]464.6 norm1 -[(the work. This structure should be defined at the start of the code segment, even though it is not actually code.)]453.6 norm2 -[(For more information on the format of )2(.SYS)0( files, and the data which has to go in the header structure, a list)]436.6 norm1 -[(of books is given in the Frequently Asked Questions list for the newsgroup)]425.6 norm0 -[{(news:comp.os.msdos.programmer)wl}2(comp.os.msdos.programmer){el}0(.)]414.6 norm2 -[{/section-8.4 xa}(Interfacing to 16-bit C Programs)](8.4)393.2 head3 -[(This section covers the basics of writing assembly routines that call, or are called from, C programs. To do)]376.2 norm1 -[(this, you would typically write an assembly module as a )2(.OBJ)0( file, and link it with your C modules to)]365.2 norm0 -[(produce a )(mixed-language program.)]354.2 norm2 -[{/section-8.4.1 xa}(External Symbol Names)](8.4.1)335 subh3 -[(C compilers have the convention that the names of all global symbols \(functions or data\) they define are)]318 norm1 -[(formed by prefixing an underscore to the name as it appears in the C program. So, for example, the function a)]307 norm0 -[(C programmer thinks of as )2(printf)0( appears to an assembly language programmer as )2(_printf)0(. This means)]296 norm0 -[(that in your assembly programs, you can define symbols without a leading underscore, and not have to worry)]285 norm0 -[(about name clashes with C symbols.)]274 norm2 -[(If you find the underscores inconvenient, you can define macros to replace the )2(GLOBAL)0( and )2(EXTERN)]257 norm1 -[(directives as follows:)]246 norm2 -[2(%macro cglobal 1 )]229 code1 -[2()]218 code0 -[2( global _%1 )]207 code0 -[2( %define %1 _%1 )]196 code0 -[2()]185 code0 -[2(%endmacro )]174 code0 -[2()]163 code0 -[2(%macro cextern 1 )]152 code0 -[2()]141 code0 -[2( extern _%1 )]130 code0 -[2( %define %1 _%1 )]119 code0 -(94)pageeven -restore showpage -%%Page: 95 95 -%%BeginPageSetup -save -%%EndPageSetup -/95 pa -[2()]681 code0 -[2(%endmacro)]670 code2 -[(\(These forms of the macros only take one argument at a time; a )2(%rep)0( construct could solve this.\))]653 norm3 -[(If you then declare an external like this:)]636 norm3 -[2(cextern printf)]619 code3 -[(then the macro will expand it as)]602 norm3 -[2(extern _printf )]585 code1 -[2(%define printf _printf)]574 code2 -[(Thereafter, you can reference )2(printf)0( as if it was a symbol, and the preprocessor will put the leading)]557 norm1 -[(underscore on where necessary.)]546 norm2 -[(The )2(cglobal)0( macro works similarly. You must use )2(cglobal)0( before defining the symbol in question, but)]529 norm1 -[(you would have had to do that anyway if you used )2(GLOBAL)0(.)]518 norm2 -[(Also see ){/section-2.1.27 xl}(section 2.1.27){el}(.)]501 norm3 -[{/section-8.4.2 xa}(Memory Models)](8.4.2)481.8 subh3 -[(NASM contains no mechanism to support the various C memory models directly; you have to keep track)]464.8 norm1 -[(yourself of which one you are writing for. This means you have to keep track of the following things:)]453.8 norm2 -[(In models using a single code segment \(tiny, small and compact\), functions are near. This means that)]436.8 bull1 -[(function pointers, when stored in data segments or pushed on the stack as function arguments, are 16 bits)]425.8 bull0 -[(long and contain only an offset field \(the )2(CS)0( register never changes its value, and always gives the segment)]414.8 bull0 -[(part of the full function address\), and that functions are called using ordinary near )2(CALL)0( instructions and)]403.8 bull0 -[(return using )2(RETN)0( \(which, in NASM, is synonymous with )2(RET)0( anyway\). This means both that you should)]392.8 bull0 -[(write your own routines to return with )2(RETN)0(, and that you should call external C routines with near )2(CALL)]381.8 bull0 -[(instructions.)]370.8 bull2 -[(In models using more than one code segment \(medium, large and huge\), functions are far. This means that)]353.8 bull1 -[(function pointers are 32 bits long \(consisting of a 16-bit offset followed by a 16-bit segment\), and that)]342.8 bull0 -[(functions are called using )2(CALL FAR)0( \(or )2(CALL seg:offset)0(\) and return using )2(RETF)0(. Again, you)]331.8 bull0 -[(should therefore write your own routines to return with )2(RETF)0( and use )2(CALL FAR)0( to call external routines.)]320.8 bull2 -[(In models using a single data segment \(tiny, small and medium\), data pointers are 16 bits long, containing)]303.8 bull1 -[(only an offset field \(the )2(DS)0( register doesn't change its value, and always gives the segment part of the full)]292.8 bull0 -[(data item address\).)]281.8 bull2 -[(In models using more than one data segment \(compact, large and huge\), data pointers are 32 bits long,)]264.8 bull1 -[(consisting of a 16-bit offset followed by a 16-bit segment. You should still be careful not to modify )2(DS)0( in)]253.8 bull0 -[(your routines without restoring it afterwards, but )2(ES)0( is free for you to use to access the contents of 32-bit)]242.8 bull0 -[(data pointers you are passed.)]231.8 bull2 -[(The huge memory model allows single data items to exceed 64K in size. In all other memory models, you)]214.8 bull1 -[(can access the whole of a data item just by doing arithmetic on the offset field of the pointer you are given,)]203.8 bull0 -[(whether a segment field is present or not; in huge model, you have to be more careful of your pointer)]192.8 bull0 -[(arithmetic.)]181.8 bull2 -[(In most memory models, there is a )1(default)0( data segment, whose segment address is kept in )2(DS)0( throughout)]164.8 bull1 -[(the program. This data segment is typically the same segment as the stack, kept in )2(SS)0(, so that functions')]153.8 bull0 -[(local variables \(which are stored on the stack\) and global data items can both be accessed easily without)]142.8 bull0 -[(changing )2(DS)0(. Particularly large data items are typically stored in other segments. However, some memory)]131.8 bull0 -[(models \(though not the standard ones, usually\) allow the assumption that )2(SS)0( and )2(DS)0( hold the same value to)]120.8 bull0 -[(be removed. Be careful about functions' local variables in this latter case.)]109.8 bull2 -(95)pageodd -restore showpage -%%Page: 96 96 -%%BeginPageSetup -save -%%EndPageSetup -/96 pa -[(In models with a single code segment, the segment is called )2(_TEXT)0(, so your code segment must also go by)]681 norm1 -[(this name in order to be linked into the same place as the main code segment. In models with a single data)]670 norm0 -[(segment, or with a default data segment, it is called )2(_DATA)0(.)]659 norm2 -[{/section-8.4.3 xa}(Function Definitions and Function Calls)](8.4.3)639.8 subh3 -[(The )(C calling convention in 16-bit programs is as follows. In the following description, the words )1(caller)0( and)]622.8 norm1 -[1(callee)0( are used to denote the function doing the calling and the function which gets called.)]611.8 norm2 -[(The caller pushes the function's parameters on the stack, one after another, in reverse order \(right to left, so)]594.8 bull1 -[(that the first argument specified to the function is pushed last\).)]583.8 bull2 -[(The caller then executes a )2(CALL)0( instruction to pass control to the callee. This )2(CALL)0( is either near or far)]566.8 bull1 -[(depending on the memory model.)]555.8 bull2 -[(The callee receives control, and typically \(although this is not actually necessary, in functions which do not)]538.8 bull1 -[(need to access their parameters\) starts by saving the value of )2(SP)0( in )2(BP)0( so as to be able to use )2(BP)0( as a base)]527.8 bull0 -[(pointer to find its parameters on the stack. However, the caller was probably doing this too, so part of the)]516.8 bull0 -[(calling convention states that )2(BP)0( must be preserved by any C function. Hence the callee, if it is going to set)]505.8 bull0 -[(up )2(BP)0( as a )1(frame pointer)0(, must push the previous value first.)]494.8 bull2 -[(The callee may then access its parameters relative to )2(BP)0(. The word at )2([BP])0( holds the previous value of )2(BP)]477.8 bull1 -[(as it was pushed; the next word, at )2([BP+2])0(, holds the offset part of the return address, pushed implicitly)]466.8 bull0 -[(by )2(CALL)0(. In a small-model \(near\) function, the parameters start after that, at )2([BP+4])0(; in a large-model)]455.8 bull0 -[(\(far\) function, the segment part of the return address lives at )2([BP+4])0(, and the parameters begin at)]444.8 bull0 -[2([BP+6])0(. The leftmost parameter of the function, since it was pushed last, is accessible at this offset from)]433.8 bull0 -[2(BP)0(; the others follow, at successively greater offsets. Thus, in a function such as )2(printf)0( which takes a)]422.8 bull0 -[(variable number of parameters, the pushing of the parameters in reverse order means that the function)]411.8 bull0 -[(knows where to find its first parameter, which tells it the number and type of the remaining ones.)]400.8 bull2 -[(The callee may also wish to decrease )2(SP)0( further, so as to allocate space on the stack for local variables,)]383.8 bull1 -[(which will then be accessible at negative offsets from )2(BP)0(.)]372.8 bull2 -[(The callee, if it wishes to return a value to the caller, should leave the value in )2(AL)0(, )2(AX)0( or )2(DX:AX)]355.8 bull1 -[(depending on the size of the value. Floating-point results are sometimes \(depending on the compiler\))]344.8 bull0 -[(returned in )2(ST0)0(.)]333.8 bull2 -[(Once the callee has finished processing, it restores )2(SP)0( from )2(BP)0( if it had allocated local stack space, then)]316.8 bull1 -[(pops the previous value of )2(BP)0(, and returns via )2(RETN)0( or )2(RETF)0( depending on memory model.)]305.8 bull2 -[(When the caller regains control from the callee, the function parameters are still on the stack, so it typically)]288.8 bull1 -[(adds an immediate constant to )2(SP)0( to remove them \(instead of executing a number of slow )2(POP)]277.8 bull0 -[(instructions\). Thus, if a function is accidentally called with the wrong number of parameters due to a)]266.8 bull0 -[(prototype mismatch, the stack will still be returned to a sensible state since the caller, which )1(knows)0( how)]255.8 bull0 -[(many parameters it pushed, does the removing.)]244.8 bull2 -[(It is instructive to compare this calling convention with that for Pascal programs \(described in ){/section-8.5.1 xl}(section 8.5.1){el}(\).)]227.8 norm1 -[(Pascal has a simpler convention, since no functions have variable numbers of parameters. Therefore the callee)]216.8 norm0 -[(knows how many parameters it should have been passed, and is able to deallocate them from the stack itself)]205.8 norm0 -[(by passing an immediate argument to the )2(RET)0( or )2(RETF)0( instruction, so the caller does not have to do it. Also,)]194.8 norm0 -[(the parameters are pushed in left-to-right order, not right-to-left, which means that a compiler can give)]183.8 norm0 -[(better guarantees about sequence points without performance suffering.)]172.8 norm2 -[(Thus, you would define a function in C style in the following way. The following example is for small model:)]155.8 norm3 -[2(global _myfunc )]138.8 code1 -[2()]127.8 code0 -[2(_myfunc: )]116.8 code0 -[2( push bp )]105.8 code0 -(96)pageeven -restore showpage -%%Page: 97 97 -%%BeginPageSetup -save -%%EndPageSetup -/97 pa -[2( mov bp,sp )]681 code0 -[2( sub sp,0x40 ; 64 bytes of local stack space )]670 code0 -[2( mov bx,[bp+4] ; first parameter to function )]659 code0 -[2()]648 code0 -[2( ; some more code )]637 code0 -[2()]626 code0 -[2( mov sp,bp ; undo "sub sp,0x40" above )]615 code0 -[2( pop bp )]604 code0 -[2( ret)]593 code2 -[(For a large-model function, you would replace )2(RET)0( by )2(RETF)0(, and look for the first parameter at )2([BP+6])]576 norm1 -[(instead of )2([BP+4])0(. Of course, if one of the parameters is a pointer, then the offsets of )1(subsequent)0( parameters)]565 norm0 -[(will change depending on the memory model as well: far pointers take up four bytes on the stack when passed)]554 norm0 -[(as a parameter, whereas near pointers take up two.)]543 norm2 -[(At the other end of the process, to call a C function from your assembly code, you would do something like)]526 norm1 -[(this:)]515 norm2 -[2(extern _printf )]498 code1 -[2()]487 code0 -[2( ; and then, further down... )]476 code0 -[2()]465 code0 -[2( push word [myint] ; one of my integer variables )]454 code0 -[2( push word mystring ; pointer into my data segment )]443 code0 -[2( call _printf )]432 code0 -[2( add sp,byte 4 ; `byte' saves space )]421 code0 -[2()]410 code0 -[2( ; then those data items... )]399 code0 -[2()]388 code0 -[2(segment _DATA )]377 code0 -[2()]366 code0 -[2(myint dw 1234 )]355 code0 -[2(mystring db 'This number -> %d <- should be 1234',10,0)]344 code2 -[(This piece of code is the small-model assembly equivalent of the C code)]327 norm3 -[2( int myint = 1234; )]310 code1 -[2( printf\("This number -> %d <- should be 1234\\n", myint\);)]299 code2 -[(In large model, the function-call code might look more like this. In this example, it is assumed that )2(DS)]282 norm1 -[(already holds the segment base of the segment )2(_DATA)0(. If not, you would have to initialize it first.)]271 norm2 -[2( push word [myint] )]254 code1 -[2( push word seg mystring ; Now push the segment, and... )]243 code0 -[2( push word mystring ; ... offset of "mystring" )]232 code0 -[2( call far _printf )]221 code0 -[2( add sp,byte 6)]210 code2 -[(The integer value still takes up one word on the stack, since large model does not affect the size of the )2(int)]193 norm1 -[(data type. The first argument \(pushed last\) to )2(printf)0(, however, is a data pointer, and therefore has to)]182 norm0 -[(contain a segment and offset part. The segment should be stored second in memory, and therefore must be)]171 norm0 -[(pushed first. \(Of course, )2(PUSH DS)0( would have been a shorter instruction than)]160 norm0 -[2(PUSH WORD SEG mystring)0(, if )2(DS)0( was set up as the above example assumed.\) Then the actual call)]149 norm0 -[(becomes a far call, since functions expect far calls in large model; and )2(SP)0( has to be increased by 6 rather than)]138 norm0 -[(4 afterwards to make up for the extra word of parameters.)]127 norm2 -(97)pageodd -restore showpage -%%Page: 98 98 -%%BeginPageSetup -save -%%EndPageSetup -/98 pa -[{/section-8.4.4 xa}(Accessing Data Items)](8.4.4)678.8 subh3 -[(To get at the contents of C variables, or to declare variables which C can access, you need only declare the)]661.8 norm1 -[(names as )2(GLOBAL)0( or )2(EXTERN)0(. \(Again, the names require leading underscores, as stated in ){/section-8.4.1 xl}(section 8.4.1){el}(.\))]650.8 norm0 -[(Thus, a C variable declared as )2(int i)0( can be accessed from assembler as)]639.8 norm2 -[2(extern _i )]622.8 code1 -[2()]611.8 code0 -[2( mov ax,[_i])]600.8 code2 -[(And to declare your own integer variable which C programs can access as )2(extern int j)0(, you do this)]583.8 norm1 -[(\(making sure you are assembling in the )2(_DATA)0( segment, if necessary\):)]572.8 norm2 -[2(global _j )]555.8 code1 -[2()]544.8 code0 -[2(_j dw 0)]533.8 code2 -[(To access a C array, you need to know the size of the components of the array. For example, )2(int)0( variables)]516.8 norm1 -[(are two bytes long, so if a C program declares an array as )2(int a[10])0(, you can access )2(a[3])0( by coding)]505.8 norm0 -[2(mov ax,[_a+6])0(. \(The byte offset 6 is obtained by multiplying the desired array index, 3, by the size of the)]494.8 norm0 -[(array element, 2.\) The sizes of the C base types in 16-bit compilers are: 1 for )2(char)0(, 2 for )2(short)0( and )2(int)0(, 4)]483.8 norm0 -[(for )2(long)0( and )2(float)0(, and 8 for )2(double)0(.)]472.8 norm2 -[(To access a C )(data structure, you need to know the offset from the base of the structure to the field you are)]455.8 norm1 -[(interested in. You can either do this by converting the C structure definition into a NASM structure definition)]444.8 norm0 -[(\(using )2(STRUC)0(\), or by calculating the one offset and using just that.)]433.8 norm2 -[(To do either of these, you should read your C compiler's manual to find out how it organizes data structures.)]416.8 norm1 -[(NASM gives no special alignment to structure members in its own )2(STRUC)0( macro, so you have to specify)]405.8 norm0 -[(alignment yourself if the C compiler generates it. Typically, you might find that a structure like)]394.8 norm2 -[2(struct { )]377.8 code1 -[2( char c; )]366.8 code0 -[2( int i; )]355.8 code0 -[2(} foo;)]344.8 code2 -[(might be four bytes long rather than three, since the )2(int)0( field would be aligned to a two-byte boundary.)]327.8 norm1 -[(However, this sort of feature tends to be a configurable option in the C compiler, either using command-line)]316.8 norm0 -[(options or )2(#pragma)0( lines, so you have to find out how your own compiler does it.)]305.8 norm2 -[{/section-8.4.5 xa}2(c16.mac)0(: Helper Macros for the 16-bit C Interface)](8.4.5)286.6 subh3 -[(Included in the NASM archives, in the )2(misc)0( directory, is a file )2(c16.mac)0( of macros. It defines three macros:)]269.6 norm1 -[2(proc)0(, )2(arg)0( and )2(endproc)0(. These are intended to be used for C-style procedure definitions, and they)]258.6 norm0 -[(automate a lot of the work involved in keeping track of the calling convention.)]247.6 norm2 -[(\(An alternative, TASM compatible form of )2(arg)0( is also now built into NASM's preprocessor. See ){/section-4.8 xl}(section 4.8){el}]230.6 norm1 -[(for details.\))]219.6 norm2 -[(An example of an assembly function using the macro set is given here:)]202.6 norm3 -[2(proc _nearproc )]185.6 code1 -[2()]174.6 code0 -[2(%$i arg )]163.6 code0 -[2(%$j arg )]152.6 code0 -[2( mov ax,[bp + %$i] )]141.6 code0 -[2( mov bx,[bp + %$j] )]130.6 code0 -[2( add ax,[bx] )]119.6 code0 -(98)pageeven -restore showpage -%%Page: 99 99 -%%BeginPageSetup -save -%%EndPageSetup -/99 pa -[2()]681 code0 -[2(endproc)]670 code2 -[(This defines )2(_nearproc)0( to be a procedure taking two arguments, the first \()2(i)0(\) an integer and the second \()2(j)0(\))]653 norm1 -[(a pointer to an integer. It returns )2(i + *j)0(.)]642 norm2 -[(Note that the )2(arg)0( macro has an )2(EQU)0( as the first line of its expansion, and since the label before the macro call)]625 norm1 -[(gets prepended to the first line of the expanded macro, the )2(EQU)0( works, defining )2(%$i)0( to be an offset from )2(BP)0(.)]614 norm0 -[(A context-local variable is used, local to the context pushed by the )2(proc)0( macro and popped by the)]603 norm0 -[2(endproc)0( macro, so that the same argument name can be used in later procedures. Of course, you don't )1(have)]592 norm0 -[(to do that.)]581 norm2 -[(The macro set produces code for near functions \(tiny, small and compact-model code\) by default. You can)]564 norm1 -[(have it generate far functions \(medium, large and huge-model code\) by means of coding)]553 norm0 -[2(%define FARCODE)0(. This changes the kind of return instruction generated by )2(endproc)0(, and also changes)]542 norm0 -[(the starting point for the argument offsets. The macro set contains no intrinsic dependency on whether data)]531 norm0 -[(pointers are far or not.)]520 norm2 -[2(arg)0( can take an optional parameter, giving the size of the argument. If no size is given, 2 is assumed, since it)]503 norm1 -[(is likely that many function parameters will be of type )2(int)0(.)]492 norm2 -[(The large-model equivalent of the above function would look like this:)]475 norm3 -[2(%define FARCODE )]458 code1 -[2()]447 code0 -[2(proc _farproc )]436 code0 -[2()]425 code0 -[2(%$i arg )]414 code0 -[2(%$j arg 4 )]403 code0 -[2( mov ax,[bp + %$i] )]392 code0 -[2( mov bx,[bp + %$j] )]381 code0 -[2( mov es,[bp + %$j + 2] )]370 code0 -[2( add ax,[bx] )]359 code0 -[2()]348 code0 -[2(endproc)]337 code2 -[(This makes use of the argument to the )2(arg)0( macro to define a parameter of size 4, because )2(j)0( is now a far)]320 norm1 -[(pointer. When we load from )2(j)0(, we must load a segment and an offset.)]309 norm2 -[{/section-8.5 xa}(Interfacing to )(Borland Pascal Programs)](8.5)287.6 head3 -[(Interfacing to Borland Pascal programs is similar in concept to interfacing to 16-bit C programs. The)]270.6 norm1 -[(differences are:)]259.6 norm2 -[(The leading underscore required for interfacing to C programs is not required for Pascal.)]242.6 bull3 -[(The memory model is always large: functions are far, data pointers are far, and no data item can be more)]225.6 bull1 -[(than 64K long. \(Actually, some functions are near, but only those functions that are local to a Pascal unit)]214.6 bull0 -[(and never called from outside it. All assembly functions that Pascal calls, and all Pascal functions that)]203.6 bull0 -[(assembly routines are able to call, are far.\) However, all static data declared in a Pascal program goes into)]192.6 bull0 -[(the default data segment, which is the one whose segment address will be in )2(DS)0( when control is passed to)]181.6 bull0 -[(your assembly code. The only things that do not live in the default data segment are local variables \(they)]170.6 bull0 -[(live in the stack segment\) and dynamically allocated variables. All data )1(pointers)0(, however, are far.)]159.6 bull2 -[(The function calling convention is different \226 described below.)]142.6 bull3 -[(Some data types, such as strings, are stored differently.)]125.6 bull3 -(99)pageodd -restore showpage -%%Page: 100 100 -%%BeginPageSetup -save -%%EndPageSetup -/100 pa -[(There are restrictions on the segment names you are allowed to use \226 Borland Pascal will ignore code or)]681 bull1 -[(data declared in a segment it doesn't like the name of. The restrictions are described below.)]670 bull2 -[{/section-8.5.1 xa}(The Pascal Calling Convention)](8.5.1)650.8 subh3 -[(The 16-bit Pascal calling convention is as follows. In the following description, the words )1(caller)0( and )1(callee)]633.8 norm1 -[(are used to denote the function doing the calling and the function which gets called.)]622.8 norm2 -[(The caller pushes the function's parameters on the stack, one after another, in normal order \(left to right, so)]605.8 bull1 -[(that the first argument specified to the function is pushed first\).)]594.8 bull2 -[(The caller then executes a far )2(CALL)0( instruction to pass control to the callee.)]577.8 bull3 -[(The callee receives control, and typically \(although this is not actually necessary, in functions which do not)]560.8 bull1 -[(need to access their parameters\) starts by saving the value of )2(SP)0( in )2(BP)0( so as to be able to use )2(BP)0( as a base)]549.8 bull0 -[(pointer to find its parameters on the stack. However, the caller was probably doing this too, so part of the)]538.8 bull0 -[(calling convention states that )2(BP)0( must be preserved by any function. Hence the callee, if it is going to set)]527.8 bull0 -[(up )2(BP)0( as a )(frame pointer, must push the previous value first.)]516.8 bull2 -[(The callee may then access its parameters relative to )2(BP)0(. The word at )2([BP])0( holds the previous value of )2(BP)]499.8 bull1 -[(as it was pushed. The next word, at )2([BP+2])0(, holds the offset part of the return address, and the next one at)]488.8 bull0 -[2([BP+4])0( the segment part. The parameters begin at )2([BP+6])0(. The rightmost parameter of the function,)]477.8 bull0 -[(since it was pushed last, is accessible at this offset from )2(BP)0(; the others follow, at successively greater)]466.8 bull0 -[(offsets.)]455.8 bull2 -[(The callee may also wish to decrease )2(SP)0( further, so as to allocate space on the stack for local variables,)]438.8 bull1 -[(which will then be accessible at negative offsets from )2(BP)0(.)]427.8 bull2 -[(The callee, if it wishes to return a value to the caller, should leave the value in )2(AL)0(, )2(AX)0( or )2(DX:AX)]410.8 bull1 -[(depending on the size of the value. Floating-point results are returned in )2(ST0)0(. Results of type )2(Real)]399.8 bull0 -[(\(Borland's own custom floating-point data type, not handled directly by the FPU\) are returned in)]388.8 bull0 -[2(DX:BX:AX)0(. To return a result of type )2(String)0(, the caller pushes a pointer to a temporary string before)]377.8 bull0 -[(pushing the parameters, and the callee places the returned string value at that location. The pointer is not a)]366.8 bull0 -[(parameter, and should not be removed from the stack by the )2(RETF)0( instruction.)]355.8 bull2 -[(Once the callee has finished processing, it restores )2(SP)0( from )2(BP)0( if it had allocated local stack space, then)]338.8 bull1 -[(pops the previous value of )2(BP)0(, and returns via )2(RETF)0(. It uses the form of )2(RETF)0( with an immediate)]327.8 bull0 -[(parameter, giving the number of bytes taken up by the parameters on the stack. This causes the parameters)]316.8 bull0 -[(to be removed from the stack as a side effect of the return instruction.)]305.8 bull2 -[(When the caller regains control from the callee, the function parameters have already been removed from)]288.8 bull1 -[(the stack, so it needs to do nothing further.)]277.8 bull2 -[(Thus, you would define a function in Pascal style, taking two )2(Integer)0(\226type parameters, in the following)]260.8 norm1 -[(way:)]249.8 norm2 -[2(global myfunc )]232.8 code1 -[2()]221.8 code0 -[2(myfunc: push bp )]210.8 code0 -[2( mov bp,sp )]199.8 code0 -[2( sub sp,0x40 ; 64 bytes of local stack space )]188.8 code0 -[2( mov bx,[bp+8] ; first parameter to function )]177.8 code0 -[2( mov bx,[bp+6] ; second parameter to function )]166.8 code0 -[2()]155.8 code0 -[2( ; some more code )]144.8 code0 -[2()]133.8 code0 -[2( mov sp,bp ; undo "sub sp,0x40" above )]122.8 code0 -[2( pop bp )]111.8 code0 -[2( retf 4 ; total size of params is 4)]100.8 code2 -(100)pageeven -restore showpage -%%Page: 101 101 -%%BeginPageSetup -save -%%EndPageSetup -/101 pa -[(At the other end of the process, to call a Pascal function from your assembly code, you would do something)]681 norm1 -[(like this:)]670 norm2 -[2(extern SomeFunc )]653 code1 -[2()]642 code0 -[2( ; and then, further down... )]631 code0 -[2()]620 code0 -[2( push word seg mystring ; Now push the segment, and... )]609 code0 -[2( push word mystring ; ... offset of "mystring" )]598 code0 -[2( push word [myint] ; one of my variables )]587 code0 -[2( call far SomeFunc)]576 code2 -[(This is equivalent to the Pascal code)]559 norm3 -[2(procedure SomeFunc\(String: PChar; Int: Integer\); )]542 code1 -[2( SomeFunc\(@mystring, myint\);)]531 code2 -[{/section-8.5.2 xa}(Borland Pascal )(Segment Name Restrictions)](8.5.2)511.8 subh3 -[(Since Borland Pascal's internal unit file format is completely different from )2(OBJ)0(, it only makes a very)]494.8 norm1 -[(sketchy job of actually reading and understanding the various information contained in a real )2(OBJ)0( file when it)]483.8 norm0 -[(links that in. Therefore an object file intended to be linked to a Pascal program must obey a number of)]472.8 norm0 -[(restrictions:)]461.8 norm2 -[(Procedures and functions must be in a segment whose name is either )2(CODE)0(, )2(CSEG)0(, or something ending in)]444.8 bull1 -[2(_TEXT)0(.)]433.8 bull2 -[(initialized data must be in a segment whose name is either )2(CONST)0( or something ending in )2(_DATA)0(.)]416.8 bull3 -[(Uninitialized data must be in a segment whose name is either )2(DATA)0(, )2(DSEG)0(, or something ending in )2(_BSS)0(.)]399.8 bull3 -[(Any other segments in the object file are completely ignored. )2(GROUP)0( directives and segment attributes are)]382.8 bull1 -[(also ignored.)]371.8 bull2 -[{/section-8.5.3 xa}(Using )2(c16.mac)0( With Pascal Programs)](8.5.3)352.6 subh3 -[(The )2(c16.mac)0( macro package, described in ){/section-8.4.5 xl}(section 8.4.5){el}(, can also be used to simplify writing functions to be)]335.6 norm1 -[(called from Pascal programs, if you code )2(%define PASCAL)0(. This definition ensures that functions are far)]324.6 norm0 -[(\(it implies )2(FARCODE)0(\), and also causes procedure return instructions to be generated with an operand.)]313.6 norm2 -[(Defining )2(PASCAL)0( does not change the code which calculates the argument offsets; you must declare your)]296.6 norm1 -[(function's arguments in reverse order. For example:)]285.6 norm2 -[2(%define PASCAL )]268.6 code1 -[2()]257.6 code0 -[2(proc _pascalproc )]246.6 code0 -[2()]235.6 code0 -[2(%$j arg 4 )]224.6 code0 -[2(%$i arg )]213.6 code0 -[2( mov ax,[bp + %$i] )]202.6 code0 -[2( mov bx,[bp + %$j] )]191.6 code0 -[2( mov es,[bp + %$j + 2] )]180.6 code0 -[2( add ax,[bx] )]169.6 code0 -[2()]158.6 code0 -[2(endproc)]147.6 code2 -[(This defines the same routine, conceptually, as the example in ){/section-8.4.5 xl}(section 8.4.5){el}(: it defines a function taking two)]130.6 norm1 -[(arguments, an integer and a pointer to an integer, which returns the sum of the integer and the contents of the)]119.6 norm0 -(101)pageodd -restore showpage -%%Page: 102 102 -%%BeginPageSetup -save -%%EndPageSetup -/102 pa -[(pointer. The only difference between this code and the large-model C version is that )2(PASCAL)0( is defined)]681 norm0 -[(instead of )2(FARCODE)0(, and that the arguments are declared in reverse order.)]670 norm2 -(102)pageeven -restore showpage -%%Page: 103 103 -%%BeginPageSetup -save -%%EndPageSetup -/103 pa -[{/chapter-9 xa}(Chapter 9: Writing 32-bit Code \(Unix, Win32, DJGPP\))]642.8 chap3 -[(This chapter attempts to cover some of the common issues involved when writing 32-bit code, to run under)]607.8 norm1 -[(Win32 or Unix, or to be linked with C code generated by a Unix-style C compiler such as )(DJGPP. It covers)]596.8 norm0 -[(how to write assembly code to interface with 32-bit C routines, and how to write position-independent code)]585.8 norm0 -[(for shared libraries.)]574.8 norm2 -[(Almost all 32-bit code, and in particular all code running under )2(Win32)0(, )2(DJGPP)0( or any of the PC Unix)]557.8 norm1 -[(variants, runs in )1(flat)0( memory model. This means that the segment registers and paging have already been set)]546.8 norm0 -[(up to give you the same 32-bit 4Gb address space no matter what segment you work relative to, and that you)]535.8 norm0 -[(should ignore all segment registers completely. When writing flat-model application code, you never need to)]524.8 norm0 -[(use a segment override or modify any segment register, and the code-section addresses you pass to )2(CALL)0( and)]513.8 norm0 -[2(JMP)0( live in the same address space as the data-section addresses you access your variables by and the)]502.8 norm0 -[(stack-section addresses you access local variables and procedure parameters by. Every address is 32 bits long)]491.8 norm0 -[(and contains only an offset part.)]480.8 norm2 -[{/section-9.1 xa}(Interfacing to 32-bit C Programs)](9.1)459.4 head3 -[(A lot of the discussion in ){/section-8.4 xl}(section 8.4){el}(, about interfacing to 16-bit C programs, still applies when working in 32)]442.4 norm1 -[(bits. The absence of memory models or segmentation worries simplifies things a lot.)]431.4 norm2 -[{/section-9.1.1 xa}(External Symbol Names)](9.1.1)412.2 subh3 -[(Most 32-bit C compilers share the convention used by 16-bit compilers, that the names of all global symbols)]395.2 norm1 -[(\(functions or data\) they define are formed by prefixing an underscore to the name as it appears in the C)]384.2 norm0 -[(program. However, not all of them do: the )2(ELF)0( specification states that C symbols do )1(not)0( have a leading)]373.2 norm0 -[(underscore on their assembly-language names.)]362.2 norm2 -[(The older Linux )2(a.out)0( C compiler, all )2(Win32)0( compilers, )2(DJGPP)0(, and )2(NetBSD)0( and )2(FreeBSD)0(, all use the)]345.2 norm1 -[(leading underscore; for these compilers, the macros )2(cextern)0( and )2(cglobal)0(, as given in ){/section-8.4.1 xl}(section 8.4.1){el}(, will)]334.2 norm0 -[(still work. For )2(ELF)0(, though, the leading underscore should not be used.)]323.2 norm2 -[(See also ){/section-2.1.27 xl}(section 2.1.27){el}(.)]306.2 norm3 -[{/section-9.1.2 xa}(Function Definitions and Function Calls)](9.1.2)287 subh3 -[(The )(C calling convention in 32-bit programs is as follows. In the following description, the words )1(caller)0( and)]270 norm1 -[1(callee)0( are used to denote the function doing the calling and the function which gets called.)]259 norm2 -[(The caller pushes the function's parameters on the stack, one after another, in reverse order \(right to left, so)]242 bull1 -[(that the first argument specified to the function is pushed last\).)]231 bull2 -[(The caller then executes a near )2(CALL)0( instruction to pass control to the callee.)]214 bull3 -[(The callee receives control, and typically \(although this is not actually necessary, in functions which do not)]197 bull1 -[(need to access their parameters\) starts by saving the value of )2(ESP)0( in )2(EBP)0( so as to be able to use )2(EBP)0( as a)]186 bull0 -[(base pointer to find its parameters on the stack. However, the caller was probably doing this too, so part of)]175 bull0 -[(the calling convention states that )2(EBP)0( must be preserved by any C function. Hence the callee, if it is going)]164 bull0 -[(to set up )2(EBP)0( as a )(frame pointer, must push the previous value first.)]153 bull2 -[(The callee may then access its parameters relative to )2(EBP)0(. The doubleword at )2([EBP])0( holds the previous)]136 bull1 -[(value of )2(EBP)0( as it was pushed; the next doubleword, at )2([EBP+4])0(, holds the return address, pushed)]125 bull0 -[(implicitly by )2(CALL)0(. The parameters start after that, at )2([EBP+8])0(. The leftmost parameter of the function,)]114 bull0 -[(since it was pushed last, is accessible at this offset from )2(EBP)0(; the others follow, at successively greater)]103 bull0 -(103)pageodd -restore showpage -%%Page: 104 104 -%%BeginPageSetup -save -%%EndPageSetup -/104 pa -[(offsets. Thus, in a function such as )2(printf)0( which takes a variable number of parameters, the pushing of)]681 bull0 -[(the parameters in reverse order means that the function knows where to find its first parameter, which tells)]670 bull0 -[(it the number and type of the remaining ones.)]659 bull2 -[(The callee may also wish to decrease )2(ESP)0( further, so as to allocate space on the stack for local variables,)]642 bull1 -[(which will then be accessible at negative offsets from )2(EBP)0(.)]631 bull2 -[(The callee, if it wishes to return a value to the caller, should leave the value in )2(AL)0(, )2(AX)0( or )2(EAX)0( depending)]614 bull1 -[(on the size of the value. Floating-point results are typically returned in )2(ST0)0(.)]603 bull2 -[(Once the callee has finished processing, it restores )2(ESP)0( from )2(EBP)0( if it had allocated local stack space, then)]586 bull1 -[(pops the previous value of )2(EBP)0(, and returns via )2(RET)0( \(equivalently, )2(RETN)0(\).)]575 bull2 -[(When the caller regains control from the callee, the function parameters are still on the stack, so it typically)]558 bull1 -[(adds an immediate constant to )2(ESP)0( to remove them \(instead of executing a number of slow )2(POP)]547 bull0 -[(instructions\). Thus, if a function is accidentally called with the wrong number of parameters due to a)]536 bull0 -[(prototype mismatch, the stack will still be returned to a sensible state since the caller, which )1(knows)0( how)]525 bull0 -[(many parameters it pushed, does the removing.)]514 bull2 -[(There is an alternative calling convention used by Win32 programs for Windows API calls, and also for)]497 norm1 -[(functions called )1(by)0( the Windows API such as window procedures: they follow what Microsoft calls the)]486 norm0 -[2(__stdcall)0( convention. This is slightly closer to the Pascal convention, in that the callee clears the stack by)]475 norm0 -[(passing a parameter to the )2(RET)0( instruction. However, the parameters are still pushed in right-to-left order.)]464 norm2 -[(Thus, you would define a function in C style in the following way:)]447 norm3 -[2(global _myfunc )]430 code1 -[2()]419 code0 -[2(_myfunc: )]408 code0 -[2( push ebp )]397 code0 -[2( mov ebp,esp )]386 code0 -[2( sub esp,0x40 ; 64 bytes of local stack space )]375 code0 -[2( mov ebx,[ebp+8] ; first parameter to function )]364 code0 -[2()]353 code0 -[2( ; some more code )]342 code0 -[2()]331 code0 -[2( leave ; mov esp,ebp / pop ebp )]320 code0 -[2( ret)]309 code2 -[(At the other end of the process, to call a C function from your assembly code, you would do something like)]292 norm1 -[(this:)]281 norm2 -[2(extern _printf )]264 code1 -[2()]253 code0 -[2( ; and then, further down... )]242 code0 -[2()]231 code0 -[2( push dword [myint] ; one of my integer variables )]220 code0 -[2( push dword mystring ; pointer into my data segment )]209 code0 -[2( call _printf )]198 code0 -[2( add esp,byte 8 ; `byte' saves space )]187 code0 -[2()]176 code0 -[2( ; then those data items... )]165 code0 -[2()]154 code0 -[2(segment _DATA )]143 code0 -[2()]132 code0 -[2(myint dd 1234 )]121 code0 -[2(mystring db 'This number -> %d <- should be 1234',10,0)]110 code2 -(104)pageeven -restore showpage -%%Page: 105 105 -%%BeginPageSetup -save -%%EndPageSetup -/105 pa -[(This piece of code is the assembly equivalent of the C code)]681 norm3 -[2( int myint = 1234; )]664 code1 -[2( printf\("This number -> %d <- should be 1234\\n", myint\);)]653 code2 -[{/section-9.1.3 xa}(Accessing Data Items)](9.1.3)633.8 subh3 -[(To get at the contents of C variables, or to declare variables which C can access, you need only declare the)]616.8 norm1 -[(names as )2(GLOBAL)0( or )2(EXTERN)0(. \(Again, the names require leading underscores, as stated in ){/section-9.1.1 xl}(section 9.1.1){el}(.\))]605.8 norm0 -[(Thus, a C variable declared as )2(int i)0( can be accessed from assembler as)]594.8 norm2 -[2( extern _i )]577.8 code1 -[2( mov eax,[_i])]566.8 code2 -[(And to declare your own integer variable which C programs can access as )2(extern int j)0(, you do this)]549.8 norm1 -[(\(making sure you are assembling in the )2(_DATA)0( segment, if necessary\):)]538.8 norm2 -[2( global _j )]521.8 code1 -[2(_j dd 0)]510.8 code2 -[(To access a C array, you need to know the size of the components of the array. For example, )2(int)0( variables)]493.8 norm1 -[(are four bytes long, so if a C program declares an array as )2(int a[10])0(, you can access )2(a[3])0( by coding)]482.8 norm0 -[2(mov ax,[_a+12])0(. \(The byte offset 12 is obtained by multiplying the desired array index, 3, by the size of)]471.8 norm0 -[(the array element, 4.\) The sizes of the C base types in 32-bit compilers are: 1 for )2(char)0(, 2 for )2(short)0(, 4 for)]460.8 norm0 -[2(int)0(, )2(long)0( and )2(float)0(, and 8 for )2(double)0(. Pointers, being 32-bit addresses, are also 4 bytes long.)]449.8 norm2 -[(To access a C )(data structure, you need to know the offset from the base of the structure to the field you are)]432.8 norm1 -[(interested in. You can either do this by converting the C structure definition into a NASM structure definition)]421.8 norm0 -[(\(using )2(STRUC)0(\), or by calculating the one offset and using just that.)]410.8 norm2 -[(To do either of these, you should read your C compiler's manual to find out how it organizes data structures.)]393.8 norm1 -[(NASM gives no special alignment to structure members in its own )2(STRUC)0( macro, so you have to specify)]382.8 norm0 -[(alignment yourself if the C compiler generates it. Typically, you might find that a structure like)]371.8 norm2 -[2(struct { )]354.8 code1 -[2( char c; )]343.8 code0 -[2( int i; )]332.8 code0 -[2(} foo;)]321.8 code2 -[(might be eight bytes long rather than five, since the )2(int)0( field would be aligned to a four-byte boundary.)]304.8 norm1 -[(However, this sort of feature is sometimes a configurable option in the C compiler, either using)]293.8 norm0 -[(command-line options or )2(#pragma)0( lines, so you have to find out how your own compiler does it.)]282.8 norm2 -[{/section-9.1.4 xa}2(c32.mac)0(: Helper Macros for the 32-bit C Interface)](9.1.4)263.6 subh3 -[(Included in the NASM archives, in the )2(misc)0( directory, is a file )2(c32.mac)0( of macros. It defines three macros:)]246.6 norm1 -[2(proc)0(, )2(arg)0( and )2(endproc)0(. These are intended to be used for C-style procedure definitions, and they)]235.6 norm0 -[(automate a lot of the work involved in keeping track of the calling convention.)]224.6 norm2 -[(An example of an assembly function using the macro set is given here:)]207.6 norm3 -[2(proc _proc32 )]190.6 code1 -[2()]179.6 code0 -[2(%$i arg )]168.6 code0 -[2(%$j arg )]157.6 code0 -[2( mov eax,[ebp + %$i] )]146.6 code0 -[2( mov ebx,[ebp + %$j] )]135.6 code0 -[2( add eax,[ebx] )]124.6 code0 -[2()]113.6 code0 -[2(endproc)]102.6 code2 -(105)pageodd -restore showpage -%%Page: 106 106 -%%BeginPageSetup -save -%%EndPageSetup -/106 pa -[(This defines )2(_proc32)0( to be a procedure taking two arguments, the first \()2(i)0(\) an integer and the second \()2(j)0(\) a)]681 norm1 -[(pointer to an integer. It returns )2(i + *j)0(.)]670 norm2 -[(Note that the )2(arg)0( macro has an )2(EQU)0( as the first line of its expansion, and since the label before the macro call)]653 norm1 -[(gets prepended to the first line of the expanded macro, the )2(EQU)0( works, defining )2(%$i)0( to be an offset from )2(BP)0(.)]642 norm0 -[(A context-local variable is used, local to the context pushed by the )2(proc)0( macro and popped by the)]631 norm0 -[2(endproc)0( macro, so that the same argument name can be used in later procedures. Of course, you don't )1(have)]620 norm0 -[(to do that.)]609 norm2 -[2(arg)0( can take an optional parameter, giving the size of the argument. If no size is given, 4 is assumed, since it)]592 norm1 -[(is likely that many function parameters will be of type )2(int)0( or pointers.)]581 norm2 -[{/section-9.2 xa}(Writing NetBSD/FreeBSD/OpenBSD and Linux/ELF )(Shared Libraries)](9.2)559.6 head3 -[2(ELF)0( replaced the older )2(a.out)0( object file format under Linux because it contains support for)]542.6 norm1 -[(position-independent code \()(PIC\), which makes writing shared libraries much easier. NASM supports the )2(ELF)]531.6 norm0 -[(position-independent code features, so you can write Linux )2(ELF)0( shared libraries in NASM.)]520.6 norm2 -[(NetBSD, and its close cousins )(FreeBSD and )(OpenBSD, take a different approach by hacking PIC support into)]503.6 norm1 -[(the )2(a.out)0( format. NASM supports this as the )2(aoutb)0( output format, so you can write )(BSD shared libraries)]492.6 norm0 -[(in NASM too.)]481.6 norm2 -[(The operating system loads a PIC shared library by memory-mapping the library file at an arbitrarily chosen)]464.6 norm1 -[(point in the address space of the running process. The contents of the library's code section must therefore not)]453.6 norm0 -[(depend on where it is loaded in memory.)]442.6 norm2 -[(Therefore, you cannot get at your variables by writing code like this:)]425.6 norm3 -[2( mov eax,[myvar] ; WRONG)]408.6 code3 -[(Instead, the linker provides an area of memory called the )1(global offset table)0(, or )(GOT; the GOT is situated at a)]391.6 norm1 -[(constant distance from your library's code, so if you can find out where your library is loaded \(which is)]380.6 norm0 -[(typically done using a )2(CALL)0( and )2(POP)0( combination\), you can obtain the address of the GOT, and you can then)]369.6 norm0 -[(load the addresses of your variables out of linker-generated entries in the GOT.)]358.6 norm2 -[(The )1(data)0( section of a PIC shared library does not have these restrictions: since the data section is writable, it)]341.6 norm1 -[(has to be copied into memory anyway rather than just paged in from the library file, so as long as it's being)]330.6 norm0 -[(copied it can be relocated too. So you can put ordinary types of relocation in the data section without too)]319.6 norm0 -[(much worry \(but see ){/section-9.2.4 xl}(section 9.2.4){el}( for a caveat\).)]308.6 norm2 -[{/section-9.2.1 xa}(Obtaining the Address of the GOT)](9.2.1)289.4 subh3 -[(Each code module in your shared library should define the GOT as an external symbol:)]272.4 norm3 -[2(extern _GLOBAL_OFFSET_TABLE_ ; in ELF )]255.4 code1 -[2(extern __GLOBAL_OFFSET_TABLE_ ; in BSD a.out)]244.4 code2 -[(At the beginning of any function in your shared library which plans to access your data or BSS sections, you)]227.4 norm1 -[(must first calculate the address of the GOT. This is typically done by writing the function in this form:)]216.4 norm2 -[2(func: push ebp )]199.4 code1 -[2( mov ebp,esp )]188.4 code0 -[2( push ebx )]177.4 code0 -[2( call .get_GOT )]166.4 code0 -[2(.get_GOT: )]155.4 code0 -[2( pop ebx )]144.4 code0 -[2( add ebx,_GLOBAL_OFFSET_TABLE_+$$-.get_GOT wrt ..gotpc )]133.4 code0 -[2()]122.4 code0 -[2( ; the function body comes here )]111.4 code0 -[2()]100.4 code0 -(106)pageeven -restore showpage -%%Page: 107 107 -%%BeginPageSetup -save -%%EndPageSetup -/107 pa -[2( mov ebx,[ebp-4] )]681 code0 -[2( mov esp,ebp )]670 code0 -[2( pop ebp )]659 code0 -[2( ret)]648 code2 -[(\(For BSD, again, the symbol )2(_GLOBAL_OFFSET_TABLE)0( requires a second leading underscore.\))]631 norm3 -[(The first two lines of this function are simply the standard C prologue to set up a stack frame, and the last)]614 norm1 -[(three lines are standard C function epilogue. The third line, and the fourth to last line, save and restore the)]603 norm0 -[2(EBX)0( register, because PIC shared libraries use this register to store the address of the GOT.)]592 norm2 -[(The interesting bit is the )2(CALL)0( instruction and the following two lines. The )2(CALL)0( and )2(POP)0( combination)]575 norm1 -[(obtains the address of the label )2(.get_GOT)0(, without having to know in advance where the program was)]564 norm0 -[(loaded \(since the )2(CALL)0( instruction is encoded relative to the current position\). The )2(ADD)0( instruction makes use)]553 norm0 -[(of one of the special PIC relocation types: )(GOTPC relocation. With the )2(WRT ..gotpc)0( qualifier specified,)]542 norm0 -[(the symbol referenced \(here )2(_GLOBAL_OFFSET_TABLE_)0(, the special symbol assigned to the GOT\) is given)]531 norm0 -[(as an offset from the beginning of the section. \(Actually, )2(ELF)0( encodes it as the offset from the operand field)]520 norm0 -[(of the )2(ADD)0( instruction, but NASM simplifies this deliberately, so you do things the same way for both )2(ELF)]509 norm0 -[(and )2(BSD)0(.\) So the instruction then )1(adds)0( the beginning of the section, to get the real address of the GOT, and)]498 norm0 -[(subtracts the value of )2(.get_GOT)0( which it knows is in )2(EBX)0(. Therefore, by the time that instruction has)]487 norm0 -[(finished, )2(EBX)0( contains the address of the GOT.)]476 norm2 -[(If you didn't follow that, don't worry: it's never necessary to obtain the address of the GOT by any other)]459 norm1 -[(means, so you can put those three instructions into a macro and safely ignore them:)]448 norm2 -[2(%macro get_GOT 0 )]431 code1 -[2()]420 code0 -[2( call %%getgot )]409 code0 -[2( %%getgot: )]398 code0 -[2( pop ebx )]387 code0 -[2( add ebx,_GLOBAL_OFFSET_TABLE_+$$-%%getgot wrt ..gotpc )]376 code0 -[2()]365 code0 -[2(%endmacro)]354 code2 -[{/section-9.2.2 xa}(Finding Your Local Data Items)](9.2.2)334.8 subh3 -[(Having got the GOT, you can then use it to obtain the addresses of your data items. Most variables will reside)]317.8 norm1 -[(in the sections you have declared; they can be accessed using the )2(..gotoff)0( special )2(WRT)0( type. The way this)]306.8 norm0 -[(works is like this:)]295.8 norm2 -[2( lea eax,[ebx+myvar wrt ..gotoff])]278.8 code3 -[(The expression )2(myvar wrt ..gotoff)0( is calculated, when the shared library is linked, to be the offset to)]261.8 norm1 -[(the local variable )2(myvar)0( from the beginning of the GOT. Therefore, adding it to )2(EBX)0( as above will place the)]250.8 norm0 -[(real address of )2(myvar)0( in )2(EAX)0(.)]239.8 norm2 -[(If you declare variables as )2(GLOBAL)0( without specifying a size for them, they are shared between code modules)]222.8 norm1 -[(in the library, but do not get exported from the library to the program that loaded it. They will still be in your)]211.8 norm0 -[(ordinary data and BSS sections, so you can access them in the same way as local variables, using the above)]200.8 norm0 -[2(..gotoff)0( mechanism.)]189.8 norm2 -[(Note that due to a peculiarity of the way BSD )2(a.out)0( format handles this relocation type, there must be at)]172.8 norm1 -[(least one non-local symbol in the same section as the address you're trying to access.)]161.8 norm2 -[{/section-9.2.3 xa}(Finding External and Common Data Items)](9.2.3)142.6 subh3 -[(If your library needs to get at an external variable \(external to the )1(library)0(, not just to one of the modules)]125.6 norm1 -[(within it\), you must use the )2(..got)0( type to get at it. The )2(..got)0( type, instead of giving you the offset from)]114.6 norm0 -[(the GOT base to the variable, gives you the offset from the GOT base to a GOT )1(entry)0( containing the address)]103.6 norm0 -(107)pageodd -restore showpage -%%Page: 108 108 -%%BeginPageSetup -save -%%EndPageSetup -/108 pa -[(of the variable. The linker will set up this GOT entry when it builds the library, and the dynamic linker will)]681 norm0 -[(place the correct address in it at load time. So to obtain the address of an external variable )2(extvar)0( in )2(EAX)0(,)]670 norm0 -[(you would code)]659 norm2 -[2( mov eax,[ebx+extvar wrt ..got])]642 code3 -[(This loads the address of )2(extvar)0( out of an entry in the GOT. The linker, when it builds the shared library,)]625 norm1 -[(collects together every relocation of type )2(..got)0(, and builds the GOT so as to ensure it has every necessary)]614 norm0 -[(entry present.)]603 norm2 -[(Common variables must also be accessed in this way.)]586 norm3 -[{/section-9.2.4 xa}(Exporting Symbols to the Library User)](9.2.4)566.8 subh3 -[(If you want to export symbols to the user of the library, you have to declare whether they are functions or)]549.8 norm1 -[(data, and if they are data, you have to give the size of the data item. This is because the dynamic linker has to)]538.8 norm0 -[(build )(procedure linkage table entries for any exported functions, and also moves exported data items away)]527.8 norm0 -[(from the library's data section in which they were declared.)]516.8 norm2 -[(So to export a function to users of the library, you must use)]499.8 norm3 -[2(global func:function ; declare it as a function )]482.8 code1 -[2()]471.8 code0 -[2(func: push ebp )]460.8 code0 -[2()]449.8 code0 -[2( ; etc.)]438.8 code2 -[(And to export a data item such as an array, you would have to code)]421.8 norm3 -[2(global array:data array.end-array ; give the size too )]404.8 code1 -[2()]393.8 code0 -[2(array: resd 128 )]382.8 code0 -[2(.end:)]371.8 code2 -[(Be careful: If you export a variable to the library user, by declaring it as )2(GLOBAL)0( and supplying a size, the)]354.8 norm1 -[(variable will end up living in the data section of the main program, rather than in your library's data section,)]343.8 norm0 -[(where you declared it. So you will have to access your own global variable with the )2(..got)0( mechanism rather)]332.8 norm0 -[(than )2(..gotoff)0(, as if it were external \(which, effectively, it has become\).)]321.8 norm2 -[(Equally, if you need to store the address of an exported global in one of your data sections, you can't do it by)]304.8 norm1 -[(means of the standard sort of code:)]293.8 norm2 -[2(dataptr: dd global_data_item ; WRONG)]276.8 code3 -[(NASM will interpret this code as an ordinary relocation, in which )2(global_data_item)0( is merely an offset)]259.8 norm1 -[(from the beginning of the )2(.data)0( section \(or whatever\); so this reference will end up pointing at your data)]248.8 norm0 -[(section instead of at the exported global which resides elsewhere.)]237.8 norm2 -[(Instead of the above code, then, you must write)]220.8 norm3 -[2(dataptr: dd global_data_item wrt ..sym)]203.8 code3 -[(which makes use of the special )2(WRT)0( type )2(..sym)0( to instruct NASM to search the symbol table for a particular)]186.8 norm1 -[(symbol at that address, rather than just relocating by section base.)]175.8 norm2 -[(Either method will work for functions: referring to one of your functions by means of)]158.8 norm3 -[2(funcptr: dd my_function)]141.8 code3 -[(will give the user the address of the code you wrote, whereas)]124.8 norm3 -[2(funcptr: dd my_function wrt .sym)]107.8 code3 -(108)pageeven -restore showpage -%%Page: 109 109 -%%BeginPageSetup -save -%%EndPageSetup -/109 pa -[(will give the address of the procedure linkage table for the function, which is where the calling program will)]681 norm1 -[1(believe)0( the function lives. Either address is a valid way to call the function.)]670 norm2 -[{/section-9.2.5 xa}(Calling Procedures Outside the Library)](9.2.5)650.8 subh3 -[(Calling procedures outside your shared library has to be done by means of a )1(procedure linkage table)0(, or )(PLT.)]633.8 norm1 -[(The PLT is placed at a known offset from where the library is loaded, so the library code can make calls to the)]622.8 norm0 -[(PLT in a position-independent way. Within the PLT there is code to jump to offsets contained in the GOT, so)]611.8 norm0 -[(function calls to other shared libraries or to routines in the main program can be transparently passed off to)]600.8 norm0 -[(their real destinations.)]589.8 norm2 -[(To call an external routine, you must use another special PIC relocation type, )2(WRT ..plt)0(. This is much)]572.8 norm1 -[(easier than the GOT-based ones: you simply replace calls such as )2(CALL printf)0( with the PLT-relative)]561.8 norm0 -[(version )2(CALL printf WRT ..plt)0(.)]550.8 norm2 -[{/section-9.2.6 xa}(Generating the Library File)](9.2.6)531.6 subh3 -[(Having written some code modules and assembled them to )2(.o)0( files, you then generate your shared library)]514.6 norm1 -[(with a command such as)]503.6 norm2 -[2(ld -shared -o library.so module1.o module2.o # for ELF )]486.6 code1 -[2(ld -Bshareable -o library.so module1.o module2.o # for BSD)]475.6 code2 -[(For ELF, if your shared library is going to reside in system directories such as )2(/usr/lib)0( or )2(/lib)0(, it is)]458.6 norm1 -[(usually worth using the )2(-soname)0( flag to the linker, to store the final library file name, with a version)]447.6 norm0 -[(number, into the library:)]436.6 norm2 -[2(ld -shared -soname library.so.1 -o library.so.1.2 *.o)]419.6 code3 -[(You would then copy )2(library.so.1.2)0( into the library directory, and create )2(library.so.1)0( as a)]402.6 norm1 -[(symbolic link to it.)]391.6 norm2 -(109)pageodd -restore showpage -%%Page: 110 110 -%%BeginPageSetup -save -%%EndPageSetup -/110 pa -[{/chapter-10 xa}(Chapter 10: Mixing 16 and 32 Bit Code)]642.8 chap3 -[(This chapter tries to cover some of the issues, largely related to unusual forms of addressing and jump)]607.8 norm1 -[(instructions, encountered when writing operating system code such as protected-mode initialisation routines,)]596.8 norm0 -[(which require code that operates in mixed segment sizes, such as code in a 16-bit segment trying to modify)]585.8 norm0 -[(data in a 32-bit one, or jumps between different-size segments.)]574.8 norm2 -[{/section-10.1 xa}(Mixed-Size Jumps)](10.1)553.4 head3 -[(The most common form of )(mixed-size instruction is the one used when writing a 32-bit OS: having done)]536.4 norm1 -[(your setup in 16-bit mode, such as loading the kernel, you then have to boot it by switching into protected)]525.4 norm0 -[(mode and jumping to the 32-bit kernel start address. In a fully 32-bit OS, this tends to be the )1(only)0( mixed-size)]514.4 norm0 -[(instruction you need, since everything before it can be done in pure 16-bit code, and everything after it can be)]503.4 norm0 -[(pure 32-bit.)]492.4 norm2 -[(This jump must specify a 48-bit far address, since the target segment is a 32-bit one. However, it must be)]475.4 norm1 -[(assembled in a 16-bit segment, so just coding, for example,)]464.4 norm2 -[2( jmp 0x1234:0x56789ABC ; wrong!)]447.4 code3 -[(will not work, since the offset part of the address will be truncated to )2(0x9ABC)0( and the jump will be an)]430.4 norm1 -[(ordinary 16-bit far one.)]419.4 norm2 -[(The Linux kernel setup code gets round the inability of )2(as86)0( to generate the required instruction by coding it)]402.4 norm1 -[(manually, using )2(DB)0( instructions. NASM can go one better than that, by actually generating the right)]391.4 norm0 -[(instruction itself. Here's how to do it right:)]380.4 norm2 -[2( jmp dword 0x1234:0x56789ABC ; right)]363.4 code3 -[(The )2(DWORD)0( prefix \(strictly speaking, it should come )1(after)0( the colon, since it is declaring the )1(offset)0( field to be a)]346.4 norm1 -[(doubleword; but NASM will accept either form, since both are unambiguous\) forces the offset part to be)]335.4 norm0 -[(treated as far, in the assumption that you are deliberately writing a jump from a 16-bit segment to a 32-bit)]324.4 norm0 -[(one.)]313.4 norm2 -[(You can do the reverse operation, jumping from a 32-bit segment to a 16-bit one, by means of the )2(WORD)]296.4 norm1 -[(prefix:)]285.4 norm2 -[2( jmp word 0x8765:0x4321 ; 32 to 16 bit)]268.4 code3 -[(If the )2(WORD)0( prefix is specified in 16-bit mode, or the )2(DWORD)0( prefix in 32-bit mode, they will be ignored,)]251.4 norm1 -[(since each is explicitly forcing NASM into a mode it was in anyway.)]240.4 norm2 -[{/section-10.2 xa}(Addressing Between Different-Size Segments)](10.2)219 head3 -[(If your OS is mixed 16 and 32-bit, or if you are writing a DOS extender, you are likely to have to deal with)]202 norm1 -[(some 16-bit segments and some 32-bit ones. At some point, you will probably end up writing code in a)]191 norm0 -[(16-bit segment which has to access data in a 32-bit segment, or vice versa.)]180 norm2 -[(If the data you are trying to access in a 32-bit segment lies within the first 64K of the segment, you may be)]163 norm1 -[(able to get away with using an ordinary 16-bit addressing operation for the purpose; but sooner or later, you)]152 norm0 -[(will want to do 32-bit addressing from 16-bit mode.)]141 norm2 -[(The easiest way to do this is to make sure you use a register for the address, since any effective address)]124 norm1 -[(containing a 32-bit register is forced to be a 32-bit address. So you can do)]113 norm2 -(110)pageeven -restore showpage -%%Page: 111 111 -%%BeginPageSetup -save -%%EndPageSetup -/111 pa -[2( mov eax,offset_into_32_bit_segment_specified_by_fs )]681 code1 -[2( mov dword [fs:eax],0x11223344)]670 code2 -[(This is fine, but slightly cumbersome \(since it wastes an instruction and a register\) if you already know the)]653 norm1 -[(precise offset you are aiming at. The x86 architecture does allow 32-bit effective addresses to specify nothing)]642 norm0 -[(but a 4-byte offset, so why shouldn't NASM be able to generate the best instruction for the purpose?)]631 norm2 -[(It can. As in ){/section-10.1 xl}(section 10.1){el}(, you need only prefix the address with the )2(DWORD)0( keyword, and it will be forced to)]614 norm1 -[(be a 32-bit address:)]603 norm2 -[2( mov dword [fs:dword my_offset],0x11223344)]586 code3 -[(Also as in ){/section-10.1 xl}(section 10.1){el}(, NASM is not fussy about whether the )2(DWORD)0( prefix comes before or after the)]569 norm1 -[(segment override, so arguably a nicer-looking way to code the above instruction is)]558 norm2 -[2( mov dword [dword fs:my_offset],0x11223344)]541 code3 -[(Don't confuse the )2(DWORD)0( prefix )1(outside)0( the square brackets, which controls the size of the data stored at the)]524 norm1 -[(address, with the one )2(inside)0( the square brackets which controls the length of the address itself. The two can)]513 norm0 -[(quite easily be different:)]502 norm2 -[2( mov word [dword 0x12345678],0x9ABC)]485 code3 -[(This moves 16 bits of data to an address specified by a 32-bit offset.)]468 norm3 -[(You can also specify )2(WORD)0( or )2(DWORD)0( prefixes along with the )2(FAR)0( prefix to indirect far jumps or calls. For)]451 norm1 -[(example:)]440 norm2 -[2( call dword far [fs:word 0x4321])]423 code3 -[(This instruction contains an address specified by a 16-bit offset; it loads a 48-bit far pointer from that \(16-bit)]406 norm1 -[(segment and 32-bit offset\), and calls that address.)]395 norm2 -[{/section-10.3 xa}(Other Mixed-Size Instructions)](10.3)373.6 head3 -[(The other way you might want to access data might be using the string instructions \()2(LODSx)0(, )2(STOSx)0( and so)]356.6 norm1 -[(on\) or the )2(XLATB)0( instruction. These instructions, since they take no parameters, might seem to have no easy)]345.6 norm0 -[(way to make them perform 32-bit addressing when assembled in a 16-bit segment.)]334.6 norm2 -[(This is the purpose of NASM's )2(a16)0(, )2(a32)0( and )2(a64)0( prefixes. If you are coding )2(LODSB)0( in a 16-bit segment)]317.6 norm1 -[(but it is supposed to be accessing a string in a 32-bit segment, you should load the desired address into )2(ESI)]306.6 norm0 -[(and then code)]295.6 norm2 -[2( a32 lodsb)]278.6 code3 -[(The prefix forces the addressing size to 32 bits, meaning that )2(LODSB)0( loads from )2([DS:ESI])0( instead of)]261.6 norm1 -[2([DS:SI])0(. To access a string in a 16-bit segment when coding in a 32-bit one, the corresponding )2(a16)0( prefix)]250.6 norm0 -[(can be used.)]239.6 norm2 -[(The )2(a16)0(, )2(a32)0( and )2(a64)0( prefixes can be applied to any instruction in NASM's instruction table, but most of)]222.6 norm1 -[(them can generate all the useful forms without them. The prefixes are necessary only for instructions with)]211.6 norm0 -[(implicit addressing: )2(CMPSx)0(, )2(SCASx)0(, )2(LODSx)0(, )2(STOSx)0(, )2(MOVSx)0(, )2(INSx)0(, )2(OUTSx)0(, and )2(XLATB)0(. Also, the various)]200.6 norm0 -[(push and pop instructions \()2(PUSHA)0( and )2(POPF)0( as well as the more usual )2(PUSH)0( and )2(POP)0(\) can accept )2(a16)0(, )2(a32)]189.6 norm0 -[(or )2(a64)0( prefixes to force a particular one of )2(SP)0(, )2(ESP)0( or )2(RSP)0( to be used as a stack pointer, in case the stack)]178.6 norm0 -[(segment in use is a different size from the code segment.)]167.6 norm2 -[2(PUSH)0( and )2(POP)0(, when applied to segment registers in 32-bit mode, also have the slightly odd behaviour that)]150.6 norm1 -[(they push and pop 4 bytes at a time, of which the top two are ignored and the bottom two give the value of the)]139.6 norm0 -[(segment register being manipulated. To force the 16-bit behaviour of segment-register push and pop)]128.6 norm0 -[(instructions, you can use the operand-size prefix )2(o16)0(:)]117.6 norm2 -(111)pageodd -restore showpage -%%Page: 112 112 -%%BeginPageSetup -save -%%EndPageSetup -/112 pa -[2( o16 push ss )]681 code1 -[2( o16 push ds)]670 code2 -[(This code saves a doubleword of stack space by fitting two segment registers into the space which would)]653 norm1 -[(normally be consumed by pushing one.)]642 norm2 -[(\(You can also use the )2(o32)0( prefix to force the 32-bit behaviour when in 16-bit mode, but this seems less)]625 norm1 -[(useful.\))]614 norm2 -(112)pageeven -restore showpage -%%Page: 113 113 -%%BeginPageSetup -save -%%EndPageSetup -/113 pa -[{/chapter-11 xa}(Chapter 11: Writing 64-bit Code \(Unix, Win64\))]642.8 chap3 -[(This chapter attempts to cover some of the common issues involved when writing 64-bit code, to run under)]607.8 norm1 -[(Win64 or Unix. It covers how to write assembly code to interface with 64-bit C routines, and how to write)]596.8 norm0 -[(position-independent code for shared libraries.)]585.8 norm2 -[(All 64-bit code uses a flat memory model, since segmentation is not available in 64-bit mode. The one)]568.8 norm1 -[(exception is the )2(FS)0( and )2(GS)0( registers, which still add their bases.)]557.8 norm2 -[(Position independence in 64-bit mode is significantly simpler, since the processor supports )2(RIP)0(\226relative)]540.8 norm1 -[(addressing directly; see the )2(REL)0( keyword \(){/section-3.3 xl}(section 3.3){el}(\). On most 64-bit platforms, it is probably desirable to)]529.8 norm0 -[(make that the default, using the directive )2(DEFAULT REL)0( \(){/section-6.2 xl}(section 6.2){el}(\).)]518.8 norm2 -[(64-bit programming is relatively similar to 32-bit programming, but of course pointers are 64 bits long;)]501.8 norm1 -[(additionally, all existing platforms pass arguments in registers rather than on the stack. Furthermore, 64-bit)]490.8 norm0 -[(platforms use SSE2 by default for floating point. Please see the ABI documentation for your platform.)]479.8 norm2 -[(64-bit platforms differ in the sizes of the fundamental datatypes, not just from 32-bit platforms but from each)]462.8 norm1 -[(other. If a specific size data type is desired, it is probably best to use the types defined in the Standard C)]451.8 norm0 -[(header )2(<inttypes.h>)0(.)]440.8 norm2 -[(In 64-bit mode, the default instruction size is still 32 bits. When loading a value into a 32-bit register \(but not)]423.8 norm1 -[(an 8- or 16-bit register\), the upper 32 bits of the corresponding 64-bit register are set to zero.)]412.8 norm2 -[{/section-11.1 xa}(Register Names in 64-bit Mode)](11.1)391.4 head3 -[(NASM uses the following names for general-purpose registers in 64-bit mode, for 8-, 16-, 32- and 64-bit)]374.4 norm1 -[(references, respecitively:)]363.4 norm2 -[2( AL/AH, CL/CH, DL/DH, BL/BH, SPL, BPL, SIL, DIL, R8B-R15B )]346.4 code1 -[2( AX, CX, DX, BX, SP, BP, SI, DI, R8W-R15W )]335.4 code0 -[2( EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI, R8D-R15D )]324.4 code0 -[2( RAX, RCX, RDX, RBX, RSP, RBP, RSI, RDI, R8-R15)]313.4 code2 -[(This is consistent with the AMD documentation and most other assemblers. The Intel documentation,)]296.4 norm1 -[(however, uses the names )2(R8L-R15L)0( for 8-bit references to the higher registers. It is possible to use those)]285.4 norm0 -[(names by definiting them as macros; similarly, if one wants to use numeric names for the low 8 registers,)]274.4 norm0 -[(define them as macros. The standard macro package )2(altreg)0( \(see ){/section-5.1 xl}(section 5.1){el}(\) can be used for this purpose.)]263.4 norm2 -[{/section-11.2 xa}(Immediates and Displacements in 64-bit Mode)](11.2)242 head3 -[(In 64-bit mode, immediates and displacements are generally only 32 bits wide. NASM will therefore truncate)]225 norm1 -[(most displacements and immediates to 32 bits.)]214 norm2 -[(The only instruction which takes a full )(64-bit immediate is:)]197 norm3 -[2( MOV reg64,imm64)]180 code3 -[(NASM will produce this instruction whenever the programmer uses )2(MOV)0( with an immediate into a 64-bit)]163 norm1 -[(register. If this is not desirable, simply specify the equivalent 32-bit register, which will be automatically)]152 norm0 -[(zero-extended by the processor, or specify the immediate as )2(DWORD)0(:)]141 norm2 -[2( mov rax,foo ; 64-bit immediate )]124 code1 -[2( mov rax,qword foo ; \(identical\) )]113 code0 -(113)pageodd -restore showpage -%%Page: 114 114 -%%BeginPageSetup -save -%%EndPageSetup -/114 pa -[2( mov eax,foo ; 32-bit immediate, zero-extended )]681 code0 -[2( mov rax,dword foo ; 32-bit immediate, sign-extended)]670 code2 -[(The length of these instructions are 10, 5 and 7 bytes, respectively.)]653 norm3 -[(The only instructions which take a full )(64-bit )1(displacement)0( is loading or storing, using )2(MOV)0(, )2(AL)0(, )2(AX)0(, )2(EAX)0( or)]636 norm1 -[2(RAX)0( \(but no other registers\) to an absolute 64-bit address. Since this is a relatively rarely used instruction)]625 norm0 -[(\(64-bit code generally uses relative addressing\), the programmer has to explicitly declare the displacement)]614 norm0 -[(size as )2(QWORD)0(:)]603 norm2 -[2( default abs )]586 code1 -[2()]575 code0 -[2( mov eax,[foo] ; 32-bit absolute disp, sign-extended )]564 code0 -[2( mov eax,[a32 foo] ; 32-bit absolute disp, zero-extended )]553 code0 -[2( mov eax,[qword foo] ; 64-bit absolute disp )]542 code0 -[2()]531 code0 -[2( default rel )]520 code0 -[2()]509 code0 -[2( mov eax,[foo] ; 32-bit relative disp )]498 code0 -[2( mov eax,[a32 foo] ; d:o, address truncated to 32 bits\(!\) )]487 code0 -[2( mov eax,[qword foo] ; error )]476 code0 -[2( mov eax,[abs qword foo] ; 64-bit absolute disp)]465 code2 -[(A sign-extended absolute displacement can access from \2262 GB to +2 GB; a zero-extended absolute)]448 norm1 -[(displacement can access from 0 to 4 GB.)]437 norm2 -[{/section-11.3 xa}(Interfacing to 64-bit C Programs \(Unix\))](11.3)415.6 head3 -[(On Unix, the 64-bit ABI is defined by the document:)]398.6 norm3 -[{(http://www.x86-64.org/documentation/abi.pdf)wl}2(http://www.x86-64.org/documentation/abi.pdf){el}]381.6 norm3 -[(Although written for AT&T-syntax assembly, the concepts apply equally well for NASM-style assembly.)]364.6 norm1 -[(What follows is a simplified summary.)]353.6 norm2 -[(The first six integer arguments \(from the left\) are passed in )2(RDI)0(, )2(RSI)0(, )2(RDX)0(, )2(RCX)0(, )2(R8)0(, and )2(R9)0(, in that order.)]336.6 norm1 -[(Additional integer arguments are passed on the stack. These registers, plus )2(RAX)0(, )2(R10)0( and )2(R11)0( are destroyed)]325.6 norm0 -[(by function calls, and thus are available for use by the function without saving.)]314.6 norm2 -[(Integer return values are passed in )2(RAX)0( and )2(RDX)0(, in that order.)]297.6 norm3 -[(Floating point is done using SSE registers, except for )2(long double)0(. Floating-point arguments are passed)]280.6 norm1 -[(in )2(XMM0)0( to )2(XMM7)0(; return is )2(XMM0)0( and )2(XMM1)0(. )2(long double)0( are passed on the stack, and returned in )2(ST0)]269.6 norm0 -[(and )2(ST1)0(.)]258.6 norm2 -[(All SSE and x87 registers are destroyed by function calls.)]241.6 norm3 -[(On 64-bit Unix, )2(long)0( is 64 bits.)]224.6 norm3 -[(Integer and SSE register arguments are counted separately, so for the case of)]207.6 norm3 -[2( void foo\(long a, double b, int c\))]190.6 code3 -[2(a)0( is passed in )2(RDI)0(, )2(b)0( in )2(XMM0)0(, and )2(c)0( in )2(ESI)0(.)]173.6 norm3 -[{/section-11.4 xa}(Interfacing to 64-bit C Programs \(Win64\))](11.4)152.2 head3 -[(The Win64 ABI is described at:)]135.2 norm3 -[{(http://msdn2.microsoft.com/en-gb/library/ms794533.aspx)wl}2(http://msdn2.microsoft.com/en-gb/library/ms794533.aspx){el}]118.2 norm3 -[(What follows is a simplified summary.)]101.2 norm3 -(114)pageeven -restore showpage -%%Page: 115 115 -%%BeginPageSetup -save -%%EndPageSetup -/115 pa -[(The first four integer arguments are passed in )2(RCX)0(, )2(RDX)0(, )2(R8)0( and )2(R9)0(, in that order. Additional integer)]681 norm1 -[(arguments are passed on the stack. These registers, plus )2(RAX)0(, )2(R10)0( and )2(R11)0( are destroyed by function calls,)]670 norm0 -[(and thus are available for use by the function without saving.)]659 norm2 -[(Integer return values are passed in )2(RAX)0( only.)]642 norm3 -[(Floating point is done using SSE registers, except for )2(long double)0(. Floating-point arguments are passed)]625 norm1 -[(in )2(XMM0)0( to )2(XMM3)0(; return is )2(XMM0)0( only.)]614 norm2 -[(On Win64, )2(long)0( is 32 bits; )2(long long)0( or )2(_int64)0( is 64 bits.)]597 norm3 -[(Integer and SSE register arguments are counted together, so for the case of)]580 norm3 -[2( void foo\(long long a, double b, int c\))]563 code3 -[2(a)0( is passed in )2(RCX)0(, )2(b)0( in )2(XMM1)0(, and )2(c)0( in )2(R8D)0(.)]546 norm3 -(115)pageodd -restore showpage -%%Page: 116 116 -%%BeginPageSetup -save -%%EndPageSetup -/116 pa -[{/chapter-12 xa}(Chapter 12: Troubleshooting)]642.8 chap3 -[(This chapter describes some of the common problems that users have been known to encounter with NASM,)]607.8 norm1 -[(and answers them. It also gives instructions for reporting bugs in NASM if you find a difficulty that isn't)]596.8 norm0 -[(listed here.)]585.8 norm2 -[{/section-12.1 xa}(Common Problems)](12.1)564.4 head3 -[{/section-12.1.1 xa}(NASM Generates )(Inefficient Code)](12.1.1)545.2 subh3 -[(We sometimes get `bug' reports about NASM generating inefficient, or even `wrong', code on instructions)]528.2 norm1 -[(such as )2(ADD ESP,8)0(. This is a deliberate design feature, connected to predictability of output: NASM, on)]517.2 norm0 -[(seeing )2(ADD ESP,8)0(, will generate the form of the instruction which leaves room for a 32-bit offset. You)]506.2 norm0 -[(need to code )2(ADD ESP,BYTE 8)0( if you want the space-efficient form of the instruction. This isn't a bug, it's)]495.2 norm0 -[(user error: if you prefer to have NASM produce the more efficient code automatically enable optimization)]484.2 norm0 -[(with the )2(-O)0( option \(see ){/section-2.1.22 xl}(section 2.1.22){el}(\).)]473.2 norm2 -[{/section-12.1.2 xa}(My Jumps are Out of Range)](12.1.2)454 subh3 -[(Similarly, people complain that when they issue )(conditional jumps \(which are )2(SHORT)0( by default\) that try to)]437 norm1 -[(jump too far, NASM reports `short jump out of range' instead of making the jumps longer.)]426 norm2 -[(This, again, is partly a predictability issue, but in fact has a more practical reason as well. NASM has no)]409 norm1 -[(means of being told what type of processor the code it is generating will be run on; so it cannot decide for)]398 norm0 -[(itself that it should generate )2(Jcc NEAR)0( type instructions, because it doesn't know that it's working for a 386)]387 norm0 -[(or above. Alternatively, it could replace the out-of-range short )2(JNE)0( instruction with a very short )2(JE)]376 norm0 -[(instruction that jumps over a )2(JMP NEAR)0(; this is a sensible solution for processors below a 386, but hardly)]365 norm0 -[(efficient on processors which have good branch prediction )1(and)0( could have used )2(JNE NEAR)0( instead. So, once)]354 norm0 -[(again, it's up to the user, not the assembler, to decide what instructions should be generated. See ){/section-2.1.22 xl}(section){el}]343 norm0 -[{/section-2.1.22 xl}(2.1.22){el}(.)]332 norm2 -[{/section-12.1.3 xa}2(ORG)0( Doesn't Work)](12.1.3)312.8 subh3 -[(People writing )(boot sector programs in the )2(bin)0( format often complain that )2(ORG)0( doesn't work the way they'd)]295.8 norm1 -[(like: in order to place the )2(0xAA55)0( signature word at the end of a 512-byte boot sector, people who are used)]284.8 norm0 -[(to MASM tend to code)]273.8 norm2 -[2( ORG 0 )]256.8 code1 -[2()]245.8 code0 -[2( ; some boot sector code )]234.8 code0 -[2()]223.8 code0 -[2( ORG 510 )]212.8 code0 -[2( DW 0xAA55)]201.8 code2 -[(This is not the intended use of the )2(ORG)0( directive in NASM, and will not work. The correct way to solve this)]184.8 norm1 -[(problem in NASM is to use the )2(TIMES)0( directive, like this:)]173.8 norm2 -[2( ORG 0 )]156.8 code1 -[2()]145.8 code0 -[2( ; some boot sector code )]134.8 code0 -[2()]123.8 code0 -[2( TIMES 510-\($-$$\) DB 0 )]112.8 code0 -[2( DW 0xAA55)]101.8 code2 -(116)pageeven -restore showpage -%%Page: 117 117 -%%BeginPageSetup -save -%%EndPageSetup -/117 pa -[(The )2(TIMES)0( directive will insert exactly enough zero bytes into the output to move the assembly point up to)]681 norm1 -[(510. This method also has the advantage that if you accidentally fill your boot sector too full, NASM will)]670 norm0 -[(catch the problem at assembly time and report it, so you won't end up with a boot sector that you have to)]659 norm0 -[(disassemble to find out what's wrong with it.)]648 norm2 -[{/section-12.1.4 xa}2(TIMES)0( Doesn't Work)](12.1.4)628.8 subh3 -[(The other common problem with the above code is people who write the )2(TIMES)0( line as)]611.8 norm3 -[2( TIMES 510-$ DB 0)]594.8 code3 -[(by reasoning that )2($)0( should be a pure number, just like 510, so the difference between them is also a pure)]577.8 norm1 -[(number and can happily be fed to )2(TIMES)0(.)]566.8 norm2 -[(NASM is a )1(modular)0( assembler: the various component parts are designed to be easily separable for re-use, so)]549.8 norm1 -[(they don't exchange information unnecessarily. In consequence, the )2(bin)0( output format, even though it has)]538.8 norm0 -[(been told by the )2(ORG)0( directive that the )2(.text)0( section should start at 0, does not pass that information back to)]527.8 norm0 -[(the expression evaluator. So from the evaluator's point of view, )2($)0( isn't a pure number: it's an offset from a)]516.8 norm0 -[(section base. Therefore the difference between )2($)0( and 510 is also not a pure number, but involves a section)]505.8 norm0 -[(base. Values involving section bases cannot be passed as arguments to )2(TIMES)0(.)]494.8 norm2 -[(The solution, as in the previous section, is to code the )2(TIMES)0( line in the form)]477.8 norm3 -[2( TIMES 510-\($-$$\) DB 0)]460.8 code3 -[(in which )2($)0( and )2($$)0( are offsets from the same section base, and so their difference is a pure number. This will)]443.8 norm1 -[(solve the problem and generate sensible code.)]432.8 norm2 -[{/section-12.2 xa}(Bugs)](12.2)411.4 head3 -[(We have never yet released a version of NASM with any )1(known)0( bugs. That doesn't usually stop there being)]394.4 norm1 -[(plenty we didn't know about, though. Any that you find should be reported firstly via the )2(bugtracker)0( at)]383.4 norm0 -[{(https://sourceforge.net/projects/nasm/)wl}2(https://sourceforge.net/projects/nasm/){el}0( \(click on "Bugs"\), or if that fails then through one of)]372.4 norm0 -[(the contacts in ){/section-1.2 xl}(section 1.2){el}(.)]361.4 norm2 -[(Please read ){/section-2.2 xl}(section 2.2){el}( first, and don't report the bug if it's listed in there as a deliberate feature. \(If you think)]344.4 norm1 -[(the feature is badly thought out, feel free to send us reasons why you think it should be changed, but don't just)]333.4 norm0 -[(send us mail saying `This is a bug' if the documentation says we did it on purpose.\) Then read ){/section-12.1 xl}(section 12.1){el}(,)]322.4 norm0 -[(and don't bother reporting the bug if it's listed there.)]311.4 norm2 -[(If you do report a bug, )1(please)0( give us all of the following information:)]294.4 norm3 -[(What operating system you're running NASM under. DOS, Linux, NetBSD, Win16, Win32, VMS \(I'd be)]277.4 bull1 -[(impressed\), whatever.)]266.4 bull2 -[(If you're running NASM under DOS or Win32, tell us whether you've compiled your own executable from)]249.4 bull1 -[(the DOS source archive, or whether you were using the standard distribution binaries out of the archive. If)]238.4 bull0 -[(you were using a locally built executable, try to reproduce the problem using one of the standard binaries,)]227.4 bull0 -[(as this will make it easier for us to reproduce your problem prior to fixing it.)]216.4 bull2 -[(Which version of NASM you're using, and exactly how you invoked it. Give us the precise command line,)]199.4 bull1 -[(and the contents of the )2(NASMENV)0( environment variable if any.)]188.4 bull2 -[(Which versions of any supplementary programs you're using, and how you invoked them. If the problem)]171.4 bull1 -[(only becomes visible at link time, tell us what linker you're using, what version of it you've got, and the)]160.4 bull0 -[(exact linker command line. If the problem involves linking against object files generated by a compiler, tell)]149.4 bull0 -[(us what compiler, what version, and what command line or options you used. \(If you're compiling in an)]138.4 bull0 -[(IDE, please try to reproduce the problem with the command-line version of the compiler.\))]127.4 bull2 -(117)pageodd -restore showpage -%%Page: 118 118 -%%BeginPageSetup -save -%%EndPageSetup -/118 pa -[(If at all possible, send us a NASM source file which exhibits the problem. If this causes copyright)]681 bull1 -[(problems \(e.g. you can only reproduce the bug in restricted-distribution code\) then bear in mind the)]670 bull0 -[(following two points: firstly, we guarantee that any source code sent to us for the purposes of debugging)]659 bull0 -[(NASM will be used )1(only)0( for the purposes of debugging NASM, and that we will delete all our copies of it)]648 bull0 -[(as soon as we have found and fixed the bug or bugs in question; and secondly, we would prefer )1(not)0( to be)]637 bull0 -[(mailed large chunks of code anyway. The smaller the file, the better. A three-line sample file that does)]626 bull0 -[(nothing useful )1(except)0( demonstrate the problem is much easier to work with than a fully fledged)]615 bull0 -[(ten-thousand-line program. \(Of course, some errors )1(do)0( only crop up in large files, so this may not be)]604 bull0 -[(possible.\))]593 bull2 -[(A description of what the problem actually )1(is)0(. `It doesn't work' is )1(not)0( a helpful description! Please describe)]576 bull1 -[(exactly what is happening that shouldn't be, or what isn't happening that should. Examples might be:)]565 bull0 -[(`NASM generates an error message saying Line 3 for an error that's actually on Line 5'; `NASM generates)]554 bull0 -[(an error message that I believe it shouldn't be generating at all'; `NASM fails to generate an error message)]543 bull0 -[(that I believe it )1(should)0( be generating'; `the object file produced from this source code crashes my linker';)]532 bull0 -[(`the ninth byte of the output file is 66 and I think it should be 77 instead'.)]521 bull2 -[(If you believe the output file from NASM to be faulty, send it to us. That allows us to determine whether)]504 bull1 -[(our own copy of NASM generates the same file, or whether the problem is related to portability issues)]493 bull0 -[(between our development platforms and yours. We can handle binary files mailed to us as MIME)]482 bull0 -[(attachments, uuencoded, and even BinHex. Alternatively, we may be able to provide an FTP site you can)]471 bull0 -[(upload the suspect files to; but mailing them is easier for us.)]460 bull2 -[(Any other information or data files that might be helpful. If, for example, the problem involves NASM)]443 bull1 -[(failing to generate an object file while TASM can generate an equivalent file without trouble, then send us)]432 bull0 -[1(both)0( object files, so we can see what TASM is doing differently from us.)]421 bull2 -(118)pageeven -restore showpage -%%Page: 119 119 -%%BeginPageSetup -save -%%EndPageSetup -/119 pa -[{/appendix-A xa}(Appendix A: )(Ndisasm)]642.8 appn3 -[(The Netwide Disassembler, NDISASM)]601.8 norm3 -[{/section-A.1 xa}(Introduction)](A.1)580.4 head3 -[(The Netwide Disassembler is a small companion program to the Netwide Assembler, NASM. It seemed a)]563.4 norm1 -[(shame to have an x86 assembler, complete with a full instruction table, and not make as much use of it as)]552.4 norm0 -[(possible, so here's a disassembler which shares the instruction table \(and some other bits of code\) with NASM.)]541.4 norm2 -[(The Netwide Disassembler does nothing except to produce disassemblies of )1(binary)0( source files. NDISASM)]524.4 norm1 -[(does not have any understanding of object file formats, like )2(objdump)0(, and it will not understand )2(DOS .EXE)]513.4 norm0 -[(files like )2(debug)0( will. It just disassembles.)]502.4 norm2 -[{/section-A.2 xa}(Getting Started: Installation)](A.2)481 head3 -[(See ){/section-1.3 xl}(section 1.3){el}( for installation instructions. NDISASM, like NASM, has a )2(man page)0( which you may want)]464 norm1 -[(to put somewhere useful, if you are on a Unix system.)]453 norm2 -[{/section-A.3 xa}(Running NDISASM)](A.3)431.6 head3 -[(To disassemble a file, you will typically use a command of the form)]414.6 norm3 -[2( ndisasm -b {16|32|64} filename)]397.6 code3 -[(NDISASM can disassemble 16-, 32- or 64-bit code equally easily, provided of course that you remember to)]380.6 norm1 -[(specify which it is to work with. If no )2(-b)0( switch is present, NDISASM works in 16-bit mode by default. The)]369.6 norm0 -[2(-u)0( switch \(for USE32\) also invokes 32-bit mode.)]358.6 norm2 -[(Two more command line options are )2(-r)0( which reports the version number of NDISASM you are running, and)]341.6 norm1 -[2(-h)0( which gives a short summary of command line options.)]330.6 norm2 -[{/section-A.3.1 xa}(COM Files: Specifying an Origin)](A.3.1)311.4 subh3 -[(To disassemble a )2(DOS .COM)0( file correctly, a disassembler must assume that the first instruction in the file is)]294.4 norm1 -[(loaded at address )2(0x100)0(, rather than at zero. NDISASM, which assumes by default that any file you give it is)]283.4 norm0 -[(loaded at zero, will therefore need to be informed of this.)]272.4 norm2 -[(The )2(-o)0( option allows you to declare a different origin for the file you are disassembling. Its argument may be)]255.4 norm1 -[(expressed in any of the NASM numeric formats: decimal by default, if it begins with `)2($)0(' or `)2(0x)0(' or ends in)]244.4 norm0 -[(`)2(H)0(' it's )2(hex)0(, if it ends in `)2(Q)0(' it's )2(octal)0(, and if it ends in `)2(B)0(' it's )2(binary)0(.)]233.4 norm2 -[(Hence, to disassemble a )2(.COM)0( file:)]216.4 norm3 -[2( ndisasm -o100h filename.com)]199.4 code3 -[(will do the trick.)]182.4 norm3 -[{/section-A.3.2 xa}(Code Following Data: Synchronisation)](A.3.2)163.2 subh3 -[(Suppose you are disassembling a file which contains some data which isn't machine code, and )1(then)0( contains)]146.2 norm1 -[(some machine code. NDISASM will faithfully plough through the data section, producing machine)]135.2 norm0 -[(instructions wherever it can \(although most of them will look bizarre, and some may have unusual prefixes,)]124.2 norm0 -[(e.g. `)2(FS OR AX,0x240A)0('\), and generating `DB' instructions ever so often if it's totally stumped. Then it)]113.2 norm0 -[(will reach the code section.)]102.2 norm2 -(119)pageodd -restore showpage -%%Page: 120 120 -%%BeginPageSetup -save -%%EndPageSetup -/120 pa -[(Supposing NDISASM has just finished generating a strange machine instruction from part of the data section,)]681 norm1 -[(and its file position is now one byte )1(before)0( the beginning of the code section. It's entirely possible that another)]670 norm0 -[(spurious instruction will get generated, starting with the final byte of the data section, and then the correct first)]659 norm0 -[(instruction in the code section will not be seen because the starting point skipped over it. This isn't really ideal.)]648 norm2 -[(To avoid this, you can specify a `)2(synchronisation)0(' point, or indeed as many synchronisation points as)]631 norm1 -[(you like \(although NDISASM can only handle 2147483647 sync points internally\). The definition of a sync)]620 norm0 -[(point is this: NDISASM guarantees to hit sync points exactly during disassembly. If it is thinking about)]609 norm0 -[(generating an instruction which would cause it to jump over a sync point, it will discard that instruction and)]598 norm0 -[(output a `)2(db)0(' instead. So it )1(will)0( start disassembly exactly from the sync point, and so you )1(will)0( see all the)]587 norm0 -[(instructions in your code section.)]576 norm2 -[(Sync points are specified using the )2(-s)0( option: they are measured in terms of the program origin, not the file)]559 norm1 -[(position. So if you want to synchronize after 32 bytes of a )2(.COM)0( file, you would have to do)]548 norm2 -[2( ndisasm -o100h -s120h file.com)]531 code3 -[(rather than)]514 norm3 -[2( ndisasm -o100h -s20h file.com)]497 code3 -[(As stated above, you can specify multiple sync markers if you need to, just by repeating the )2(-s)0( option.)]480 norm3 -[{/section-A.3.3 xa}(Mixed Code and Data: Automatic \(Intelligent\) Synchronisation )](A.3.3)460.8 subh3 -[(Suppose you are disassembling the boot sector of a )2(DOS)0( floppy \(maybe it has a virus, and you need to)]443.8 norm1 -[(understand the virus so that you know what kinds of damage it might have done you\). Typically, this will)]432.8 norm0 -[(contain a )2(JMP)0( instruction, then some data, then the rest of the code. So there is a very good chance of)]421.8 norm0 -[(NDISASM being )1(misaligned)0( when the data ends and the code begins. Hence a sync point is needed.)]410.8 norm2 -[(On the other hand, why should you have to specify the sync point manually? What you'd do in order to find)]393.8 norm1 -[(where the sync point would be, surely, would be to read the )2(JMP)0( instruction, and then to use its target address)]382.8 norm0 -[(as a sync point. So can NDISASM do that for you?)]371.8 norm2 -[(The answer, of course, is yes: using either of the synonymous switches )2(-a)0( \(for automatic sync\) or )2(-i)0( \(for)]354.8 norm1 -[(intelligent sync\) will enable )2(auto-sync)0( mode. Auto-sync mode automatically generates a sync point for)]343.8 norm0 -[(any forward-referring PC-relative jump or call instruction that NDISASM encounters. \(Since NDISASM is)]332.8 norm0 -[(one-pass, if it encounters a PC-relative jump whose target has already been processed, there isn't much it can)]321.8 norm0 -[(do about it...\))]310.8 norm2 -[(Only PC-relative jumps are processed, since an absolute jump is either through a register \(in which case)]293.8 norm1 -[(NDISASM doesn't know what the register contains\) or involves a segment address \(in which case the target)]282.8 norm0 -[(code isn't in the same segment that NDISASM is working in, and so the sync point can't be placed anywhere)]271.8 norm0 -[(useful\).)]260.8 norm2 -[(For some kinds of file, this mechanism will automatically put sync points in all the right places, and save you)]243.8 norm1 -[(from having to place any sync points manually. However, it should be stressed that auto-sync mode is )1(not)]232.8 norm0 -[(guaranteed to catch all the sync points, and you may still have to place some manually.)]221.8 norm2 -[(Auto-sync mode doesn't prevent you from declaring manual sync points: it just adds automatically generated)]204.8 norm1 -[(ones to the ones you provide. It's perfectly feasible to specify )2(-i)0( )1(and)0( some )2(-s)0( options.)]193.8 norm2 -[(Another caveat with auto-sync mode is that if, by some unpleasant fluke, something in your data section)]176.8 norm1 -[(should disassemble to a PC-relative call or jump instruction, NDISASM may obediently place a sync point in)]165.8 norm0 -[(a totally random place, for example in the middle of one of the instructions in your code section. So you may)]154.8 norm0 -[(end up with a wrong disassembly even if you use auto-sync. Again, there isn't much I can do about this. If)]143.8 norm0 -[(you have problems, you'll have to use manual sync points, or use the )2(-k)0( option \(documented below\) to)]132.8 norm0 -[(suppress disassembly of the data area.)]121.8 norm2 -(120)pageeven -restore showpage -%%Page: 121 121 -%%BeginPageSetup -save -%%EndPageSetup -/121 pa -[{/section-A.3.4 xa}(Other Options)](A.3.4)678.8 subh3 -[(The )2(-e)0( option skips a header on the file, by ignoring the first N bytes. This means that the header is )1(not)]661.8 norm1 -[(counted towards the disassembly offset: if you give )2(-e10 -o10)0(, disassembly will start at byte 10 in the file,)]650.8 norm0 -[(and this will be given offset 10, not 20.)]639.8 norm2 -[(The )2(-k)0( option is provided with two comma-separated numeric arguments, the first of which is an assembly)]622.8 norm1 -[(offset and the second is a number of bytes to skip. This )1(will)0( count the skipped bytes towards the assembly)]611.8 norm0 -[(offset: its use is to suppress disassembly of a data section which wouldn't contain anything you wanted to see)]600.8 norm0 -[(anyway.)]589.8 norm2 -[{/section-A.4 xa}(Bugs and Improvements)](A.4)568.4 head3 -[(There are no known bugs. However, any you find, with patches if possible, should be sent to)]551.4 norm1 -[{(mailto:nasm-bugs@lists.sourceforge.net)wl}2(nasm-bugs@lists.sourceforge.net){el}0(, or to the developer's site at)]540.4 norm0 -[{(https://sourceforge.net/projects/nasm/)wl}2(https://sourceforge.net/projects/nasm/){el}0( and we'll try to fix them. Feel free to send)]529.4 norm0 -[(contributions and new features as well.)]518.4 norm2 -(121)pageodd -restore showpage -%%Page: 122 122 -%%BeginPageSetup -save -%%EndPageSetup -/122 pa -[{/appendix-B xa}(Appendix B: )(Instruction List)]642.8 appn3 -[{/section-B.1 xa}(Introduction)](B.1)597.4 head3 -[(The following sections show the instructions which NASM currently supports. For each instruction, there is a)]580.4 norm1 -[(separate entry for each supported addressing mode. The third column shows the processor type in which the)]569.4 norm0 -[(instruction was introduced and, when appropriate, one or more usage flags.)]558.4 norm2 -[{/section-B.1.1 xa}(Special instructions...)](B.1.1)539.2 subh3 -[2(DB )]522.2 code1 -[2(DW )]511.2 code0 -[2(DD )]500.2 code0 -[2(DQ )]489.2 code0 -[2(DT )]478.2 code0 -[2(DO )]467.2 code0 -[2(DY )]456.2 code0 -[2(RESB imm 8086 )]445.2 code0 -[2(RESW )]434.2 code0 -[2(RESD )]423.2 code0 -[2(RESQ )]412.2 code0 -[2(REST )]401.2 code0 -[2(RESO )]390.2 code0 -[2(RESY )]379.2 code2 -[{/section-B.1.2 xa}(Conventional instructions)](B.1.2)360 subh3 -[2(AAA 8086,NOLONG )]343 code1 -[2(AAD 8086,NOLONG )]332 code0 -[2(AAD imm 8086,NOLONG )]321 code0 -[2(AAM 8086,NOLONG )]310 code0 -[2(AAM imm 8086,NOLONG )]299 code0 -[2(AAS 8086,NOLONG )]288 code0 -[2(ADC mem,reg8 8086 )]277 code0 -[2(ADC reg8,reg8 8086 )]266 code0 -[2(ADC mem,reg16 8086 )]255 code0 -[2(ADC reg16,reg16 8086 )]244 code0 -[2(ADC mem,reg32 386 )]233 code0 -[2(ADC reg32,reg32 386 )]222 code0 -[2(ADC mem,reg64 X64 )]211 code0 -[2(ADC reg64,reg64 X64 )]200 code0 -[2(ADC reg8,mem 8086 )]189 code0 -[2(ADC reg8,reg8 8086 )]178 code0 -[2(ADC reg16,mem 8086 )]167 code0 -[2(ADC reg16,reg16 8086 )]156 code0 -[2(ADC reg32,mem 386 )]145 code0 -[2(ADC reg32,reg32 386 )]134 code0 -[2(ADC reg64,mem X64 )]123 code0 -[2(ADC reg64,reg64 X64 )]112 code0 -[2(ADC rm16,imm8 8086 )]101 code0 -(122)pageeven -restore showpage -%%Page: 123 123 -%%BeginPageSetup -save -%%EndPageSetup -/123 pa -[2(ADC rm32,imm8 386 )]681 code0 -[2(ADC rm64,imm8 X64 )]670 code0 -[2(ADC reg_al,imm 8086 )]659 code0 -[2(ADC reg_ax,sbyte16 8086 )]648 code0 -[2(ADC reg_ax,imm 8086 )]637 code0 -[2(ADC reg_eax,sbyte32 386 )]626 code0 -[2(ADC reg_eax,imm 386 )]615 code0 -[2(ADC reg_rax,sbyte64 X64 )]604 code0 -[2(ADC reg_rax,imm X64 )]593 code0 -[2(ADC rm8,imm 8086 )]582 code0 -[2(ADC rm16,imm 8086 )]571 code0 -[2(ADC rm32,imm 386 )]560 code0 -[2(ADC rm64,imm X64 )]549 code0 -[2(ADC mem,imm8 8086 )]538 code0 -[2(ADC mem,imm16 8086 )]527 code0 -[2(ADC mem,imm32 386 )]516 code0 -[2(ADD mem,reg8 8086 )]505 code0 -[2(ADD reg8,reg8 8086 )]494 code0 -[2(ADD mem,reg16 8086 )]483 code0 -[2(ADD reg16,reg16 8086 )]472 code0 -[2(ADD mem,reg32 386 )]461 code0 -[2(ADD reg32,reg32 386 )]450 code0 -[2(ADD mem,reg64 X64 )]439 code0 -[2(ADD reg64,reg64 X64 )]428 code0 -[2(ADD reg8,mem 8086 )]417 code0 -[2(ADD reg8,reg8 8086 )]406 code0 -[2(ADD reg16,mem 8086 )]395 code0 -[2(ADD reg16,reg16 8086 )]384 code0 -[2(ADD reg32,mem 386 )]373 code0 -[2(ADD reg32,reg32 386 )]362 code0 -[2(ADD reg64,mem X64 )]351 code0 -[2(ADD reg64,reg64 X64 )]340 code0 -[2(ADD rm16,imm8 8086 )]329 code0 -[2(ADD rm32,imm8 386 )]318 code0 -[2(ADD rm64,imm8 X64 )]307 code0 -[2(ADD reg_al,imm 8086 )]296 code0 -[2(ADD reg_ax,sbyte16 8086 )]285 code0 -[2(ADD reg_ax,imm 8086 )]274 code0 -[2(ADD reg_eax,sbyte32 386 )]263 code0 -[2(ADD reg_eax,imm 386 )]252 code0 -[2(ADD reg_rax,sbyte64 X64 )]241 code0 -[2(ADD reg_rax,imm X64 )]230 code0 -[2(ADD rm8,imm 8086 )]219 code0 -[2(ADD rm16,imm 8086 )]208 code0 -[2(ADD rm32,imm 386 )]197 code0 -[2(ADD rm64,imm X64 )]186 code0 -[2(ADD mem,imm8 8086 )]175 code0 -[2(ADD mem,imm16 8086 )]164 code0 -[2(ADD mem,imm32 386 )]153 code0 -[2(AND mem,reg8 8086 )]142 code0 -[2(AND reg8,reg8 8086 )]131 code0 -[2(AND mem,reg16 8086 )]120 code0 -[2(AND reg16,reg16 8086 )]109 code0 -(123)pageodd -restore showpage -%%Page: 124 124 -%%BeginPageSetup -save -%%EndPageSetup -/124 pa -[2(AND mem,reg32 386 )]681 code0 -[2(AND reg32,reg32 386 )]670 code0 -[2(AND mem,reg64 X64 )]659 code0 -[2(AND reg64,reg64 X64 )]648 code0 -[2(AND reg8,mem 8086 )]637 code0 -[2(AND reg8,reg8 8086 )]626 code0 -[2(AND reg16,mem 8086 )]615 code0 -[2(AND reg16,reg16 8086 )]604 code0 -[2(AND reg32,mem 386 )]593 code0 -[2(AND reg32,reg32 386 )]582 code0 -[2(AND reg64,mem X64 )]571 code0 -[2(AND reg64,reg64 X64 )]560 code0 -[2(AND rm16,imm8 8086 )]549 code0 -[2(AND rm32,imm8 386 )]538 code0 -[2(AND rm64,imm8 X64 )]527 code0 -[2(AND reg_al,imm 8086 )]516 code0 -[2(AND reg_ax,sbyte16 8086 )]505 code0 -[2(AND reg_ax,imm 8086 )]494 code0 -[2(AND reg_eax,sbyte32 386 )]483 code0 -[2(AND reg_eax,imm 386 )]472 code0 -[2(AND reg_rax,sbyte64 X64 )]461 code0 -[2(AND reg_rax,imm X64 )]450 code0 -[2(AND rm8,imm 8086 )]439 code0 -[2(AND rm16,imm 8086 )]428 code0 -[2(AND rm32,imm 386 )]417 code0 -[2(AND rm64,imm X64 )]406 code0 -[2(AND mem,imm8 8086 )]395 code0 -[2(AND mem,imm16 8086 )]384 code0 -[2(AND mem,imm32 386 )]373 code0 -[2(ARPL mem,reg16 286,PROT,NOLONG )]362 code0 -[2(ARPL reg16,reg16 286,PROT,NOLONG )]351 code0 -[2(BB0_RESET PENT,CYRIX,ND )]340 code0 -[2(BB1_RESET PENT,CYRIX,ND )]329 code0 -[2(BOUND reg16,mem 186,NOLONG )]318 code0 -[2(BOUND reg32,mem 386,NOLONG )]307 code0 -[2(BSF reg16,mem 386 )]296 code0 -[2(BSF reg16,reg16 386 )]285 code0 -[2(BSF reg32,mem 386 )]274 code0 -[2(BSF reg32,reg32 386 )]263 code0 -[2(BSF reg64,mem X64 )]252 code0 -[2(BSF reg64,reg64 X64 )]241 code0 -[2(BSR reg16,mem 386 )]230 code0 -[2(BSR reg16,reg16 386 )]219 code0 -[2(BSR reg32,mem 386 )]208 code0 -[2(BSR reg32,reg32 386 )]197 code0 -[2(BSR reg64,mem X64 )]186 code0 -[2(BSR reg64,reg64 X64 )]175 code0 -[2(BSWAP reg32 486 )]164 code0 -[2(BSWAP reg64 X64 )]153 code0 -[2(BT mem,reg16 386 )]142 code0 -[2(BT reg16,reg16 386 )]131 code0 -[2(BT mem,reg32 386 )]120 code0 -[2(BT reg32,reg32 386 )]109 code0 -(124)pageeven -restore showpage -%%Page: 125 125 -%%BeginPageSetup -save -%%EndPageSetup -/125 pa -[2(BT mem,reg64 X64 )]681 code0 -[2(BT reg64,reg64 X64 )]670 code0 -[2(BT rm16,imm 386 )]659 code0 -[2(BT rm32,imm 386 )]648 code0 -[2(BT rm64,imm X64 )]637 code0 -[2(BTC mem,reg16 386 )]626 code0 -[2(BTC reg16,reg16 386 )]615 code0 -[2(BTC mem,reg32 386 )]604 code0 -[2(BTC reg32,reg32 386 )]593 code0 -[2(BTC mem,reg64 X64 )]582 code0 -[2(BTC reg64,reg64 X64 )]571 code0 -[2(BTC rm16,imm 386 )]560 code0 -[2(BTC rm32,imm 386 )]549 code0 -[2(BTC rm64,imm X64 )]538 code0 -[2(BTR mem,reg16 386 )]527 code0 -[2(BTR reg16,reg16 386 )]516 code0 -[2(BTR mem,reg32 386 )]505 code0 -[2(BTR reg32,reg32 386 )]494 code0 -[2(BTR mem,reg64 X64 )]483 code0 -[2(BTR reg64,reg64 X64 )]472 code0 -[2(BTR rm16,imm 386 )]461 code0 -[2(BTR rm32,imm 386 )]450 code0 -[2(BTR rm64,imm X64 )]439 code0 -[2(BTS mem,reg16 386 )]428 code0 -[2(BTS reg16,reg16 386 )]417 code0 -[2(BTS mem,reg32 386 )]406 code0 -[2(BTS reg32,reg32 386 )]395 code0 -[2(BTS mem,reg64 X64 )]384 code0 -[2(BTS reg64,reg64 X64 )]373 code0 -[2(BTS rm16,imm 386 )]362 code0 -[2(BTS rm32,imm 386 )]351 code0 -[2(BTS rm64,imm X64 )]340 code0 -[2(CALL imm 8086 )]329 code0 -[2(CALL imm|near 8086 )]318 code0 -[2(CALL imm|far 8086,ND,NOLONG )]307 code0 -[2(CALL imm16 8086 )]296 code0 -[2(CALL imm16|near 8086 )]285 code0 -[2(CALL imm16|far 8086,ND,NOLONG )]274 code0 -[2(CALL imm32 386 )]263 code0 -[2(CALL imm32|near 386 )]252 code0 -[2(CALL imm32|far 386,ND,NOLONG )]241 code0 -[2(CALL imm:imm 8086,NOLONG )]230 code0 -[2(CALL imm16:imm 8086,NOLONG )]219 code0 -[2(CALL imm:imm16 8086,NOLONG )]208 code0 -[2(CALL imm32:imm 386,NOLONG )]197 code0 -[2(CALL imm:imm32 386,NOLONG )]186 code0 -[2(CALL mem|far 8086,NOLONG )]175 code0 -[2(CALL mem|far X64 )]164 code0 -[2(CALL mem16|far 8086 )]153 code0 -[2(CALL mem32|far 386 )]142 code0 -[2(CALL mem64|far X64 )]131 code0 -[2(CALL mem|near 8086 )]120 code0 -[2(CALL mem16|near 8086 )]109 code0 -(125)pageodd -restore showpage -%%Page: 126 126 -%%BeginPageSetup -save -%%EndPageSetup -/126 pa -[2(CALL mem32|near 386,NOLONG )]681 code0 -[2(CALL mem64|near X64 )]670 code0 -[2(CALL reg16 8086 )]659 code0 -[2(CALL reg32 386,NOLONG )]648 code0 -[2(CALL reg64 X64 )]637 code0 -[2(CALL mem 8086 )]626 code0 -[2(CALL mem16 8086 )]615 code0 -[2(CALL mem32 386,NOLONG )]604 code0 -[2(CALL mem64 X64 )]593 code0 -[2(CBW 8086 )]582 code0 -[2(CDQ 386 )]571 code0 -[2(CDQE X64 )]560 code0 -[2(CLC 8086 )]549 code0 -[2(CLD 8086 )]538 code0 -[2(CLGI X64,AMD )]527 code0 -[2(CLI 8086 )]516 code0 -[2(CLTS 286,PRIV )]505 code0 -[2(CMC 8086 )]494 code0 -[2(CMP mem,reg8 8086 )]483 code0 -[2(CMP reg8,reg8 8086 )]472 code0 -[2(CMP mem,reg16 8086 )]461 code0 -[2(CMP reg16,reg16 8086 )]450 code0 -[2(CMP mem,reg32 386 )]439 code0 -[2(CMP reg32,reg32 386 )]428 code0 -[2(CMP mem,reg64 X64 )]417 code0 -[2(CMP reg64,reg64 X64 )]406 code0 -[2(CMP reg8,mem 8086 )]395 code0 -[2(CMP reg8,reg8 8086 )]384 code0 -[2(CMP reg16,mem 8086 )]373 code0 -[2(CMP reg16,reg16 8086 )]362 code0 -[2(CMP reg32,mem 386 )]351 code0 -[2(CMP reg32,reg32 386 )]340 code0 -[2(CMP reg64,mem X64 )]329 code0 -[2(CMP reg64,reg64 X64 )]318 code0 -[2(CMP rm16,imm8 8086 )]307 code0 -[2(CMP rm32,imm8 386 )]296 code0 -[2(CMP rm64,imm8 X64 )]285 code0 -[2(CMP reg_al,imm 8086 )]274 code0 -[2(CMP reg_ax,sbyte16 8086 )]263 code0 -[2(CMP reg_ax,imm 8086 )]252 code0 -[2(CMP reg_eax,sbyte32 386 )]241 code0 -[2(CMP reg_eax,imm 386 )]230 code0 -[2(CMP reg_rax,sbyte64 X64 )]219 code0 -[2(CMP reg_rax,imm X64 )]208 code0 -[2(CMP rm8,imm 8086 )]197 code0 -[2(CMP rm16,imm 8086 )]186 code0 -[2(CMP rm32,imm 386 )]175 code0 -[2(CMP rm64,imm X64 )]164 code0 -[2(CMP mem,imm8 8086 )]153 code0 -[2(CMP mem,imm16 8086 )]142 code0 -[2(CMP mem,imm32 386 )]131 code0 -[2(CMPSB 8086 )]120 code0 -[2(CMPSD 386 )]109 code0 -(126)pageeven -restore showpage -%%Page: 127 127 -%%BeginPageSetup -save -%%EndPageSetup -/127 pa -[2(CMPSQ X64 )]681 code0 -[2(CMPSW 8086 )]670 code0 -[2(CMPXCHG mem,reg8 PENT )]659 code0 -[2(CMPXCHG reg8,reg8 PENT )]648 code0 -[2(CMPXCHG mem,reg16 PENT )]637 code0 -[2(CMPXCHG reg16,reg16 PENT )]626 code0 -[2(CMPXCHG mem,reg32 PENT )]615 code0 -[2(CMPXCHG reg32,reg32 PENT )]604 code0 -[2(CMPXCHG mem,reg64 X64 )]593 code0 -[2(CMPXCHG reg64,reg64 X64 )]582 code0 -[2(CMPXCHG486 mem,reg8 486,UNDOC,ND )]571 code0 -[2(CMPXCHG486 reg8,reg8 486,UNDOC,ND )]560 code0 -[2(CMPXCHG486 mem,reg16 486,UNDOC,ND )]549 code0 -[2(CMPXCHG486 reg16,reg16 486,UNDOC,ND )]538 code0 -[2(CMPXCHG486 mem,reg32 486,UNDOC,ND )]527 code0 -[2(CMPXCHG486 reg32,reg32 486,UNDOC,ND )]516 code0 -[2(CMPXCHG8B mem PENT )]505 code0 -[2(CMPXCHG16B mem X64 )]494 code0 -[2(CPUID PENT )]483 code0 -[2(CPU_READ PENT,CYRIX )]472 code0 -[2(CPU_WRITE PENT,CYRIX )]461 code0 -[2(CQO X64 )]450 code0 -[2(CWD 8086 )]439 code0 -[2(CWDE 386 )]428 code0 -[2(DAA 8086,NOLONG )]417 code0 -[2(DAS 8086,NOLONG )]406 code0 -[2(DEC reg16 8086,NOLONG )]395 code0 -[2(DEC reg32 386,NOLONG )]384 code0 -[2(DEC rm8 8086 )]373 code0 -[2(DEC rm16 8086 )]362 code0 -[2(DEC rm32 386 )]351 code0 -[2(DEC rm64 X64 )]340 code0 -[2(DIV rm8 8086 )]329 code0 -[2(DIV rm16 8086 )]318 code0 -[2(DIV rm32 386 )]307 code0 -[2(DIV rm64 X64 )]296 code0 -[2(DMINT P6,CYRIX )]285 code0 -[2(EMMS PENT,MMX )]274 code0 -[2(ENTER imm,imm 186 )]263 code0 -[2(EQU imm 8086 )]252 code0 -[2(EQU imm:imm 8086 )]241 code0 -[2(F2XM1 8086,FPU )]230 code0 -[2(FABS 8086,FPU )]219 code0 -[2(FADD mem32 8086,FPU )]208 code0 -[2(FADD mem64 8086,FPU )]197 code0 -[2(FADD fpureg|to 8086,FPU )]186 code0 -[2(FADD fpureg 8086,FPU )]175 code0 -[2(FADD fpureg,fpu0 8086,FPU )]164 code0 -[2(FADD fpu0,fpureg 8086,FPU )]153 code0 -[2(FADD 8086,FPU,ND )]142 code0 -[2(FADDP fpureg 8086,FPU )]131 code0 -[2(FADDP fpureg,fpu0 8086,FPU )]120 code0 -[2(FADDP 8086,FPU,ND )]109 code0 -(127)pageodd -restore showpage -%%Page: 128 128 -%%BeginPageSetup -save -%%EndPageSetup -/128 pa -[2(FBLD mem80 8086,FPU )]681 code0 -[2(FBLD mem 8086,FPU )]670 code0 -[2(FBSTP mem80 8086,FPU )]659 code0 -[2(FBSTP mem 8086,FPU )]648 code0 -[2(FCHS 8086,FPU )]637 code0 -[2(FCLEX 8086,FPU )]626 code0 -[2(FCMOVB fpureg P6,FPU )]615 code0 -[2(FCMOVB fpu0,fpureg P6,FPU )]604 code0 -[2(FCMOVB P6,FPU,ND )]593 code0 -[2(FCMOVBE fpureg P6,FPU )]582 code0 -[2(FCMOVBE fpu0,fpureg P6,FPU )]571 code0 -[2(FCMOVBE P6,FPU,ND )]560 code0 -[2(FCMOVE fpureg P6,FPU )]549 code0 -[2(FCMOVE fpu0,fpureg P6,FPU )]538 code0 -[2(FCMOVE P6,FPU,ND )]527 code0 -[2(FCMOVNB fpureg P6,FPU )]516 code0 -[2(FCMOVNB fpu0,fpureg P6,FPU )]505 code0 -[2(FCMOVNB P6,FPU,ND )]494 code0 -[2(FCMOVNBE fpureg P6,FPU )]483 code0 -[2(FCMOVNBE fpu0,fpureg P6,FPU )]472 code0 -[2(FCMOVNBE P6,FPU,ND )]461 code0 -[2(FCMOVNE fpureg P6,FPU )]450 code0 -[2(FCMOVNE fpu0,fpureg P6,FPU )]439 code0 -[2(FCMOVNE P6,FPU,ND )]428 code0 -[2(FCMOVNU fpureg P6,FPU )]417 code0 -[2(FCMOVNU fpu0,fpureg P6,FPU )]406 code0 -[2(FCMOVNU P6,FPU,ND )]395 code0 -[2(FCMOVU fpureg P6,FPU )]384 code0 -[2(FCMOVU fpu0,fpureg P6,FPU )]373 code0 -[2(FCMOVU P6,FPU,ND )]362 code0 -[2(FCOM mem32 8086,FPU )]351 code0 -[2(FCOM mem64 8086,FPU )]340 code0 -[2(FCOM fpureg 8086,FPU )]329 code0 -[2(FCOM fpu0,fpureg 8086,FPU )]318 code0 -[2(FCOM 8086,FPU,ND )]307 code0 -[2(FCOMI fpureg P6,FPU )]296 code0 -[2(FCOMI fpu0,fpureg P6,FPU )]285 code0 -[2(FCOMI P6,FPU,ND )]274 code0 -[2(FCOMIP fpureg P6,FPU )]263 code0 -[2(FCOMIP fpu0,fpureg P6,FPU )]252 code0 -[2(FCOMIP P6,FPU,ND )]241 code0 -[2(FCOMP mem32 8086,FPU )]230 code0 -[2(FCOMP mem64 8086,FPU )]219 code0 -[2(FCOMP fpureg 8086,FPU )]208 code0 -[2(FCOMP fpu0,fpureg 8086,FPU )]197 code0 -[2(FCOMP 8086,FPU,ND )]186 code0 -[2(FCOMPP 8086,FPU )]175 code0 -[2(FCOS 386,FPU )]164 code0 -[2(FDECSTP 8086,FPU )]153 code0 -[2(FDISI 8086,FPU )]142 code0 -[2(FDIV mem32 8086,FPU )]131 code0 -[2(FDIV mem64 8086,FPU )]120 code0 -[2(FDIV fpureg|to 8086,FPU )]109 code0 -(128)pageeven -restore showpage -%%Page: 129 129 -%%BeginPageSetup -save -%%EndPageSetup -/129 pa -[2(FDIV fpureg 8086,FPU )]681 code0 -[2(FDIV fpureg,fpu0 8086,FPU )]670 code0 -[2(FDIV fpu0,fpureg 8086,FPU )]659 code0 -[2(FDIV 8086,FPU,ND )]648 code0 -[2(FDIVP fpureg 8086,FPU )]637 code0 -[2(FDIVP fpureg,fpu0 8086,FPU )]626 code0 -[2(FDIVP 8086,FPU,ND )]615 code0 -[2(FDIVR mem32 8086,FPU )]604 code0 -[2(FDIVR mem64 8086,FPU )]593 code0 -[2(FDIVR fpureg|to 8086,FPU )]582 code0 -[2(FDIVR fpureg,fpu0 8086,FPU )]571 code0 -[2(FDIVR fpureg 8086,FPU )]560 code0 -[2(FDIVR fpu0,fpureg 8086,FPU )]549 code0 -[2(FDIVR 8086,FPU,ND )]538 code0 -[2(FDIVRP fpureg 8086,FPU )]527 code0 -[2(FDIVRP fpureg,fpu0 8086,FPU )]516 code0 -[2(FDIVRP 8086,FPU,ND )]505 code0 -[2(FEMMS PENT,3DNOW )]494 code0 -[2(FENI 8086,FPU )]483 code0 -[2(FFREE fpureg 8086,FPU )]472 code0 -[2(FFREE 8086,FPU )]461 code0 -[2(FFREEP fpureg 286,FPU,UNDOC )]450 code0 -[2(FFREEP 286,FPU,UNDOC )]439 code0 -[2(FIADD mem32 8086,FPU )]428 code0 -[2(FIADD mem16 8086,FPU )]417 code0 -[2(FICOM mem32 8086,FPU )]406 code0 -[2(FICOM mem16 8086,FPU )]395 code0 -[2(FICOMP mem32 8086,FPU )]384 code0 -[2(FICOMP mem16 8086,FPU )]373 code0 -[2(FIDIV mem32 8086,FPU )]362 code0 -[2(FIDIV mem16 8086,FPU )]351 code0 -[2(FIDIVR mem32 8086,FPU )]340 code0 -[2(FIDIVR mem16 8086,FPU )]329 code0 -[2(FILD mem32 8086,FPU )]318 code0 -[2(FILD mem16 8086,FPU )]307 code0 -[2(FILD mem64 8086,FPU )]296 code0 -[2(FIMUL mem32 8086,FPU )]285 code0 -[2(FIMUL mem16 8086,FPU )]274 code0 -[2(FINCSTP 8086,FPU )]263 code0 -[2(FINIT 8086,FPU )]252 code0 -[2(FIST mem32 8086,FPU )]241 code0 -[2(FIST mem16 8086,FPU )]230 code0 -[2(FISTP mem32 8086,FPU )]219 code0 -[2(FISTP mem16 8086,FPU )]208 code0 -[2(FISTP mem64 8086,FPU )]197 code0 -[2(FISTTP mem16 PRESCOTT,FPU )]186 code0 -[2(FISTTP mem32 PRESCOTT,FPU )]175 code0 -[2(FISTTP mem64 PRESCOTT,FPU )]164 code0 -[2(FISUB mem32 8086,FPU )]153 code0 -[2(FISUB mem16 8086,FPU )]142 code0 -[2(FISUBR mem32 8086,FPU )]131 code0 -[2(FISUBR mem16 8086,FPU )]120 code0 -[2(FLD mem32 8086,FPU )]109 code0 -(129)pageodd -restore showpage -%%Page: 130 130 -%%BeginPageSetup -save -%%EndPageSetup -/130 pa -[2(FLD mem64 8086,FPU )]681 code0 -[2(FLD mem80 8086,FPU )]670 code0 -[2(FLD fpureg 8086,FPU )]659 code0 -[2(FLD 8086,FPU,ND )]648 code0 -[2(FLD1 8086,FPU )]637 code0 -[2(FLDCW mem 8086,FPU,SW )]626 code0 -[2(FLDENV mem 8086,FPU )]615 code0 -[2(FLDL2E 8086,FPU )]604 code0 -[2(FLDL2T 8086,FPU )]593 code0 -[2(FLDLG2 8086,FPU )]582 code0 -[2(FLDLN2 8086,FPU )]571 code0 -[2(FLDPI 8086,FPU )]560 code0 -[2(FLDZ 8086,FPU )]549 code0 -[2(FMUL mem32 8086,FPU )]538 code0 -[2(FMUL mem64 8086,FPU )]527 code0 -[2(FMUL fpureg|to 8086,FPU )]516 code0 -[2(FMUL fpureg,fpu0 8086,FPU )]505 code0 -[2(FMUL fpureg 8086,FPU )]494 code0 -[2(FMUL fpu0,fpureg 8086,FPU )]483 code0 -[2(FMUL 8086,FPU,ND )]472 code0 -[2(FMULP fpureg 8086,FPU )]461 code0 -[2(FMULP fpureg,fpu0 8086,FPU )]450 code0 -[2(FMULP 8086,FPU,ND )]439 code0 -[2(FNCLEX 8086,FPU )]428 code0 -[2(FNDISI 8086,FPU )]417 code0 -[2(FNENI 8086,FPU )]406 code0 -[2(FNINIT 8086,FPU )]395 code0 -[2(FNOP 8086,FPU )]384 code0 -[2(FNSAVE mem 8086,FPU )]373 code0 -[2(FNSTCW mem 8086,FPU,SW )]362 code0 -[2(FNSTENV mem 8086,FPU )]351 code0 -[2(FNSTSW mem 8086,FPU,SW )]340 code0 -[2(FNSTSW reg_ax 286,FPU )]329 code0 -[2(FPATAN 8086,FPU )]318 code0 -[2(FPREM 8086,FPU )]307 code0 -[2(FPREM1 386,FPU )]296 code0 -[2(FPTAN 8086,FPU )]285 code0 -[2(FRNDINT 8086,FPU )]274 code0 -[2(FRSTOR mem 8086,FPU )]263 code0 -[2(FSAVE mem 8086,FPU )]252 code0 -[2(FSCALE 8086,FPU )]241 code0 -[2(FSETPM 286,FPU )]230 code0 -[2(FSIN 386,FPU )]219 code0 -[2(FSINCOS 386,FPU )]208 code0 -[2(FSQRT 8086,FPU )]197 code0 -[2(FST mem32 8086,FPU )]186 code0 -[2(FST mem64 8086,FPU )]175 code0 -[2(FST fpureg 8086,FPU )]164 code0 -[2(FST 8086,FPU,ND )]153 code0 -[2(FSTCW mem 8086,FPU,SW )]142 code0 -[2(FSTENV mem 8086,FPU )]131 code0 -[2(FSTP mem32 8086,FPU )]120 code0 -[2(FSTP mem64 8086,FPU )]109 code0 -(130)pageeven -restore showpage -%%Page: 131 131 -%%BeginPageSetup -save -%%EndPageSetup -/131 pa -[2(FSTP mem80 8086,FPU )]681 code0 -[2(FSTP fpureg 8086,FPU )]670 code0 -[2(FSTP 8086,FPU,ND )]659 code0 -[2(FSTSW mem 8086,FPU,SW )]648 code0 -[2(FSTSW reg_ax 286,FPU )]637 code0 -[2(FSUB mem32 8086,FPU )]626 code0 -[2(FSUB mem64 8086,FPU )]615 code0 -[2(FSUB fpureg|to 8086,FPU )]604 code0 -[2(FSUB fpureg,fpu0 8086,FPU )]593 code0 -[2(FSUB fpureg 8086,FPU )]582 code0 -[2(FSUB fpu0,fpureg 8086,FPU )]571 code0 -[2(FSUB 8086,FPU,ND )]560 code0 -[2(FSUBP fpureg 8086,FPU )]549 code0 -[2(FSUBP fpureg,fpu0 8086,FPU )]538 code0 -[2(FSUBP 8086,FPU,ND )]527 code0 -[2(FSUBR mem32 8086,FPU )]516 code0 -[2(FSUBR mem64 8086,FPU )]505 code0 -[2(FSUBR fpureg|to 8086,FPU )]494 code0 -[2(FSUBR fpureg,fpu0 8086,FPU )]483 code0 -[2(FSUBR fpureg 8086,FPU )]472 code0 -[2(FSUBR fpu0,fpureg 8086,FPU )]461 code0 -[2(FSUBR 8086,FPU,ND )]450 code0 -[2(FSUBRP fpureg 8086,FPU )]439 code0 -[2(FSUBRP fpureg,fpu0 8086,FPU )]428 code0 -[2(FSUBRP 8086,FPU,ND )]417 code0 -[2(FTST 8086,FPU )]406 code0 -[2(FUCOM fpureg 386,FPU )]395 code0 -[2(FUCOM fpu0,fpureg 386,FPU )]384 code0 -[2(FUCOM 386,FPU,ND )]373 code0 -[2(FUCOMI fpureg P6,FPU )]362 code0 -[2(FUCOMI fpu0,fpureg P6,FPU )]351 code0 -[2(FUCOMI P6,FPU,ND )]340 code0 -[2(FUCOMIP fpureg P6,FPU )]329 code0 -[2(FUCOMIP fpu0,fpureg P6,FPU )]318 code0 -[2(FUCOMIP P6,FPU,ND )]307 code0 -[2(FUCOMP fpureg 386,FPU )]296 code0 -[2(FUCOMP fpu0,fpureg 386,FPU )]285 code0 -[2(FUCOMP 386,FPU,ND )]274 code0 -[2(FUCOMPP 386,FPU )]263 code0 -[2(FXAM 8086,FPU )]252 code0 -[2(FXCH fpureg 8086,FPU )]241 code0 -[2(FXCH fpureg,fpu0 8086,FPU )]230 code0 -[2(FXCH fpu0,fpureg 8086,FPU )]219 code0 -[2(FXCH 8086,FPU,ND )]208 code0 -[2(FXTRACT 8086,FPU )]197 code0 -[2(FYL2X 8086,FPU )]186 code0 -[2(FYL2XP1 8086,FPU )]175 code0 -[2(HLT 8086,PRIV )]164 code0 -[2(IBTS mem,reg16 386,SW,UNDOC,ND )]153 code0 -[2(IBTS reg16,reg16 386,UNDOC,ND )]142 code0 -[2(IBTS mem,reg32 386,SD,UNDOC,ND )]131 code0 -[2(IBTS reg32,reg32 386,UNDOC,ND )]120 code0 -[2(ICEBP 386,ND )]109 code0 -(131)pageodd -restore showpage -%%Page: 132 132 -%%BeginPageSetup -save -%%EndPageSetup -/132 pa -[2(IDIV rm8 8086 )]681 code0 -[2(IDIV rm16 8086 )]670 code0 -[2(IDIV rm32 386 )]659 code0 -[2(IDIV rm64 X64 )]648 code0 -[2(IMUL rm8 8086 )]637 code0 -[2(IMUL rm16 8086 )]626 code0 -[2(IMUL rm32 386 )]615 code0 -[2(IMUL rm64 X64 )]604 code0 -[2(IMUL reg16,mem 386 )]593 code0 -[2(IMUL reg16,reg16 386 )]582 code0 -[2(IMUL reg32,mem 386 )]571 code0 -[2(IMUL reg32,reg32 386 )]560 code0 -[2(IMUL reg64,mem X64 )]549 code0 -[2(IMUL reg64,reg64 X64 )]538 code0 -[2(IMUL reg16,mem,imm8 186 )]527 code0 -[2(IMUL reg16,mem,sbyte16 186,ND )]516 code0 -[2(IMUL reg16,mem,imm16 186 )]505 code0 -[2(IMUL reg16,mem,imm 186,ND )]494 code0 -[2(IMUL reg16,reg16,imm8 186 )]483 code0 -[2(IMUL reg16,reg16,sbyte16 186,ND )]472 code0 -[2(IMUL reg16,reg16,imm16 186 )]461 code0 -[2(IMUL reg16,reg16,imm 186,ND )]450 code0 -[2(IMUL reg32,mem,imm8 386 )]439 code0 -[2(IMUL reg32,mem,sbyte32 386,ND )]428 code0 -[2(IMUL reg32,mem,imm32 386 )]417 code0 -[2(IMUL reg32,mem,imm 386,ND )]406 code0 -[2(IMUL reg32,reg32,imm8 386 )]395 code0 -[2(IMUL reg32,reg32,sbyte32 386,ND )]384 code0 -[2(IMUL reg32,reg32,imm32 386 )]373 code0 -[2(IMUL reg32,reg32,imm 386,ND )]362 code0 -[2(IMUL reg64,mem,imm8 X64 )]351 code0 -[2(IMUL reg64,mem,sbyte64 X64,ND )]340 code0 -[2(IMUL reg64,mem,imm32 X64 )]329 code0 -[2(IMUL reg64,mem,imm X64,ND )]318 code0 -[2(IMUL reg64,reg64,imm8 X64 )]307 code0 -[2(IMUL reg64,reg64,sbyte64 X64,ND )]296 code0 -[2(IMUL reg64,reg64,imm32 X64 )]285 code0 -[2(IMUL reg64,reg64,imm X64,ND )]274 code0 -[2(IMUL reg16,imm8 186 )]263 code0 -[2(IMUL reg16,sbyte16 186,ND )]252 code0 -[2(IMUL reg16,imm16 186 )]241 code0 -[2(IMUL reg16,imm 186,ND )]230 code0 -[2(IMUL reg32,imm8 386 )]219 code0 -[2(IMUL reg32,sbyte32 386,ND )]208 code0 -[2(IMUL reg32,imm32 386 )]197 code0 -[2(IMUL reg32,imm 386,ND )]186 code0 -[2(IMUL reg64,imm8 X64 )]175 code0 -[2(IMUL reg64,sbyte64 X64,ND )]164 code0 -[2(IMUL reg64,imm32 X64 )]153 code0 -[2(IMUL reg64,imm X64,ND )]142 code0 -[2(IN reg_al,imm 8086 )]131 code0 -[2(IN reg_ax,imm 8086 )]120 code0 -[2(IN reg_eax,imm 386 )]109 code0 -(132)pageeven -restore showpage -%%Page: 133 133 -%%BeginPageSetup -save -%%EndPageSetup -/133 pa -[2(IN reg_al,reg_dx 8086 )]681 code0 -[2(IN reg_ax,reg_dx 8086 )]670 code0 -[2(IN reg_eax,reg_dx 386 )]659 code0 -[2(INC reg16 8086,NOLONG )]648 code0 -[2(INC reg32 386,NOLONG )]637 code0 -[2(INC rm8 8086 )]626 code0 -[2(INC rm16 8086 )]615 code0 -[2(INC rm32 386 )]604 code0 -[2(INC rm64 X64 )]593 code0 -[2(INCBIN )]582 code0 -[2(INSB 186 )]571 code0 -[2(INSD 386 )]560 code0 -[2(INSW 186 )]549 code0 -[2(INT imm 8086 )]538 code0 -[2(INT01 386,ND )]527 code0 -[2(INT1 386 )]516 code0 -[2(INT03 8086,ND )]505 code0 -[2(INT3 8086 )]494 code0 -[2(INTO 8086,NOLONG )]483 code0 -[2(INVD 486,PRIV )]472 code0 -[2(INVLPG mem 486,PRIV )]461 code0 -[2(INVLPGA reg_ax,reg_ecx X86_64,AMD,NOLONG )]450 code0 -[2(INVLPGA reg_eax,reg_ecx X86_64,AMD )]439 code0 -[2(INVLPGA reg_rax,reg_ecx X64,AMD )]428 code0 -[2(INVLPGA X86_64,AMD )]417 code0 -[2(IRET 8086 )]406 code0 -[2(IRETD 386 )]395 code0 -[2(IRETQ X64 )]384 code0 -[2(IRETW 8086 )]373 code0 -[2(JCXZ imm 8086,NOLONG )]362 code0 -[2(JECXZ imm 386 )]351 code0 -[2(JRCXZ imm X64 )]340 code0 -[2(JMP imm|short 8086 )]329 code0 -[2(JMP imm 8086,ND )]318 code0 -[2(JMP imm 8086 )]307 code0 -[2(JMP imm|near 8086,ND )]296 code0 -[2(JMP imm|far 8086,ND,NOLONG )]285 code0 -[2(JMP imm16 8086 )]274 code0 -[2(JMP imm16|near 8086,ND )]263 code0 -[2(JMP imm16|far 8086,ND,NOLONG )]252 code0 -[2(JMP imm32 386 )]241 code0 -[2(JMP imm32|near 386,ND )]230 code0 -[2(JMP imm32|far 386,ND,NOLONG )]219 code0 -[2(JMP imm:imm 8086,NOLONG )]208 code0 -[2(JMP imm16:imm 8086,NOLONG )]197 code0 -[2(JMP imm:imm16 8086,NOLONG )]186 code0 -[2(JMP imm32:imm 386,NOLONG )]175 code0 -[2(JMP imm:imm32 386,NOLONG )]164 code0 -[2(JMP mem|far 8086,NOLONG )]153 code0 -[2(JMP mem|far X64 )]142 code0 -[2(JMP mem16|far 8086 )]131 code0 -[2(JMP mem32|far 386 )]120 code0 -[2(JMP mem64|far X64 )]109 code0 -(133)pageodd -restore showpage -%%Page: 134 134 -%%BeginPageSetup -save -%%EndPageSetup -/134 pa -[2(JMP mem|near 8086 )]681 code0 -[2(JMP mem16|near 8086 )]670 code0 -[2(JMP mem32|near 386,NOLONG )]659 code0 -[2(JMP mem64|near X64 )]648 code0 -[2(JMP reg16 8086 )]637 code0 -[2(JMP reg32 386,NOLONG )]626 code0 -[2(JMP reg64 X64 )]615 code0 -[2(JMP mem 8086 )]604 code0 -[2(JMP mem16 8086 )]593 code0 -[2(JMP mem32 386,NOLONG )]582 code0 -[2(JMP mem64 X64 )]571 code0 -[2(JMPE imm IA64 )]560 code0 -[2(JMPE imm16 IA64 )]549 code0 -[2(JMPE imm32 IA64 )]538 code0 -[2(JMPE rm16 IA64 )]527 code0 -[2(JMPE rm32 IA64 )]516 code0 -[2(LAHF 8086 )]505 code0 -[2(LAR reg16,mem 286,PROT,SW )]494 code0 -[2(LAR reg16,reg16 286,PROT )]483 code0 -[2(LAR reg16,reg32 386,PROT )]472 code0 -[2(LAR reg16,reg64 X64,PROT,ND )]461 code0 -[2(LAR reg32,mem 386,PROT,SW )]450 code0 -[2(LAR reg32,reg16 386,PROT )]439 code0 -[2(LAR reg32,reg32 386,PROT )]428 code0 -[2(LAR reg32,reg64 X64,PROT,ND )]417 code0 -[2(LAR reg64,mem X64,PROT,SW )]406 code0 -[2(LAR reg64,reg16 X64,PROT )]395 code0 -[2(LAR reg64,reg32 X64,PROT )]384 code0 -[2(LAR reg64,reg64 X64,PROT )]373 code0 -[2(LDS reg16,mem 8086,NOLONG )]362 code0 -[2(LDS reg32,mem 386,NOLONG )]351 code0 -[2(LEA reg16,mem 8086 )]340 code0 -[2(LEA reg32,mem 386 )]329 code0 -[2(LEA reg64,mem X64 )]318 code0 -[2(LEAVE 186 )]307 code0 -[2(LES reg16,mem 8086,NOLONG )]296 code0 -[2(LES reg32,mem 386,NOLONG )]285 code0 -[2(LFENCE X64,AMD )]274 code0 -[2(LFS reg16,mem 386 )]263 code0 -[2(LFS reg32,mem 386 )]252 code0 -[2(LGDT mem 286,PRIV )]241 code0 -[2(LGS reg16,mem 386 )]230 code0 -[2(LGS reg32,mem 386 )]219 code0 -[2(LIDT mem 286,PRIV )]208 code0 -[2(LLDT mem 286,PROT,PRIV )]197 code0 -[2(LLDT mem16 286,PROT,PRIV )]186 code0 -[2(LLDT reg16 286,PROT,PRIV )]175 code0 -[2(LMSW mem 286,PRIV )]164 code0 -[2(LMSW mem16 286,PRIV )]153 code0 -[2(LMSW reg16 286,PRIV )]142 code0 -[2(LOADALL 386,UNDOC )]131 code0 -[2(LOADALL286 286,UNDOC )]120 code0 -[2(LODSB 8086 )]109 code0 -(134)pageeven -restore showpage -%%Page: 135 135 -%%BeginPageSetup -save -%%EndPageSetup -/135 pa -[2(LODSD 386 )]681 code0 -[2(LODSQ X64 )]670 code0 -[2(LODSW 8086 )]659 code0 -[2(LOOP imm 8086 )]648 code0 -[2(LOOP imm,reg_cx 8086,NOLONG )]637 code0 -[2(LOOP imm,reg_ecx 386 )]626 code0 -[2(LOOP imm,reg_rcx X64 )]615 code0 -[2(LOOPE imm 8086 )]604 code0 -[2(LOOPE imm,reg_cx 8086,NOLONG )]593 code0 -[2(LOOPE imm,reg_ecx 386 )]582 code0 -[2(LOOPE imm,reg_rcx X64 )]571 code0 -[2(LOOPNE imm 8086 )]560 code0 -[2(LOOPNE imm,reg_cx 8086,NOLONG )]549 code0 -[2(LOOPNE imm,reg_ecx 386 )]538 code0 -[2(LOOPNE imm,reg_rcx X64 )]527 code0 -[2(LOOPNZ imm 8086 )]516 code0 -[2(LOOPNZ imm,reg_cx 8086,NOLONG )]505 code0 -[2(LOOPNZ imm,reg_ecx 386 )]494 code0 -[2(LOOPNZ imm,reg_rcx X64 )]483 code0 -[2(LOOPZ imm 8086 )]472 code0 -[2(LOOPZ imm,reg_cx 8086,NOLONG )]461 code0 -[2(LOOPZ imm,reg_ecx 386 )]450 code0 -[2(LOOPZ imm,reg_rcx X64 )]439 code0 -[2(LSL reg16,mem 286,PROT,SW )]428 code0 -[2(LSL reg16,reg16 286,PROT )]417 code0 -[2(LSL reg16,reg32 386,PROT )]406 code0 -[2(LSL reg16,reg64 X64,PROT,ND )]395 code0 -[2(LSL reg32,mem 386,PROT,SW )]384 code0 -[2(LSL reg32,reg16 386,PROT )]373 code0 -[2(LSL reg32,reg32 386,PROT )]362 code0 -[2(LSL reg32,reg64 X64,PROT,ND )]351 code0 -[2(LSL reg64,mem X64,PROT,SW )]340 code0 -[2(LSL reg64,reg16 X64,PROT )]329 code0 -[2(LSL reg64,reg32 X64,PROT )]318 code0 -[2(LSL reg64,reg64 X64,PROT )]307 code0 -[2(LSS reg16,mem 386 )]296 code0 -[2(LSS reg32,mem 386 )]285 code0 -[2(LTR mem 286,PROT,PRIV )]274 code0 -[2(LTR mem16 286,PROT,PRIV )]263 code0 -[2(LTR reg16 286,PROT,PRIV )]252 code0 -[2(MFENCE X64,AMD )]241 code0 -[2(MONITOR PRESCOTT )]230 code0 -[2(MONITOR reg_eax,reg_ecx,reg_edx PRESCOTT,ND )]219 code0 -[2(MONITOR reg_rax,reg_ecx,reg_edx X64,ND )]208 code0 -[2(MOV mem,reg_sreg 8086 )]197 code0 -[2(MOV reg16,reg_sreg 8086 )]186 code0 -[2(MOV reg32,reg_sreg 386 )]175 code0 -[2(MOV reg_sreg,mem 8086 )]164 code0 -[2(MOV reg_sreg,reg16 8086 )]153 code0 -[2(MOV reg_sreg,reg32 386 )]142 code0 -[2(MOV reg_al,mem_offs 8086 )]131 code0 -[2(MOV reg_ax,mem_offs 8086 )]120 code0 -[2(MOV reg_eax,mem_offs 386 )]109 code0 -(135)pageodd -restore showpage -%%Page: 136 136 -%%BeginPageSetup -save -%%EndPageSetup -/136 pa -[2(MOV reg_rax,mem_offs X64 )]681 code0 -[2(MOV mem_offs,reg_al 8086 )]670 code0 -[2(MOV mem_offs,reg_ax 8086 )]659 code0 -[2(MOV mem_offs,reg_eax 386 )]648 code0 -[2(MOV mem_offs,reg_rax X64 )]637 code0 -[2(MOV reg32,reg_creg 386,PRIV,NOLONG )]626 code0 -[2(MOV reg64,reg_creg X64,PRIV )]615 code0 -[2(MOV reg_creg,reg32 386,PRIV,NOLONG )]604 code0 -[2(MOV reg_creg,reg64 X64,PRIV )]593 code0 -[2(MOV reg32,reg_dreg 386,PRIV,NOLONG )]582 code0 -[2(MOV reg64,reg_dreg X64,PRIV )]571 code0 -[2(MOV reg_dreg,reg32 386,PRIV,NOLONG )]560 code0 -[2(MOV reg_dreg,reg64 X64,PRIV )]549 code0 -[2(MOV reg32,reg_treg 386,NOLONG,ND )]538 code0 -[2(MOV reg_treg,reg32 386,NOLONG,ND )]527 code0 -[2(MOV mem,reg8 8086 )]516 code0 -[2(MOV reg8,reg8 8086 )]505 code0 -[2(MOV mem,reg16 8086 )]494 code0 -[2(MOV reg16,reg16 8086 )]483 code0 -[2(MOV mem,reg32 386 )]472 code0 -[2(MOV reg32,reg32 386 )]461 code0 -[2(MOV mem,reg64 X64 )]450 code0 -[2(MOV reg64,reg64 X64 )]439 code0 -[2(MOV reg8,mem 8086 )]428 code0 -[2(MOV reg8,reg8 8086 )]417 code0 -[2(MOV reg16,mem 8086 )]406 code0 -[2(MOV reg16,reg16 8086 )]395 code0 -[2(MOV reg32,mem 386 )]384 code0 -[2(MOV reg32,reg32 386 )]373 code0 -[2(MOV reg64,mem X64 )]362 code0 -[2(MOV reg64,reg64 X64 )]351 code0 -[2(MOV reg8,imm 8086 )]340 code0 -[2(MOV reg16,imm 8086 )]329 code0 -[2(MOV reg32,imm 386 )]318 code0 -[2(MOV reg64,imm X64 )]307 code0 -[2(MOV reg64,imm32 X64 )]296 code0 -[2(MOV rm8,imm 8086 )]285 code0 -[2(MOV rm16,imm 8086 )]274 code0 -[2(MOV rm32,imm 386 )]263 code0 -[2(MOV rm64,imm X64 )]252 code0 -[2(MOV mem,imm8 8086 )]241 code0 -[2(MOV mem,imm16 8086 )]230 code0 -[2(MOV mem,imm32 386 )]219 code0 -[2(MOVD mmxreg,mem PENT,MMX,SD )]208 code0 -[2(MOVD mmxreg,reg32 PENT,MMX )]197 code0 -[2(MOVD mem,mmxreg PENT,MMX,SD )]186 code0 -[2(MOVD reg32,mmxreg PENT,MMX )]175 code0 -[2(MOVD xmmreg,mem X64,SD )]164 code0 -[2(MOVD xmmreg,reg32 X64 )]153 code0 -[2(MOVD mem,xmmreg X64,SD )]142 code0 -[2(MOVD reg32,xmmreg X64,SSE )]131 code0 -[2(MOVQ mmxreg,mmxrm PENT,MMX )]120 code0 -[2(MOVQ mmxrm,mmxreg PENT,MMX )]109 code0 -(136)pageeven -restore showpage -%%Page: 137 137 -%%BeginPageSetup -save -%%EndPageSetup -/137 pa -[2(MOVQ mmxreg,rm64 X64,MMX )]681 code0 -[2(MOVQ rm64,mmxreg X64,MMX )]670 code0 -[2(MOVSB 8086 )]659 code0 -[2(MOVSD 386 )]648 code0 -[2(MOVSQ X64 )]637 code0 -[2(MOVSW 8086 )]626 code0 -[2(MOVSX reg16,mem 386 )]615 code0 -[2(MOVSX reg16,reg8 386 )]604 code0 -[2(MOVSX reg32,rm8 386 )]593 code0 -[2(MOVSX reg32,rm16 386 )]582 code0 -[2(MOVSX reg64,rm8 X64 )]571 code0 -[2(MOVSX reg64,rm16 X64 )]560 code0 -[2(MOVSXD reg64,rm32 X64 )]549 code0 -[2(MOVSX reg64,rm32 X64,ND )]538 code0 -[2(MOVZX reg16,mem 386 )]527 code0 -[2(MOVZX reg16,reg8 386 )]516 code0 -[2(MOVZX reg32,rm8 386 )]505 code0 -[2(MOVZX reg32,rm16 386 )]494 code0 -[2(MOVZX reg64,rm8 X64 )]483 code0 -[2(MOVZX reg64,rm16 X64 )]472 code0 -[2(MUL rm8 8086 )]461 code0 -[2(MUL rm16 8086 )]450 code0 -[2(MUL rm32 386 )]439 code0 -[2(MUL rm64 X64 )]428 code0 -[2(MWAIT PRESCOTT )]417 code0 -[2(MWAIT reg_eax,reg_ecx PRESCOTT,ND )]406 code0 -[2(NEG rm8 8086 )]395 code0 -[2(NEG rm16 8086 )]384 code0 -[2(NEG rm32 386 )]373 code0 -[2(NEG rm64 X64 )]362 code0 -[2(NOP 8086 )]351 code0 -[2(NOP rm16 P6 )]340 code0 -[2(NOP rm32 P6 )]329 code0 -[2(NOP rm64 X64 )]318 code0 -[2(NOT rm8 8086 )]307 code0 -[2(NOT rm16 8086 )]296 code0 -[2(NOT rm32 386 )]285 code0 -[2(NOT rm64 X64 )]274 code0 -[2(OR mem,reg8 8086 )]263 code0 -[2(OR reg8,reg8 8086 )]252 code0 -[2(OR mem,reg16 8086 )]241 code0 -[2(OR reg16,reg16 8086 )]230 code0 -[2(OR mem,reg32 386 )]219 code0 -[2(OR reg32,reg32 386 )]208 code0 -[2(OR mem,reg64 X64 )]197 code0 -[2(OR reg64,reg64 X64 )]186 code0 -[2(OR reg8,mem 8086 )]175 code0 -[2(OR reg8,reg8 8086 )]164 code0 -[2(OR reg16,mem 8086 )]153 code0 -[2(OR reg16,reg16 8086 )]142 code0 -[2(OR reg32,mem 386 )]131 code0 -[2(OR reg32,reg32 386 )]120 code0 -[2(OR reg64,mem X64 )]109 code0 -(137)pageodd -restore showpage -%%Page: 138 138 -%%BeginPageSetup -save -%%EndPageSetup -/138 pa -[2(OR reg64,reg64 X64 )]681 code0 -[2(OR rm16,imm8 8086 )]670 code0 -[2(OR rm32,imm8 386 )]659 code0 -[2(OR rm64,imm8 X64 )]648 code0 -[2(OR reg_al,imm 8086 )]637 code0 -[2(OR reg_ax,sbyte16 8086 )]626 code0 -[2(OR reg_ax,imm 8086 )]615 code0 -[2(OR reg_eax,sbyte32 386 )]604 code0 -[2(OR reg_eax,imm 386 )]593 code0 -[2(OR reg_rax,sbyte64 X64 )]582 code0 -[2(OR reg_rax,imm X64 )]571 code0 -[2(OR rm8,imm 8086 )]560 code0 -[2(OR rm16,imm 8086 )]549 code0 -[2(OR rm32,imm 386 )]538 code0 -[2(OR rm64,imm X64 )]527 code0 -[2(OR mem,imm8 8086 )]516 code0 -[2(OR mem,imm16 8086 )]505 code0 -[2(OR mem,imm32 386 )]494 code0 -[2(OUT imm,reg_al 8086 )]483 code0 -[2(OUT imm,reg_ax 8086 )]472 code0 -[2(OUT imm,reg_eax 386 )]461 code0 -[2(OUT reg_dx,reg_al 8086 )]450 code0 -[2(OUT reg_dx,reg_ax 8086 )]439 code0 -[2(OUT reg_dx,reg_eax 386 )]428 code0 -[2(OUTSB 186 )]417 code0 -[2(OUTSD 386 )]406 code0 -[2(OUTSW 186 )]395 code0 -[2(PACKSSDW mmxreg,mmxrm PENT,MMX )]384 code0 -[2(PACKSSWB mmxreg,mmxrm PENT,MMX )]373 code0 -[2(PACKUSWB mmxreg,mmxrm PENT,MMX )]362 code0 -[2(PADDB mmxreg,mmxrm PENT,MMX )]351 code0 -[2(PADDD mmxreg,mmxrm PENT,MMX )]340 code0 -[2(PADDSB mmxreg,mmxrm PENT,MMX )]329 code0 -[2(PADDSIW mmxreg,mmxrm PENT,MMX,CYRIX )]318 code0 -[2(PADDSW mmxreg,mmxrm PENT,MMX )]307 code0 -[2(PADDUSB mmxreg,mmxrm PENT,MMX )]296 code0 -[2(PADDUSW mmxreg,mmxrm PENT,MMX )]285 code0 -[2(PADDW mmxreg,mmxrm PENT,MMX )]274 code0 -[2(PAND mmxreg,mmxrm PENT,MMX )]263 code0 -[2(PANDN mmxreg,mmxrm PENT,MMX )]252 code0 -[2(PAUSE 8086 )]241 code0 -[2(PAVEB mmxreg,mmxrm PENT,MMX,CYRIX )]230 code0 -[2(PAVGUSB mmxreg,mmxrm PENT,3DNOW )]219 code0 -[2(PCMPEQB mmxreg,mmxrm PENT,MMX )]208 code0 -[2(PCMPEQD mmxreg,mmxrm PENT,MMX )]197 code0 -[2(PCMPEQW mmxreg,mmxrm PENT,MMX )]186 code0 -[2(PCMPGTB mmxreg,mmxrm PENT,MMX )]175 code0 -[2(PCMPGTD mmxreg,mmxrm PENT,MMX )]164 code0 -[2(PCMPGTW mmxreg,mmxrm PENT,MMX )]153 code0 -[2(PDISTIB mmxreg,mem PENT,MMX,CYRIX )]142 code0 -[2(PF2ID mmxreg,mmxrm PENT,3DNOW )]131 code0 -[2(PFACC mmxreg,mmxrm PENT,3DNOW )]120 code0 -[2(PFADD mmxreg,mmxrm PENT,3DNOW )]109 code0 -(138)pageeven -restore showpage -%%Page: 139 139 -%%BeginPageSetup -save -%%EndPageSetup -/139 pa -[2(PFCMPEQ mmxreg,mmxrm PENT,3DNOW )]681 code0 -[2(PFCMPGE mmxreg,mmxrm PENT,3DNOW )]670 code0 -[2(PFCMPGT mmxreg,mmxrm PENT,3DNOW )]659 code0 -[2(PFMAX mmxreg,mmxrm PENT,3DNOW )]648 code0 -[2(PFMIN mmxreg,mmxrm PENT,3DNOW )]637 code0 -[2(PFMUL mmxreg,mmxrm PENT,3DNOW )]626 code0 -[2(PFRCP mmxreg,mmxrm PENT,3DNOW )]615 code0 -[2(PFRCPIT1 mmxreg,mmxrm PENT,3DNOW )]604 code0 -[2(PFRCPIT2 mmxreg,mmxrm PENT,3DNOW )]593 code0 -[2(PFRSQIT1 mmxreg,mmxrm PENT,3DNOW )]582 code0 -[2(PFRSQRT mmxreg,mmxrm PENT,3DNOW )]571 code0 -[2(PFSUB mmxreg,mmxrm PENT,3DNOW )]560 code0 -[2(PFSUBR mmxreg,mmxrm PENT,3DNOW )]549 code0 -[2(PI2FD mmxreg,mmxrm PENT,3DNOW )]538 code0 -[2(PMACHRIW mmxreg,mem PENT,MMX,CYRIX )]527 code0 -[2(PMADDWD mmxreg,mmxrm PENT,MMX )]516 code0 -[2(PMAGW mmxreg,mmxrm PENT,MMX,CYRIX )]505 code0 -[2(PMULHRIW mmxreg,mmxrm PENT,MMX,CYRIX )]494 code0 -[2(PMULHRWA mmxreg,mmxrm PENT,3DNOW )]483 code0 -[2(PMULHRWC mmxreg,mmxrm PENT,MMX,CYRIX )]472 code0 -[2(PMULHW mmxreg,mmxrm PENT,MMX )]461 code0 -[2(PMULLW mmxreg,mmxrm PENT,MMX )]450 code0 -[2(PMVGEZB mmxreg,mem PENT,MMX,CYRIX )]439 code0 -[2(PMVLZB mmxreg,mem PENT,MMX,CYRIX )]428 code0 -[2(PMVNZB mmxreg,mem PENT,MMX,CYRIX )]417 code0 -[2(PMVZB mmxreg,mem PENT,MMX,CYRIX )]406 code0 -[2(POP reg16 8086 )]395 code0 -[2(POP reg32 386,NOLONG )]384 code0 -[2(POP reg64 X64 )]373 code0 -[2(POP rm16 8086 )]362 code0 -[2(POP rm32 386,NOLONG )]351 code0 -[2(POP rm64 X64 )]340 code0 -[2(POP reg_cs 8086,UNDOC,ND )]329 code0 -[2(POP reg_dess 8086,NOLONG )]318 code0 -[2(POP reg_fsgs 386 )]307 code0 -[2(POPA 186,NOLONG )]296 code0 -[2(POPAD 386,NOLONG )]285 code0 -[2(POPAW 186,NOLONG )]274 code0 -[2(POPF 8086 )]263 code0 -[2(POPFD 386,NOLONG )]252 code0 -[2(POPFQ X64 )]241 code0 -[2(POPFW 8086 )]230 code0 -[2(POR mmxreg,mmxrm PENT,MMX )]219 code0 -[2(PREFETCH mem PENT,3DNOW )]208 code0 -[2(PREFETCHW mem PENT,3DNOW )]197 code0 -[2(PSLLD mmxreg,mmxrm PENT,MMX )]186 code0 -[2(PSLLD mmxreg,imm PENT,MMX )]175 code0 -[2(PSLLQ mmxreg,mmxrm PENT,MMX )]164 code0 -[2(PSLLQ mmxreg,imm PENT,MMX )]153 code0 -[2(PSLLW mmxreg,mmxrm PENT,MMX )]142 code0 -[2(PSLLW mmxreg,imm PENT,MMX )]131 code0 -[2(PSRAD mmxreg,mmxrm PENT,MMX )]120 code0 -[2(PSRAD mmxreg,imm PENT,MMX )]109 code0 -(139)pageodd -restore showpage -%%Page: 140 140 -%%BeginPageSetup -save -%%EndPageSetup -/140 pa -[2(PSRAW mmxreg,mmxrm PENT,MMX )]681 code0 -[2(PSRAW mmxreg,imm PENT,MMX )]670 code0 -[2(PSRLD mmxreg,mmxrm PENT,MMX )]659 code0 -[2(PSRLD mmxreg,imm PENT,MMX )]648 code0 -[2(PSRLQ mmxreg,mmxrm PENT,MMX )]637 code0 -[2(PSRLQ mmxreg,imm PENT,MMX )]626 code0 -[2(PSRLW mmxreg,mmxrm PENT,MMX )]615 code0 -[2(PSRLW mmxreg,imm PENT,MMX )]604 code0 -[2(PSUBB mmxreg,mmxrm PENT,MMX )]593 code0 -[2(PSUBD mmxreg,mmxrm PENT,MMX )]582 code0 -[2(PSUBSB mmxreg,mmxrm PENT,MMX )]571 code0 -[2(PSUBSIW mmxreg,mmxrm PENT,MMX,CYRIX )]560 code0 -[2(PSUBSW mmxreg,mmxrm PENT,MMX )]549 code0 -[2(PSUBUSB mmxreg,mmxrm PENT,MMX )]538 code0 -[2(PSUBUSW mmxreg,mmxrm PENT,MMX )]527 code0 -[2(PSUBW mmxreg,mmxrm PENT,MMX )]516 code0 -[2(PUNPCKHBW mmxreg,mmxrm PENT,MMX )]505 code0 -[2(PUNPCKHDQ mmxreg,mmxrm PENT,MMX )]494 code0 -[2(PUNPCKHWD mmxreg,mmxrm PENT,MMX )]483 code0 -[2(PUNPCKLBW mmxreg,mmxrm PENT,MMX )]472 code0 -[2(PUNPCKLDQ mmxreg,mmxrm PENT,MMX )]461 code0 -[2(PUNPCKLWD mmxreg,mmxrm PENT,MMX )]450 code0 -[2(PUSH reg16 8086 )]439 code0 -[2(PUSH reg32 386,NOLONG )]428 code0 -[2(PUSH reg64 X64 )]417 code0 -[2(PUSH rm16 8086 )]406 code0 -[2(PUSH rm32 386,NOLONG )]395 code0 -[2(PUSH rm64 X64 )]384 code0 -[2(PUSH reg_cs 8086,NOLONG )]373 code0 -[2(PUSH reg_dess 8086,NOLONG )]362 code0 -[2(PUSH reg_fsgs 386 )]351 code0 -[2(PUSH imm8 186 )]340 code0 -[2(PUSH imm16 186,AR0,SZ )]329 code0 -[2(PUSH imm32 386,NOLONG,AR0,SZ )]318 code0 -[2(PUSH imm32 386,NOLONG,SD )]307 code0 -[2(PUSH imm64 X64,AR0,SZ )]296 code0 -[2(PUSHA 186,NOLONG )]285 code0 -[2(PUSHAD 386,NOLONG )]274 code0 -[2(PUSHAW 186,NOLONG )]263 code0 -[2(PUSHF 8086 )]252 code0 -[2(PUSHFD 386,NOLONG )]241 code0 -[2(PUSHFQ X64 )]230 code0 -[2(PUSHFW 8086 )]219 code0 -[2(PXOR mmxreg,mmxrm PENT,MMX )]208 code0 -[2(RCL rm8,unity 8086 )]197 code0 -[2(RCL rm8,reg_cl 8086 )]186 code0 -[2(RCL rm8,imm 186 )]175 code0 -[2(RCL rm16,unity 8086 )]164 code0 -[2(RCL rm16,reg_cl 8086 )]153 code0 -[2(RCL rm16,imm 186 )]142 code0 -[2(RCL rm32,unity 386 )]131 code0 -[2(RCL rm32,reg_cl 386 )]120 code0 -[2(RCL rm32,imm 386 )]109 code0 -(140)pageeven -restore showpage -%%Page: 141 141 -%%BeginPageSetup -save -%%EndPageSetup -/141 pa -[2(RCL rm64,unity X64 )]681 code0 -[2(RCL rm64,reg_cl X64 )]670 code0 -[2(RCL rm64,imm X64 )]659 code0 -[2(RCR rm8,unity 8086 )]648 code0 -[2(RCR rm8,reg_cl 8086 )]637 code0 -[2(RCR rm8,imm 186 )]626 code0 -[2(RCR rm16,unity 8086 )]615 code0 -[2(RCR rm16,reg_cl 8086 )]604 code0 -[2(RCR rm16,imm 186 )]593 code0 -[2(RCR rm32,unity 386 )]582 code0 -[2(RCR rm32,reg_cl 386 )]571 code0 -[2(RCR rm32,imm 386 )]560 code0 -[2(RCR rm64,unity X64 )]549 code0 -[2(RCR rm64,reg_cl X64 )]538 code0 -[2(RCR rm64,imm X64 )]527 code0 -[2(RDSHR rm32 P6,CYRIXM )]516 code0 -[2(RDMSR PENT,PRIV )]505 code0 -[2(RDPMC P6 )]494 code0 -[2(RDTSC PENT )]483 code0 -[2(RDTSCP X86_64 )]472 code0 -[2(RET 8086 )]461 code0 -[2(RET imm 8086,SW )]450 code0 -[2(RETF 8086 )]439 code0 -[2(RETF imm 8086,SW )]428 code0 -[2(RETN 8086 )]417 code0 -[2(RETN imm 8086,SW )]406 code0 -[2(ROL rm8,unity 8086 )]395 code0 -[2(ROL rm8,reg_cl 8086 )]384 code0 -[2(ROL rm8,imm 186 )]373 code0 -[2(ROL rm16,unity 8086 )]362 code0 -[2(ROL rm16,reg_cl 8086 )]351 code0 -[2(ROL rm16,imm 186 )]340 code0 -[2(ROL rm32,unity 386 )]329 code0 -[2(ROL rm32,reg_cl 386 )]318 code0 -[2(ROL rm32,imm 386 )]307 code0 -[2(ROL rm64,unity X64 )]296 code0 -[2(ROL rm64,reg_cl X64 )]285 code0 -[2(ROL rm64,imm X64 )]274 code0 -[2(ROR rm8,unity 8086 )]263 code0 -[2(ROR rm8,reg_cl 8086 )]252 code0 -[2(ROR rm8,imm 186 )]241 code0 -[2(ROR rm16,unity 8086 )]230 code0 -[2(ROR rm16,reg_cl 8086 )]219 code0 -[2(ROR rm16,imm 186 )]208 code0 -[2(ROR rm32,unity 386 )]197 code0 -[2(ROR rm32,reg_cl 386 )]186 code0 -[2(ROR rm32,imm 386 )]175 code0 -[2(ROR rm64,unity X64 )]164 code0 -[2(ROR rm64,reg_cl X64 )]153 code0 -[2(ROR rm64,imm X64 )]142 code0 -[2(RDM P6,CYRIX,ND )]131 code0 -[2(RSDC reg_sreg,mem80 486,CYRIXM )]120 code0 -[2(RSLDT mem80 486,CYRIXM )]109 code0 -(141)pageodd -restore showpage -%%Page: 142 142 -%%BeginPageSetup -save -%%EndPageSetup -/142 pa -[2(RSM PENTM )]681 code0 -[2(RSTS mem80 486,CYRIXM )]670 code0 -[2(SAHF 8086 )]659 code0 -[2(SAL rm8,unity 8086,ND )]648 code0 -[2(SAL rm8,reg_cl 8086,ND )]637 code0 -[2(SAL rm8,imm 186,ND )]626 code0 -[2(SAL rm16,unity 8086,ND )]615 code0 -[2(SAL rm16,reg_cl 8086,ND )]604 code0 -[2(SAL rm16,imm 186,ND )]593 code0 -[2(SAL rm32,unity 386,ND )]582 code0 -[2(SAL rm32,reg_cl 386,ND )]571 code0 -[2(SAL rm32,imm 386,ND )]560 code0 -[2(SAL rm64,unity X64,ND )]549 code0 -[2(SAL rm64,reg_cl X64,ND )]538 code0 -[2(SAL rm64,imm X64,ND )]527 code0 -[2(SALC 8086,UNDOC )]516 code0 -[2(SAR rm8,unity 8086 )]505 code0 -[2(SAR rm8,reg_cl 8086 )]494 code0 -[2(SAR rm8,imm 186 )]483 code0 -[2(SAR rm16,unity 8086 )]472 code0 -[2(SAR rm16,reg_cl 8086 )]461 code0 -[2(SAR rm16,imm 186 )]450 code0 -[2(SAR rm32,unity 386 )]439 code0 -[2(SAR rm32,reg_cl 386 )]428 code0 -[2(SAR rm32,imm 386 )]417 code0 -[2(SAR rm64,unity X64 )]406 code0 -[2(SAR rm64,reg_cl X64 )]395 code0 -[2(SAR rm64,imm X64 )]384 code0 -[2(SBB mem,reg8 8086 )]373 code0 -[2(SBB reg8,reg8 8086 )]362 code0 -[2(SBB mem,reg16 8086 )]351 code0 -[2(SBB reg16,reg16 8086 )]340 code0 -[2(SBB mem,reg32 386 )]329 code0 -[2(SBB reg32,reg32 386 )]318 code0 -[2(SBB mem,reg64 X64 )]307 code0 -[2(SBB reg64,reg64 X64 )]296 code0 -[2(SBB reg8,mem 8086 )]285 code0 -[2(SBB reg8,reg8 8086 )]274 code0 -[2(SBB reg16,mem 8086 )]263 code0 -[2(SBB reg16,reg16 8086 )]252 code0 -[2(SBB reg32,mem 386 )]241 code0 -[2(SBB reg32,reg32 386 )]230 code0 -[2(SBB reg64,mem X64 )]219 code0 -[2(SBB reg64,reg64 X64 )]208 code0 -[2(SBB rm16,imm8 8086 )]197 code0 -[2(SBB rm32,imm8 386 )]186 code0 -[2(SBB rm64,imm8 X64 )]175 code0 -[2(SBB reg_al,imm 8086 )]164 code0 -[2(SBB reg_ax,sbyte16 8086 )]153 code0 -[2(SBB reg_ax,imm 8086 )]142 code0 -[2(SBB reg_eax,sbyte32 386 )]131 code0 -[2(SBB reg_eax,imm 386 )]120 code0 -[2(SBB reg_rax,sbyte64 X64 )]109 code0 -(142)pageeven -restore showpage -%%Page: 143 143 -%%BeginPageSetup -save -%%EndPageSetup -/143 pa -[2(SBB reg_rax,imm X64 )]681 code0 -[2(SBB rm8,imm 8086 )]670 code0 -[2(SBB rm16,imm 8086 )]659 code0 -[2(SBB rm32,imm 386 )]648 code0 -[2(SBB rm64,imm X64 )]637 code0 -[2(SBB mem,imm8 8086 )]626 code0 -[2(SBB mem,imm16 8086 )]615 code0 -[2(SBB mem,imm32 386 )]604 code0 -[2(SCASB 8086 )]593 code0 -[2(SCASD 386 )]582 code0 -[2(SCASQ X64 )]571 code0 -[2(SCASW 8086 )]560 code0 -[2(SFENCE X64,AMD )]549 code0 -[2(SGDT mem 286 )]538 code0 -[2(SHL rm8,unity 8086 )]527 code0 -[2(SHL rm8,reg_cl 8086 )]516 code0 -[2(SHL rm8,imm 186 )]505 code0 -[2(SHL rm16,unity 8086 )]494 code0 -[2(SHL rm16,reg_cl 8086 )]483 code0 -[2(SHL rm16,imm 186 )]472 code0 -[2(SHL rm32,unity 386 )]461 code0 -[2(SHL rm32,reg_cl 386 )]450 code0 -[2(SHL rm32,imm 386 )]439 code0 -[2(SHL rm64,unity X64 )]428 code0 -[2(SHL rm64,reg_cl X64 )]417 code0 -[2(SHL rm64,imm X64 )]406 code0 -[2(SHLD mem,reg16,imm 3862 )]395 code0 -[2(SHLD reg16,reg16,imm 3862 )]384 code0 -[2(SHLD mem,reg32,imm 3862 )]373 code0 -[2(SHLD reg32,reg32,imm 3862 )]362 code0 -[2(SHLD mem,reg64,imm X642 )]351 code0 -[2(SHLD reg64,reg64,imm X642 )]340 code0 -[2(SHLD mem,reg16,reg_cl 386 )]329 code0 -[2(SHLD reg16,reg16,reg_cl 386 )]318 code0 -[2(SHLD mem,reg32,reg_cl 386 )]307 code0 -[2(SHLD reg32,reg32,reg_cl 386 )]296 code0 -[2(SHLD mem,reg64,reg_cl X64 )]285 code0 -[2(SHLD reg64,reg64,reg_cl X64 )]274 code0 -[2(SHR rm8,unity 8086 )]263 code0 -[2(SHR rm8,reg_cl 8086 )]252 code0 -[2(SHR rm8,imm 186 )]241 code0 -[2(SHR rm16,unity 8086 )]230 code0 -[2(SHR rm16,reg_cl 8086 )]219 code0 -[2(SHR rm16,imm 186 )]208 code0 -[2(SHR rm32,unity 386 )]197 code0 -[2(SHR rm32,reg_cl 386 )]186 code0 -[2(SHR rm32,imm 386 )]175 code0 -[2(SHR rm64,unity X64 )]164 code0 -[2(SHR rm64,reg_cl X64 )]153 code0 -[2(SHR rm64,imm X64 )]142 code0 -[2(SHRD mem,reg16,imm 3862 )]131 code0 -[2(SHRD reg16,reg16,imm 3862 )]120 code0 -[2(SHRD mem,reg32,imm 3862 )]109 code0 -(143)pageodd -restore showpage -%%Page: 144 144 -%%BeginPageSetup -save -%%EndPageSetup -/144 pa -[2(SHRD reg32,reg32,imm 3862 )]681 code0 -[2(SHRD mem,reg64,imm X642 )]670 code0 -[2(SHRD reg64,reg64,imm X642 )]659 code0 -[2(SHRD mem,reg16,reg_cl 386 )]648 code0 -[2(SHRD reg16,reg16,reg_cl 386 )]637 code0 -[2(SHRD mem,reg32,reg_cl 386 )]626 code0 -[2(SHRD reg32,reg32,reg_cl 386 )]615 code0 -[2(SHRD mem,reg64,reg_cl X64 )]604 code0 -[2(SHRD reg64,reg64,reg_cl X64 )]593 code0 -[2(SIDT mem 286 )]582 code0 -[2(SLDT mem 286 )]571 code0 -[2(SLDT mem16 286 )]560 code0 -[2(SLDT reg16 286 )]549 code0 -[2(SLDT reg32 386 )]538 code0 -[2(SLDT reg64 X64,ND )]527 code0 -[2(SLDT reg64 X64 )]516 code0 -[2(SKINIT X64 )]505 code0 -[2(SMI 386,UNDOC )]494 code0 -[2(SMINT P6,CYRIX,ND )]483 code0 -[2(SMINTOLD 486,CYRIX,ND )]472 code0 -[2(SMSW mem 286 )]461 code0 -[2(SMSW mem16 286 )]450 code0 -[2(SMSW reg16 286 )]439 code0 -[2(SMSW reg32 386 )]428 code0 -[2(STC 8086 )]417 code0 -[2(STD 8086 )]406 code0 -[2(STGI X64 )]395 code0 -[2(STI 8086 )]384 code0 -[2(STOSB 8086 )]373 code0 -[2(STOSD 386 )]362 code0 -[2(STOSQ X64 )]351 code0 -[2(STOSW 8086 )]340 code0 -[2(STR mem 286,PROT )]329 code0 -[2(STR mem16 286,PROT )]318 code0 -[2(STR reg16 286,PROT )]307 code0 -[2(STR reg32 386,PROT )]296 code0 -[2(STR reg64 X64 )]285 code0 -[2(SUB mem,reg8 8086 )]274 code0 -[2(SUB reg8,reg8 8086 )]263 code0 -[2(SUB mem,reg16 8086 )]252 code0 -[2(SUB reg16,reg16 8086 )]241 code0 -[2(SUB mem,reg32 386 )]230 code0 -[2(SUB reg32,reg32 386 )]219 code0 -[2(SUB mem,reg64 X64 )]208 code0 -[2(SUB reg64,reg64 X64 )]197 code0 -[2(SUB reg8,mem 8086 )]186 code0 -[2(SUB reg8,reg8 8086 )]175 code0 -[2(SUB reg16,mem 8086 )]164 code0 -[2(SUB reg16,reg16 8086 )]153 code0 -[2(SUB reg32,mem 386 )]142 code0 -[2(SUB reg32,reg32 386 )]131 code0 -[2(SUB reg64,mem X64 )]120 code0 -[2(SUB reg64,reg64 X64 )]109 code0 -(144)pageeven -restore showpage -%%Page: 145 145 -%%BeginPageSetup -save -%%EndPageSetup -/145 pa -[2(SUB rm16,imm8 8086 )]681 code0 -[2(SUB rm32,imm8 386 )]670 code0 -[2(SUB rm64,imm8 X64 )]659 code0 -[2(SUB reg_al,imm 8086 )]648 code0 -[2(SUB reg_ax,sbyte16 8086 )]637 code0 -[2(SUB reg_ax,imm 8086 )]626 code0 -[2(SUB reg_eax,sbyte32 386 )]615 code0 -[2(SUB reg_eax,imm 386 )]604 code0 -[2(SUB reg_rax,sbyte64 X64 )]593 code0 -[2(SUB reg_rax,imm X64 )]582 code0 -[2(SUB rm8,imm 8086 )]571 code0 -[2(SUB rm16,imm 8086 )]560 code0 -[2(SUB rm32,imm 386 )]549 code0 -[2(SUB rm64,imm X64 )]538 code0 -[2(SUB mem,imm8 8086 )]527 code0 -[2(SUB mem,imm16 8086 )]516 code0 -[2(SUB mem,imm32 386 )]505 code0 -[2(SVDC mem80,reg_sreg 486,CYRIXM )]494 code0 -[2(SVLDT mem80 486,CYRIXM,ND )]483 code0 -[2(SVTS mem80 486,CYRIXM )]472 code0 -[2(SWAPGS X64 )]461 code0 -[2(SYSCALL P6,AMD )]450 code0 -[2(SYSENTER P6 )]439 code0 -[2(SYSEXIT P6,PRIV )]428 code0 -[2(SYSRET P6,PRIV,AMD )]417 code0 -[2(TEST mem,reg8 8086 )]406 code0 -[2(TEST reg8,reg8 8086 )]395 code0 -[2(TEST mem,reg16 8086 )]384 code0 -[2(TEST reg16,reg16 8086 )]373 code0 -[2(TEST mem,reg32 386 )]362 code0 -[2(TEST reg32,reg32 386 )]351 code0 -[2(TEST mem,reg64 X64 )]340 code0 -[2(TEST reg64,reg64 X64 )]329 code0 -[2(TEST reg8,mem 8086 )]318 code0 -[2(TEST reg16,mem 8086 )]307 code0 -[2(TEST reg32,mem 386 )]296 code0 -[2(TEST reg64,mem X64 )]285 code0 -[2(TEST reg_al,imm 8086 )]274 code0 -[2(TEST reg_ax,imm 8086 )]263 code0 -[2(TEST reg_eax,imm 386 )]252 code0 -[2(TEST reg_rax,imm X64 )]241 code0 -[2(TEST rm8,imm 8086 )]230 code0 -[2(TEST rm16,imm 8086 )]219 code0 -[2(TEST rm32,imm 386 )]208 code0 -[2(TEST rm64,imm X64 )]197 code0 -[2(TEST mem,imm8 8086 )]186 code0 -[2(TEST mem,imm16 8086 )]175 code0 -[2(TEST mem,imm32 386 )]164 code0 -[2(UD0 186,UNDOC )]153 code0 -[2(UD1 186,UNDOC )]142 code0 -[2(UD2B 186,UNDOC,ND )]131 code0 -[2(UD2 186 )]120 code0 -[2(UD2A 186,ND )]109 code0 -(145)pageodd -restore showpage -%%Page: 146 146 -%%BeginPageSetup -save -%%EndPageSetup -/146 pa -[2(UMOV mem,reg8 386,UNDOC,ND )]681 code0 -[2(UMOV reg8,reg8 386,UNDOC,ND )]670 code0 -[2(UMOV mem,reg16 386,UNDOC,ND )]659 code0 -[2(UMOV reg16,reg16 386,UNDOC,ND )]648 code0 -[2(UMOV mem,reg32 386,UNDOC,ND )]637 code0 -[2(UMOV reg32,reg32 386,UNDOC,ND )]626 code0 -[2(UMOV reg8,mem 386,UNDOC,ND )]615 code0 -[2(UMOV reg8,reg8 386,UNDOC,ND )]604 code0 -[2(UMOV reg16,mem 386,UNDOC,ND )]593 code0 -[2(UMOV reg16,reg16 386,UNDOC,ND )]582 code0 -[2(UMOV reg32,mem 386,UNDOC,ND )]571 code0 -[2(UMOV reg32,reg32 386,UNDOC,ND )]560 code0 -[2(VERR mem 286,PROT )]549 code0 -[2(VERR mem16 286,PROT )]538 code0 -[2(VERR reg16 286,PROT )]527 code0 -[2(VERW mem 286,PROT )]516 code0 -[2(VERW mem16 286,PROT )]505 code0 -[2(VERW reg16 286,PROT )]494 code0 -[2(FWAIT 8086 )]483 code0 -[2(WBINVD 486,PRIV )]472 code0 -[2(WRSHR rm32 P6,CYRIXM )]461 code0 -[2(WRMSR PENT,PRIV )]450 code0 -[2(XADD mem,reg8 486 )]439 code0 -[2(XADD reg8,reg8 486 )]428 code0 -[2(XADD mem,reg16 486 )]417 code0 -[2(XADD reg16,reg16 486 )]406 code0 -[2(XADD mem,reg32 486 )]395 code0 -[2(XADD reg32,reg32 486 )]384 code0 -[2(XADD mem,reg64 X64 )]373 code0 -[2(XADD reg64,reg64 X64 )]362 code0 -[2(XBTS reg16,mem 386,SW,UNDOC,ND )]351 code0 -[2(XBTS reg16,reg16 386,UNDOC,ND )]340 code0 -[2(XBTS reg32,mem 386,SD,UNDOC,ND )]329 code0 -[2(XBTS reg32,reg32 386,UNDOC,ND )]318 code0 -[2(XCHG reg_ax,reg16 8086 )]307 code0 -[2(XCHG reg_eax,reg32na 386 )]296 code0 -[2(XCHG reg_rax,reg64 X64 )]285 code0 -[2(XCHG reg16,reg_ax 8086 )]274 code0 -[2(XCHG reg32na,reg_eax 386 )]263 code0 -[2(XCHG reg64,reg_rax X64 )]252 code0 -[2(XCHG reg_eax,reg_eax 386,NOLONG )]241 code0 -[2(XCHG reg8,mem 8086 )]230 code0 -[2(XCHG reg8,reg8 8086 )]219 code0 -[2(XCHG reg16,mem 8086 )]208 code0 -[2(XCHG reg16,reg16 8086 )]197 code0 -[2(XCHG reg32,mem 386 )]186 code0 -[2(XCHG reg32,reg32 386 )]175 code0 -[2(XCHG reg64,mem X64 )]164 code0 -[2(XCHG reg64,reg64 X64 )]153 code0 -[2(XCHG mem,reg8 8086 )]142 code0 -[2(XCHG reg8,reg8 8086 )]131 code0 -[2(XCHG mem,reg16 8086 )]120 code0 -[2(XCHG reg16,reg16 8086 )]109 code0 -(146)pageeven -restore showpage -%%Page: 147 147 -%%BeginPageSetup -save -%%EndPageSetup -/147 pa -[2(XCHG mem,reg32 386 )]681 code0 -[2(XCHG reg32,reg32 386 )]670 code0 -[2(XCHG mem,reg64 X64 )]659 code0 -[2(XCHG reg64,reg64 X64 )]648 code0 -[2(XLATB 8086 )]637 code0 -[2(XLAT 8086 )]626 code0 -[2(XOR mem,reg8 8086 )]615 code0 -[2(XOR reg8,reg8 8086 )]604 code0 -[2(XOR mem,reg16 8086 )]593 code0 -[2(XOR reg16,reg16 8086 )]582 code0 -[2(XOR mem,reg32 386 )]571 code0 -[2(XOR reg32,reg32 386 )]560 code0 -[2(XOR mem,reg64 X64 )]549 code0 -[2(XOR reg64,reg64 X64 )]538 code0 -[2(XOR reg8,mem 8086 )]527 code0 -[2(XOR reg8,reg8 8086 )]516 code0 -[2(XOR reg16,mem 8086 )]505 code0 -[2(XOR reg16,reg16 8086 )]494 code0 -[2(XOR reg32,mem 386 )]483 code0 -[2(XOR reg32,reg32 386 )]472 code0 -[2(XOR reg64,mem X64 )]461 code0 -[2(XOR reg64,reg64 X64 )]450 code0 -[2(XOR rm16,imm8 8086 )]439 code0 -[2(XOR rm32,imm8 386 )]428 code0 -[2(XOR rm64,imm8 X64 )]417 code0 -[2(XOR reg_al,imm 8086 )]406 code0 -[2(XOR reg_ax,sbyte16 8086 )]395 code0 -[2(XOR reg_ax,imm 8086 )]384 code0 -[2(XOR reg_eax,sbyte32 386 )]373 code0 -[2(XOR reg_eax,imm 386 )]362 code0 -[2(XOR reg_rax,sbyte64 X64 )]351 code0 -[2(XOR reg_rax,imm X64 )]340 code0 -[2(XOR rm8,imm 8086 )]329 code0 -[2(XOR rm16,imm 8086 )]318 code0 -[2(XOR rm32,imm 386 )]307 code0 -[2(XOR rm64,imm X64 )]296 code0 -[2(XOR mem,imm8 8086 )]285 code0 -[2(XOR mem,imm16 8086 )]274 code0 -[2(XOR mem,imm32 386 )]263 code0 -[2(CMOVcc reg16,mem P6 )]252 code0 -[2(CMOVcc reg16,reg16 P6 )]241 code0 -[2(CMOVcc reg32,mem P6 )]230 code0 -[2(CMOVcc reg32,reg32 P6 )]219 code0 -[2(CMOVcc reg64,mem X64 )]208 code0 -[2(CMOVcc reg64,reg64 X64 )]197 code0 -[2(Jcc imm|near 386 )]186 code0 -[2(Jcc imm16|near 386 )]175 code0 -[2(Jcc imm32|near 386 )]164 code0 -[2(Jcc imm|short 8086,ND )]153 code0 -[2(Jcc imm 8086,ND )]142 code0 -[2(Jcc imm 386,ND )]131 code0 -[2(Jcc imm 8086,ND )]120 code0 -[2(Jcc imm 8086 )]109 code0 -(147)pageodd -restore showpage -%%Page: 148 148 -%%BeginPageSetup -save -%%EndPageSetup -/148 pa -[2(SETcc mem 386 )]681 code0 -[2(SETcc reg8 386)]670 code2 -[{/section-B.1.3 xa}(Katmai Streaming SIMD instructions \(SSE \226\226 a.k.a. KNI, XMM, MMX2\))](B.1.3)650.8 subh3 -[2(ADDPS xmmreg,xmmrm KATMAI,SSE )]633.8 code1 -[2(ADDSS xmmreg,xmmrm KATMAI,SSE,SD )]622.8 code0 -[2(ANDNPS xmmreg,xmmrm KATMAI,SSE )]611.8 code0 -[2(ANDPS xmmreg,xmmrm KATMAI,SSE )]600.8 code0 -[2(CMPEQPS xmmreg,xmmrm KATMAI,SSE )]589.8 code0 -[2(CMPEQSS xmmreg,xmmrm KATMAI,SSE )]578.8 code0 -[2(CMPLEPS xmmreg,xmmrm KATMAI,SSE )]567.8 code0 -[2(CMPLESS xmmreg,xmmrm KATMAI,SSE )]556.8 code0 -[2(CMPLTPS xmmreg,xmmrm KATMAI,SSE )]545.8 code0 -[2(CMPLTSS xmmreg,xmmrm KATMAI,SSE )]534.8 code0 -[2(CMPNEQPS xmmreg,xmmrm KATMAI,SSE )]523.8 code0 -[2(CMPNEQSS xmmreg,xmmrm KATMAI,SSE )]512.8 code0 -[2(CMPNLEPS xmmreg,xmmrm KATMAI,SSE )]501.8 code0 -[2(CMPNLESS xmmreg,xmmrm KATMAI,SSE )]490.8 code0 -[2(CMPNLTPS xmmreg,xmmrm KATMAI,SSE )]479.8 code0 -[2(CMPNLTSS xmmreg,xmmrm KATMAI,SSE )]468.8 code0 -[2(CMPORDPS xmmreg,xmmrm KATMAI,SSE )]457.8 code0 -[2(CMPORDSS xmmreg,xmmrm KATMAI,SSE )]446.8 code0 -[2(CMPUNORDPS xmmreg,xmmrm KATMAI,SSE )]435.8 code0 -[2(CMPUNORDSS xmmreg,xmmrm KATMAI,SSE )]424.8 code0 -[2(CMPPS xmmreg,mem,imm KATMAI,SSE )]413.8 code0 -[2(CMPPS xmmreg,xmmreg,imm KATMAI,SSE )]402.8 code0 -[2(CMPSS xmmreg,mem,imm KATMAI,SSE )]391.8 code0 -[2(CMPSS xmmreg,xmmreg,imm KATMAI,SSE )]380.8 code0 -[2(COMISS xmmreg,xmmrm KATMAI,SSE )]369.8 code0 -[2(CVTPI2PS xmmreg,mmxrm KATMAI,SSE,MMX )]358.8 code0 -[2(CVTPS2PI mmxreg,xmmrm KATMAI,SSE,MMX )]347.8 code0 -[2(CVTSI2SS xmmreg,mem KATMAI,SSE,SD,AR1,ND )]336.8 code0 -[2(CVTSI2SS xmmreg,rm32 KATMAI,SSE,SD,AR1 )]325.8 code0 -[2(CVTSI2SS xmmreg,rm64 X64,SSE,AR1 )]314.8 code0 -[2(CVTSS2SI reg32,xmmreg KATMAI,SSE,SD,AR1 )]303.8 code0 -[2(CVTSS2SI reg32,mem KATMAI,SSE,SD,AR1 )]292.8 code0 -[2(CVTSS2SI reg64,xmmreg X64,SSE,SD,AR1 )]281.8 code0 -[2(CVTSS2SI reg64,mem X64,SSE,SD,AR1 )]270.8 code0 -[2(CVTTPS2PI mmxreg,xmmrm KATMAI,SSE,MMX )]259.8 code0 -[2(CVTTSS2SI reg32,xmmrm KATMAI,SSE,SD,AR1 )]248.8 code0 -[2(CVTTSS2SI reg64,xmmrm X64,SSE,SD,AR1 )]237.8 code0 -[2(DIVPS xmmreg,xmmrm KATMAI,SSE )]226.8 code0 -[2(DIVSS xmmreg,xmmrm KATMAI,SSE )]215.8 code0 -[2(LDMXCSR mem KATMAI,SSE,SD )]204.8 code0 -[2(MAXPS xmmreg,xmmrm KATMAI,SSE )]193.8 code0 -[2(MAXSS xmmreg,xmmrm KATMAI,SSE )]182.8 code0 -[2(MINPS xmmreg,xmmrm KATMAI,SSE )]171.8 code0 -[2(MINSS xmmreg,xmmrm KATMAI,SSE )]160.8 code0 -[2(MOVAPS xmmreg,mem KATMAI,SSE )]149.8 code0 -[2(MOVAPS mem,xmmreg KATMAI,SSE )]138.8 code0 -[2(MOVAPS xmmreg,xmmreg KATMAI,SSE )]127.8 code0 -[2(MOVAPS xmmreg,xmmreg KATMAI,SSE )]116.8 code0 -[2(MOVHPS xmmreg,mem KATMAI,SSE )]105.8 code0 -(148)pageeven -restore showpage -%%Page: 149 149 -%%BeginPageSetup -save -%%EndPageSetup -/149 pa -[2(MOVHPS mem,xmmreg KATMAI,SSE )]681 code0 -[2(MOVLHPS xmmreg,xmmreg KATMAI,SSE )]670 code0 -[2(MOVLPS xmmreg,mem KATMAI,SSE )]659 code0 -[2(MOVLPS mem,xmmreg KATMAI,SSE )]648 code0 -[2(MOVHLPS xmmreg,xmmreg KATMAI,SSE )]637 code0 -[2(MOVMSKPS reg32,xmmreg KATMAI,SSE )]626 code0 -[2(MOVMSKPS reg64,xmmreg X64,SSE )]615 code0 -[2(MOVNTPS mem,xmmreg KATMAI,SSE )]604 code0 -[2(MOVSS xmmreg,mem KATMAI,SSE )]593 code0 -[2(MOVSS mem,xmmreg KATMAI,SSE )]582 code0 -[2(MOVSS xmmreg,xmmreg KATMAI,SSE )]571 code0 -[2(MOVSS xmmreg,xmmreg KATMAI,SSE )]560 code0 -[2(MOVUPS xmmreg,mem KATMAI,SSE )]549 code0 -[2(MOVUPS mem,xmmreg KATMAI,SSE )]538 code0 -[2(MOVUPS xmmreg,xmmreg KATMAI,SSE )]527 code0 -[2(MOVUPS xmmreg,xmmreg KATMAI,SSE )]516 code0 -[2(MULPS xmmreg,xmmrm KATMAI,SSE )]505 code0 -[2(MULSS xmmreg,xmmrm KATMAI,SSE )]494 code0 -[2(ORPS xmmreg,xmmrm KATMAI,SSE )]483 code0 -[2(RCPPS xmmreg,xmmrm KATMAI,SSE )]472 code0 -[2(RCPSS xmmreg,xmmrm KATMAI,SSE )]461 code0 -[2(RSQRTPS xmmreg,xmmrm KATMAI,SSE )]450 code0 -[2(RSQRTSS xmmreg,xmmrm KATMAI,SSE )]439 code0 -[2(SHUFPS xmmreg,mem,imm KATMAI,SSE )]428 code0 -[2(SHUFPS xmmreg,xmmreg,imm KATMAI,SSE )]417 code0 -[2(SQRTPS xmmreg,xmmrm KATMAI,SSE )]406 code0 -[2(SQRTSS xmmreg,xmmrm KATMAI,SSE )]395 code0 -[2(STMXCSR mem KATMAI,SSE,SD )]384 code0 -[2(SUBPS xmmreg,xmmrm KATMAI,SSE )]373 code0 -[2(SUBSS xmmreg,xmmrm KATMAI,SSE )]362 code0 -[2(UCOMISS xmmreg,xmmrm KATMAI,SSE )]351 code0 -[2(UNPCKHPS xmmreg,xmmrm KATMAI,SSE )]340 code0 -[2(UNPCKLPS xmmreg,xmmrm KATMAI,SSE )]329 code0 -[2(XORPS xmmreg,xmmrm KATMAI,SSE)]318 code2 -[{/section-B.1.4 xa}(Introduced in Deschutes but necessary for SSE support)](B.1.4)298.8 subh3 -[2(FXRSTOR mem P6,SSE,FPU )]281.8 code1 -[2(FXSAVE mem P6,SSE,FPU)]270.8 code2 -[{/section-B.1.5 xa}(XSAVE group \(AVX and extended state\))](B.1.5)251.6 subh3 -[2(XGETBV NEHALEM )]234.6 code1 -[2(XSETBV NEHALEM,PRIV )]223.6 code0 -[2(XSAVE mem NEHALEM )]212.6 code0 -[2(XRSTOR mem NEHALEM)]201.6 code2 -[{/section-B.1.6 xa}(Generic memory operations)](B.1.6)182.4 subh3 -[2(PREFETCHNTA mem KATMAI )]165.4 code1 -[2(PREFETCHT0 mem KATMAI )]154.4 code0 -[2(PREFETCHT1 mem KATMAI )]143.4 code0 -[2(PREFETCHT2 mem KATMAI )]132.4 code0 -[2(SFENCE KATMAI)]121.4 code2 -(149)pageodd -restore showpage -%%Page: 150 150 -%%BeginPageSetup -save -%%EndPageSetup -/150 pa -[{/section-B.1.7 xa}(New MMX instructions introduced in Katmai)](B.1.7)678.8 subh3 -[2(MASKMOVQ mmxreg,mmxreg KATMAI,MMX )]661.8 code1 -[2(MOVNTQ mem,mmxreg KATMAI,MMX )]650.8 code0 -[2(PAVGB mmxreg,mmxrm KATMAI,MMX )]639.8 code0 -[2(PAVGW mmxreg,mmxrm KATMAI,MMX )]628.8 code0 -[2(PEXTRW reg32,mmxreg,imm KATMAI,MMX )]617.8 code0 -[2(PINSRW mmxreg,mem,imm KATMAI,MMX )]606.8 code0 -[2(PINSRW mmxreg,rm16,imm KATMAI,MMX )]595.8 code0 -[2(PINSRW mmxreg,reg32,imm KATMAI,MMX )]584.8 code0 -[2(PMAXSW mmxreg,mmxrm KATMAI,MMX )]573.8 code0 -[2(PMAXUB mmxreg,mmxrm KATMAI,MMX )]562.8 code0 -[2(PMINSW mmxreg,mmxrm KATMAI,MMX )]551.8 code0 -[2(PMINUB mmxreg,mmxrm KATMAI,MMX )]540.8 code0 -[2(PMOVMSKB reg32,mmxreg KATMAI,MMX )]529.8 code0 -[2(PMULHUW mmxreg,mmxrm KATMAI,MMX )]518.8 code0 -[2(PSADBW mmxreg,mmxrm KATMAI,MMX )]507.8 code0 -[2(PSHUFW mmxreg,mmxrm,imm KATMAI,MMX2)]496.8 code2 -[{/section-B.1.8 xa}(AMD Enhanced 3DNow! \(Athlon\) instructions)](B.1.8)477.6 subh3 -[2(PF2IW mmxreg,mmxrm PENT,3DNOW )]460.6 code1 -[2(PFNACC mmxreg,mmxrm PENT,3DNOW )]449.6 code0 -[2(PFPNACC mmxreg,mmxrm PENT,3DNOW )]438.6 code0 -[2(PI2FW mmxreg,mmxrm PENT,3DNOW )]427.6 code0 -[2(PSWAPD mmxreg,mmxrm PENT,3DNOW)]416.6 code2 -[{/section-B.1.9 xa}(Willamette SSE2 Cacheability Instructions)](B.1.9)397.4 subh3 -[2(MASKMOVDQU xmmreg,xmmreg WILLAMETTE,SSE2 )]380.4 code1 -[2(CLFLUSH mem WILLAMETTE,SSE2 )]369.4 code0 -[2(MOVNTDQ mem,xmmreg WILLAMETTE,SSE2,SO )]358.4 code0 -[2(MOVNTI mem,reg32 WILLAMETTE,SD )]347.4 code0 -[2(MOVNTI mem,reg64 X64 )]336.4 code0 -[2(MOVNTPD mem,xmmreg WILLAMETTE,SSE2,SO )]325.4 code0 -[2(LFENCE WILLAMETTE,SSE2 )]314.4 code0 -[2(MFENCE WILLAMETTE,SSE2)]303.4 code2 -[{/section-B.1.10 xa}(Willamette MMX instructions \(SSE2 SIMD Integer Instructions\))](B.1.10)284.2 subh3 -[2(MOVD mem,xmmreg WILLAMETTE,SSE2,SD )]267.2 code1 -[2(MOVD xmmreg,mem WILLAMETTE,SSE2,SD )]256.2 code0 -[2(MOVD xmmreg,rm32 WILLAMETTE,SSE2 )]245.2 code0 -[2(MOVD rm32,xmmreg WILLAMETTE,SSE2 )]234.2 code0 -[2(MOVDQA xmmreg,xmmreg WILLAMETTE,SSE2 )]223.2 code0 -[2(MOVDQA mem,xmmreg WILLAMETTE,SSE2,SO )]212.2 code0 -[2(MOVDQA xmmreg,mem WILLAMETTE,SSE2,SO )]201.2 code0 -[2(MOVDQA xmmreg,xmmreg WILLAMETTE,SSE2 )]190.2 code0 -[2(MOVDQU xmmreg,xmmreg WILLAMETTE,SSE2 )]179.2 code0 -[2(MOVDQU mem,xmmreg WILLAMETTE,SSE2,SO )]168.2 code0 -[2(MOVDQU xmmreg,mem WILLAMETTE,SSE2,SO )]157.2 code0 -[2(MOVDQU xmmreg,xmmreg WILLAMETTE,SSE2 )]146.2 code0 -[2(MOVDQ2Q mmxreg,xmmreg WILLAMETTE,SSE2 )]135.2 code0 -[2(MOVQ xmmreg,xmmreg WILLAMETTE,SSE2 )]124.2 code0 -[2(MOVQ xmmreg,xmmreg WILLAMETTE,SSE2 )]113.2 code0 -[2(MOVQ mem,xmmreg WILLAMETTE,SSE2 )]102.2 code0 -(150)pageeven -restore showpage -%%Page: 151 151 -%%BeginPageSetup -save -%%EndPageSetup -/151 pa -[2(MOVQ xmmreg,mem WILLAMETTE,SSE2 )]681 code0 -[2(MOVQ xmmreg,rm64 X64,SSE2 )]670 code0 -[2(MOVQ rm64,xmmreg X64,SSE2 )]659 code0 -[2(MOVQ2DQ xmmreg,mmxreg WILLAMETTE,SSE2 )]648 code0 -[2(PACKSSWB xmmreg,xmmrm WILLAMETTE,SSE2,SO )]637 code0 -[2(PACKSSDW xmmreg,xmmrm WILLAMETTE,SSE2,SO )]626 code0 -[2(PACKUSWB xmmreg,xmmrm WILLAMETTE,SSE2,SO )]615 code0 -[2(PADDB xmmreg,xmmrm WILLAMETTE,SSE2,SO )]604 code0 -[2(PADDW xmmreg,xmmrm WILLAMETTE,SSE2,SO )]593 code0 -[2(PADDD xmmreg,xmmrm WILLAMETTE,SSE2,SO )]582 code0 -[2(PADDQ mmxreg,mmxrm WILLAMETTE,MMX )]571 code0 -[2(PADDQ xmmreg,xmmrm WILLAMETTE,SSE2,SO )]560 code0 -[2(PADDSB xmmreg,xmmrm WILLAMETTE,SSE2,SO )]549 code0 -[2(PADDSW xmmreg,xmmrm WILLAMETTE,SSE2,SO )]538 code0 -[2(PADDUSB xmmreg,xmmrm WILLAMETTE,SSE2,SO )]527 code0 -[2(PADDUSW xmmreg,xmmrm WILLAMETTE,SSE2,SO )]516 code0 -[2(PAND xmmreg,xmmrm WILLAMETTE,SSE2,SO )]505 code0 -[2(PANDN xmmreg,xmmrm WILLAMETTE,SSE2,SO )]494 code0 -[2(PAVGB xmmreg,xmmrm WILLAMETTE,SSE2,SO )]483 code0 -[2(PAVGW xmmreg,xmmrm WILLAMETTE,SSE2,SO )]472 code0 -[2(PCMPEQB xmmreg,xmmrm WILLAMETTE,SSE2,SO )]461 code0 -[2(PCMPEQW xmmreg,xmmrm WILLAMETTE,SSE2,SO )]450 code0 -[2(PCMPEQD xmmreg,xmmrm WILLAMETTE,SSE2,SO )]439 code0 -[2(PCMPGTB xmmreg,xmmrm WILLAMETTE,SSE2,SO )]428 code0 -[2(PCMPGTW xmmreg,xmmrm WILLAMETTE,SSE2,SO )]417 code0 -[2(PCMPGTD xmmreg,xmmrm WILLAMETTE,SSE2,SO )]406 code0 -[2(PEXTRW reg32,xmmreg,imm WILLAMETTE,SSE2 )]395 code0 -[2(PINSRW xmmreg,reg16,imm WILLAMETTE,SSE2 )]384 code0 -[2(PINSRW xmmreg,reg32,imm WILLAMETTE,SSE2,ND )]373 code0 -[2(PINSRW xmmreg,mem,imm WILLAMETTE,SSE2 )]362 code0 -[2(PINSRW xmmreg,mem16,imm WILLAMETTE,SSE2 )]351 code0 -[2(PMADDWD xmmreg,xmmrm WILLAMETTE,SSE2,SO )]340 code0 -[2(PMAXSW xmmreg,xmmrm WILLAMETTE,SSE2,SO )]329 code0 -[2(PMAXUB xmmreg,xmmrm WILLAMETTE,SSE2,SO )]318 code0 -[2(PMINSW xmmreg,xmmrm WILLAMETTE,SSE2,SO )]307 code0 -[2(PMINUB xmmreg,xmmrm WILLAMETTE,SSE2,SO )]296 code0 -[2(PMOVMSKB reg32,xmmreg WILLAMETTE,SSE2 )]285 code0 -[2(PMULHUW xmmreg,xmmrm WILLAMETTE,SSE2,SO )]274 code0 -[2(PMULHW xmmreg,xmmrm WILLAMETTE,SSE2,SO )]263 code0 -[2(PMULLW xmmreg,xmmrm WILLAMETTE,SSE2,SO )]252 code0 -[2(PMULUDQ mmxreg,mmxrm WILLAMETTE,SSE2,SO )]241 code0 -[2(PMULUDQ xmmreg,xmmrm WILLAMETTE,SSE2,SO )]230 code0 -[2(POR xmmreg,xmmrm WILLAMETTE,SSE2,SO )]219 code0 -[2(PSADBW xmmreg,xmmrm WILLAMETTE,SSE2,SO )]208 code0 -[2(PSHUFD xmmreg,xmmreg,imm WILLAMETTE,SSE2 )]197 code0 -[2(PSHUFD xmmreg,mem,imm WILLAMETTE,SSE22 )]186 code0 -[2(PSHUFHW xmmreg,xmmreg,imm WILLAMETTE,SSE2 )]175 code0 -[2(PSHUFHW xmmreg,mem,imm WILLAMETTE,SSE22 )]164 code0 -[2(PSHUFLW xmmreg,xmmreg,imm WILLAMETTE,SSE2 )]153 code0 -[2(PSHUFLW xmmreg,mem,imm WILLAMETTE,SSE22 )]142 code0 -[2(PSLLDQ xmmreg,imm WILLAMETTE,SSE2,AR1 )]131 code0 -[2(PSLLW xmmreg,xmmrm WILLAMETTE,SSE2,SO )]120 code0 -[2(PSLLW xmmreg,imm WILLAMETTE,SSE2,AR1 )]109 code0 -(151)pageodd -restore showpage -%%Page: 152 152 -%%BeginPageSetup -save -%%EndPageSetup -/152 pa -[2(PSLLD xmmreg,xmmrm WILLAMETTE,SSE2,SO )]681 code0 -[2(PSLLD xmmreg,imm WILLAMETTE,SSE2,AR1 )]670 code0 -[2(PSLLQ xmmreg,xmmrm WILLAMETTE,SSE2,SO )]659 code0 -[2(PSLLQ xmmreg,imm WILLAMETTE,SSE2,AR1 )]648 code0 -[2(PSRAW xmmreg,xmmrm WILLAMETTE,SSE2,SO )]637 code0 -[2(PSRAW xmmreg,imm WILLAMETTE,SSE2,AR1 )]626 code0 -[2(PSRAD xmmreg,xmmrm WILLAMETTE,SSE2,SO )]615 code0 -[2(PSRAD xmmreg,imm WILLAMETTE,SSE2,AR1 )]604 code0 -[2(PSRLDQ xmmreg,imm WILLAMETTE,SSE2,AR1 )]593 code0 -[2(PSRLW xmmreg,xmmrm WILLAMETTE,SSE2,SO )]582 code0 -[2(PSRLW xmmreg,imm WILLAMETTE,SSE2,AR1 )]571 code0 -[2(PSRLD xmmreg,xmmrm WILLAMETTE,SSE2,SO )]560 code0 -[2(PSRLD xmmreg,imm WILLAMETTE,SSE2,AR1 )]549 code0 -[2(PSRLQ xmmreg,xmmrm WILLAMETTE,SSE2,SO )]538 code0 -[2(PSRLQ xmmreg,imm WILLAMETTE,SSE2,AR1 )]527 code0 -[2(PSUBB xmmreg,xmmrm WILLAMETTE,SSE2,SO )]516 code0 -[2(PSUBW xmmreg,xmmrm WILLAMETTE,SSE2,SO )]505 code0 -[2(PSUBD xmmreg,xmmrm WILLAMETTE,SSE2,SO )]494 code0 -[2(PSUBQ mmxreg,mmxrm WILLAMETTE,SSE2,SO )]483 code0 -[2(PSUBQ xmmreg,xmmrm WILLAMETTE,SSE2,SO )]472 code0 -[2(PSUBSB xmmreg,xmmrm WILLAMETTE,SSE2,SO )]461 code0 -[2(PSUBSW xmmreg,xmmrm WILLAMETTE,SSE2,SO )]450 code0 -[2(PSUBUSB xmmreg,xmmrm WILLAMETTE,SSE2,SO )]439 code0 -[2(PSUBUSW xmmreg,xmmrm WILLAMETTE,SSE2,SO )]428 code0 -[2(PUNPCKHBW xmmreg,xmmrm WILLAMETTE,SSE2,SO )]417 code0 -[2(PUNPCKHWD xmmreg,xmmrm WILLAMETTE,SSE2,SO )]406 code0 -[2(PUNPCKHDQ xmmreg,xmmrm WILLAMETTE,SSE2,SO )]395 code0 -[2(PUNPCKHQDQ xmmreg,xmmrm WILLAMETTE,SSE2,SO )]384 code0 -[2(PUNPCKLBW xmmreg,xmmrm WILLAMETTE,SSE2,SO )]373 code0 -[2(PUNPCKLWD xmmreg,xmmrm WILLAMETTE,SSE2,SO )]362 code0 -[2(PUNPCKLDQ xmmreg,xmmrm WILLAMETTE,SSE2,SO )]351 code0 -[2(PUNPCKLQDQ xmmreg,xmmrm WILLAMETTE,SSE2,SO )]340 code0 -[2(PXOR xmmreg,xmmrm WILLAMETTE,SSE2,SO)]329 code2 -[{/section-B.1.11 xa}(Willamette Streaming SIMD instructions \(SSE2\))](B.1.11)309.8 subh3 -[2(ADDPD xmmreg,xmmrm WILLAMETTE,SSE2,SO )]292.8 code1 -[2(ADDSD xmmreg,xmmrm WILLAMETTE,SSE2 )]281.8 code0 -[2(ANDNPD xmmreg,xmmrm WILLAMETTE,SSE2,SO )]270.8 code0 -[2(ANDPD xmmreg,xmmrm WILLAMETTE,SSE2,SO )]259.8 code0 -[2(CMPEQPD xmmreg,xmmrm WILLAMETTE,SSE2,SO )]248.8 code0 -[2(CMPEQSD xmmreg,xmmrm WILLAMETTE,SSE2 )]237.8 code0 -[2(CMPLEPD xmmreg,xmmrm WILLAMETTE,SSE2,SO )]226.8 code0 -[2(CMPLESD xmmreg,xmmrm WILLAMETTE,SSE2 )]215.8 code0 -[2(CMPLTPD xmmreg,xmmrm WILLAMETTE,SSE2,SO )]204.8 code0 -[2(CMPLTSD xmmreg,xmmrm WILLAMETTE,SSE2 )]193.8 code0 -[2(CMPNEQPD xmmreg,xmmrm WILLAMETTE,SSE2,SO )]182.8 code0 -[2(CMPNEQSD xmmreg,xmmrm WILLAMETTE,SSE2 )]171.8 code0 -[2(CMPNLEPD xmmreg,xmmrm WILLAMETTE,SSE2,SO )]160.8 code0 -[2(CMPNLESD xmmreg,xmmrm WILLAMETTE,SSE2 )]149.8 code0 -[2(CMPNLTPD xmmreg,xmmrm WILLAMETTE,SSE2,SO )]138.8 code0 -[2(CMPNLTSD xmmreg,xmmrm WILLAMETTE,SSE2 )]127.8 code0 -[2(CMPORDPD xmmreg,xmmrm WILLAMETTE,SSE2,SO )]116.8 code0 -[2(CMPORDSD xmmreg,xmmrm WILLAMETTE,SSE2 )]105.8 code0 -(152)pageeven -restore showpage -%%Page: 153 153 -%%BeginPageSetup -save -%%EndPageSetup -/153 pa -[2(CMPUNORDPD xmmreg,xmmrm WILLAMETTE,SSE2,SO )]681 code0 -[2(CMPUNORDSD xmmreg,xmmrm WILLAMETTE,SSE2 )]670 code0 -[2(CMPPD xmmreg,xmmrm,imm WILLAMETTE,SSE22 )]659 code0 -[2(CMPSD xmmreg,xmmrm,imm WILLAMETTE,SSE2 )]648 code0 -[2(COMISD xmmreg,xmmrm WILLAMETTE,SSE2 )]637 code0 -[2(CVTDQ2PD xmmreg,xmmrm WILLAMETTE,SSE2 )]626 code0 -[2(CVTDQ2PS xmmreg,xmmrm WILLAMETTE,SSE2,SO )]615 code0 -[2(CVTPD2DQ xmmreg,xmmrm WILLAMETTE,SSE2,SO )]604 code0 -[2(CVTPD2PI mmxreg,xmmrm WILLAMETTE,SSE2,SO )]593 code0 -[2(CVTPD2PS xmmreg,xmmrm WILLAMETTE,SSE2,SO )]582 code0 -[2(CVTPI2PD xmmreg,mmxrm WILLAMETTE,SSE2 )]571 code0 -[2(CVTPS2DQ xmmreg,xmmrm WILLAMETTE,SSE2,SO )]560 code0 -[2(CVTPS2PD xmmreg,xmmrm WILLAMETTE,SSE2 )]549 code0 -[2(CVTSD2SI reg32,xmmreg WILLAMETTE,SSE2,AR1 )]538 code0 -[2(CVTSD2SI reg32,mem WILLAMETTE,SSE2,AR1 )]527 code0 -[2(CVTSD2SI reg64,xmmreg X64,SSE2,AR1 )]516 code0 -[2(CVTSD2SI reg64,mem X64,SSE2,AR1 )]505 code0 -[2(CVTSD2SS xmmreg,xmmrm WILLAMETTE,SSE2 )]494 code0 -[2(CVTSI2SD xmmreg,mem WILLAMETTE,SSE2,SD,AR1,ND )]483 code0 -[2(CVTSI2SD xmmreg,rm32 WILLAMETTE,SSE2,SD,AR1 )]472 code0 -[2(CVTSI2SD xmmreg,rm64 X64,SSE2,AR1 )]461 code0 -[2(CVTSS2SD xmmreg,xmmrm WILLAMETTE,SSE2,SD )]450 code0 -[2(CVTTPD2PI mmxreg,xmmrm WILLAMETTE,SSE2,SO )]439 code0 -[2(CVTTPD2DQ xmmreg,xmmrm WILLAMETTE,SSE2,SO )]428 code0 -[2(CVTTPS2DQ xmmreg,xmmrm WILLAMETTE,SSE2,SO )]417 code0 -[2(CVTTSD2SI reg32,xmmreg WILLAMETTE,SSE2,AR1 )]406 code0 -[2(CVTTSD2SI reg32,mem WILLAMETTE,SSE2,AR1 )]395 code0 -[2(CVTTSD2SI reg64,xmmreg X64,SSE2,AR1 )]384 code0 -[2(CVTTSD2SI reg64,mem X64,SSE2,AR1 )]373 code0 -[2(DIVPD xmmreg,xmmrm WILLAMETTE,SSE2,SO )]362 code0 -[2(DIVSD xmmreg,xmmrm WILLAMETTE,SSE2 )]351 code0 -[2(MAXPD xmmreg,xmmrm WILLAMETTE,SSE2,SO )]340 code0 -[2(MAXSD xmmreg,xmmrm WILLAMETTE,SSE2 )]329 code0 -[2(MINPD xmmreg,xmmrm WILLAMETTE,SSE2,SO )]318 code0 -[2(MINSD xmmreg,xmmrm WILLAMETTE,SSE2 )]307 code0 -[2(MOVAPD xmmreg,xmmreg WILLAMETTE,SSE2 )]296 code0 -[2(MOVAPD xmmreg,xmmreg WILLAMETTE,SSE2 )]285 code0 -[2(MOVAPD mem,xmmreg WILLAMETTE,SSE2,SO )]274 code0 -[2(MOVAPD xmmreg,mem WILLAMETTE,SSE2,SO )]263 code0 -[2(MOVHPD mem,xmmreg WILLAMETTE,SSE2 )]252 code0 -[2(MOVHPD xmmreg,mem WILLAMETTE,SSE2 )]241 code0 -[2(MOVLPD mem,xmmreg WILLAMETTE,SSE2 )]230 code0 -[2(MOVLPD xmmreg,mem WILLAMETTE,SSE2 )]219 code0 -[2(MOVMSKPD reg32,xmmreg WILLAMETTE,SSE2 )]208 code0 -[2(MOVMSKPD reg64,xmmreg X64,SSE2 )]197 code0 -[2(MOVSD xmmreg,xmmreg WILLAMETTE,SSE2 )]186 code0 -[2(MOVSD xmmreg,xmmreg WILLAMETTE,SSE2 )]175 code0 -[2(MOVSD mem,xmmreg WILLAMETTE,SSE2 )]164 code0 -[2(MOVSD xmmreg,mem WILLAMETTE,SSE2 )]153 code0 -[2(MOVUPD xmmreg,xmmreg WILLAMETTE,SSE2 )]142 code0 -[2(MOVUPD xmmreg,xmmreg WILLAMETTE,SSE2 )]131 code0 -[2(MOVUPD mem,xmmreg WILLAMETTE,SSE2,SO )]120 code0 -[2(MOVUPD xmmreg,mem WILLAMETTE,SSE2,SO )]109 code0 -(153)pageodd -restore showpage -%%Page: 154 154 -%%BeginPageSetup -save -%%EndPageSetup -/154 pa -[2(MULPD xmmreg,xmmrm WILLAMETTE,SSE2,SO )]681 code0 -[2(MULSD xmmreg,xmmrm WILLAMETTE,SSE2 )]670 code0 -[2(ORPD xmmreg,xmmrm WILLAMETTE,SSE2,SO )]659 code0 -[2(SHUFPD xmmreg,xmmreg,imm WILLAMETTE,SSE2 )]648 code0 -[2(SHUFPD xmmreg,mem,imm WILLAMETTE,SSE2 )]637 code0 -[2(SQRTPD xmmreg,xmmrm WILLAMETTE,SSE2,SO )]626 code0 -[2(SQRTSD xmmreg,xmmrm WILLAMETTE,SSE2 )]615 code0 -[2(SUBPD xmmreg,xmmrm WILLAMETTE,SSE2,SO )]604 code0 -[2(SUBSD xmmreg,xmmrm WILLAMETTE,SSE2 )]593 code0 -[2(UCOMISD xmmreg,xmmrm WILLAMETTE,SSE2 )]582 code0 -[2(UNPCKHPD xmmreg,xmmrm WILLAMETTE,SSE2,SO )]571 code0 -[2(UNPCKLPD xmmreg,xmmrm WILLAMETTE,SSE2,SO )]560 code0 -[2(XORPD xmmreg,xmmrm WILLAMETTE,SSE2,SO)]549 code2 -[{/section-B.1.12 xa}(Prescott New Instructions \(SSE3\))](B.1.12)529.8 subh3 -[2(ADDSUBPD xmmreg,xmmrm PRESCOTT,SSE3,SO )]512.8 code1 -[2(ADDSUBPS xmmreg,xmmrm PRESCOTT,SSE3,SO )]501.8 code0 -[2(HADDPD xmmreg,xmmrm PRESCOTT,SSE3,SO )]490.8 code0 -[2(HADDPS xmmreg,xmmrm PRESCOTT,SSE3,SO )]479.8 code0 -[2(HSUBPD xmmreg,xmmrm PRESCOTT,SSE3,SO )]468.8 code0 -[2(HSUBPS xmmreg,xmmrm PRESCOTT,SSE3,SO )]457.8 code0 -[2(LDDQU xmmreg,mem PRESCOTT,SSE3,SO )]446.8 code0 -[2(MOVDDUP xmmreg,xmmrm PRESCOTT,SSE3 )]435.8 code0 -[2(MOVSHDUP xmmreg,xmmrm PRESCOTT,SSE3 )]424.8 code0 -[2(MOVSLDUP xmmreg,xmmrm PRESCOTT,SSE3)]413.8 code2 -[{/section-B.1.13 xa}(VMX Instructions)](B.1.13)394.6 subh3 -[2(VMCALL VMX )]377.6 code1 -[2(VMCLEAR mem VMX )]366.6 code0 -[2(VMLAUNCH VMX )]355.6 code0 -[2(VMLOAD X64,VMX )]344.6 code0 -[2(VMMCALL X64,VMX )]333.6 code0 -[2(VMPTRLD mem VMX )]322.6 code0 -[2(VMPTRST mem VMX )]311.6 code0 -[2(VMREAD rm32,reg32 VMX,NOLONG,SD )]300.6 code0 -[2(VMREAD rm64,reg64 X64,VMX )]289.6 code0 -[2(VMRESUME VMX )]278.6 code0 -[2(VMRUN X64,VMX )]267.6 code0 -[2(VMSAVE X64,VMX )]256.6 code0 -[2(VMWRITE reg32,rm32 VMX,NOLONG,SD )]245.6 code0 -[2(VMWRITE reg64,rm64 X64,VMX )]234.6 code0 -[2(VMXOFF VMX )]223.6 code0 -[2(VMXON mem VMX)]212.6 code2 -[{/section-B.1.14 xa}(Extended Page Tables VMX instructions)](B.1.14)193.4 subh3 -[2(INVEPT reg32,mem VMX,SO,NOLONG )]176.4 code1 -[2(INVEPT reg64,mem VMX,SO,LONG )]165.4 code0 -[2(INVVPID reg32,mem VMX,SO,NOLONG )]154.4 code0 -[2(INVVPID reg64,mem VMX,SO,LONG)]143.4 code2 -(154)pageeven -restore showpage -%%Page: 155 155 -%%BeginPageSetup -save -%%EndPageSetup -/155 pa -[{/section-B.1.15 xa}(Tejas New Instructions \(SSSE3\))](B.1.15)678.8 subh3 -[2(PABSB mmxreg,mmxrm SSSE3,MMX )]661.8 code1 -[2(PABSB xmmreg,xmmrm SSSE3 )]650.8 code0 -[2(PABSW mmxreg,mmxrm SSSE3,MMX )]639.8 code0 -[2(PABSW xmmreg,xmmrm SSSE3 )]628.8 code0 -[2(PABSD mmxreg,mmxrm SSSE3,MMX )]617.8 code0 -[2(PABSD xmmreg,xmmrm SSSE3 )]606.8 code0 -[2(PALIGNR mmxreg,mmxrm,imm SSSE3,MMX )]595.8 code0 -[2(PALIGNR xmmreg,xmmrm,imm SSSE3 )]584.8 code0 -[2(PHADDW mmxreg,mmxrm SSSE3,MMX )]573.8 code0 -[2(PHADDW xmmreg,xmmrm SSSE3 )]562.8 code0 -[2(PHADDD mmxreg,mmxrm SSSE3,MMX )]551.8 code0 -[2(PHADDD xmmreg,xmmrm SSSE3 )]540.8 code0 -[2(PHADDSW mmxreg,mmxrm SSSE3,MMX )]529.8 code0 -[2(PHADDSW xmmreg,xmmrm SSSE3 )]518.8 code0 -[2(PHSUBW mmxreg,mmxrm SSSE3,MMX )]507.8 code0 -[2(PHSUBW xmmreg,xmmrm SSSE3 )]496.8 code0 -[2(PHSUBD mmxreg,mmxrm SSSE3,MMX )]485.8 code0 -[2(PHSUBD xmmreg,xmmrm SSSE3 )]474.8 code0 -[2(PHSUBSW mmxreg,mmxrm SSSE3,MMX )]463.8 code0 -[2(PHSUBSW xmmreg,xmmrm SSSE3 )]452.8 code0 -[2(PMADDUBSW mmxreg,mmxrm SSSE3,MMX )]441.8 code0 -[2(PMADDUBSW xmmreg,xmmrm SSSE3 )]430.8 code0 -[2(PMULHRSW mmxreg,mmxrm SSSE3,MMX )]419.8 code0 -[2(PMULHRSW xmmreg,xmmrm SSSE3 )]408.8 code0 -[2(PSHUFB mmxreg,mmxrm SSSE3,MMX )]397.8 code0 -[2(PSHUFB xmmreg,xmmrm SSSE3 )]386.8 code0 -[2(PSIGNB mmxreg,mmxrm SSSE3,MMX )]375.8 code0 -[2(PSIGNB xmmreg,xmmrm SSSE3 )]364.8 code0 -[2(PSIGNW mmxreg,mmxrm SSSE3,MMX )]353.8 code0 -[2(PSIGNW xmmreg,xmmrm SSSE3 )]342.8 code0 -[2(PSIGND mmxreg,mmxrm SSSE3,MMX )]331.8 code0 -[2(PSIGND xmmreg,xmmrm SSSE3)]320.8 code2 -[{/section-B.1.16 xa}(AMD SSE4A)](B.1.16)301.6 subh3 -[2(EXTRQ xmmreg,imm,imm SSE4A,AMD )]284.6 code1 -[2(EXTRQ xmmreg,xmmreg SSE4A,AMD )]273.6 code0 -[2(INSERTQ xmmreg,xmmreg,imm,imm SSE4A,AMD )]262.6 code0 -[2(INSERTQ xmmreg,xmmreg SSE4A,AMD )]251.6 code0 -[2(MOVNTSD mem,xmmreg SSE4A,AMD )]240.6 code0 -[2(MOVNTSS mem,xmmreg SSE4A,AMD,SD)]229.6 code2 -[{/section-B.1.17 xa}(New instructions in Barcelona)](B.1.17)210.4 subh3 -[2(LZCNT reg16,rm16 P6,AMD )]193.4 code1 -[2(LZCNT reg32,rm32 P6,AMD )]182.4 code0 -[2(LZCNT reg64,rm64 X64,AMD)]171.4 code2 -[{/section-B.1.18 xa}(Penryn New Instructions \(SSE4.1\))](B.1.18)152.2 subh3 -[2(BLENDPD xmmreg,xmmrm,imm SSE41 )]135.2 code1 -[2(BLENDPS xmmreg,xmmrm,imm SSE41 )]124.2 code0 -[2(BLENDVPD xmmreg,xmmrm,xmm0 SSE41 )]113.2 code0 -[2(BLENDVPS xmmreg,xmmrm,xmm0 SSE41 )]102.2 code0 -(155)pageodd -restore showpage -%%Page: 156 156 -%%BeginPageSetup -save -%%EndPageSetup -/156 pa -[2(DPPD xmmreg,xmmrm,imm SSE41 )]681 code0 -[2(DPPS xmmreg,xmmrm,imm SSE41 )]670 code0 -[2(EXTRACTPS rm32,xmmreg,imm SSE41 )]659 code0 -[2(EXTRACTPS reg64,xmmreg,imm SSE41,X64 )]648 code0 -[2(INSERTPS xmmreg,xmmrm,imm SSE41,SD )]637 code0 -[2(MOVNTDQA xmmreg,mem SSE41 )]626 code0 -[2(MPSADBW xmmreg,xmmrm,imm SSE41 )]615 code0 -[2(PACKUSDW xmmreg,xmmrm SSE41 )]604 code0 -[2(PBLENDVB xmmreg,xmmrm,xmm0 SSE41 )]593 code0 -[2(PBLENDW xmmreg,xmmrm,imm SSE41 )]582 code0 -[2(PCMPEQQ xmmreg,xmmrm SSE41 )]571 code0 -[2(PEXTRB reg32,xmmreg,imm SSE41 )]560 code0 -[2(PEXTRB mem8,xmmreg,imm SSE41 )]549 code0 -[2(PEXTRB reg64,xmmreg,imm SSE41,X64 )]538 code0 -[2(PEXTRD rm32,xmmreg,imm SSE41 )]527 code0 -[2(PEXTRQ rm64,xmmreg,imm SSE41,X64 )]516 code0 -[2(PEXTRW reg32,xmmreg,imm SSE41 )]505 code0 -[2(PEXTRW mem16,xmmreg,imm SSE41 )]494 code0 -[2(PEXTRW reg64,xmmreg,imm SSE41,X64 )]483 code0 -[2(PHMINPOSUW xmmreg,xmmrm SSE41 )]472 code0 -[2(PINSRB xmmreg,mem,imm SSE41 )]461 code0 -[2(PINSRB xmmreg,rm8,imm SSE41 )]450 code0 -[2(PINSRB xmmreg,reg32,imm SSE41 )]439 code0 -[2(PINSRD xmmreg,mem,imm SSE41 )]428 code0 -[2(PINSRD xmmreg,rm32,imm SSE41 )]417 code0 -[2(PINSRQ xmmreg,mem,imm SSE41,X64 )]406 code0 -[2(PINSRQ xmmreg,rm64,imm SSE41,X64 )]395 code0 -[2(PMAXSB xmmreg,xmmrm SSE41 )]384 code0 -[2(PMAXSD xmmreg,xmmrm SSE41 )]373 code0 -[2(PMAXUD xmmreg,xmmrm SSE41 )]362 code0 -[2(PMAXUW xmmreg,xmmrm SSE41 )]351 code0 -[2(PMINSB xmmreg,xmmrm SSE41 )]340 code0 -[2(PMINSD xmmreg,xmmrm SSE41 )]329 code0 -[2(PMINUD xmmreg,xmmrm SSE41 )]318 code0 -[2(PMINUW xmmreg,xmmrm SSE41 )]307 code0 -[2(PMOVSXBW xmmreg,xmmrm SSE41 )]296 code0 -[2(PMOVSXBD xmmreg,xmmrm SSE41,SD )]285 code0 -[2(PMOVSXBQ xmmreg,xmmrm SSE41,SW )]274 code0 -[2(PMOVSXWD xmmreg,xmmrm SSE41 )]263 code0 -[2(PMOVSXWQ xmmreg,xmmrm SSE41,SD )]252 code0 -[2(PMOVSXDQ xmmreg,xmmrm SSE41 )]241 code0 -[2(PMOVZXBW xmmreg,xmmrm SSE41 )]230 code0 -[2(PMOVZXBD xmmreg,xmmrm SSE41,SD )]219 code0 -[2(PMOVZXBQ xmmreg,xmmrm SSE41,SW )]208 code0 -[2(PMOVZXWD xmmreg,xmmrm SSE41 )]197 code0 -[2(PMOVZXWQ xmmreg,xmmrm SSE41,SD )]186 code0 -[2(PMOVZXDQ xmmreg,xmmrm SSE41 )]175 code0 -[2(PMULDQ xmmreg,xmmrm SSE41 )]164 code0 -[2(PMULLD xmmreg,xmmrm SSE41 )]153 code0 -[2(PTEST xmmreg,xmmrm SSE41 )]142 code0 -[2(ROUNDPD xmmreg,xmmrm,imm SSE41 )]131 code0 -[2(ROUNDPS xmmreg,xmmrm,imm SSE41 )]120 code0 -(156)pageeven -restore showpage -%%Page: 157 157 -%%BeginPageSetup -save -%%EndPageSetup -/157 pa -[2(ROUNDSD xmmreg,xmmrm,imm SSE41 )]681 code0 -[2(ROUNDSS xmmreg,xmmrm,imm SSE41)]670 code2 -[{/section-B.1.19 xa}(Nehalem New Instructions \(SSE4.2\))](B.1.19)650.8 subh3 -[2(CRC32 reg32,rm8 SSE42 )]633.8 code1 -[2(CRC32 reg32,rm16 SSE42 )]622.8 code0 -[2(CRC32 reg32,rm32 SSE42 )]611.8 code0 -[2(CRC32 reg64,rm8 SSE42,X64 )]600.8 code0 -[2(CRC32 reg64,rm64 SSE42,X64 )]589.8 code0 -[2(PCMPESTRI xmmreg,xmmrm,imm SSE42 )]578.8 code0 -[2(PCMPESTRM xmmreg,xmmrm,imm SSE42 )]567.8 code0 -[2(PCMPISTRI xmmreg,xmmrm,imm SSE42 )]556.8 code0 -[2(PCMPISTRM xmmreg,xmmrm,imm SSE42 )]545.8 code0 -[2(PCMPGTQ xmmreg,xmmrm SSE42 )]534.8 code0 -[2(POPCNT reg16,rm16 NEHALEM,SW )]523.8 code0 -[2(POPCNT reg32,rm32 NEHALEM,SD )]512.8 code0 -[2(POPCNT reg64,rm64 NEHALEM,X64)]501.8 code2 -[{/section-B.1.20 xa}(Intel SMX)](B.1.20)482.6 subh3 -[2(GETSEC KATMAI)]465.6 code3 -[{/section-B.1.21 xa}(Geode \(Cyrix\) 3DNow! additions)](B.1.21)446.4 subh3 -[2(PFRCPV mmxreg,mmxrm PENT,3DNOW,CYRIX )]429.4 code1 -[2(PFRSQRTV mmxreg,mmxrm PENT,3DNOW,CYRIX)]418.4 code2 -[{/section-B.1.22 xa}(Intel new instructions in ???)](B.1.22)399.2 subh3 -[2(MOVBE reg16,mem16 NEHALEM )]382.2 code1 -[2(MOVBE reg32,mem32 NEHALEM )]371.2 code0 -[2(MOVBE reg64,mem64 NEHALEM )]360.2 code0 -[2(MOVBE mem16,reg16 NEHALEM )]349.2 code0 -[2(MOVBE mem32,reg32 NEHALEM )]338.2 code0 -[2(MOVBE mem64,reg64 NEHALEM)]327.2 code2 -[{/section-B.1.23 xa}(Intel AES instructions)](B.1.23)308 subh3 -[2(AESENC xmmreg,xmmrm128 SSE,WESTMERE )]291 code1 -[2(AESENCLAST xmmreg,xmmrm128 SSE,WESTMERE )]280 code0 -[2(AESDEC xmmreg,xmmrm128 SSE,WESTMERE )]269 code0 -[2(AESDECLAST xmmreg,xmmrm128 SSE,WESTMERE )]258 code0 -[2(AESIMC xmmreg,xmmrm128 SSE,WESTMERE )]247 code0 -[2(AESKEYGENASSIST xmmreg,xmmrm128,imm8 SSE,WESTMERE)]236 code2 -[{/section-B.1.24 xa}(Intel AVX AES instructions)](B.1.24)216.8 subh3 -[2(VAESENC xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]199.8 code1 -[2(VAESENCLAST xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]188.8 code0 -[2(VAESDEC xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]177.8 code0 -[2(VAESDECLAST xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]166.8 code0 -[2(VAESIMC xmmreg,xmmrm128 AVX,SANDYBRIDGE )]155.8 code0 -[2(VAESKEYGENASSIST xmmreg,xmmrm128,imm8 AVX,SANDYBRIDGE)]144.8 code2 -(157)pageodd -restore showpage -%%Page: 158 158 -%%BeginPageSetup -save -%%EndPageSetup -/158 pa -[{/section-B.1.25 xa}(Intel AVX instructions)](B.1.25)678.8 subh3 -[2(VADDPD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]661.8 code1 -[2(VADDPD ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]650.8 code0 -[2(VADDPS xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]639.8 code0 -[2(VADDPS ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]628.8 code0 -[2(VADDSD xmmreg,xmmreg*,xmmrm64 AVX,SANDYBRIDGE )]617.8 code0 -[2(VADDSS xmmreg,xmmreg*,xmmrm32 AVX,SANDYBRIDGE )]606.8 code0 -[2(VADDSUBPD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]595.8 code0 -[2(VADDSUBPD ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]584.8 code0 -[2(VADDSUBPS xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]573.8 code0 -[2(VADDSUBPS ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]562.8 code0 -[2(VANDPD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]551.8 code0 -[2(VANDPD ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]540.8 code0 -[2(VANDPS xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]529.8 code0 -[2(VANDPS ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]518.8 code0 -[2(VANDNPD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]507.8 code0 -[2(VANDNPD ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]496.8 code0 -[2(VANDNPS xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]485.8 code0 -[2(VANDNPS ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]474.8 code0 -[2(VBLENDPD xmmreg,xmmreg*,xmmrm128,imm8 AVX,SANDYBRIDGE )]463.8 code0 -[2(VBLENDPD ymmreg,ymmreg*,ymmrm256,imm8 AVX,SANDYBRIDGE )]452.8 code0 -[2(VBLENDPS xmmreg,xmmreg*,xmmrm128,imm8 AVX,SANDYBRIDGE )]441.8 code0 -[2(VBLENDPS ymmreg,ymmreg*,ymmrm256,imm8 AVX,SANDYBRIDGE )]430.8 code0 -[2(VBLENDVPD xmmreg,xmmreg,xmmrm128,xmmreg AVX,SANDYBRIDGE )]419.8 code0 -[2(VBLENDVPD xmmreg,xmmrm128,xmm0 AVX,SANDYBRIDGE )]408.8 code0 -[2(VBLENDVPD ymmreg,ymmreg,ymmrm256,ymmreg AVX,SANDYBRIDGE )]397.8 code0 -[2(VBLENDVPD ymmreg,ymmrm256,ymm0 AVX,SANDYBRIDGE )]386.8 code0 -[2(VBLENDVPS xmmreg,xmmreg,xmmrm128,xmmreg AVX,SANDYBRIDGE )]375.8 code0 -[2(VBLENDVPS xmmreg,xmmrm128,xmm0 AVX,SANDYBRIDGE )]364.8 code0 -[2(VBLENDVPS ymmreg,ymmreg,ymmrm256,ymmreg AVX,SANDYBRIDGE )]353.8 code0 -[2(VBLENDVPD ymmreg,ymmrm256,ymm0 AVX,SANDYBRIDGE )]342.8 code0 -[2(VBROADCASTSS xmmreg,mem32 AVX,SANDYBRIDGE )]331.8 code0 -[2(VBROADCASTSS ymmreg,mem32 AVX,SANDYBRIDGE )]320.8 code0 -[2(VBROADCASTSD ymmreg,mem64 AVX,SANDYBRIDGE )]309.8 code0 -[2(VBROADCASTF128 ymmreg,mem128 AVX,SANDYBRIDGE )]298.8 code0 -[2(VCMPEQPD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]287.8 code0 -[2(VCMPEQPD ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]276.8 code0 -[2(VCMPLTPD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]265.8 code0 -[2(VCMPLTPD ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]254.8 code0 -[2(VCMPLEPD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]243.8 code0 -[2(VCMPLEPD ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]232.8 code0 -[2(VCMPUNORDPD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]221.8 code0 -[2(VCMPUNORDPD ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]210.8 code0 -[2(VCMPNEQPD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]199.8 code0 -[2(VCMPNEQPD ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]188.8 code0 -[2(VCMPNLTPD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]177.8 code0 -[2(VCMPNLTPD ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]166.8 code0 -[2(VCMPNLEPD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]155.8 code0 -[2(VCMPNLEPD ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]144.8 code0 -[2(VCMPORDPD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]133.8 code0 -[2(VCMPORDPD ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]122.8 code0 -[2(VCMPEQ_UQPD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]111.8 code0 -[2(VCMPEQ_UQPD ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]100.8 code0 -(158)pageeven -restore showpage -%%Page: 159 159 -%%BeginPageSetup -save -%%EndPageSetup -/159 pa -[2(VCMPNGEPD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]681 code0 -[2(VCMPNGEPD ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]670 code0 -[2(VCMPNGTPD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]659 code0 -[2(VCMPNGTPD ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]648 code0 -[2(VCMPFALSEPD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]637 code0 -[2(VCMPFALSEPD ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]626 code0 -[2(VCMPNEQ_OQPD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]615 code0 -[2(VCMPNEQ_OQPD ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]604 code0 -[2(VCMPGEPD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]593 code0 -[2(VCMPGEPD ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]582 code0 -[2(VCMPGTPD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]571 code0 -[2(VCMPGTPD ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]560 code0 -[2(VCMPTRUEPD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]549 code0 -[2(VCMPTRUEPD ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]538 code0 -[2(VCMPEQ_OSPD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]527 code0 -[2(VCMPEQ_OSPD ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]516 code0 -[2(VCMPLT_OQPD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]505 code0 -[2(VCMPLT_OQPD ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]494 code0 -[2(VCMPLE_OQPD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]483 code0 -[2(VCMPLE_OQPD ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]472 code0 -[2(VCMPUNORD_SPD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]461 code0 -[2(VCMPUNORD_SPD ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]450 code0 -[2(VCMPNEQ_USPD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]439 code0 -[2(VCMPNEQ_USPD ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]428 code0 -[2(VCMPNLT_UQPD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]417 code0 -[2(VCMPNLT_UQPD ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]406 code0 -[2(VCMPNLE_UQPD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]395 code0 -[2(VCMPNLE_UQPD ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]384 code0 -[2(VCMPORD_SPD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]373 code0 -[2(VCMPORD_SPD ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]362 code0 -[2(VCMPEQ_USPD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]351 code0 -[2(VCMPEQ_USPD ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]340 code0 -[2(VCMPNGE_UQPD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]329 code0 -[2(VCMPNGE_UQPD ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]318 code0 -[2(VCMPNGT_UQPD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]307 code0 -[2(VCMPNGT_UQPD ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]296 code0 -[2(VCMPFALSE_OSPD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]285 code0 -[2(VCMPFALSE_OSPD ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]274 code0 -[2(VCMPNEQ_OSPD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]263 code0 -[2(VCMPNEQ_OSPD ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]252 code0 -[2(VCMPGE_OQPD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]241 code0 -[2(VCMPGE_OQPD ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]230 code0 -[2(VCMPGT_OQPD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]219 code0 -[2(VCMPGT_OQPD ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]208 code0 -[2(VCMPTRUE_USPD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]197 code0 -[2(VCMPTRUE_USPD ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]186 code0 -[2(VCMPPD xmmreg,xmmreg*,xmmrm128,imm8 AVX,SANDYBRIDGE )]175 code0 -[2(VCMPPD ymmreg,ymmreg*,ymmrm256,imm8 AVX,SANDYBRIDGE )]164 code0 -[2(VCMPEQPS xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]153 code0 -[2(VCMPEQPS ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]142 code0 -[2(VCMPLTPS xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]131 code0 -[2(VCMPLTPS ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]120 code0 -[2(VCMPLEPS xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]109 code0 -(159)pageodd -restore showpage -%%Page: 160 160 -%%BeginPageSetup -save -%%EndPageSetup -/160 pa -[2(VCMPLEPS ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]681 code0 -[2(VCMPUNORDPS xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]670 code0 -[2(VCMPUNORDPS ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]659 code0 -[2(VCMPNEQPS xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]648 code0 -[2(VCMPNEQPS ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]637 code0 -[2(VCMPNLTPS xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]626 code0 -[2(VCMPNLTPS ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]615 code0 -[2(VCMPNLEPS xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]604 code0 -[2(VCMPNLEPS ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]593 code0 -[2(VCMPORDPS xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]582 code0 -[2(VCMPORDPS ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]571 code0 -[2(VCMPEQ_UQPS xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]560 code0 -[2(VCMPEQ_UQPS ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]549 code0 -[2(VCMPNGEPS xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]538 code0 -[2(VCMPNGEPS ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]527 code0 -[2(VCMPNGTPS xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]516 code0 -[2(VCMPNGTPS ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]505 code0 -[2(VCMPFALSEPS xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]494 code0 -[2(VCMPFALSEPS ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]483 code0 -[2(VCMPNEQ_OQPS xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]472 code0 -[2(VCMPNEQ_OQPS ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]461 code0 -[2(VCMPGEPS xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]450 code0 -[2(VCMPGEPS ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]439 code0 -[2(VCMPGTPS xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]428 code0 -[2(VCMPGTPS ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]417 code0 -[2(VCMPTRUEPS xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]406 code0 -[2(VCMPTRUEPS ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]395 code0 -[2(VCMPEQ_OSPS xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]384 code0 -[2(VCMPEQ_OSPS ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]373 code0 -[2(VCMPLT_OQPS xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]362 code0 -[2(VCMPLT_OQPS ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]351 code0 -[2(VCMPLE_OQPS xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]340 code0 -[2(VCMPLE_OQPS ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]329 code0 -[2(VCMPUNORD_SPS xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]318 code0 -[2(VCMPUNORD_SPS ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]307 code0 -[2(VCMPNEQ_USPS xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]296 code0 -[2(VCMPNEQ_USPS ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]285 code0 -[2(VCMPNLT_UQPS xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]274 code0 -[2(VCMPNLT_UQPS ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]263 code0 -[2(VCMPNLE_UQPS xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]252 code0 -[2(VCMPNLE_UQPS ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]241 code0 -[2(VCMPORD_SPS xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]230 code0 -[2(VCMPORD_SPS ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]219 code0 -[2(VCMPEQ_USPS xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]208 code0 -[2(VCMPEQ_USPS ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]197 code0 -[2(VCMPNGE_UQPS xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]186 code0 -[2(VCMPNGE_UQPS ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]175 code0 -[2(VCMPNGT_UQPS xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]164 code0 -[2(VCMPNGT_UQPS ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]153 code0 -[2(VCMPFALSE_OSPS xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]142 code0 -[2(VCMPFALSE_OSPS ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]131 code0 -[2(VCMPNEQ_OSPS xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]120 code0 -[2(VCMPNEQ_OSPS ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]109 code0 -(160)pageeven -restore showpage -%%Page: 161 161 -%%BeginPageSetup -save -%%EndPageSetup -/161 pa -[2(VCMPGE_OQPS xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]681 code0 -[2(VCMPGE_OQPS ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]670 code0 -[2(VCMPGT_OQPS xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]659 code0 -[2(VCMPGT_OQPS ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]648 code0 -[2(VCMPTRUE_USPS xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]637 code0 -[2(VCMPTRUE_USPS ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]626 code0 -[2(VCMPPS xmmreg,xmmreg*,xmmrm128,imm8 AVX,SANDYBRIDGE )]615 code0 -[2(VCMPPS ymmreg,ymmreg*,ymmrm256,imm8 AVX,SANDYBRIDGE )]604 code0 -[2(VCMPEQSD xmmreg,xmmreg*,xmmrm64 AVX,SANDYBRIDGE )]593 code0 -[2(VCMPLTSD xmmreg,xmmreg*,xmmrm64 AVX,SANDYBRIDGE )]582 code0 -[2(VCMPLESD xmmreg,xmmreg*,xmmrm64 AVX,SANDYBRIDGE )]571 code0 -[2(VCMPUNORDSD xmmreg,xmmreg*,xmmrm64 AVX,SANDYBRIDGE )]560 code0 -[2(VCMPNEQSD xmmreg,xmmreg*,xmmrm64 AVX,SANDYBRIDGE )]549 code0 -[2(VCMPNLTSD xmmreg,xmmreg*,xmmrm64 AVX,SANDYBRIDGE )]538 code0 -[2(VCMPNLESD xmmreg,xmmreg*,xmmrm64 AVX,SANDYBRIDGE )]527 code0 -[2(VCMPORDSD xmmreg,xmmreg*,xmmrm64 AVX,SANDYBRIDGE )]516 code0 -[2(VCMPEQ_UQSD xmmreg,xmmreg*,xmmrm64 AVX,SANDYBRIDGE )]505 code0 -[2(VCMPNGESD xmmreg,xmmreg*,xmmrm64 AVX,SANDYBRIDGE )]494 code0 -[2(VCMPNGTSD xmmreg,xmmreg*,xmmrm64 AVX,SANDYBRIDGE )]483 code0 -[2(VCMPFALSESD xmmreg,xmmreg*,xmmrm64 AVX,SANDYBRIDGE )]472 code0 -[2(VCMPNEQ_OQSD xmmreg,xmmreg*,xmmrm64 AVX,SANDYBRIDGE )]461 code0 -[2(VCMPGESD xmmreg,xmmreg*,xmmrm64 AVX,SANDYBRIDGE )]450 code0 -[2(VCMPGTSD xmmreg,xmmreg*,xmmrm64 AVX,SANDYBRIDGE )]439 code0 -[2(VCMPTRUESD xmmreg,xmmreg*,xmmrm64 AVX,SANDYBRIDGE )]428 code0 -[2(VCMPEQ_OSSD xmmreg,xmmreg*,xmmrm64 AVX,SANDYBRIDGE )]417 code0 -[2(VCMPLT_OQSD xmmreg,xmmreg*,xmmrm64 AVX,SANDYBRIDGE )]406 code0 -[2(VCMPLE_OQSD xmmreg,xmmreg*,xmmrm64 AVX,SANDYBRIDGE )]395 code0 -[2(VCMPUNORD_SSD xmmreg,xmmreg*,xmmrm64 AVX,SANDYBRIDGE )]384 code0 -[2(VCMPNEQ_USSD xmmreg,xmmreg*,xmmrm64 AVX,SANDYBRIDGE )]373 code0 -[2(VCMPNLT_UQSD xmmreg,xmmreg*,xmmrm64 AVX,SANDYBRIDGE )]362 code0 -[2(VCMPNLE_UQSD xmmreg,xmmreg*,xmmrm64 AVX,SANDYBRIDGE )]351 code0 -[2(VCMPORD_SSD xmmreg,xmmreg*,xmmrm64 AVX,SANDYBRIDGE )]340 code0 -[2(VCMPEQ_USSD xmmreg,xmmreg*,xmmrm64 AVX,SANDYBRIDGE )]329 code0 -[2(VCMPNGE_UQSD xmmreg,xmmreg*,xmmrm64 AVX,SANDYBRIDGE )]318 code0 -[2(VCMPNGT_UQSD xmmreg,xmmreg*,xmmrm64 AVX,SANDYBRIDGE )]307 code0 -[2(VCMPFALSE_OSSD xmmreg,xmmreg*,xmmrm64 AVX,SANDYBRIDGE )]296 code0 -[2(VCMPNEQ_OSSD xmmreg,xmmreg*,xmmrm64 AVX,SANDYBRIDGE )]285 code0 -[2(VCMPGE_OQSD xmmreg,xmmreg*,xmmrm64 AVX,SANDYBRIDGE )]274 code0 -[2(VCMPGT_OQSD xmmreg,xmmreg*,xmmrm64 AVX,SANDYBRIDGE )]263 code0 -[2(VCMPTRUE_USSD xmmreg,xmmreg*,xmmrm64 AVX,SANDYBRIDGE )]252 code0 -[2(VCMPSD xmmreg,xmmreg*,xmmrm64,imm8 AVX,SANDYBRIDGE )]241 code0 -[2(VCMPEQSS xmmreg,xmmreg*,xmmrm32 AVX,SANDYBRIDGE )]230 code0 -[2(VCMPLTSS xmmreg,xmmreg*,xmmrm32 AVX,SANDYBRIDGE )]219 code0 -[2(VCMPLESS xmmreg,xmmreg*,xmmrm32 AVX,SANDYBRIDGE )]208 code0 -[2(VCMPUNORDSS xmmreg,xmmreg*,xmmrm32 AVX,SANDYBRIDGE )]197 code0 -[2(VCMPNEQSS xmmreg,xmmreg*,xmmrm32 AVX,SANDYBRIDGE )]186 code0 -[2(VCMPNLTSS xmmreg,xmmreg*,xmmrm32 AVX,SANDYBRIDGE )]175 code0 -[2(VCMPNLESS xmmreg,xmmreg*,xmmrm32 AVX,SANDYBRIDGE )]164 code0 -[2(VCMPORDSS xmmreg,xmmreg*,xmmrm32 AVX,SANDYBRIDGE )]153 code0 -[2(VCMPEQ_UQSS xmmreg,xmmreg*,xmmrm32 AVX,SANDYBRIDGE )]142 code0 -[2(VCMPNGESS xmmreg,xmmreg*,xmmrm32 AVX,SANDYBRIDGE )]131 code0 -[2(VCMPNGTSS xmmreg,xmmreg*,xmmrm32 AVX,SANDYBRIDGE )]120 code0 -[2(VCMPFALSESS xmmreg,xmmreg*,xmmrm32 AVX,SANDYBRIDGE )]109 code0 -(161)pageodd -restore showpage -%%Page: 162 162 -%%BeginPageSetup -save -%%EndPageSetup -/162 pa -[2(VCMPNEQ_OQSS xmmreg,xmmreg*,xmmrm32 AVX,SANDYBRIDGE )]681 code0 -[2(VCMPGESS xmmreg,xmmreg*,xmmrm32 AVX,SANDYBRIDGE )]670 code0 -[2(VCMPGTSS xmmreg,xmmreg*,xmmrm32 AVX,SANDYBRIDGE )]659 code0 -[2(VCMPTRUESS xmmreg,xmmreg*,xmmrm32 AVX,SANDYBRIDGE )]648 code0 -[2(VCMPEQ_OSSS xmmreg,xmmreg*,xmmrm32 AVX,SANDYBRIDGE )]637 code0 -[2(VCMPLT_OQSS xmmreg,xmmreg*,xmmrm32 AVX,SANDYBRIDGE )]626 code0 -[2(VCMPLE_OQSS xmmreg,xmmreg*,xmmrm32 AVX,SANDYBRIDGE )]615 code0 -[2(VCMPUNORD_SSS xmmreg,xmmreg*,xmmrm32 AVX,SANDYBRIDGE )]604 code0 -[2(VCMPNEQ_USSS xmmreg,xmmreg*,xmmrm32 AVX,SANDYBRIDGE )]593 code0 -[2(VCMPNLT_UQSS xmmreg,xmmreg*,xmmrm32 AVX,SANDYBRIDGE )]582 code0 -[2(VCMPNLE_UQSS xmmreg,xmmreg*,xmmrm32 AVX,SANDYBRIDGE )]571 code0 -[2(VCMPORD_SSS xmmreg,xmmreg*,xmmrm32 AVX,SANDYBRIDGE )]560 code0 -[2(VCMPEQ_USSS xmmreg,xmmreg*,xmmrm32 AVX,SANDYBRIDGE )]549 code0 -[2(VCMPNGE_UQSS xmmreg,xmmreg*,xmmrm32 AVX,SANDYBRIDGE )]538 code0 -[2(VCMPNGT_UQSS xmmreg,xmmreg*,xmmrm32 AVX,SANDYBRIDGE )]527 code0 -[2(VCMPFALSE_OSSS xmmreg,xmmreg*,xmmrm32 AVX,SANDYBRIDGE )]516 code0 -[2(VCMPNEQ_OSSS xmmreg,xmmreg*,xmmrm32 AVX,SANDYBRIDGE )]505 code0 -[2(VCMPGE_OQSS xmmreg,xmmreg*,xmmrm32 AVX,SANDYBRIDGE )]494 code0 -[2(VCMPGT_OQSS xmmreg,xmmreg*,xmmrm32 AVX,SANDYBRIDGE )]483 code0 -[2(VCMPTRUE_USSS xmmreg,xmmreg*,xmmrm32 AVX,SANDYBRIDGE )]472 code0 -[2(VCMPSS xmmreg,xmmreg*,xmmrm32,imm8 AVX,SANDYBRIDGE )]461 code0 -[2(VCOMISD xmmreg,xmmrm64 AVX,SANDYBRIDGE )]450 code0 -[2(VCOMISS xmmreg,xmmrm32 AVX,SANDYBRIDGE )]439 code0 -[2(VCVTDQ2PD xmmreg,xmmrm64 AVX,SANDYBRIDGE )]428 code0 -[2(VCVTDQ2PD ymmreg,xmmrm128 AVX,SANDYBRIDGE )]417 code0 -[2(VCVTDQ2PS xmmreg,xmmrm128 AVX,SANDYBRIDGE )]406 code0 -[2(VCVTDQ2PS ymmreg,ymmrm256 AVX,SANDYBRIDGE )]395 code0 -[2(VCVTPD2DQ xmmreg,xmmreg AVX,SANDYBRIDGE )]384 code0 -[2(VCVTPD2DQ xmmreg,mem128 AVX,SANDYBRIDGE,SO )]373 code0 -[2(VCVTPD2DQ xmmreg,ymmreg AVX,SANDYBRIDGE )]362 code0 -[2(VCVTPD2DQ xmmreg,mem256 AVX,SANDYBRIDGE,SY )]351 code0 -[2(VCVTPD2PS xmmreg,xmmreg AVX,SANDYBRIDGE )]340 code0 -[2(VCVTPD2PS xmmreg,mem128 AVX,SANDYBRIDGE,SO )]329 code0 -[2(VCVTPD2PS xmmreg,ymmreg AVX,SANDYBRIDGE )]318 code0 -[2(VCVTPD2PS xmmreg,mem256 AVX,SANDYBRIDGE,SY )]307 code0 -[2(VCVTPS2DQ xmmreg,xmmrm128 AVX,SANDYBRIDGE )]296 code0 -[2(VCVTPS2DQ ymmreg,ymmrm256 AVX,SANDYBRIDGE )]285 code0 -[2(VCVTPS2PD xmmreg,xmmrm64 AVX,SANDYBRIDGE )]274 code0 -[2(VCVTPS2PD ymmreg,xmmrm128 AVX,SANDYBRIDGE )]263 code0 -[2(VCVTSD2SI reg32,xmmrm64 AVX,SANDYBRIDGE )]252 code0 -[2(VCVTSD2SI reg64,xmmrm64 AVX,SANDYBRIDGE,LONG )]241 code0 -[2(VCVTSD2SS xmmreg,xmmreg*,xmmrm64 AVX,SANDYBRIDGE )]230 code0 -[2(VCVTSI2SD xmmreg,xmmreg*,rm32 AVX,SANDYBRIDGE,SD )]219 code0 -[2(VCVTSI2SD xmmreg,xmmreg*,mem32 AVX,SANDYBRIDGE,ND,SD )]208 code0 -[2(VCVTSI2SD xmmreg,xmmreg*,rm64 AVX,SANDYBRIDGE,LONG )]197 code0 -[2(VCVTSI2SS xmmreg,xmmreg*,rm32 AVX,SANDYBRIDGE,SD )]186 code0 -[2(VCVTSI2SS xmmreg,xmmreg*,mem32 AVX,SANDYBRIDGE,ND,SD )]175 code0 -[2(VCVTSI2SS xmmreg,xmmreg*,rm64 AVX,SANDYBRIDGE,LONG )]164 code0 -[2(VCVTSS2SD xmmreg,xmmreg*,xmmrm32 AVX,SANDYBRIDGE )]153 code0 -[2(VCVTSS2SI reg32,xmmrm32 AVX,SANDYBRIDGE )]142 code0 -[2(VCVTSS2SI reg64,xmmrm32 AVX,SANDYBRIDGE,LONG )]131 code0 -[2(VCVTTPD2DQ xmmreg,xmmreg AVX,SANDYBRIDGE )]120 code0 -[2(VCVTTPD2DQ xmmreg,mem128 AVX,SANDYBRIDGE,SO )]109 code0 -(162)pageeven -restore showpage -%%Page: 163 163 -%%BeginPageSetup -save -%%EndPageSetup -/163 pa -[2(VCVTTPD2DQ xmmreg,ymmreg AVX,SANDYBRIDGE )]681 code0 -[2(VCVTTPD2DQ xmmreg,mem256 AVX,SANDYBRIDGE,SY )]670 code0 -[2(VCVTTPS2DQ xmmreg,xmmrm128 AVX,SANDYBRIDGE )]659 code0 -[2(VCVTTPS2DQ ymmreg,ymmrm256 AVX,SANDYBRIDGE )]648 code0 -[2(VCVTTSD2SI reg32,xmmrm64 AVX,SANDYBRIDGE )]637 code0 -[2(VCVTTSD2SI reg64,xmmrm64 AVX,SANDYBRIDGE,LONG )]626 code0 -[2(VCVTTSS2SI reg32,xmmrm32 AVX,SANDYBRIDGE )]615 code0 -[2(VCVTTSS2SI reg64,xmmrm32 AVX,SANDYBRIDGE,LONG )]604 code0 -[2(VDIVPD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]593 code0 -[2(VDIVPD ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]582 code0 -[2(VDIVPS xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]571 code0 -[2(VDIVPS ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]560 code0 -[2(VDIVSD xmmreg,xmmreg*,xmmrm64 AVX,SANDYBRIDGE )]549 code0 -[2(VDIVSS xmmreg,xmmreg*,xmmrm32 AVX,SANDYBRIDGE )]538 code0 -[2(VDPPD xmmreg,xmmreg*,xmmrm128,imm8 AVX,SANDYBRIDGE )]527 code0 -[2(VDPPS xmmreg,xmmreg*,xmmrm128,imm8 AVX,SANDYBRIDGE )]516 code0 -[2(VDPPS ymmreg,ymmreg*,ymmrm256,imm8 AVX,SANDYBRIDGE )]505 code0 -[2(VEXTRACTF128 xmmrm128,xmmreg,imm8 AVX,SANDYBRIDGE )]494 code0 -[2(VEXTRACTPS rm32,xmmreg,imm8 AVX,SANDYBRIDGE )]483 code0 -[2(VHADDPD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]472 code0 -[2(VHADDPD ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]461 code0 -[2(VHADDPS xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]450 code0 -[2(VHADDPS ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]439 code0 -[2(VHSUBPD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]428 code0 -[2(VHSUBPD ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]417 code0 -[2(VHSUBPS xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]406 code0 -[2(VHSUBPS ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]395 code0 -[2(VINSERTF128 ymmreg,ymmreg,xmmrm128,imm8 AVX,SANDYBRIDGE )]384 code0 -[2(VINSERTPS xmmreg,xmmreg*,xmmrm32,imm8 AVX,SANDYBRIDGE )]373 code0 -[2(VLDDQU xmmreg,mem128 AVX,SANDYBRIDGE )]362 code0 -[2(VLDQQU ymmreg,mem256 AVX,SANDYBRIDGE )]351 code0 -[2(VLDDQU ymmreg,mem256 AVX,SANDYBRIDGE )]340 code0 -[2(VLDMXCSR mem32 AVX,SANDYBRIDGE )]329 code0 -[2(VMASKMOVDQU xmmreg,xmmreg AVX,SANDYBRIDGE )]318 code0 -[2(VMASKMOVPS xmmreg,xmmreg,mem128 AVX,SANDYBRIDGE )]307 code0 -[2(VMASKMOVPS ymmreg,ymmreg,mem256 AVX,SANDYBRIDGE )]296 code0 -[2(VMASKMOVPS mem128,xmmreg,xmmreg AVX,SANDYBRIDGE,SO )]285 code0 -[2(VMASKMOVPS mem256,xmmreg,xmmreg AVX,SANDYBRIDGE,SY )]274 code0 -[2(VMASKMOVPD xmmreg,xmmreg,mem128 AVX,SANDYBRIDGE )]263 code0 -[2(VMASKMOVPD ymmreg,ymmreg,mem256 AVX,SANDYBRIDGE )]252 code0 -[2(VMASKMOVPD mem128,xmmreg,xmmreg AVX,SANDYBRIDGE )]241 code0 -[2(VMASKMOVPD mem256,ymmreg,ymmreg AVX,SANDYBRIDGE )]230 code0 -[2(VMAXPD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]219 code0 -[2(VMAXPD ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]208 code0 -[2(VMAXPS xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]197 code0 -[2(VMAXPS ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]186 code0 -[2(VMAXSD xmmreg,xmmreg*,xmmrm64 AVX,SANDYBRIDGE )]175 code0 -[2(VMAXSS xmmreg,xmmreg*,xmmrm32 AVX,SANDYBRIDGE )]164 code0 -[2(VMINPD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]153 code0 -[2(VMINPD ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]142 code0 -[2(VMINPS xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]131 code0 -[2(VMINPS ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]120 code0 -[2(VMINSD xmmreg,xmmreg*,xmmrm64 AVX,SANDYBRIDGE )]109 code0 -(163)pageodd -restore showpage -%%Page: 164 164 -%%BeginPageSetup -save -%%EndPageSetup -/164 pa -[2(VMINSS xmmreg,xmmreg*,xmmrm32 AVX,SANDYBRIDGE )]681 code0 -[2(VMOVAPD xmmreg,xmmrm128 AVX,SANDYBRIDGE )]670 code0 -[2(VMOVAPD xmmrm128,xmmreg AVX,SANDYBRIDGE )]659 code0 -[2(VMOVAPD ymmreg,ymmrm256 AVX,SANDYBRIDGE )]648 code0 -[2(VMOVAPD ymmrm256,ymmreg AVX,SANDYBRIDGE )]637 code0 -[2(VMOVAPS xmmreg,xmmrm128 AVX,SANDYBRIDGE )]626 code0 -[2(VMOVAPS xmmrm128,xmmreg AVX,SANDYBRIDGE )]615 code0 -[2(VMOVAPS ymmreg,ymmrm256 AVX,SANDYBRIDGE )]604 code0 -[2(VMOVAPS ymmrm256,ymmreg AVX,SANDYBRIDGE )]593 code0 -[2(VMOVQ xmmreg,xmmrm64 AVX,SANDYBRIDGE )]582 code0 -[2(VMOVQ xmmrm64,xmmreg AVX,SANDYBRIDGE )]571 code0 -[2(VMOVQ xmmreg,rm64 AVX,SANDYBRIDGE,LONG )]560 code0 -[2(VMOVQ rm64,xmmreg AVX,SANDYBRIDGE,LONG )]549 code0 -[2(VMOVD xmmreg,rm32 AVX,SANDYBRIDGE )]538 code0 -[2(VMOVD rm32,xmmreg AVX,SANDYBRIDGE )]527 code0 -[2(VMOVDDUP xmmreg,xmmrm64 AVX,SANDYBRIDGE )]516 code0 -[2(VMOVDDUP ymmreg,ymmrm256 AVX,SANDYBRIDGE )]505 code0 -[2(VMOVDQA xmmreg,xmmrm128 AVX,SANDYBRIDGE )]494 code0 -[2(VMOVDQA xmmrm128,xmmreg AVX,SANDYBRIDGE )]483 code0 -[2(VMOVQQA ymmreg,ymmrm256 AVX,SANDYBRIDGE )]472 code0 -[2(VMOVQQA ymmrm256,ymmreg AVX,SANDYBRIDGE )]461 code0 -[2(VMOVDQA ymmreg,ymmrm AVX,SANDYBRIDGE )]450 code0 -[2(VMOVDQA ymmrm256,ymmreg AVX,SANDYBRIDGE )]439 code0 -[2(VMOVDQU xmmreg,xmmrm128 AVX,SANDYBRIDGE )]428 code0 -[2(VMOVDQU xmmrm128,xmmreg AVX,SANDYBRIDGE )]417 code0 -[2(VMOVQQU ymmreg,ymmrm256 AVX,SANDYBRIDGE )]406 code0 -[2(VMOVQQU ymmrm256,ymmreg AVX,SANDYBRIDGE )]395 code0 -[2(VMOVDQU ymmreg,ymmrm256 AVX,SANDYBRIDGE )]384 code0 -[2(VMOVDQU ymmrm256,ymmreg AVX,SANDYBRIDGE )]373 code0 -[2(VMOVHLPS xmmreg,xmmreg*,xmmreg AVX,SANDYBRIDGE )]362 code0 -[2(VMOVHPD xmmreg,xmmreg*,mem64 AVX,SANDYBRIDGE )]351 code0 -[2(VMOVHPD mem64,xmmreg AVX,SANDYBRIDGE )]340 code0 -[2(VMOVHPS xmmreg,xmmreg*,mem64 AVX,SANDYBRIDGE )]329 code0 -[2(VMOVHPS mem64,xmmreg AVX,SANDYBRIDGE )]318 code0 -[2(VMOVLHPS xmmreg,xmmreg*,xmmreg AVX,SANDYBRIDGE )]307 code0 -[2(VMOVLPD xmmreg,xmmreg*,mem64 AVX,SANDYBRIDGE )]296 code0 -[2(VMOVLPD mem64,xmmreg AVX,SANDYBRIDGE )]285 code0 -[2(VMOVLPS xmmreg,xmmreg*,mem64 AVX,SANDYBRIDGE )]274 code0 -[2(VMOVLPS mem64,xmmreg AVX,SANDYBRIDGE )]263 code0 -[2(VMOVMSKPD reg64,xmmreg AVX,SANDYBRIDGE,LONG )]252 code0 -[2(VMOVMSKPD reg32,xmmreg AVX,SANDYBRIDGE )]241 code0 -[2(VMOVMSKPD reg64,ymmreg AVX,SANDYBRIDGE,LONG )]230 code0 -[2(VMOVMSKPD reg32,ymmreg AVX,SANDYBRIDGE )]219 code0 -[2(VMOVMSKPS reg64,xmmreg AVX,SANDYBRIDGE,LONG )]208 code0 -[2(VMOVMSKPS reg32,xmmreg AVX,SANDYBRIDGE )]197 code0 -[2(VMOVMSKPS reg64,ymmreg AVX,SANDYBRIDGE,LONG )]186 code0 -[2(VMOVMSKPS reg32,ymmreg AVX,SANDYBRIDGE )]175 code0 -[2(VMOVNTDQ mem128,xmmreg AVX,SANDYBRIDGE )]164 code0 -[2(VMOVNTQQ mem256,ymmreg AVX,SANDYBRIDGE )]153 code0 -[2(VMOVNTDQ mem256,ymmreg AVX,SANDYBRIDGE )]142 code0 -[2(VMOVNTDQA xmmreg,mem128 AVX,SANDYBRIDGE )]131 code0 -[2(VMOVNTPD mem128,xmmreg AVX,SANDYBRIDGE )]120 code0 -[2(VMOVNTPD mem256,ymmreg AVX,SANDYBRIDGE )]109 code0 -(164)pageeven -restore showpage -%%Page: 165 165 -%%BeginPageSetup -save -%%EndPageSetup -/165 pa -[2(VMOVNTPS mem128,xmmreg AVX,SANDYBRIDGE )]681 code0 -[2(VMOVNTPS mem128,ymmreg AVX,SANDYBRIDGE )]670 code0 -[2(VMOVSD xmmreg,xmmreg*,xmmreg AVX,SANDYBRIDGE )]659 code0 -[2(VMOVSD xmmreg,mem64 AVX,SANDYBRIDGE )]648 code0 -[2(VMOVSD xmmreg,xmmreg*,xmmreg AVX,SANDYBRIDGE )]637 code0 -[2(VMOVSD mem64,xmmreg AVX,SANDYBRIDGE )]626 code0 -[2(VMOVSHDUP xmmreg,xmmrm128 AVX,SANDYBRIDGE )]615 code0 -[2(VMOVSHDUP ymmreg,ymmrm256 AVX,SANDYBRIDGE )]604 code0 -[2(VMOVSLDUP xmmreg,xmmrm128 AVX,SANDYBRIDGE )]593 code0 -[2(VMOVSLDUP ymmreg,ymmrm256 AVX,SANDYBRIDGE )]582 code0 -[2(VMOVSS xmmreg,xmmreg*,xmmreg AVX,SANDYBRIDGE )]571 code0 -[2(VMOVSS xmmreg,mem64 AVX,SANDYBRIDGE )]560 code0 -[2(VMOVSS xmmreg,xmmreg*,xmmreg AVX,SANDYBRIDGE )]549 code0 -[2(VMOVSS mem64,xmmreg AVX,SANDYBRIDGE )]538 code0 -[2(VMOVUPD xmmreg,xmmrm128 AVX,SANDYBRIDGE )]527 code0 -[2(VMOVUPD xmmrm128,xmmreg AVX,SANDYBRIDGE )]516 code0 -[2(VMOVUPD ymmreg,ymmrm256 AVX,SANDYBRIDGE )]505 code0 -[2(VMOVUPD ymmrm256,ymmreg AVX,SANDYBRIDGE )]494 code0 -[2(VMOVUPS xmmreg,xmmrm128 AVX,SANDYBRIDGE )]483 code0 -[2(VMOVUPS xmmrm128,xmmreg AVX,SANDYBRIDGE )]472 code0 -[2(VMOVUPS ymmreg,ymmrm256 AVX,SANDYBRIDGE )]461 code0 -[2(VMOVUPS ymmrm256,ymmreg AVX,SANDYBRIDGE )]450 code0 -[2(VMPSADBW xmmreg,xmmreg*,xmmrm128,imm8 AVX,SANDYBRIDGE )]439 code0 -[2(VMULPD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]428 code0 -[2(VMULPD ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]417 code0 -[2(VMULPS xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]406 code0 -[2(VMULPS ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]395 code0 -[2(VMULSD xmmreg,xmmreg*,xmmrm64 AVX,SANDYBRIDGE )]384 code0 -[2(VMULSS xmmreg,xmmreg*,xmmrm32 AVX,SANDYBRIDGE )]373 code0 -[2(VORPD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]362 code0 -[2(VORPD ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]351 code0 -[2(VORPS xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]340 code0 -[2(VORPS ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]329 code0 -[2(VPABSB xmmreg,xmmrm128 AVX,SANDYBRIDGE )]318 code0 -[2(VPABSW xmmreg,xmmrm128 AVX,SANDYBRIDGE )]307 code0 -[2(VPABSD xmmreg,xmmrm128 AVX,SANDYBRIDGE )]296 code0 -[2(VPACKSSWB xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]285 code0 -[2(VPACKSSDW xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]274 code0 -[2(VPACKUSWB xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]263 code0 -[2(VPACKUSDW xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]252 code0 -[2(VPADDB xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]241 code0 -[2(VPADDW xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]230 code0 -[2(VPADDD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]219 code0 -[2(VPADDQ xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]208 code0 -[2(VPADDSB xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]197 code0 -[2(VPADDSW xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]186 code0 -[2(VPADDUSB xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]175 code0 -[2(VPADDUSW xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]164 code0 -[2(VPALIGNR xmmreg,xmmreg*,xmmrm128,imm8 AVX,SANDYBRIDGE )]153 code0 -[2(VPAND xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]142 code0 -[2(VPANDN xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]131 code0 -[2(VPAVGB xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]120 code0 -[2(VPAVGW xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]109 code0 -(165)pageodd -restore showpage -%%Page: 166 166 -%%BeginPageSetup -save -%%EndPageSetup -/166 pa -[2(VPBLENDVB xmmreg,xmmreg*,xmmrm128,xmmreg AVX,SANDYBRIDGE )]681 code0 -[2(VPBLENDW xmmreg,xmmreg*,xmmrm128,imm8 AVX,SANDYBRIDGE )]670 code0 -[2(VPCMPESTRI xmmreg,xmmrm128,imm8 AVX,SANDYBRIDGE )]659 code0 -[2(VPCMPESTRM xmmreg,xmmrm128,imm8 AVX,SANDYBRIDGE )]648 code0 -[2(VPCMPISTRI xmmreg,xmmrm128,imm8 AVX,SANDYBRIDGE )]637 code0 -[2(VPCMPISTRM xmmreg,xmmrm128,imm8 AVX,SANDYBRIDGE )]626 code0 -[2(VPCMPEQB xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]615 code0 -[2(VPCMPEQW xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]604 code0 -[2(VPCMPEQD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]593 code0 -[2(VPCMPEQQ xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]582 code0 -[2(VPCMPGTB xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]571 code0 -[2(VPCMPGTW xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]560 code0 -[2(VPCMPGTD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]549 code0 -[2(VPCMPGTQ xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]538 code0 -[2(VPERMILPD xmmreg,xmmreg,xmmrm128 AVX,SANDYBRIDGE )]527 code0 -[2(VPERMILPD ymmreg,ymmreg,ymmrm256 AVX,SANDYBRIDGE )]516 code0 -[2(VPERMILPD xmmreg,xmmrm128,imm8 AVX,SANDYBRIDGE )]505 code0 -[2(VPERMILPD ymmreg,ymmrm256,imm8 AVX,SANDYBRIDGE )]494 code0 -[2(VPERMILTD2PD xmmreg,xmmreg,xmmrm128,xmmreg AVX,SANDYBRIDGE )]483 code0 -[2(VPERMILTD2PD xmmreg,xmmreg,xmmreg,xmmrm128 AVX,SANDYBRIDGE )]472 code0 -[2(VPERMILTD2PD ymmreg,ymmreg,ymmrm256,ymmreg AVX,SANDYBRIDGE )]461 code0 -[2(VPERMILTD2PD ymmreg,ymmreg,ymmreg,ymmrm256 AVX,SANDYBRIDGE )]450 code0 -[2(VPERMILMO2PD xmmreg,xmmreg,xmmrm128,xmmreg AVX,SANDYBRIDGE )]439 code0 -[2(VPERMILMO2PD xmmreg,xmmreg,xmmreg,xmmrm128 AVX,SANDYBRIDGE )]428 code0 -[2(VPERMILMO2PD ymmreg,ymmreg,ymmrm256,ymmreg AVX,SANDYBRIDGE )]417 code0 -[2(VPERMILMO2PD ymmreg,ymmreg,ymmreg,ymmrm256 AVX,SANDYBRIDGE )]406 code0 -[2(VPERMILMZ2PD xmmreg,xmmreg,xmmrm128,xmmreg AVX,SANDYBRIDGE )]395 code0 -[2(VPERMILMZ2PD xmmreg,xmmreg,xmmreg,xmmrm128 AVX,SANDYBRIDGE )]384 code0 -[2(VPERMILMZ2PD ymmreg,ymmreg,ymmrm256,ymmreg AVX,SANDYBRIDGE )]373 code0 -[2(VPERMILMZ2PD ymmreg,ymmreg,ymmreg,ymmrm256 AVX,SANDYBRIDGE )]362 code0 -[2(VPERMIL2PD xmmreg,xmmreg,xmmrm128,xmmreg,imm8 AVX,SANDYBRIDGE )]351 code0 -[2(VPERMIL2PD xmmreg,xmmreg,xmmreg,xmmrm128,imm8 AVX,SANDYBRIDGE )]340 code0 -[2(VPERMIL2PD ymmreg,ymmreg,ymmrm256,ymmreg,imm8 AVX,SANDYBRIDGE )]329 code0 -[2(VPERMIL2PD ymmreg,ymmreg,ymmreg,ymmrm256,imm8 AVX,SANDYBRIDGE )]318 code0 -[2(VPERMILPS xmmreg,xmmreg,xmmrm128 AVX,SANDYBRIDGE )]307 code0 -[2(VPERMILPS ymmreg,ymmreg,ymmrm256 AVX,SANDYBRIDGE )]296 code0 -[2(VPERMILPS xmmreg,xmmrm128,imm8 AVX,SANDYBRIDGE )]285 code0 -[2(VPERMILPS ymmreg,ymmrm256,imm8 AVX,SANDYBRIDGE )]274 code0 -[2(VPERMILTD2PS xmmreg,xmmreg,xmmrm128,xmmreg AVX,SANDYBRIDGE )]263 code0 -[2(VPERMILTD2PS xmmreg,xmmreg,xmmreg,xmmrm128 AVX,SANDYBRIDGE )]252 code0 -[2(VPERMILTD2PS ymmreg,ymmreg,ymmrm256,ymmreg AVX,SANDYBRIDGE )]241 code0 -[2(VPERMILTD2PS ymmreg,ymmreg,ymmreg,ymmrm256 AVX,SANDYBRIDGE )]230 code0 -[2(VPERMILMO2PS xmmreg,xmmreg,xmmrm128,xmmreg AVX,SANDYBRIDGE )]219 code0 -[2(VPERMILMO2PS xmmreg,xmmreg,xmmreg,xmmrm128 AVX,SANDYBRIDGE )]208 code0 -[2(VPERMILMO2PS ymmreg,ymmreg,ymmrm256,ymmreg AVX,SANDYBRIDGE )]197 code0 -[2(VPERMILMO2PS ymmreg,ymmreg,ymmreg,ymmrm256 AVX,SANDYBRIDGE )]186 code0 -[2(VPERMILMZ2PS xmmreg,xmmreg,xmmrm128,xmmreg AVX,SANDYBRIDGE )]175 code0 -[2(VPERMILMZ2PS xmmreg,xmmreg,xmmreg,xmmrm128 AVX,SANDYBRIDGE )]164 code0 -[2(VPERMILMZ2PS ymmreg,ymmreg,ymmrm256,ymmreg AVX,SANDYBRIDGE )]153 code0 -[2(VPERMILMZ2PS ymmreg,ymmreg,ymmreg,ymmrm256 AVX,SANDYBRIDGE )]142 code0 -[2(VPERMIL2PS xmmreg,xmmreg,xmmrm128,xmmreg,imm8 AVX,SANDYBRIDGE )]131 code0 -[2(VPERMIL2PS xmmreg,xmmreg,xmmreg,xmmrm128,imm8 AVX,SANDYBRIDGE )]120 code0 -[2(VPERMIL2PS ymmreg,ymmreg,ymmrm256,ymmreg,imm8 AVX,SANDYBRIDGE )]109 code0 -(166)pageeven -restore showpage -%%Page: 167 167 -%%BeginPageSetup -save -%%EndPageSetup -/167 pa -[2(VPERMIL2PS ymmreg,ymmreg,ymmreg,ymmrm256,imm8 AVX,SANDYBRIDGE )]681 code0 -[2(VPERM2F128 ymmreg,ymmreg,ymmrm256,imm8 AVX,SANDYBRIDGE )]670 code0 -[2(VPEXTRB reg64,xmmreg,imm8 AVX,SANDYBRIDGE,LONG )]659 code0 -[2(VPEXTRB reg32,xmmreg,imm8 AVX,SANDYBRIDGE )]648 code0 -[2(VPEXTRB mem8,xmmreg,imm8 AVX,SANDYBRIDGE )]637 code0 -[2(VPEXTRW reg64,xmmreg,imm8 AVX,SANDYBRIDGE,LONG )]626 code0 -[2(VPEXTRW reg32,xmmreg,imm8 AVX,SANDYBRIDGE )]615 code0 -[2(VPEXTRW mem16,xmmreg,imm8 AVX,SANDYBRIDGE )]604 code0 -[2(VPEXTRW reg64,xmmreg,imm8 AVX,SANDYBRIDGE,LONG )]593 code0 -[2(VPEXTRW reg32,xmmreg,imm8 AVX,SANDYBRIDGE )]582 code0 -[2(VPEXTRW mem16,xmmreg,imm8 AVX,SANDYBRIDGE )]571 code0 -[2(VPEXTRD reg64,xmmreg,imm8 AVX,SANDYBRIDGE,LONG )]560 code0 -[2(VPEXTRD rm32,xmmreg,imm8 AVX,SANDYBRIDGE )]549 code0 -[2(VPEXTRQ rm64,xmmreg,imm8 AVX,SANDYBRIDGE,LONG )]538 code0 -[2(VPHADDW xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]527 code0 -[2(VPHADDD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]516 code0 -[2(VPHADDSW xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]505 code0 -[2(VPHMINPOSUW xmmreg,xmmrm128 AVX,SANDYBRIDGE )]494 code0 -[2(VPHSUBW xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]483 code0 -[2(VPHSUBD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]472 code0 -[2(VPHSUBSW xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]461 code0 -[2(VPINSRB xmmreg,xmmreg*,mem8,imm8 AVX,SANDYBRIDGE )]450 code0 -[2(VPINSRB xmmreg,xmmreg*,rm8,imm8 AVX,SANDYBRIDGE )]439 code0 -[2(VPINSRB xmmreg,xmmreg*,reg32,imm8 AVX,SANDYBRIDGE )]428 code0 -[2(VPINSRW xmmreg,xmmreg*,mem16,imm8 AVX,SANDYBRIDGE )]417 code0 -[2(VPINSRW xmmreg,xmmreg*,rm16,imm8 AVX,SANDYBRIDGE )]406 code0 -[2(VPINSRW xmmreg,xmmreg*,reg32,imm8 AVX,SANDYBRIDGE )]395 code0 -[2(VPINSRD xmmreg,xmmreg*,mem32,imm8 AVX,SANDYBRIDGE )]384 code0 -[2(VPINSRD xmmreg,xmmreg*,rm32,imm8 AVX,SANDYBRIDGE )]373 code0 -[2(VPINSRQ xmmreg,xmmreg*,mem64,imm8 AVX,SANDYBRIDGE,LONG )]362 code0 -[2(VPINSRQ xmmreg,xmmreg*,rm64,imm8 AVX,SANDYBRIDGE,LONG )]351 code0 -[2(VPMADDWD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]340 code0 -[2(VPMADDUBSW xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]329 code0 -[2(VPMAXSB xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]318 code0 -[2(VPMAXSW xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]307 code0 -[2(VPMAXSD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]296 code0 -[2(VPMAXUB xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]285 code0 -[2(VPMAXUW xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]274 code0 -[2(VPMAXUD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]263 code0 -[2(VPMINSB xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]252 code0 -[2(VPMINSW xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]241 code0 -[2(VPMINSD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]230 code0 -[2(VPMINUB xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]219 code0 -[2(VPMINUW xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]208 code0 -[2(VPMINUD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]197 code0 -[2(VPMOVMSKB reg64,xmmreg AVX,SANDYBRIDGE,LONG )]186 code0 -[2(VPMOVMSKB reg32,xmmreg AVX,SANDYBRIDGE )]175 code0 -[2(VPMOVSXBW xmmreg,xmmrm64 AVX,SANDYBRIDGE )]164 code0 -[2(VPMOVSXBD xmmreg,xmmrm32 AVX,SANDYBRIDGE )]153 code0 -[2(VPMOVSXBQ xmmreg,xmmrm16 AVX,SANDYBRIDGE )]142 code0 -[2(VPMOVSXWD xmmreg,xmmrm64 AVX,SANDYBRIDGE )]131 code0 -[2(VPMOVSXWQ xmmreg,xmmrm32 AVX,SANDYBRIDGE )]120 code0 -[2(VPMOVSXDQ xmmreg,xmmrm64 AVX,SANDYBRIDGE )]109 code0 -(167)pageodd -restore showpage -%%Page: 168 168 -%%BeginPageSetup -save -%%EndPageSetup -/168 pa -[2(VPMOVZXBW xmmreg,xmmrm64 AVX,SANDYBRIDGE )]681 code0 -[2(VPMOVZXBD xmmreg,xmmrm32 AVX,SANDYBRIDGE )]670 code0 -[2(VPMOVZXBQ xmmreg,xmmrm16 AVX,SANDYBRIDGE )]659 code0 -[2(VPMOVZXWD xmmreg,xmmrm64 AVX,SANDYBRIDGE )]648 code0 -[2(VPMOVZXWQ xmmreg,xmmrm32 AVX,SANDYBRIDGE )]637 code0 -[2(VPMOVZXDQ xmmreg,xmmrm64 AVX,SANDYBRIDGE )]626 code0 -[2(VPMULHUW xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]615 code0 -[2(VPMULHRSW xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]604 code0 -[2(VPMULHW xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]593 code0 -[2(VPMULLW xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]582 code0 -[2(VPMULLD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]571 code0 -[2(VPMULUDQ xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]560 code0 -[2(VPMULDQ xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]549 code0 -[2(VPOR xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]538 code0 -[2(VPSADBW xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]527 code0 -[2(VPSHUFB xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]516 code0 -[2(VPSHUFD xmmreg,xmmrm128,imm8 AVX,SANDYBRIDGE )]505 code0 -[2(VPSHUFHW xmmreg,xmmrm128,imm8 AVX,SANDYBRIDGE )]494 code0 -[2(VPSHUFLW xmmreg,xmmrm128,imm8 AVX,SANDYBRIDGE )]483 code0 -[2(VPSIGNB xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]472 code0 -[2(VPSIGNW xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]461 code0 -[2(VPSIGND xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]450 code0 -[2(VPSLLDQ xmmreg,xmmreg*,imm8 AVX,SANDYBRIDGE )]439 code0 -[2(VPSRLDQ xmmreg,xmmreg*,imm8 AVX,SANDYBRIDGE )]428 code0 -[2(VPSLLW xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]417 code0 -[2(VPSLLW xmmreg,xmmreg*,imm8 AVX,SANDYBRIDGE )]406 code0 -[2(VPSLLD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]395 code0 -[2(VPSLLD xmmreg,xmmreg*,imm8 AVX,SANDYBRIDGE )]384 code0 -[2(VPSLLQ xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]373 code0 -[2(VPSLLQ xmmreg,xmmreg*,imm8 AVX,SANDYBRIDGE )]362 code0 -[2(VPSRAW xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]351 code0 -[2(VPSRAW xmmreg,xmmreg*,imm8 AVX,SANDYBRIDGE )]340 code0 -[2(VPSRAD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]329 code0 -[2(VPSRAD xmmreg,xmmreg*,imm8 AVX,SANDYBRIDGE )]318 code0 -[2(VPSRLW xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]307 code0 -[2(VPSRLW xmmreg,xmmreg*,imm8 AVX,SANDYBRIDGE )]296 code0 -[2(VPSRLD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]285 code0 -[2(VPSRLD xmmreg,xmmreg*,imm8 AVX,SANDYBRIDGE )]274 code0 -[2(VPSRLQ xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]263 code0 -[2(VPSRLQ xmmreg,xmmreg*,imm8 AVX,SANDYBRIDGE )]252 code0 -[2(VPTEST xmmreg,xmmrm128 AVX,SANDYBRIDGE )]241 code0 -[2(VPTEST ymmreg,ymmrm256 AVX,SANDYBRIDGE )]230 code0 -[2(VPSUBB xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]219 code0 -[2(VPSUBW xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]208 code0 -[2(VPSUBD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]197 code0 -[2(VPSUBQ xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]186 code0 -[2(VPSUBSB xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]175 code0 -[2(VPSUBSW xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]164 code0 -[2(VPSUBUSB xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]153 code0 -[2(VPSUBUSW xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]142 code0 -[2(VPUNPCKHBW xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]131 code0 -[2(VPUNPCKHWD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]120 code0 -[2(VPUNPCKHDQ xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]109 code0 -(168)pageeven -restore showpage -%%Page: 169 169 -%%BeginPageSetup -save -%%EndPageSetup -/169 pa -[2(VPUNPCKHQDQ xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]681 code0 -[2(VPUNPCKLBW xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]670 code0 -[2(VPUNPCKLWD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]659 code0 -[2(VPUNPCKLDQ xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]648 code0 -[2(VPUNPCKLQDQ xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]637 code0 -[2(VPXOR xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]626 code0 -[2(VRCPPS xmmreg,xmmrm128 AVX,SANDYBRIDGE )]615 code0 -[2(VRCPPS ymmreg,ymmrm256 AVX,SANDYBRIDGE )]604 code0 -[2(VRCPSS xmmreg,xmmreg*,xmmrm32 AVX,SANDYBRIDGE )]593 code0 -[2(VRSQRTPS xmmreg,xmmrm128 AVX,SANDYBRIDGE )]582 code0 -[2(VRSQRTPS ymmreg,ymmrm256 AVX,SANDYBRIDGE )]571 code0 -[2(VRSQRTSS xmmreg,xmmreg*,xmmrm32 AVX,SANDYBRIDGE )]560 code0 -[2(VROUNDPD xmmreg,xmmrm128,imm8 AVX,SANDYBRIDGE )]549 code0 -[2(VROUNDPD ymmreg,ymmrm256,imm8 AVX,SANDYBRIDGE )]538 code0 -[2(VROUNDPS xmmreg,xmmrm128,imm8 AVX,SANDYBRIDGE )]527 code0 -[2(VROUNDPS ymmreg,ymmrm256,imm8 AVX,SANDYBRIDGE )]516 code0 -[2(VROUNDSD xmmreg,xmmreg*,xmmrm64,imm8 AVX,SANDYBRIDGE )]505 code0 -[2(VROUNDSS xmmreg,xmmreg*,xmmrm32,imm8 AVX,SANDYBRIDGE )]494 code0 -[2(VSHUFPD xmmreg,xmmreg*,xmmrm128,imm8 AVX,SANDYBRIDGE )]483 code0 -[2(VSHUFPD ymmreg,ymmreg*,ymmrm256,imm8 AVX,SANDYBRIDGE )]472 code0 -[2(VSHUFPS xmmreg,xmmreg*,xmmrm128,imm8 AVX,SANDYBRIDGE )]461 code0 -[2(VSHUFPS ymmreg,ymmreg*,ymmrm256,imm8 AVX,SANDYBRIDGE )]450 code0 -[2(VSQRTPD xmmreg,xmmrm128 AVX,SANDYBRIDGE )]439 code0 -[2(VSQRTPD ymmreg,ymmrm256 AVX,SANDYBRIDGE )]428 code0 -[2(VSQRTPS xmmreg,xmmrm128 AVX,SANDYBRIDGE )]417 code0 -[2(VSQRTPS ymmreg,ymmrm256 AVX,SANDYBRIDGE )]406 code0 -[2(VSQRTSD xmmreg,xmmreg*,xmmrm64 AVX,SANDYBRIDGE )]395 code0 -[2(VSQRTSS xmmreg,xmmreg*,xmmrm32 AVX,SANDYBRIDGE )]384 code0 -[2(VSTMXCSR mem32 AVX,SANDYBRIDGE )]373 code0 -[2(VSUBPD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]362 code0 -[2(VSUBPD ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]351 code0 -[2(VSUBPS xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]340 code0 -[2(VSUBPS ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]329 code0 -[2(VSUBSD xmmreg,xmmreg*,xmmrm64 AVX,SANDYBRIDGE )]318 code0 -[2(VSUBSS xmmreg,xmmreg*,xmmrm32 AVX,SANDYBRIDGE )]307 code0 -[2(VTESTPS xmmreg,xmmrm128 AVX,SANDYBRIDGE )]296 code0 -[2(VTESTPS ymmreg,ymmrm256 AVX,SANDYBRIDGE )]285 code0 -[2(VTESTPD xmmreg,xmmrm128 AVX,SANDYBRIDGE )]274 code0 -[2(VTESTPD ymmreg,ymmrm256 AVX,SANDYBRIDGE )]263 code0 -[2(VUCOMISD xmmreg,xmmrm64 AVX,SANDYBRIDGE )]252 code0 -[2(VUCOMISS xmmreg,xmmrm32 AVX,SANDYBRIDGE )]241 code0 -[2(VUNPCKHPD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]230 code0 -[2(VUNPCKHPD ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]219 code0 -[2(VUNPCKHPS xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]208 code0 -[2(VUNPCKHPS ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]197 code0 -[2(VUNPCKLPD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]186 code0 -[2(VUNPCKLPD ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]175 code0 -[2(VUNPCKLPS xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]164 code0 -[2(VUNPCKLPS ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]153 code0 -[2(VXORPD xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]142 code0 -[2(VXORPD ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]131 code0 -[2(VXORPS xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]120 code0 -[2(VXORPS ymmreg,ymmreg*,ymmrm256 AVX,SANDYBRIDGE )]109 code0 -(169)pageodd -restore showpage -%%Page: 170 170 -%%BeginPageSetup -save -%%EndPageSetup -/170 pa -[2(VZEROALL AVX,SANDYBRIDGE )]681 code0 -[2(VZEROUPPER AVX,SANDYBRIDGE)]670 code2 -[{/section-B.1.26 xa}(Intel Carry-Less Multiplication instructions \(CLMUL\))](B.1.26)650.8 subh3 -[2(PCLMULLQLQDQ xmmreg,xmmrm128 SSE,WESTMERE )]633.8 code1 -[2(PCLMULHQLQDQ xmmreg,xmmrm128 SSE,WESTMERE )]622.8 code0 -[2(PCLMULLQHQDQ xmmreg,xmmrm128 SSE,WESTMERE )]611.8 code0 -[2(PCLMULHQHQDQ xmmreg,xmmrm128 SSE,WESTMERE )]600.8 code0 -[2(PCLMULQDQ xmmreg,xmmrm128,imm8 SSE,WESTMERE)]589.8 code2 -[{/section-B.1.27 xa}(Intel AVX Carry-Less Multiplication instructions \(CLMUL\))](B.1.27)570.6 subh3 -[2(VPCLMULLQLQDQ xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]553.6 code1 -[2(VPCLMULHQLQDQ xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]542.6 code0 -[2(VPCLMULLQHQDQ xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]531.6 code0 -[2(VPCLMULHQHQDQ xmmreg,xmmreg*,xmmrm128 AVX,SANDYBRIDGE )]520.6 code0 -[2(VPCLMULQDQ xmmreg,xmmreg*,xmmrm128,imm8 AVX,SANDYBRIDGE)]509.6 code2 -[{/section-B.1.28 xa}(Intel Fused Multiply-Add instructions \(FMA\))](B.1.28)490.4 subh3 -[2(VFMADD132PS xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]473.4 code1 -[2(VFMADD132PS ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]462.4 code0 -[2(VFMADD132PD xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]451.4 code0 -[2(VFMADD132PD ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]440.4 code0 -[2(VFMADD312PS xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]429.4 code0 -[2(VFMADD312PS ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]418.4 code0 -[2(VFMADD312PD xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]407.4 code0 -[2(VFMADD312PD ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]396.4 code0 -[2(VFMADD213PS xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]385.4 code0 -[2(VFMADD213PS ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]374.4 code0 -[2(VFMADD213PD xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]363.4 code0 -[2(VFMADD213PD ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]352.4 code0 -[2(VFMADD123PS xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]341.4 code0 -[2(VFMADD123PS ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]330.4 code0 -[2(VFMADD123PD xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]319.4 code0 -[2(VFMADD123PD ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]308.4 code0 -[2(VFMADD231PS xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]297.4 code0 -[2(VFMADD231PS ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]286.4 code0 -[2(VFMADD231PD xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]275.4 code0 -[2(VFMADD231PD ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]264.4 code0 -[2(VFMADD321PS xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]253.4 code0 -[2(VFMADD321PS ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]242.4 code0 -[2(VFMADD321PD xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]231.4 code0 -[2(VFMADD321PD ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]220.4 code0 -[2(VFMADDSUB132PS xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]209.4 code0 -[2(VFMADDSUB132PS ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]198.4 code0 -[2(VFMADDSUB132PD xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]187.4 code0 -[2(VFMADDSUB132PD ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]176.4 code0 -[2(VFMADDSUB312PS xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]165.4 code0 -[2(VFMADDSUB312PS ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]154.4 code0 -[2(VFMADDSUB312PD xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]143.4 code0 -[2(VFMADDSUB312PD ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]132.4 code0 -[2(VFMADDSUB213PS xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]121.4 code0 -[2(VFMADDSUB213PS ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]110.4 code0 -(170)pageeven -restore showpage -%%Page: 171 171 -%%BeginPageSetup -save -%%EndPageSetup -/171 pa -[2(VFMADDSUB213PD xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]681 code0 -[2(VFMADDSUB213PD ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]670 code0 -[2(VFMADDSUB123PS xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]659 code0 -[2(VFMADDSUB123PS ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]648 code0 -[2(VFMADDSUB123PD xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]637 code0 -[2(VFMADDSUB123PD ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]626 code0 -[2(VFMADDSUB231PS xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]615 code0 -[2(VFMADDSUB231PS ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]604 code0 -[2(VFMADDSUB231PD xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]593 code0 -[2(VFMADDSUB231PD ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]582 code0 -[2(VFMADDSUB321PS xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]571 code0 -[2(VFMADDSUB321PS ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]560 code0 -[2(VFMADDSUB321PD xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]549 code0 -[2(VFMADDSUB321PD ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]538 code0 -[2(VFMSUB132PS xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]527 code0 -[2(VFMSUB132PS ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]516 code0 -[2(VFMSUB132PD xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]505 code0 -[2(VFMSUB132PD ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]494 code0 -[2(VFMSUB312PS xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]483 code0 -[2(VFMSUB312PS ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]472 code0 -[2(VFMSUB312PD xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]461 code0 -[2(VFMSUB312PD ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]450 code0 -[2(VFMSUB213PS xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]439 code0 -[2(VFMSUB213PS ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]428 code0 -[2(VFMSUB213PD xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]417 code0 -[2(VFMSUB213PD ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]406 code0 -[2(VFMSUB123PS xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]395 code0 -[2(VFMSUB123PS ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]384 code0 -[2(VFMSUB123PD xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]373 code0 -[2(VFMSUB123PD ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]362 code0 -[2(VFMSUB231PS xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]351 code0 -[2(VFMSUB231PS ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]340 code0 -[2(VFMSUB231PD xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]329 code0 -[2(VFMSUB231PD ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]318 code0 -[2(VFMSUB321PS xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]307 code0 -[2(VFMSUB321PS ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]296 code0 -[2(VFMSUB321PD xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]285 code0 -[2(VFMSUB321PD ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]274 code0 -[2(VFMSUBADD132PS xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]263 code0 -[2(VFMSUBADD132PS ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]252 code0 -[2(VFMSUBADD132PD xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]241 code0 -[2(VFMSUBADD132PD ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]230 code0 -[2(VFMSUBADD312PS xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]219 code0 -[2(VFMSUBADD312PS ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]208 code0 -[2(VFMSUBADD312PD xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]197 code0 -[2(VFMSUBADD312PD ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]186 code0 -[2(VFMSUBADD213PS xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]175 code0 -[2(VFMSUBADD213PS ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]164 code0 -[2(VFMSUBADD213PD xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]153 code0 -[2(VFMSUBADD213PD ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]142 code0 -[2(VFMSUBADD123PS xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]131 code0 -[2(VFMSUBADD123PS ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]120 code0 -[2(VFMSUBADD123PD xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]109 code0 -(171)pageodd -restore showpage -%%Page: 172 172 -%%BeginPageSetup -save -%%EndPageSetup -/172 pa -[2(VFMSUBADD123PD ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]681 code0 -[2(VFMSUBADD231PS xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]670 code0 -[2(VFMSUBADD231PS ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]659 code0 -[2(VFMSUBADD231PD xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]648 code0 -[2(VFMSUBADD231PD ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]637 code0 -[2(VFMSUBADD321PS xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]626 code0 -[2(VFMSUBADD321PS ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]615 code0 -[2(VFMSUBADD321PD xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]604 code0 -[2(VFMSUBADD321PD ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]593 code0 -[2(VFNMADD132PS xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]582 code0 -[2(VFNMADD132PS ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]571 code0 -[2(VFNMADD132PD xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]560 code0 -[2(VFNMADD132PD ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]549 code0 -[2(VFNMADD312PS xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]538 code0 -[2(VFNMADD312PS ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]527 code0 -[2(VFNMADD312PD xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]516 code0 -[2(VFNMADD312PD ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]505 code0 -[2(VFNMADD213PS xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]494 code0 -[2(VFNMADD213PS ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]483 code0 -[2(VFNMADD213PD xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]472 code0 -[2(VFNMADD213PD ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]461 code0 -[2(VFNMADD123PS xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]450 code0 -[2(VFNMADD123PS ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]439 code0 -[2(VFNMADD123PD xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]428 code0 -[2(VFNMADD123PD ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]417 code0 -[2(VFNMADD231PS xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]406 code0 -[2(VFNMADD231PS ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]395 code0 -[2(VFNMADD231PD xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]384 code0 -[2(VFNMADD231PD ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]373 code0 -[2(VFNMADD321PS xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]362 code0 -[2(VFNMADD321PS ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]351 code0 -[2(VFNMADD321PD xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]340 code0 -[2(VFNMADD321PD ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]329 code0 -[2(VFNMSUB132PS xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]318 code0 -[2(VFNMSUB132PS ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]307 code0 -[2(VFNMSUB132PD xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]296 code0 -[2(VFNMSUB132PD ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]285 code0 -[2(VFNMSUB312PS xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]274 code0 -[2(VFNMSUB312PS ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]263 code0 -[2(VFNMSUB312PD xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]252 code0 -[2(VFNMSUB312PD ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]241 code0 -[2(VFNMSUB213PS xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]230 code0 -[2(VFNMSUB213PS ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]219 code0 -[2(VFNMSUB213PD xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]208 code0 -[2(VFNMSUB213PD ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]197 code0 -[2(VFNMSUB123PS xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]186 code0 -[2(VFNMSUB123PS ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]175 code0 -[2(VFNMSUB123PD xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]164 code0 -[2(VFNMSUB123PD ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]153 code0 -[2(VFNMSUB231PS xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]142 code0 -[2(VFNMSUB231PS ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]131 code0 -[2(VFNMSUB231PD xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]120 code0 -[2(VFNMSUB231PD ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]109 code0 -(172)pageeven -restore showpage -%%Page: 173 173 -%%BeginPageSetup -save -%%EndPageSetup -/173 pa -[2(VFNMSUB321PS xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]681 code0 -[2(VFNMSUB321PS ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]670 code0 -[2(VFNMSUB321PD xmmreg,xmmreg,xmmrm128 FMA,FUTURE )]659 code0 -[2(VFNMSUB321PD ymmreg,ymmreg,ymmrm256 FMA,FUTURE )]648 code0 -[2(VFMADD132SS xmmreg,xmmreg,xmmrm32 FMA,FUTURE )]637 code0 -[2(VFMADD132SD xmmreg,xmmreg,xmmrm64 FMA,FUTURE )]626 code0 -[2(VFMADD312SS xmmreg,xmmreg,xmmrm32 FMA,FUTURE )]615 code0 -[2(VFMADD312SD xmmreg,xmmreg,xmmrm64 FMA,FUTURE )]604 code0 -[2(VFMADD213SS xmmreg,xmmreg,xmmrm32 FMA,FUTURE )]593 code0 -[2(VFMADD213SD xmmreg,xmmreg,xmmrm64 FMA,FUTURE )]582 code0 -[2(VFMADD123SS xmmreg,xmmreg,xmmrm32 FMA,FUTURE )]571 code0 -[2(VFMADD123SD xmmreg,xmmreg,xmmrm64 FMA,FUTURE )]560 code0 -[2(VFMADD231SS xmmreg,xmmreg,xmmrm32 FMA,FUTURE )]549 code0 -[2(VFMADD231SD xmmreg,xmmreg,xmmrm64 FMA,FUTURE )]538 code0 -[2(VFMADD321SS xmmreg,xmmreg,xmmrm32 FMA,FUTURE )]527 code0 -[2(VFMADD321SD xmmreg,xmmreg,xmmrm64 FMA,FUTURE )]516 code0 -[2(VFMSUB132SS xmmreg,xmmreg,xmmrm32 FMA,FUTURE )]505 code0 -[2(VFMSUB132SD xmmreg,xmmreg,xmmrm64 FMA,FUTURE )]494 code0 -[2(VFMSUB312SS xmmreg,xmmreg,xmmrm32 FMA,FUTURE )]483 code0 -[2(VFMSUB312SD xmmreg,xmmreg,xmmrm64 FMA,FUTURE )]472 code0 -[2(VFMSUB213SS xmmreg,xmmreg,xmmrm32 FMA,FUTURE )]461 code0 -[2(VFMSUB213SD xmmreg,xmmreg,xmmrm64 FMA,FUTURE )]450 code0 -[2(VFMSUB123SS xmmreg,xmmreg,xmmrm32 FMA,FUTURE )]439 code0 -[2(VFMSUB123SD xmmreg,xmmreg,xmmrm64 FMA,FUTURE )]428 code0 -[2(VFMSUB231SS xmmreg,xmmreg,xmmrm32 FMA,FUTURE )]417 code0 -[2(VFMSUB231SD xmmreg,xmmreg,xmmrm64 FMA,FUTURE )]406 code0 -[2(VFMSUB321SS xmmreg,xmmreg,xmmrm32 FMA,FUTURE )]395 code0 -[2(VFMSUB321SD xmmreg,xmmreg,xmmrm64 FMA,FUTURE )]384 code0 -[2(VFNMADD132SS xmmreg,xmmreg,xmmrm32 FMA,FUTURE )]373 code0 -[2(VFNMADD132SD xmmreg,xmmreg,xmmrm64 FMA,FUTURE )]362 code0 -[2(VFNMADD312SS xmmreg,xmmreg,xmmrm32 FMA,FUTURE )]351 code0 -[2(VFNMADD312SD xmmreg,xmmreg,xmmrm64 FMA,FUTURE )]340 code0 -[2(VFNMADD213SS xmmreg,xmmreg,xmmrm32 FMA,FUTURE )]329 code0 -[2(VFNMADD213SD xmmreg,xmmreg,xmmrm64 FMA,FUTURE )]318 code0 -[2(VFNMADD123SS xmmreg,xmmreg,xmmrm32 FMA,FUTURE )]307 code0 -[2(VFNMADD123SD xmmreg,xmmreg,xmmrm64 FMA,FUTURE )]296 code0 -[2(VFNMADD231SS xmmreg,xmmreg,xmmrm32 FMA,FUTURE )]285 code0 -[2(VFNMADD231SD xmmreg,xmmreg,xmmrm64 FMA,FUTURE )]274 code0 -[2(VFNMADD321SS xmmreg,xmmreg,xmmrm32 FMA,FUTURE )]263 code0 -[2(VFNMADD321SD xmmreg,xmmreg,xmmrm64 FMA,FUTURE )]252 code0 -[2(VFNMSUB132SS xmmreg,xmmreg,xmmrm32 FMA,FUTURE )]241 code0 -[2(VFNMSUB132SD xmmreg,xmmreg,xmmrm64 FMA,FUTURE )]230 code0 -[2(VFNMSUB312SS xmmreg,xmmreg,xmmrm32 FMA,FUTURE )]219 code0 -[2(VFNMSUB312SD xmmreg,xmmreg,xmmrm64 FMA,FUTURE )]208 code0 -[2(VFNMSUB213SS xmmreg,xmmreg,xmmrm32 FMA,FUTURE )]197 code0 -[2(VFNMSUB213SD xmmreg,xmmreg,xmmrm64 FMA,FUTURE )]186 code0 -[2(VFNMSUB123SS xmmreg,xmmreg,xmmrm32 FMA,FUTURE )]175 code0 -[2(VFNMSUB123SD xmmreg,xmmreg,xmmrm64 FMA,FUTURE )]164 code0 -[2(VFNMSUB231SS xmmreg,xmmreg,xmmrm32 FMA,FUTURE )]153 code0 -[2(VFNMSUB231SD xmmreg,xmmreg,xmmrm64 FMA,FUTURE )]142 code0 -[2(VFNMSUB321SS xmmreg,xmmreg,xmmrm32 FMA,FUTURE )]131 code0 -[2(VFNMSUB321SD xmmreg,xmmreg,xmmrm64 FMA,FUTURE)]120 code2 -(173)pageodd -restore showpage -%%Page: 174 174 -%%BeginPageSetup -save -%%EndPageSetup -/174 pa -[{/section-B.1.29 xa}(VIA \(Centaur\) security instructions)](B.1.29)678.8 subh3 -[2(XSTORE PENT,CYRIX )]661.8 code1 -[2(XCRYPTECB PENT,CYRIX )]650.8 code0 -[2(XCRYPTCBC PENT,CYRIX )]639.8 code0 -[2(XCRYPTCTR PENT,CYRIX )]628.8 code0 -[2(XCRYPTCFB PENT,CYRIX )]617.8 code0 -[2(XCRYPTOFB PENT,CYRIX )]606.8 code0 -[2(MONTMUL PENT,CYRIX )]595.8 code0 -[2(XSHA1 PENT,CYRIX )]584.8 code0 -[2(XSHA256 PENT,CYRIX)]573.8 code2 -[{/section-B.1.30 xa}(AMD Lightweight Profiling \(LWP\) instructions)](B.1.30)554.6 subh3 -[2(LLWPCB reg16 AMD )]537.6 code1 -[2(LLWPCB reg32 AMD,386 )]526.6 code0 -[2(LLWPCB reg64 AMD,X64 )]515.6 code0 -[2(SLWPCB reg16 AMD )]504.6 code0 -[2(SLWPCB reg32 AMD,386 )]493.6 code0 -[2(SLWPCB reg64 AMD,X64 )]482.6 code0 -[2(LWPVAL reg16,rm32,imm16 AMD,386 )]471.6 code0 -[2(LWPVAL reg32,rm32,imm32 AMD,386 )]460.6 code0 -[2(LWPVAL reg64,rm32,imm32 AMD,X64 )]449.6 code0 -[2(LWPINS reg16,rm32,imm16 AMD,386 )]438.6 code0 -[2(LWPINS reg32,rm32,imm32 AMD,386 )]427.6 code0 -[2(LWPINS reg64,rm32,imm32 AMD,X64)]416.6 code2 -[{/section-B.1.31 xa}(AMD XOP, FMA4 and CVT16 instructions \(SSE5\))](B.1.31)397.4 subh3 -[2(VCVTPH2PS xmmreg,xmmrm64*,imm8 AMD,SSE5 )]380.4 code1 -[2(VCVTPH2PS ymmreg,xmmrm128,imm8 AMD,SSE5 )]369.4 code0 -[2(VCVTPH2PS ymmreg,ymmrm128*,imm8 AMD,SSE5 )]358.4 code0 -[2(VCVTPS2PH xmmrm64,xmmreg*,imm8 AMD,SSE5 )]347.4 code0 -[2(VCVTPS2PH xmmrm128,ymmreg,imm8 AMD,SSE5 )]336.4 code0 -[2(VCVTPS2PH ymmrm128,ymmreg*,imm8 AMD,SSE5 )]325.4 code0 -[2(VFMADDPD xmmreg,xmmreg*,xmmrm128,xmmreg AMD,SSE5 )]314.4 code0 -[2(VFMADDPD ymmreg,ymmreg*,ymmrm256,ymmreg AMD,SSE5 )]303.4 code0 -[2(VFMADDPD xmmreg,xmmreg*,xmmreg,xmmrm128 AMD,SSE5 )]292.4 code0 -[2(VFMADDPD ymmreg,ymmreg*,ymmreg,ymmrm256 AMD,SSE5 )]281.4 code0 -[2(VFMADDPS xmmreg,xmmreg*,xmmrm128,xmmreg AMD,SSE5 )]270.4 code0 -[2(VFMADDPS ymmreg,ymmreg*,ymmrm256,ymmreg AMD,SSE5 )]259.4 code0 -[2(VFMADDPS xmmreg,xmmreg*,xmmreg,xmmrm128 AMD,SSE5 )]248.4 code0 -[2(VFMADDPS ymmreg,ymmreg*,ymmreg,ymmrm256 AMD,SSE5 )]237.4 code0 -[2(VFMADDSD xmmreg,xmmreg*,xmmrm64,xmmreg AMD,SSE5 )]226.4 code0 -[2(VFMADDSD xmmreg,xmmreg*,xmmreg,xmmrm64 AMD,SSE5 )]215.4 code0 -[2(VFMADDSS xmmreg,xmmreg*,xmmrm32,xmmreg AMD,SSE5 )]204.4 code0 -[2(VFMADDSS xmmreg,xmmreg*,xmmreg,xmmrm32 AMD,SSE5 )]193.4 code0 -[2(VFMADDSUBPD xmmreg,xmmreg*,xmmrm128,xmmreg AMD,SSE5 )]182.4 code0 -[2(VFMADDSUBPD ymmreg,ymmreg*,ymmrm256,ymmreg AMD,SSE5 )]171.4 code0 -[2(VFMADDSUBPD xmmreg,xmmreg*,xmmreg,xmmrm128 AMD,SSE5 )]160.4 code0 -[2(VFMADDSUBPD ymmreg,ymmreg*,ymmreg,ymmrm256 AMD,SSE5 )]149.4 code0 -[2(VFMADDSUBPS xmmreg,xmmreg*,xmmrm128,xmmreg AMD,SSE5 )]138.4 code0 -[2(VFMADDSUBPS ymmreg,ymmreg*,ymmrm256,ymmreg AMD,SSE5 )]127.4 code0 -[2(VFMADDSUBPS xmmreg,xmmreg*,xmmreg,xmmrm128 AMD,SSE5 )]116.4 code0 -[2(VFMADDSUBPS ymmreg,ymmreg*,ymmreg,ymmrm256 AMD,SSE5 )]105.4 code0 -(174)pageeven -restore showpage -%%Page: 175 175 -%%BeginPageSetup -save -%%EndPageSetup -/175 pa -[2(VFMSUBADDPD xmmreg,xmmreg*,xmmrm128,xmmreg AMD,SSE5 )]681 code0 -[2(VFMSUBADDPD ymmreg,ymmreg*,ymmrm256,ymmreg AMD,SSE5 )]670 code0 -[2(VFMSUBADDPD xmmreg,xmmreg*,xmmreg,xmmrm128 AMD,SSE5 )]659 code0 -[2(VFMSUBADDPD ymmreg,ymmreg*,ymmreg,ymmrm256 AMD,SSE5 )]648 code0 -[2(VFMSUBADDPS xmmreg,xmmreg*,xmmrm128,xmmreg AMD,SSE5 )]637 code0 -[2(VFMSUBADDPS ymmreg,ymmreg*,ymmrm256,ymmreg AMD,SSE5 )]626 code0 -[2(VFMSUBADDPS xmmreg,xmmreg*,xmmreg,xmmrm128 AMD,SSE5 )]615 code0 -[2(VFMSUBADDPS ymmreg,ymmreg*,ymmreg,ymmrm256 AMD,SSE5 )]604 code0 -[2(VFMSUBPD xmmreg,xmmreg*,xmmrm128,xmmreg AMD,SSE5 )]593 code0 -[2(VFMSUBPD ymmreg,ymmreg*,ymmrm256,ymmreg AMD,SSE5 )]582 code0 -[2(VFMSUBPD xmmreg,xmmreg*,xmmreg,xmmrm128 AMD,SSE5 )]571 code0 -[2(VFMSUBPD ymmreg,ymmreg*,ymmreg,ymmrm256 AMD,SSE5 )]560 code0 -[2(VFMSUBPS xmmreg,xmmreg*,xmmrm128,xmmreg AMD,SSE5 )]549 code0 -[2(VFMSUBPS ymmreg,ymmreg*,ymmrm256,ymmreg AMD,SSE5 )]538 code0 -[2(VFMSUBPS xmmreg,xmmreg*,xmmreg,xmmrm128 AMD,SSE5 )]527 code0 -[2(VFMSUBPS ymmreg,ymmreg*,ymmreg,ymmrm256 AMD,SSE5 )]516 code0 -[2(VFMSUBSD xmmreg,xmmreg*,xmmrm64,xmmreg AMD,SSE5 )]505 code0 -[2(VFMSUBSD xmmreg,xmmreg*,xmmreg,xmmrm64 AMD,SSE5 )]494 code0 -[2(VFMSUBSS xmmreg,xmmreg*,xmmrm32,xmmreg AMD,SSE5 )]483 code0 -[2(VFMSUBSS xmmreg,xmmreg*,xmmreg,xmmrm32 AMD,SSE5 )]472 code0 -[2(VFNMADDPD xmmreg,xmmreg*,xmmrm128,xmmreg AMD,SSE5 )]461 code0 -[2(VFNMADDPD ymmreg,ymmreg*,ymmrm256,ymmreg AMD,SSE5 )]450 code0 -[2(VFNMADDPD xmmreg,xmmreg*,xmmreg,xmmrm128 AMD,SSE5 )]439 code0 -[2(VFNMADDPD ymmreg,ymmreg*,ymmreg,ymmrm256 AMD,SSE5 )]428 code0 -[2(VFNMADDPS xmmreg,xmmreg*,xmmrm128,xmmreg AMD,SSE5 )]417 code0 -[2(VFNMADDPS ymmreg,ymmreg*,ymmrm256,ymmreg AMD,SSE5 )]406 code0 -[2(VFNMADDPS xmmreg,xmmreg*,xmmreg,xmmrm128 AMD,SSE5 )]395 code0 -[2(VFNMADDPS ymmreg,ymmreg*,ymmreg,ymmrm256 AMD,SSE5 )]384 code0 -[2(VFNMADDSD xmmreg,xmmreg*,xmmrm64,xmmreg AMD,SSE5 )]373 code0 -[2(VFNMADDSD xmmreg,xmmreg*,xmmreg,xmmrm64 AMD,SSE5 )]362 code0 -[2(VFNMADDSS xmmreg,xmmreg*,xmmrm32,xmmreg AMD,SSE5 )]351 code0 -[2(VFNMADDSS xmmreg,xmmreg*,xmmreg,xmmrm32 AMD,SSE5 )]340 code0 -[2(VFNMSUBPD xmmreg,xmmreg*,xmmrm128,xmmreg AMD,SSE5 )]329 code0 -[2(VFNMSUBPD ymmreg,ymmreg*,ymmrm256,ymmreg AMD,SSE5 )]318 code0 -[2(VFNMSUBPD xmmreg,xmmreg*,xmmreg,xmmrm128 AMD,SSE5 )]307 code0 -[2(VFNMSUBPD ymmreg,ymmreg*,ymmreg,ymmrm256 AMD,SSE5 )]296 code0 -[2(VFNMSUBPS xmmreg,xmmreg*,xmmrm128,xmmreg AMD,SSE5 )]285 code0 -[2(VFNMSUBPS ymmreg,ymmreg*,ymmrm256,ymmreg AMD,SSE5 )]274 code0 -[2(VFNMSUBPS xmmreg,xmmreg*,xmmreg,xmmrm128 AMD,SSE5 )]263 code0 -[2(VFNMSUBPS ymmreg,ymmreg*,ymmreg,ymmrm256 AMD,SSE5 )]252 code0 -[2(VFNMSUBSD xmmreg,xmmreg*,xmmrm64,xmmreg AMD,SSE5 )]241 code0 -[2(VFNMSUBSD xmmreg,xmmreg*,xmmreg,xmmrm64 AMD,SSE5 )]230 code0 -[2(VFNMSUBSS xmmreg,xmmreg*,xmmrm32,xmmreg AMD,SSE5 )]219 code0 -[2(VFNMSUBSS xmmreg,xmmreg*,xmmreg,xmmrm32 AMD,SSE5 )]208 code0 -[2(VFRCZPD xmmreg,xmmrm128* AMD,SSE5 )]197 code0 -[2(VFRCZPD ymmreg,ymmrm256* AMD,SSE5 )]186 code0 -[2(VFRCZPS xmmreg,xmmrm128* AMD,SSE5 )]175 code0 -[2(VFRCZPS ymmreg,ymmrm256* AMD,SSE5 )]164 code0 -[2(VFRCZSD xmmreg,xmmrm64* AMD,SSE5 )]153 code0 -[2(VFRCZSS xmmreg,xmmrm32* AMD,SSE5 )]142 code0 -[2(VPCMOV xmmreg,xmmreg*,xmmrm128,xmmreg AMD,SSE5 )]131 code0 -[2(VPCMOV ymmreg,ymmreg*,ymmrm256,ymmreg AMD,SSE5 )]120 code0 -[2(VPCMOV xmmreg,xmmreg*,xmmreg,xmmrm128 AMD,SSE5 )]109 code0 -(175)pageodd -restore showpage -%%Page: 176 176 -%%BeginPageSetup -save -%%EndPageSetup -/176 pa -[2(VPCMOV ymmreg,ymmreg*,ymmreg,ymmrm256 AMD,SSE5 )]681 code0 -[2(VPCOMB xmmreg,xmmreg*,xmmrm128,imm8 AMD,SSE5 )]670 code0 -[2(VPCOMD xmmreg,xmmreg*,xmmrm128,imm8 AMD,SSE5 )]659 code0 -[2(VPCOMQ xmmreg,xmmreg*,xmmrm128,imm8 AMD,SSE5 )]648 code0 -[2(VPCOMUB xmmreg,xmmreg*,xmmrm128,imm8 AMD,SSE5 )]637 code0 -[2(VPCOMUD xmmreg,xmmreg*,xmmrm128,imm8 AMD,SSE5 )]626 code0 -[2(VPCOMUQ xmmreg,xmmreg*,xmmrm128,imm8 AMD,SSE5 )]615 code0 -[2(VPCOMUW xmmreg,xmmreg*,xmmrm128,imm8 AMD,SSE5 )]604 code0 -[2(VPCOMW xmmreg,xmmreg*,xmmrm128,imm8 AMD,SSE5 )]593 code0 -[2(VPHADDBD xmmreg,xmmrm128* AMD,SSE5 )]582 code0 -[2(VPHADDBQ xmmreg,xmmrm128* AMD,SSE5 )]571 code0 -[2(VPHADDBW xmmreg,xmmrm128* AMD,SSE5 )]560 code0 -[2(VPHADDDQ xmmreg,xmmrm128* AMD,SSE5 )]549 code0 -[2(VPHADDUBD xmmreg,xmmrm128* AMD,SSE5 )]538 code0 -[2(VPHADDUBQ xmmreg,xmmrm128* AMD,SSE5 )]527 code0 -[2(VPHADDUBW xmmreg,xmmrm128* AMD,SSE5 )]516 code0 -[2(VPHADDUDQ xmmreg,xmmrm128* AMD,SSE5 )]505 code0 -[2(VPHADDUWD xmmreg,xmmrm128* AMD,SSE5 )]494 code0 -[2(VPHADDUWQ xmmreg,xmmrm128* AMD,SSE5 )]483 code0 -[2(VPHADDWD xmmreg,xmmrm128* AMD,SSE5 )]472 code0 -[2(VPHADDWQ xmmreg,xmmrm128* AMD,SSE5 )]461 code0 -[2(VPHSUBBW xmmreg,xmmrm128* AMD,SSE5 )]450 code0 -[2(VPHSUBDQ xmmreg,xmmrm128* AMD,SSE5 )]439 code0 -[2(VPHSUBWD xmmreg,xmmrm128* AMD,SSE5 )]428 code0 -[2(VPMACSDD xmmreg,xmmreg*,xmmrm128,xmmreg AMD,SSE5 )]417 code0 -[2(VPMACSDQH xmmreg,xmmreg*,xmmrm128,xmmreg AMD,SSE5 )]406 code0 -[2(VPMACSDQL xmmreg,xmmreg*,xmmrm128,xmmreg AMD,SSE5 )]395 code0 -[2(VPMACSSDD xmmreg,xmmreg*,xmmrm128,xmmreg AMD,SSE5 )]384 code0 -[2(VPMACSSDQH xmmreg,xmmreg*,xmmrm128,xmmreg AMD,SSE5 )]373 code0 -[2(VPMACSSDQL xmmreg,xmmreg*,xmmrm128,xmmreg AMD,SSE5 )]362 code0 -[2(VPMACSSWD xmmreg,xmmreg*,xmmrm128,xmmreg AMD,SSE5 )]351 code0 -[2(VPMACSSWW xmmreg,xmmreg*,xmmrm128,xmmreg AMD,SSE5 )]340 code0 -[2(VPMACSWD xmmreg,xmmreg*,xmmrm128,xmmreg AMD,SSE5 )]329 code0 -[2(VPMACSWW xmmreg,xmmreg*,xmmrm128,xmmreg AMD,SSE5 )]318 code0 -[2(VPMADCSSWD xmmreg,xmmreg*,xmmrm128,xmmreg AMD,SSE5 )]307 code0 -[2(VPMADCSWD xmmreg,xmmreg*,xmmrm128,xmmreg AMD,SSE5 )]296 code0 -[2(VPPERM xmmreg,xmmreg*,xmmreg,xmmrm128 AMD,SSE5 )]285 code0 -[2(VPPERM xmmreg,xmmreg*,xmmrm128,xmmreg AMD,SSE5 )]274 code0 -[2(VPROTB xmmreg,xmmrm128*,xmmreg AMD,SSE5 )]263 code0 -[2(VPROTB xmmreg,xmmreg*,xmmrm128 AMD,SSE5 )]252 code0 -[2(VPROTB xmmreg,xmmrm128*,imm8 AMD,SSE5 )]241 code0 -[2(VPROTD xmmreg,xmmrm128*,xmmreg AMD,SSE5 )]230 code0 -[2(VPROTD xmmreg,xmmreg*,xmmrm128 AMD,SSE5 )]219 code0 -[2(VPROTD xmmreg,xmmrm128*,imm8 AMD,SSE5 )]208 code0 -[2(VPROTQ xmmreg,xmmrm128*,xmmreg AMD,SSE5 )]197 code0 -[2(VPROTQ xmmreg,xmmreg*,xmmrm128 AMD,SSE5 )]186 code0 -[2(VPROTQ xmmreg,xmmrm128*,imm8 AMD,SSE5 )]175 code0 -[2(VPROTW xmmreg,xmmrm128*,xmmreg AMD,SSE5 )]164 code0 -[2(VPROTW xmmreg,xmmreg*,xmmrm128 AMD,SSE5 )]153 code0 -[2(VPROTW xmmreg,xmmrm128*,imm8 AMD,SSE5 )]142 code0 -[2(VPSHAB xmmreg,xmmrm128*,xmmreg AMD,SSE5 )]131 code0 -[2(VPSHAB xmmreg,xmmreg*,xmmrm128 AMD,SSE5 )]120 code0 -[2(VPSHAD xmmreg,xmmrm128*,xmmreg AMD,SSE5 )]109 code0 -(176)pageeven -restore showpage -%%Page: 177 177 -%%BeginPageSetup -save -%%EndPageSetup -/177 pa -[2(VPSHAD xmmreg,xmmreg*,xmmrm128 AMD,SSE5 )]681 code0 -[2(VPSHAQ xmmreg,xmmrm128*,xmmreg AMD,SSE5 )]670 code0 -[2(VPSHAQ xmmreg,xmmreg*,xmmrm128 AMD,SSE5 )]659 code0 -[2(VPSHAW xmmreg,xmmrm128*,xmmreg AMD,SSE5 )]648 code0 -[2(VPSHAW xmmreg,xmmreg*,xmmrm128 AMD,SSE5 )]637 code0 -[2(VPSHLB xmmreg,xmmrm128*,xmmreg AMD,SSE5 )]626 code0 -[2(VPSHLB xmmreg,xmmreg*,xmmrm128 AMD,SSE5 )]615 code0 -[2(VPSHLD xmmreg,xmmrm128*,xmmreg AMD,SSE5 )]604 code0 -[2(VPSHLD xmmreg,xmmreg*,xmmrm128 AMD,SSE5 )]593 code0 -[2(VPSHLQ xmmreg,xmmrm128*,xmmreg AMD,SSE5 )]582 code0 -[2(VPSHLQ xmmreg,xmmreg*,xmmrm128 AMD,SSE5 )]571 code0 -[2(VPSHLW xmmreg,xmmrm128*,xmmreg AMD,SSE5 )]560 code0 -[2(VPSHLW xmmreg,xmmreg*,xmmrm128 AMD,SSE5)]549 code2 -[{/section-B.1.32 xa}(Systematic names for the hinting nop instructions)](B.1.32)529.8 subh3 -[2(HINT_NOP0 rm16 P6,UNDOC )]512.8 code1 -[2(HINT_NOP0 rm32 P6,UNDOC )]501.8 code0 -[2(HINT_NOP0 rm64 X64,UNDOC )]490.8 code0 -[2(HINT_NOP1 rm16 P6,UNDOC )]479.8 code0 -[2(HINT_NOP1 rm32 P6,UNDOC )]468.8 code0 -[2(HINT_NOP1 rm64 X64,UNDOC )]457.8 code0 -[2(HINT_NOP2 rm16 P6,UNDOC )]446.8 code0 -[2(HINT_NOP2 rm32 P6,UNDOC )]435.8 code0 -[2(HINT_NOP2 rm64 X64,UNDOC )]424.8 code0 -[2(HINT_NOP3 rm16 P6,UNDOC )]413.8 code0 -[2(HINT_NOP3 rm32 P6,UNDOC )]402.8 code0 -[2(HINT_NOP3 rm64 X64,UNDOC )]391.8 code0 -[2(HINT_NOP4 rm16 P6,UNDOC )]380.8 code0 -[2(HINT_NOP4 rm32 P6,UNDOC )]369.8 code0 -[2(HINT_NOP4 rm64 X64,UNDOC )]358.8 code0 -[2(HINT_NOP5 rm16 P6,UNDOC )]347.8 code0 -[2(HINT_NOP5 rm32 P6,UNDOC )]336.8 code0 -[2(HINT_NOP5 rm64 X64,UNDOC )]325.8 code0 -[2(HINT_NOP6 rm16 P6,UNDOC )]314.8 code0 -[2(HINT_NOP6 rm32 P6,UNDOC )]303.8 code0 -[2(HINT_NOP6 rm64 X64,UNDOC )]292.8 code0 -[2(HINT_NOP7 rm16 P6,UNDOC )]281.8 code0 -[2(HINT_NOP7 rm32 P6,UNDOC )]270.8 code0 -[2(HINT_NOP7 rm64 X64,UNDOC )]259.8 code0 -[2(HINT_NOP8 rm16 P6,UNDOC )]248.8 code0 -[2(HINT_NOP8 rm32 P6,UNDOC )]237.8 code0 -[2(HINT_NOP8 rm64 X64,UNDOC )]226.8 code0 -[2(HINT_NOP9 rm16 P6,UNDOC )]215.8 code0 -[2(HINT_NOP9 rm32 P6,UNDOC )]204.8 code0 -[2(HINT_NOP9 rm64 X64,UNDOC )]193.8 code0 -[2(HINT_NOP10 rm16 P6,UNDOC )]182.8 code0 -[2(HINT_NOP10 rm32 P6,UNDOC )]171.8 code0 -[2(HINT_NOP10 rm64 X64,UNDOC )]160.8 code0 -[2(HINT_NOP11 rm16 P6,UNDOC )]149.8 code0 -[2(HINT_NOP11 rm32 P6,UNDOC )]138.8 code0 -[2(HINT_NOP11 rm64 X64,UNDOC )]127.8 code0 -[2(HINT_NOP12 rm16 P6,UNDOC )]116.8 code0 -[2(HINT_NOP12 rm32 P6,UNDOC )]105.8 code0 -(177)pageodd -restore showpage -%%Page: 178 178 -%%BeginPageSetup -save -%%EndPageSetup -/178 pa -[2(HINT_NOP12 rm64 X64,UNDOC )]681 code0 -[2(HINT_NOP13 rm16 P6,UNDOC )]670 code0 -[2(HINT_NOP13 rm32 P6,UNDOC )]659 code0 -[2(HINT_NOP13 rm64 X64,UNDOC )]648 code0 -[2(HINT_NOP14 rm16 P6,UNDOC )]637 code0 -[2(HINT_NOP14 rm32 P6,UNDOC )]626 code0 -[2(HINT_NOP14 rm64 X64,UNDOC )]615 code0 -[2(HINT_NOP15 rm16 P6,UNDOC )]604 code0 -[2(HINT_NOP15 rm32 P6,UNDOC )]593 code0 -[2(HINT_NOP15 rm64 X64,UNDOC )]582 code0 -[2(HINT_NOP16 rm16 P6,UNDOC )]571 code0 -[2(HINT_NOP16 rm32 P6,UNDOC )]560 code0 -[2(HINT_NOP16 rm64 X64,UNDOC )]549 code0 -[2(HINT_NOP17 rm16 P6,UNDOC )]538 code0 -[2(HINT_NOP17 rm32 P6,UNDOC )]527 code0 -[2(HINT_NOP17 rm64 X64,UNDOC )]516 code0 -[2(HINT_NOP18 rm16 P6,UNDOC )]505 code0 -[2(HINT_NOP18 rm32 P6,UNDOC )]494 code0 -[2(HINT_NOP18 rm64 X64,UNDOC )]483 code0 -[2(HINT_NOP19 rm16 P6,UNDOC )]472 code0 -[2(HINT_NOP19 rm32 P6,UNDOC )]461 code0 -[2(HINT_NOP19 rm64 X64,UNDOC )]450 code0 -[2(HINT_NOP20 rm16 P6,UNDOC )]439 code0 -[2(HINT_NOP20 rm32 P6,UNDOC )]428 code0 -[2(HINT_NOP20 rm64 X64,UNDOC )]417 code0 -[2(HINT_NOP21 rm16 P6,UNDOC )]406 code0 -[2(HINT_NOP21 rm32 P6,UNDOC )]395 code0 -[2(HINT_NOP21 rm64 X64,UNDOC )]384 code0 -[2(HINT_NOP22 rm16 P6,UNDOC )]373 code0 -[2(HINT_NOP22 rm32 P6,UNDOC )]362 code0 -[2(HINT_NOP22 rm64 X64,UNDOC )]351 code0 -[2(HINT_NOP23 rm16 P6,UNDOC )]340 code0 -[2(HINT_NOP23 rm32 P6,UNDOC )]329 code0 -[2(HINT_NOP23 rm64 X64,UNDOC )]318 code0 -[2(HINT_NOP24 rm16 P6,UNDOC )]307 code0 -[2(HINT_NOP24 rm32 P6,UNDOC )]296 code0 -[2(HINT_NOP24 rm64 X64,UNDOC )]285 code0 -[2(HINT_NOP25 rm16 P6,UNDOC )]274 code0 -[2(HINT_NOP25 rm32 P6,UNDOC )]263 code0 -[2(HINT_NOP25 rm64 X64,UNDOC )]252 code0 -[2(HINT_NOP26 rm16 P6,UNDOC )]241 code0 -[2(HINT_NOP26 rm32 P6,UNDOC )]230 code0 -[2(HINT_NOP26 rm64 X64,UNDOC )]219 code0 -[2(HINT_NOP27 rm16 P6,UNDOC )]208 code0 -[2(HINT_NOP27 rm32 P6,UNDOC )]197 code0 -[2(HINT_NOP27 rm64 X64,UNDOC )]186 code0 -[2(HINT_NOP28 rm16 P6,UNDOC )]175 code0 -[2(HINT_NOP28 rm32 P6,UNDOC )]164 code0 -[2(HINT_NOP28 rm64 X64,UNDOC )]153 code0 -[2(HINT_NOP29 rm16 P6,UNDOC )]142 code0 -[2(HINT_NOP29 rm32 P6,UNDOC )]131 code0 -[2(HINT_NOP29 rm64 X64,UNDOC )]120 code0 -[2(HINT_NOP30 rm16 P6,UNDOC )]109 code0 -(178)pageeven -restore showpage -%%Page: 179 179 -%%BeginPageSetup -save -%%EndPageSetup -/179 pa -[2(HINT_NOP30 rm32 P6,UNDOC )]681 code0 -[2(HINT_NOP30 rm64 X64,UNDOC )]670 code0 -[2(HINT_NOP31 rm16 P6,UNDOC )]659 code0 -[2(HINT_NOP31 rm32 P6,UNDOC )]648 code0 -[2(HINT_NOP31 rm64 X64,UNDOC )]637 code0 -[2(HINT_NOP32 rm16 P6,UNDOC )]626 code0 -[2(HINT_NOP32 rm32 P6,UNDOC )]615 code0 -[2(HINT_NOP32 rm64 X64,UNDOC )]604 code0 -[2(HINT_NOP33 rm16 P6,UNDOC )]593 code0 -[2(HINT_NOP33 rm32 P6,UNDOC )]582 code0 -[2(HINT_NOP33 rm64 X64,UNDOC )]571 code0 -[2(HINT_NOP34 rm16 P6,UNDOC )]560 code0 -[2(HINT_NOP34 rm32 P6,UNDOC )]549 code0 -[2(HINT_NOP34 rm64 X64,UNDOC )]538 code0 -[2(HINT_NOP35 rm16 P6,UNDOC )]527 code0 -[2(HINT_NOP35 rm32 P6,UNDOC )]516 code0 -[2(HINT_NOP35 rm64 X64,UNDOC )]505 code0 -[2(HINT_NOP36 rm16 P6,UNDOC )]494 code0 -[2(HINT_NOP36 rm32 P6,UNDOC )]483 code0 -[2(HINT_NOP36 rm64 X64,UNDOC )]472 code0 -[2(HINT_NOP37 rm16 P6,UNDOC )]461 code0 -[2(HINT_NOP37 rm32 P6,UNDOC )]450 code0 -[2(HINT_NOP37 rm64 X64,UNDOC )]439 code0 -[2(HINT_NOP38 rm16 P6,UNDOC )]428 code0 -[2(HINT_NOP38 rm32 P6,UNDOC )]417 code0 -[2(HINT_NOP38 rm64 X64,UNDOC )]406 code0 -[2(HINT_NOP39 rm16 P6,UNDOC )]395 code0 -[2(HINT_NOP39 rm32 P6,UNDOC )]384 code0 -[2(HINT_NOP39 rm64 X64,UNDOC )]373 code0 -[2(HINT_NOP40 rm16 P6,UNDOC )]362 code0 -[2(HINT_NOP40 rm32 P6,UNDOC )]351 code0 -[2(HINT_NOP40 rm64 X64,UNDOC )]340 code0 -[2(HINT_NOP41 rm16 P6,UNDOC )]329 code0 -[2(HINT_NOP41 rm32 P6,UNDOC )]318 code0 -[2(HINT_NOP41 rm64 X64,UNDOC )]307 code0 -[2(HINT_NOP42 rm16 P6,UNDOC )]296 code0 -[2(HINT_NOP42 rm32 P6,UNDOC )]285 code0 -[2(HINT_NOP42 rm64 X64,UNDOC )]274 code0 -[2(HINT_NOP43 rm16 P6,UNDOC )]263 code0 -[2(HINT_NOP43 rm32 P6,UNDOC )]252 code0 -[2(HINT_NOP43 rm64 X64,UNDOC )]241 code0 -[2(HINT_NOP44 rm16 P6,UNDOC )]230 code0 -[2(HINT_NOP44 rm32 P6,UNDOC )]219 code0 -[2(HINT_NOP44 rm64 X64,UNDOC )]208 code0 -[2(HINT_NOP45 rm16 P6,UNDOC )]197 code0 -[2(HINT_NOP45 rm32 P6,UNDOC )]186 code0 -[2(HINT_NOP45 rm64 X64,UNDOC )]175 code0 -[2(HINT_NOP46 rm16 P6,UNDOC )]164 code0 -[2(HINT_NOP46 rm32 P6,UNDOC )]153 code0 -[2(HINT_NOP46 rm64 X64,UNDOC )]142 code0 -[2(HINT_NOP47 rm16 P6,UNDOC )]131 code0 -[2(HINT_NOP47 rm32 P6,UNDOC )]120 code0 -[2(HINT_NOP47 rm64 X64,UNDOC )]109 code0 -(179)pageodd -restore showpage -%%Page: 180 180 -%%BeginPageSetup -save -%%EndPageSetup -/180 pa -[2(HINT_NOP48 rm16 P6,UNDOC )]681 code0 -[2(HINT_NOP48 rm32 P6,UNDOC )]670 code0 -[2(HINT_NOP48 rm64 X64,UNDOC )]659 code0 -[2(HINT_NOP49 rm16 P6,UNDOC )]648 code0 -[2(HINT_NOP49 rm32 P6,UNDOC )]637 code0 -[2(HINT_NOP49 rm64 X64,UNDOC )]626 code0 -[2(HINT_NOP50 rm16 P6,UNDOC )]615 code0 -[2(HINT_NOP50 rm32 P6,UNDOC )]604 code0 -[2(HINT_NOP50 rm64 X64,UNDOC )]593 code0 -[2(HINT_NOP51 rm16 P6,UNDOC )]582 code0 -[2(HINT_NOP51 rm32 P6,UNDOC )]571 code0 -[2(HINT_NOP51 rm64 X64,UNDOC )]560 code0 -[2(HINT_NOP52 rm16 P6,UNDOC )]549 code0 -[2(HINT_NOP52 rm32 P6,UNDOC )]538 code0 -[2(HINT_NOP52 rm64 X64,UNDOC )]527 code0 -[2(HINT_NOP53 rm16 P6,UNDOC )]516 code0 -[2(HINT_NOP53 rm32 P6,UNDOC )]505 code0 -[2(HINT_NOP53 rm64 X64,UNDOC )]494 code0 -[2(HINT_NOP54 rm16 P6,UNDOC )]483 code0 -[2(HINT_NOP54 rm32 P6,UNDOC )]472 code0 -[2(HINT_NOP54 rm64 X64,UNDOC )]461 code0 -[2(HINT_NOP55 rm16 P6,UNDOC )]450 code0 -[2(HINT_NOP55 rm32 P6,UNDOC )]439 code0 -[2(HINT_NOP55 rm64 X64,UNDOC )]428 code0 -[2(HINT_NOP56 rm16 P6,UNDOC )]417 code0 -[2(HINT_NOP56 rm32 P6,UNDOC )]406 code0 -[2(HINT_NOP56 rm64 X64,UNDOC )]395 code0 -[2(HINT_NOP57 rm16 P6,UNDOC )]384 code0 -[2(HINT_NOP57 rm32 P6,UNDOC )]373 code0 -[2(HINT_NOP57 rm64 X64,UNDOC )]362 code0 -[2(HINT_NOP58 rm16 P6,UNDOC )]351 code0 -[2(HINT_NOP58 rm32 P6,UNDOC )]340 code0 -[2(HINT_NOP58 rm64 X64,UNDOC )]329 code0 -[2(HINT_NOP59 rm16 P6,UNDOC )]318 code0 -[2(HINT_NOP59 rm32 P6,UNDOC )]307 code0 -[2(HINT_NOP59 rm64 X64,UNDOC )]296 code0 -[2(HINT_NOP60 rm16 P6,UNDOC )]285 code0 -[2(HINT_NOP60 rm32 P6,UNDOC )]274 code0 -[2(HINT_NOP60 rm64 X64,UNDOC )]263 code0 -[2(HINT_NOP61 rm16 P6,UNDOC )]252 code0 -[2(HINT_NOP61 rm32 P6,UNDOC )]241 code0 -[2(HINT_NOP61 rm64 X64,UNDOC )]230 code0 -[2(HINT_NOP62 rm16 P6,UNDOC )]219 code0 -[2(HINT_NOP62 rm32 P6,UNDOC )]208 code0 -[2(HINT_NOP62 rm64 X64,UNDOC )]197 code0 -[2(HINT_NOP63 rm16 P6,UNDOC )]186 code0 -[2(HINT_NOP63 rm32 P6,UNDOC )]175 code0 -[2(HINT_NOP63 rm64 X64,UNDOC)]164 code2 -(180)pageeven -restore showpage -%%Page: 181 181 -%%BeginPageSetup -save -%%EndPageSetup -/181 pa -[{/appendix-C xa}(Appendix C: )(NASM Version History)]642.8 appn3 -[{/section-C.1 xa}(NASM 2 Series)](C.1)597.4 head3 -[(The NASM 2 series support x86-64, and is the production version of NASM since 2007.)]580.4 norm3 -[{/section-C.1.1 xa}(Version 2.08)](C.1.1)561.2 subh3 -[(A number of enhancements/fixes in macros area.)]544.2 bull3 -[(Support for arbitrarily terminating macro expansions )2(%exitmacro)0(. See ){/section-4.3.12 xl}(section 4.3.12){el}(.)]527.2 bull3 -[(Support for recursive macro expansion )2(%rmacro/irmacro)0(. See ){/section-4.3.1 xl}(section 4.3.1){el}(.)]510.2 bull3 -[(Support for converting strings to tokens. See ){/section-4.1.9 xl}(section 4.1.9){el}(.)]493.2 bull3 -[(Fuzzy operand size logic introduced.)]476.2 bull3 -[(Fix COFF stack overrun on too long export identifiers.)]459.2 bull3 -[(Fix Macho-O alignment bug.)]442.2 bull3 -[(Fix crashes with \226fwin32 on file with many exports.)]425.2 bull3 -[(Fix stack overrun for too long [DEBUG id].)]408.2 bull3 -[(Fix incorrect sbyte usage in IMUL \(hit only if optimization flag passed\).)]391.2 bull3 -[(Append ending token for )2(.stabs)0( records in the ELF output format.)]374.2 bull3 -[(New NSIS script which uses ModernUI and MultiUser approach.)]357.2 bull3 -[(Visual Studio 2008 NASM integration \(rules file\).)]340.2 bull3 -[(Warn a user if a constant is too long \(and as result will be stripped\).)]323.2 bull3 -[(The obsoleted pre-XOP AMD SSE5 instruction set which was never actualized was removed.)]306.2 bull3 -[(Fix stack overrun on too long error file name passed from the command line.)]289.2 bull3 -[(Bind symbols to the .text section by default \(ie in case if SECTION directive was omitted\) in the ELF)]272.2 bull1 -[(output format.)]261.2 bull2 -[(Fix sync points array index wrapping.)]244.2 bull3 -[(A few fixes for FMA4 and XOP instruction templates.)]227.2 bull3 -[(Add AMD Lightweight Profiling \(LWP\) instructions.)]210.2 bull3 -[{/section-C.1.2 xa}(Version 2.07)](C.1.2)191 subh3 -[(NASM is now under the 2-clause BSD license. See ){/section-1.1.2 xl}(section 1.1.2){el}(.)]174 bull3 -[(Fix the section type for the )2(.strtab)0( section in the )2(elf64)0( output format.)]157 bull3 -[(Fix the handling of )2(COMMON)0( directives in the )2(obj)0( output format.)]140 bull3 -[(New )2(ith)0( and )2(srec)0( output formats; these are variants of the )2(bin)0( output format which output Intel hex)]123 bull1 -[(and Motorola S-records, respectively. See ){/section-7.2 xl}(section 7.2){el}( and ){/section-7.3 xl}(section 7.3){el}(.)]112 bull2 -(181)pageodd -restore showpage -%%Page: 182 182 -%%BeginPageSetup -save -%%EndPageSetup -/182 pa -[2(rdf2ihx)0( replaced with an enhanced )2(rdf2bin)0(, which can output binary, COM, Intel hex or Motorola)]681 bull1 -[(S-records.)]670 bull2 -[(The Windows installer now puts the NASM directory first in the )2(PATH)0( of the "NASM Shell".)]653 bull3 -[(Revert the early expansion behavior of )2(%+)0( to pre-2.06 behavior: )2(%+)0( is only expanded late.)]636 bull3 -[(Yet another Mach-O alignment fix.)]619 bull3 -[(Don't delete the list file on errors. Also, include error and warning information in the list file.)]602 bull3 -[(Support for 64-bit Mach-O output, see ){/section-7.8 xl}(section 7.8){el}(.)]585 bull3 -[(Fix assert failure on certain operations that involve strings with high-bit bytes.)]568 bull3 -[{/section-C.1.3 xa}(Version 2.06)](C.1.3)548.8 subh3 -[(This release is dedicated to the memory of Charles A. Crayne, long time NASM developer as well as)]531.8 bull1 -[(moderator of )2(comp.lang.asm.x86)0( and author of the book )1(Serious Assembler)0(. We miss you, Chuck.)]520.8 bull2 -[(Support for indirect macro expansion \()2(%[...])0(\). See ){/section-4.1.3 xl}(section 4.1.3){el}(.)]503.8 bull3 -[2(%pop)0( can now take an argument, see ){/section-4.7.1 xl}(section 4.7.1){el}(.)]486.8 bull3 -[(The argument to )2(%use)0( is no longer macro-expanded. Use )2(%[...])0( if macro expansion is desired.)]469.8 bull3 -[(Support for thread-local storage in ELF32 and ELF64. See ){/section-7.9.4 xl}(section 7.9.4){el}(.)]452.8 bull3 -[(Fix crash on )2(%ifmacro)0( without an argument.)]435.8 bull3 -[(Correct the arguments to the )2(POPCNT)0( instruction.)]418.8 bull3 -[(Fix section alignment in the Mach-O format.)]401.8 bull3 -[(Update AVX support to version 5 of the Intel specification.)]384.8 bull3 -[(Fix the handling of accesses to context-local macros from higher levels in the context stack.)]367.8 bull3 -[(Treat )2(WAIT)0( as a prefix rather than as an instruction, thereby allowing constructs like )2(O16 FSAVE)0( to work)]350.8 bull1 -[(correctly.)]339.8 bull2 -[(Support for structures with a non-zero base offset. See ){/section-4.11.10 xl}(section 4.11.10){el}(.)]322.8 bull3 -[(Correctly handle preprocessor token concatenation \(see ){/section-4.3.8 xl}(section 4.3.8){el}(\) involving floating-point numbers.)]305.8 bull3 -[(The )2(PINSR)0( series of instructions have been corrected and rationalized.)]288.8 bull3 -[(Removed AMD SSE5, replaced with the new XOP/FMA4/CVT16 \(rev 3.03\) spec.)]271.8 bull3 -[(The ELF backends no longer automatically generate a )2(.comment)0( section.)]254.8 bull3 -[(Add additional "well-known" ELF sections with default attributes. See ){/section-7.9.2 xl}(section 7.9.2){el}(.)]237.8 bull3 -[{/section-C.1.4 xa}(Version 2.05.01)](C.1.4)218.6 subh3 -[(Fix the )2(-w)0(/)2(-W)0( option parsing, which was broken in NASM 2.05.)]201.6 bull3 -[{/section-C.1.5 xa}(Version 2.05)](C.1.5)182.4 subh3 -[(Fix redundant REX.W prefix on )2(JMP reg64)0(.)]165.4 bull3 -[(Make the behaviour of )2(-O0)0( match NASM 0.98 legacy behavior. See ){/section-2.1.22 xl}(section 2.1.22){el}(.)]148.4 bull3 -[2(-w-user)0( can be used to suppress the output of )2(%warning)0( directives. See ){/section-2.1.24 xl}(section 2.1.24){el}(.)]131.4 bull3 -[(Fix bug where )2(ALIGN)0( would issue a full alignment datum instead of zero bytes.)]114.4 bull3 -(182)pageeven -restore showpage -%%Page: 183 183 -%%BeginPageSetup -save -%%EndPageSetup -/183 pa -[(Fix offsets in list files.)]681 bull3 -[(Fix )2(%include)0( inside multi-line macros or loops.)]664 bull3 -[(Fix error where NASM would generate a spurious warning on valid optimizations of immediate values.)]647 bull3 -[(Fix arguments to a number of the )2(CVT)0( SSE instructions.)]630 bull3 -[(Fix RIP-relative offsets when the instruction carries an immediate.)]613 bull3 -[(Massive overhaul of the ELF64 backend for spec compliance.)]596 bull3 -[(Fix the Geode )2(PFRCPV)0( and )2(PFRSQRTV)0( instruction.)]579 bull3 -[(Fix the SSE 4.2 )2(CRC32)0( instruction.)]562 bull3 -[{/section-C.1.6 xa}(Version 2.04)](C.1.6)542.8 subh3 -[(Sanitize macro handing in the )2(%error)0( directive.)]525.8 bull3 -[(New )2(%warning)0( directive to issue user-controlled warnings.)]508.8 bull3 -[2(%error)0( directives are now deferred to the final assembly phase.)]491.8 bull3 -[(New )2(%fatal)0( directive to immediately terminate assembly.)]474.8 bull3 -[(New )2(%strcat)0( directive to join quoted strings together.)]457.8 bull3 -[(New )2(%use)0( macro directive to support standard macro directives. See ){/section-4.6.4 xl}(section 4.6.4){el}(.)]440.8 bull3 -[(Excess default parameters to )2(%macro)0( now issues a warning by default. See ){/section-4.3 xl}(section 4.3){el}(.)]423.8 bull3 -[(Fix )2(%ifn)0( and )2(%elifn)0(.)]406.8 bull3 -[(Fix nested )2(%else)0( clauses.)]389.8 bull3 -[(Correct the handling of nested )2(%rep)0(s.)]372.8 bull3 -[(New )2(%unmacro)0( directive to undeclare a multi-line macro. See ){/section-4.3.11 xl}(section 4.3.11){el}(.)]355.8 bull3 -[(Builtin macro )2(__PASS__)0( which expands to the current assembly pass. See ){/section-4.11.9 xl}(section 4.11.9){el}(.)]338.8 bull3 -[2(__utf16__)0( and )2(__utf32__)0( operators to generate UTF-16 and UTF-32 strings. See ){/section-3.4.5 xl}(section 3.4.5){el}(.)]321.8 bull3 -[(Fix bug in case-insensitive matching when compiled on platforms that don't use the )2(configure)0( script.)]304.8 bull1 -[(Of the official release binaries, that only affected the OS/2 binary.)]293.8 bull2 -[(Support for x87 packed BCD constants. See ){/section-3.4.7 xl}(section 3.4.7){el}(.)]276.8 bull3 -[(Correct the )2(LTR)0( and )2(SLDT)0( instructions in 64-bit mode.)]259.8 bull3 -[(Fix unnecessary REX.W prefix on indirect jumps in 64-bit mode.)]242.8 bull3 -[(Add AVX versions of the AES instructions \()2(VAES)0(...\).)]225.8 bull3 -[(Fix the 256-bit FMA instructions.)]208.8 bull3 -[(Add 256-bit AVX stores per the latest AVX spec.)]191.8 bull3 -[(VIA XCRYPT instructions can now be written either with or without )2(REP)0(, apparently different versions of)]174.8 bull1 -[(the VIA spec wrote them differently.)]163.8 bull2 -[(Add missing 64-bit )2(MOVNTI)0( instruction.)]146.8 bull3 -[(Fix the operand size of )2(VMREAD)0( and )2(VMWRITE)0(.)]129.8 bull3 -[(Numerous bug fixes, especially to the AES, AVX and VTX instructions.)]112.8 bull3 -(183)pageodd -restore showpage -%%Page: 184 184 -%%BeginPageSetup -save -%%EndPageSetup -/184 pa -[(The optimizer now always runs until it converges. It also runs even when disabled, but doesn't optimize.)]681 bull1 -[(This allows most forward references to be resolved properly.)]670 bull2 -[2(%push)0( no longer needs a context identifier; omitting the context identifier results in an anonymous context.)]653 bull3 -[{/section-C.1.7 xa}(Version 2.03.01)](C.1.7)633.8 subh3 -[(Fix buffer overflow in the listing module.)]616.8 bull3 -[(Fix the handling of hexadecimal escape codes in `...` strings.)]599.8 bull3 -[(The Postscript/PDF documentation has been reformatted.)]582.8 bull3 -[(The )2(-F)0( option now implies )2(-g)0(.)]565.8 bull3 -[{/section-C.1.8 xa}(Version 2.03)](C.1.8)546.6 subh3 -[(Add support for Intel AVX, CLMUL and FMA instructions, including YMM registers.)]529.6 bull3 -[2(dy)0(, )2(resy)0( and )2(yword)0( for 32-byte operands.)]512.6 bull3 -[(Fix some SSE5 instructions.)]495.6 bull3 -[(Intel )2(INVEPT)0(, )2(INVVPID)0( and )2(MOVBE)0( instructions.)]478.6 bull3 -[(Fix checking for critical expressions when the optimizer is enabled.)]461.6 bull3 -[(Support the DWARF debugging format for ELF targets.)]444.6 bull3 -[(Fix optimizations of signed bytes.)]427.6 bull3 -[(Fix operation on bigendian machines.)]410.6 bull3 -[(Fix buffer overflow in the preprocessor.)]393.6 bull3 -[2(SAFESEH)0( support for Win32, )2(IMAGEREL)0( for Win64 \(SEH\).)]376.6 bull3 -[2(%?)0( and )2(%??)0( to refer to the name of a macro itself. In particular, )2(%idefine keyword $%?)0( can be used)]359.6 bull1 -[(to make a keyword "disappear".)]348.6 bull2 -[(New options for dependency generation: )2(-MD)0(, )2(-MF)0(, )2(-MP)0(, )2(-MT)0(, )2(-MQ)0(.)]331.6 bull3 -[(New preprocessor directives )2(%pathsearch)0( and )2(%depend)0(; INCBIN reimplemented as a macro.)]314.6 bull3 -[2(%include)0( now resolves macros in a sane manner.)]297.6 bull3 -[2(%substr)0( can now be used to get other than one-character substrings.)]280.6 bull3 -[(New type of character/string constants, using backquotes \()2(`...`)0(\), which support C-style escape)]263.6 bull1 -[(sequences.)]252.6 bull2 -[2(%defstr)0( and )2(%idefstr)0( to stringize macro definitions before creation.)]235.6 bull3 -[(Fix forward references used in )2(EQU)0( statements.)]218.6 bull3 -[{/section-C.1.9 xa}(Version 2.02)](C.1.9)199.4 subh3 -[(Additional fixes for MMX operands with explicit )2(qword)0(, as well as \(hopefully\) SSE operands with)]182.4 bull1 -[2(oword)0(.)]171.4 bull2 -[(Fix handling of truncated strings with )2(DO)0(.)]154.4 bull3 -[(Fix segfaults due to memory overwrites when floating-point constants were used.)]137.4 bull3 -[(Fix segfaults due to missing include files.)]120.4 bull3 -[(Fix OpenWatcom Makefiles for DOS and OS/2.)]103.4 bull3 -(184)pageeven -restore showpage -%%Page: 185 185 -%%BeginPageSetup -save -%%EndPageSetup -/185 pa -[(Add autogenerated instruction list back into the documentation.)]681 bull3 -[(ELF: Fix segfault when generating stabs, and no symbols have been defined.)]664 bull3 -[(ELF: Experimental support for DWARF debugging information.)]647 bull3 -[(New compile date and time standard macros.)]630 bull3 -[2(%ifnum)0( now returns true for negative numbers.)]613 bull3 -[(New )2(%iftoken)0( test for a single token.)]596 bull3 -[(New )2(%ifempty)0( test for empty expansion.)]579 bull3 -[(Add support for the )2(XSAVE)0( instruction group.)]562 bull3 -[(Makefile for Netware/gcc.)]545 bull3 -[(Fix issue with some warnings getting emitted way too many times.)]528 bull3 -[(Autogenerated instruction list added to the documentation.)]511 bull3 -[{/section-C.1.10 xa}(Version 2.01)](C.1.10)491.8 subh3 -[(Fix the handling of MMX registers with explicit )2(qword)0( tags on memory \(broken in 2.00 due to 64-bit)]474.8 bull1 -[(changes.\))]463.8 bull2 -[(Fix the PREFETCH instructions.)]446.8 bull3 -[(Fix the documentation.)]429.8 bull3 -[(Fix debugging info when using )2(-f elf)0( \(backwards compatibility alias for )2(-f elf32)0(\).)]412.8 bull3 -[(Man pages for rdoff tools \(from the Debian project.\))]395.8 bull3 -[(ELF: handle large numbers of sections.)]378.8 bull3 -[(Fix corrupt output when the optimizer runs out of passes.)]361.8 bull3 -[{/section-C.1.11 xa}(Version 2.00)](C.1.11)342.6 subh3 -[(Added c99 data-type compliance.)]325.6 bull3 -[(Added general x86-64 support.)]308.6 bull3 -[(Added win64 \(x86-64 COFF\) output format.)]291.6 bull3 -[(Added )2(__BITS__)0( standard macro.)]274.6 bull3 -[(Renamed the )2(elf)0( output format to )2(elf32)0( for clarity.)]257.6 bull3 -[(Added )2(elf64)0( and )2(macho)0( \(MacOS X\) output formats.)]240.6 bull3 -[(Added Numeric constants in )2(dq)0( directive.)]223.6 bull3 -[(Added )2(oword)0(, )2(do)0( and )2(reso)0( pseudo operands.)]206.6 bull3 -[(Allow underscores in numbers.)]189.6 bull3 -[(Added 8-, 16- and 128-bit floating-point formats.)]172.6 bull3 -[(Added binary, octal and hexadecimal floating-point.)]155.6 bull3 -[(Correct the generation of floating-point constants.)]138.6 bull3 -[(Added floating-point option control.)]121.6 bull3 -[(Added Infinity and NaN floating point support.)]104.6 bull3 -(185)pageodd -restore showpage -%%Page: 186 186 -%%BeginPageSetup -save -%%EndPageSetup -/186 pa -[(Added ELF Symbol Visibility support.)]681 bull3 -[(Added setting OSABI value in ELF header directive.)]664 bull3 -[(Added Generate Makefile Dependencies option.)]647 bull3 -[(Added Unlimited Optimization Passes option.)]630 bull3 -[(Added )2(%IFN)0( and )2(%ELIFN)0( support.)]613 bull3 -[(Added Logical Negation Operator.)]596 bull3 -[(Enhanced Stack Relative Preprocessor Directives.)]579 bull3 -[(Enhanced ELF Debug Formats.)]562 bull3 -[(Enhanced Send Errors to a File option.)]545 bull3 -[(Added SSSE3, SSE4.1, SSE4.2, SSE5 support.)]528 bull3 -[(Added a large number of additional instructions.)]511 bull3 -[(Significant performance improvements.)]494 bull3 -[2(-w+warning)0( and )2(-w-warning)0( can now be written as \226Wwarning and \226Wno-warning, respectively.)]477 bull1 -[(See ){/section-2.1.24 xl}(section 2.1.24){el}(.)]466 bull2 -[(Add )2(-w+error)0( to treat warnings as errors. See ){/section-2.1.24 xl}(section 2.1.24){el}(.)]449 bull3 -[(Add )2(-w+all)0( and )2(-w-all)0( to enable or disable all suppressible warnings. See ){/section-2.1.24 xl}(section 2.1.24){el}(.)]432 bull3 -[{/section-C.2 xa}(NASM 0.98 Series)](C.2)410.6 head3 -[(The 0.98 series was the production versions of NASM from 1999 to 2007.)]393.6 norm3 -[{/section-C.2.1 xa}(Version 0.98.39)](C.2.1)374.4 subh3 -[(fix buffer overflow)]357.4 bull3 -[(fix outas86's )2(.bss)0( handling)]340.4 bull3 -[("make spotless" no longer deletes config.h.in.)]323.4 bull3 -[2(%\(el\)if\(n\)idn)0( insensitivity to string quotes difference \(#809300\).)]306.4 bull3 -[(\(nasm.c\))2(__OUTPUT_FORMAT__)0( changed to string value instead of symbol.)]289.4 bull3 -[{/section-C.2.2 xa}(Version 0.98.38)](C.2.2)270.2 subh3 -[(Add Makefile for 16-bit DOS binaries under OpenWatcom, and modify )2(mkdep.pl)0( to be able to generate)]253.2 bull1 -[(completely pathless dependencies, as required by OpenWatcom wmake \(it supports path searches, but not)]242.2 bull0 -[(explicit paths.\))]231.2 bull2 -[(Fix the )2(STR)0( instruction.)]214.2 bull3 -[(Fix the ELF output format, which was broken under certain circumstances due to the addition of stabs)]197.2 bull1 -[(support.)]186.2 bull2 -[(Quick-fix Borland format debug-info for )2(-f obj)]169.2 bull3 -[(Fix for )2(%rep)0( with no arguments \(#560568\))]152.2 bull3 -[(Fix concatenation of preprocessor function call \(#794686\))]135.2 bull3 -[(Fix long label causes coredump \(#677841\))]118.2 bull3 -[(Use autoheader as well as autoconf to keep configure from generating ridiculously long command lines.)]101.2 bull3 -(186)pageeven -restore showpage -%%Page: 187 187 -%%BeginPageSetup -save -%%EndPageSetup -/187 pa -[(Make sure that all of the formats which support debugging output actually will suppress debugging output)]681 bull1 -[(when )2(-g)0( not specified.)]670 bull2 -[{/section-C.2.3 xa}(Version 0.98.37)](C.2.3)650.8 subh3 -[(Paths given in )2(-I)0( switch searched for )2(incbin)0(\226ed as well as )2(%include)0(\226ed files.)]633.8 bull3 -[(Added stabs debugging for the ELF output format, patch from Martin Wawro.)]616.8 bull3 -[(Fix )2(output/outbin.c)0( to allow origin > 80000000h.)]599.8 bull3 -[(Make )2(-U)0( switch work.)]582.8 bull3 -[(Fix the use of relative offsets with explicit prefixes, e.g. )2(a32 loop foo)0(.)]565.8 bull3 -[(Remove )2(backslash\(\))0(.)]548.8 bull3 -[(Fix the )2(SMSW)0( and )2(SLDT)0( instructions.)]531.8 bull3 -[2(-O2)0( and )2(-O3)0( are no longer aliases for )2(-O10)0( and )2(-O15)0(. If you mean the latter, please say so! :\))]514.8 bull3 -[{/section-C.2.4 xa}(Version 0.98.36)](C.2.4)495.6 subh3 -[(Update rdoff \226 librarian/archiver \226 common rec \226 docs!)]478.6 bull3 -[(Fix signed/unsigned problems.)]461.6 bull3 -[(Fix )2(JMP FAR label)0( and )2(CALL FAR label)0(.)]444.6 bull3 -[(Add new multisection support \226 map files \226 fix align bug)]427.6 bull3 -[(Fix sysexit, movhps/movlps reg,reg bugs in insns.dat)]410.6 bull3 -[2(Q)0( or )2(O)0( suffixes indicate octal)]393.6 bull3 -[(Support Prescott new instructions \(PNI\).)]376.6 bull3 -[(Cyrix )2(XSTORE)0( instruction.)]359.6 bull3 -[{/section-C.2.5 xa}(Version 0.98.35)](C.2.5)340.4 subh3 -[(Fix build failure on 16-bit DOS \(Makefile.bc3 workaround for compiler bug.\))]323.4 bull3 -[(Fix dependencies and compiler warnings.)]306.4 bull3 -[(Add "const" in a number of places.)]289.4 bull3 -[(Add \226X option to specify error reporting format \(use \226Xvc to integrate with Microsoft Visual Studio.\))]272.4 bull3 -[(Minor changes for code legibility.)]255.4 bull3 -[(Drop use of tmpnam\(\) in rdoff \(security fix.\))]238.4 bull3 -[{/section-C.2.6 xa}(Version 0.98.34)](C.2.6)219.2 subh3 -[(Correct additional address-size vs. operand-size confusions.)]202.2 bull3 -[(Generate dependencies for all Makefiles automatically.)]185.2 bull3 -[(Add support for unimplemented \(but theoretically available\) registers such as tr0 and cr5. Segment)]168.2 bull1 -[(registers 6 and 7 are called segr6 and segr7 for the operations which they can be represented.)]157.2 bull2 -[(Correct some disassembler bugs related to redundant address-size prefixes. Some work still remains in this)]140.2 bull1 -[(area.)]129.2 bull2 -[(Correctly generate an error for things like "SEG eax".)]112.2 bull3 -(187)pageodd -restore showpage -%%Page: 188 188 -%%BeginPageSetup -save -%%EndPageSetup -/188 pa -[(Add the JMPE instruction, enabled by "CPU IA64".)]681 bull3 -[(Correct compilation on newer gcc/glibc platforms.)]664 bull3 -[(Issue an error on things like "jmp far eax".)]647 bull3 -[{/section-C.2.7 xa}(Version 0.98.33)](C.2.7)627.8 subh3 -[(New __NASM_PATCHLEVEL__ and __NASM_VERSION_ID__ standard macros to round out the)]610.8 bull1 -[(version-query macros. version.pl now understands X.YYplWW or X.YY.ZZplWW as a version number,)]599.8 bull0 -[(equivalent to X.YY.ZZ.WW \(or X.YY.0.WW, as appropriate\).)]588.8 bull2 -[(New keyword "strict" to disable the optimization of specific operands.)]571.8 bull3 -[(Fix the handing of size overrides with JMP instructions \(instructions such as "jmp dword foo".\))]554.8 bull3 -[(Fix the handling of "ABSOLUTE label", where "label" points into a relocatable segment.)]537.8 bull3 -[(Fix OBJ output format with lots of externs.)]520.8 bull3 -[(More documentation updates.)]503.8 bull3 -[(Add \226Ov option to get verbose information about optimizations.)]486.8 bull3 -[(Undo a braindead change which broke )2(%elif)0( directives.)]469.8 bull3 -[(Makefile updates.)]452.8 bull3 -[{/section-C.2.8 xa}(Version 0.98.32)](C.2.8)433.6 subh3 -[(Fix NASM crashing when )2(%macro)0( directives were left unterminated.)]416.6 bull3 -[(Lots of documentation updates.)]399.6 bull3 -[(Complete rewrite of the PostScript/PDF documentation generator.)]382.6 bull3 -[(The MS Visual C++ Makefile was updated and corrected.)]365.6 bull3 -[(Recognize .rodata as a standard section name in ELF.)]348.6 bull3 -[(Fix some obsolete Perl4-isms in Perl scripts.)]331.6 bull3 -[(Fix configure.in to work with autoconf 2.5x.)]314.6 bull3 -[(Fix a couple of "make cleaner" misses.)]297.6 bull3 -[(Make the normal "./configure && make" work with Cygwin.)]280.6 bull3 -[{/section-C.2.9 xa}(Version 0.98.31)](C.2.9)261.4 subh3 -[(Correctly build in a separate object directory again.)]244.4 bull3 -[(Derive all references to the version number from the version file.)]227.4 bull3 -[(New standard macros __NASM_SUBMINOR__ and __NASM_VER__ macros.)]210.4 bull3 -[(Lots of Makefile updates and bug fixes.)]193.4 bull3 -[(New )2(%ifmacro)0( directive to test for multiline macros.)]176.4 bull3 -[(Documentation updates.)]159.4 bull3 -[(Fixes for 16-bit OBJ format output.)]142.4 bull3 -[(Changed the NASM environment variable to NASMENV.)]125.4 bull3 -(188)pageeven -restore showpage -%%Page: 189 189 -%%BeginPageSetup -save -%%EndPageSetup -/189 pa -[{/section-C.2.10 xa}(Version 0.98.30)](C.2.10)678.8 subh3 -[(Changed doc files a lot: completely removed old READMExx and Wishlist files, incorporating all)]661.8 bull1 -[(information in CHANGES and TODO.)]650.8 bull2 -[(I waited a long time to rename zoutieee.c to \(original\) outieee.c)]633.8 bull3 -[(moved all output modules to output/ subdirectory.)]616.8 bull3 -[(Added 'make strip' target to strip debug info from nasm & ndisasm.)]599.8 bull3 -[(Added INSTALL file with installation instructions.)]582.8 bull3 -[(Added \226v option description to nasm man.)]565.8 bull3 -[(Added dist makefile target to produce source distributions.)]548.8 bull3 -[(16-bit support for ELF output format \(GNU extension, but useful.\))]531.8 bull3 -[{/section-C.2.11 xa}(Version 0.98.28)](C.2.11)512.6 subh3 -[(Fastcooked this for Debian's Woody release: Frank applied the INCBIN bug patch to 0.98.25alt and called)]495.6 bull1 -[(it 0.98.28 to not confuse poor little apt-get.)]484.6 bull2 -[{/section-C.2.12 xa}(Version 0.98.26)](C.2.12)465.4 subh3 -[(Reorganised files even better from 0.98.25alt)]448.4 bull3 -[{/section-C.2.13 xa}(Version 0.98.25alt)](C.2.13)429.2 subh3 -[(Prettified the source tree. Moved files to more reasonable places.)]412.2 bull3 -[(Added findleak.pl script to misc/ directory.)]395.2 bull3 -[(Attempted to fix doc.)]378.2 bull3 -[{/section-C.2.14 xa}(Version 0.98.25)](C.2.14)359 subh3 -[(Line continuation character )2(\\)0(.)]342 bull3 -[(Docs inadvertantly reverted \226 "dos packaging".)]325 bull3 -[{/section-C.2.15 xa}(Version 0.98.24p1)](C.2.15)305.8 subh3 -[(FIXME: Someone, document this please.)]288.8 bull3 -[{/section-C.2.16 xa}(Version 0.98.24)](C.2.16)269.6 subh3 -[(Documentation \226 Ndisasm doc added to Nasm.doc.)]252.6 bull3 -[{/section-C.2.17 xa}(Version 0.98.23)](C.2.17)233.4 subh3 -[(Attempted to remove rdoff version1)]216.4 bull3 -[(Lino Mastrodomenico's patches to preproc.c \(%$$ bug?\).)]199.4 bull3 -[{/section-C.2.18 xa}(Version 0.98.22)](C.2.18)180.2 subh3 -[(Update rdoff2 \226 attempt to remove v1.)]163.2 bull3 -[{/section-C.2.19 xa}(Version 0.98.21)](C.2.19)144 subh3 -[(Optimization fixes.)]127 bull3 -(189)pageodd -restore showpage -%%Page: 190 190 -%%BeginPageSetup -save -%%EndPageSetup -/190 pa -[{/section-C.2.20 xa}(Version 0.98.20)](C.2.20)678.8 subh3 -[(Optimization fixes.)]661.8 bull3 -[{/section-C.2.21 xa}(Version 0.98.19)](C.2.21)642.6 subh3 -[(H. J. Lu's patch back out.)]625.6 bull3 -[{/section-C.2.22 xa}(Version 0.98.18)](C.2.22)606.4 subh3 -[(Added ".rdata" to "-f win32".)]589.4 bull3 -[{/section-C.2.23 xa}(Version 0.98.17)](C.2.23)570.2 subh3 -[(H. J. Lu's "bogus elf" patch. \(Red Hat problem?\))]553.2 bull3 -[{/section-C.2.24 xa}(Version 0.98.16)](C.2.24)534 subh3 -[(Fix whitespace before "[section ..." bug.)]517 bull3 -[{/section-C.2.25 xa}(Version 0.98.15)](C.2.25)497.8 subh3 -[(Rdoff changes \(?\).)]480.8 bull3 -[(Fix fixes to memory leaks.)]463.8 bull3 -[{/section-C.2.26 xa}(Version 0.98.14)](C.2.26)444.6 subh3 -[(Fix memory leaks.)]427.6 bull3 -[{/section-C.2.27 xa}(Version 0.98.13)](C.2.27)408.4 subh3 -[(There was no 0.98.13)]391.4 bull3 -[{/section-C.2.28 xa}(Version 0.98.12)](C.2.28)372.2 subh3 -[(Update optimization \(new function of "-O1"\))]355.2 bull3 -[(Changes to test/bintest.asm \(?\).)]338.2 bull3 -[{/section-C.2.29 xa}(Version 0.98.11)](C.2.29)319 subh3 -[(Optimization changes.)]302 bull3 -[(Ndisasm fixed.)]285 bull3 -[{/section-C.2.30 xa}(Version 0.98.10)](C.2.30)265.8 subh3 -[(There was no 0.98.10)]248.8 bull3 -[{/section-C.2.31 xa}(Version 0.98.09)](C.2.31)229.6 subh3 -[(Add multiple sections support to "-f bin".)]212.6 bull3 -[(Changed GLOBAL_TEMP_BASE in outelf.c from 6 to 15.)]195.6 bull3 -[(Add "-v" as an alias to the "-r" switch.)]178.6 bull3 -[(Remove "#ifdef" from Tasm compatibility options.)]161.6 bull3 -[(Remove redundant size-overrides on "mov ds, ex", etc.)]144.6 bull3 -[(Fixes to SSE2, other insns.dat \(?\).)]127.6 bull3 -[(Enable uppercase "I" and "P" switches.)]110.6 bull3 -(190)pageeven -restore showpage -%%Page: 191 191 -%%BeginPageSetup -save -%%EndPageSetup -/191 pa -[(Case insinsitive "seg" and "wrt".)]681 bull3 -[(Update install.sh \(?\).)]664 bull3 -[(Allocate tokens in blocks.)]647 bull3 -[(Improve "invalid effective address" messages.)]630 bull3 -[{/section-C.2.32 xa}(Version 0.98.08)](C.2.32)610.8 subh3 -[(Add ")2(%strlen)0(" and ")2(%substr)0(" macro operators)]593.8 bull3 -[(Fixed broken c16.mac.)]576.8 bull3 -[(Unterminated string error reported.)]559.8 bull3 -[(Fixed bugs as per 0.98bf)]542.8 bull3 -[{/section-C.2.33 xa}(Version 0.98.09b with John Coffman patches released 28-Oct-2001)](C.2.33)523.6 subh3 -[(Changes from 0.98.07 release to 98.09b as of 28-Oct-2001)]506.6 norm3 -[(More closely compatible with 0.98 when \226O0 is implied or specified. Not strictly identical, since backward)]489.6 bull1 -[(branches in range of short offsets are recognized, and signed byte values with no explicit size specification)]478.6 bull0 -[(will be assembled as a single byte.)]467.6 bull2 -[(More forgiving with the PUSH instruction. 0.98 requires a size to be specified always. 0.98.09b will imply)]450.6 bull1 -[(the size from the current BITS setting \(16 or 32\).)]439.6 bull2 -[(Changed definition of the optimization flag:)]422.6 bull3 -[(\226O0 strict two-pass assembly, JMP and Jcc are handled more like 0.98, except that back- ward JMPs are)]405.6 norm1 -[(short, if possible.)]394.6 norm2 -[(\226O1 strict two-pass assembly, but forward branches are assembled with code guaranteed to reach; may)]377.6 norm1 -[(produce larger code than \226O0, but will produce successful assembly more often if branch offset sizes are not)]366.6 norm0 -[(specified.)]355.6 norm2 -[(\226O2 multi-pass optimization, minimize branch offsets; also will minimize signed immed- iate bytes,)]338.6 norm1 -[(overriding size specification.)]327.6 norm2 -[(\226O3 like \226O2, but more passes taken, if needed)]310.6 norm3 -[{/section-C.2.34 xa}(Version 0.98.07 released 01/28/01)](C.2.34)291.4 subh3 -[(Added Stepane Denis' SSE2 instructions to a *working* version of the code \226 some earlier versions were)]274.4 bull1 -[(based on broken code \226 sorry 'bout that. version "0.98.07")]263.4 bull2 -[(01/28/01)]246.4 norm3 -[(Cosmetic modifications to nasm.c, nasm.h, AUTHORS, MODIFIED)]229.4 bull3 -[{/section-C.2.35 xa}(Version 0.98.06f released 01/18/01)](C.2.35)210.2 subh3 -[(\226 Add "metalbrain"s jecxz bug fix in insns.dat \226 alter nasmdoc.src to match \226 version "0.98.06f")]193.2 bull3 -[{/section-C.2.36 xa}(Version 0.98.06e released 01/09/01)](C.2.36)174 subh3 -[(Removed the "outforms.h" file \226 it appears to be someone's old backup of "outform.h". version "0.98.06e")]157 bull3 -[(01/09/01)]140 norm3 -[(fbk \226 finally added the fix for the "multiple %includes bug", known since 7/27/99 \226 reported originally \(?\))]123 bull1 -[(and sent to us by Austin Lunnen \226 he reports that John Fine had a fix within the day. Here it is...)]112 bull2 -(191)pageodd -restore showpage -%%Page: 192 192 -%%BeginPageSetup -save -%%EndPageSetup -/192 pa -[(Nelson Rush resigns from the group. Big thanks to Nelson for his leadership and enthusiasm in getting)]681 bull1 -[(these changes incorporated into Nasm!)]670 bull2 -[(fbk \226 [list +], [list \226] directives \226 ineptly implemented, should be re-written or removed, perhaps.)]653 bull3 -[(Brian Raiter / fbk \226 "elfso bug" fix \226 applied to aoutb format as well \226 testing might be desirable...)]636 bull3 -[(08/07/00)]619 norm3 -[(James Seter \226 \226postfix, \226prefix command line switches.)]602 bull3 -[(Yuri Zaporogets \226 rdoff utility changes.)]585 bull3 -[{/section-C.2.37 xa}(Version 0.98p1)](C.2.37)565.8 subh3 -[(GAS-like palign \(Panos Minos\))]548.8 bull3 -[(FIXME: Someone, fill this in with details)]531.8 bull3 -[{/section-C.2.38 xa}(Version 0.98bf \(bug-fixed\))](C.2.38)512.6 subh3 -[(Fixed \226 elf and aoutb bug \226 shared libraries \226 multiple "%include" bug in "-f obj" \226 jcxz, jecxz bug \226)]495.6 bull1 -[(unrecognized option bug in ndisasm)]484.6 bull2 -[{/section-C.2.39 xa}(Version 0.98.03 with John Coffman's changes released 27-Jul-2000)](C.2.39)465.4 subh3 -[(Added signed byte optimizations for the 0x81/0x83 class of instructions: ADC, ADD, AND, CMP, OR,)]448.4 bull1 -[(SBB, SUB, XOR: when used as 'ADD reg16,imm' or 'ADD reg32,imm.' Also optimization of signed byte)]437.4 bull0 -[(form of 'PUSH imm' and 'IMUL reg,imm'/'IMUL reg,reg,imm.' No size specification is needed.)]426.4 bull2 -[(Added multi-pass JMP and Jcc offset optimization. Offsets on forward references will preferentially use)]409.4 bull1 -[(the short form, without the need to code a specific size \(short or near\) for the branch. Added instructions)]398.4 bull0 -[(for 'Jcc label' to use the form 'Jnotcc $+3/JMP label', in cases where a short offset is out of bounds. If)]387.4 bull0 -[(compiling for a 386 or higher CPU, then the 386 form of Jcc will be used instead.)]376.4 bull2 -[(This feature is controlled by a new command-line switch: "O", \(upper case letter O\). "-O0" reverts the)]359.4 norm1 -[(assembler to no extra optimization passes, "-O1" allows up to 5 extra passes, and "-O2"\(default\), allows up)]348.4 norm0 -[(to 10 extra optimization passes.)]337.4 norm2 -[(Added a new directive: 'cpu XXX', where XXX is any of: 8086, 186, 286, 386, 486, 586, pentium, 686,)]320.4 bull1 -[(PPro, P2, P3 or Katmai. All are case insensitive. All instructions will be selected only if they apply to the)]309.4 bull0 -[(selected cpu or lower. Corrected a couple of bugs in cpu-dependence in 'insns.dat'.)]298.4 bull2 -[(Added to 'standard.mac', the "use16" and "use32" forms of the "bits 16/32" directive. This is nothing new,)]281.4 bull1 -[(just conforms to a lot of other assemblers. \(minor\))]270.4 bull2 -[(Changed label allocation from 320/32 \(10000 labels @ 200K+\) to 32/37 \(1000 labels\); makes running)]253.4 bull1 -[(under DOS much easier. Since additional label space is allocated dynamically, this should have no effect)]242.4 bull0 -[(on large programs with lots of labels. The 37 is a prime, believed to be better for hashing. \(minor\))]231.4 bull2 -[{/section-C.2.40 xa}(Version 0.98.03)](C.2.40)212.2 subh3 -[("Integrated patchfile 0.98-0.98.01. I call this version 0.98.03 for historical reasons: 0.98.02 was trashed.")]195.2 norm1 -[(\226\226John Coffman <johninsd@san.rr.com>, 27-Jul-2000)]184.2 norm2 -[(Kendall Bennett's SciTech MGL changes)]167.2 bull3 -[(Note that you must define "TASM_COMPAT" at compile-time to get the Tasm Ideal Mode compatibility.)]150.2 bull3 -[(All changes can be compiled in and out using the TASM_COMPAT macros, and when compiled without)]133.2 bull1 -[(TASM_COMPAT defined we get the exact same binary as the unmodified 0.98 sources.)]122.2 bull2 -[(standard.mac, macros.c: Added macros to ignore TASM directives before first include)]105.2 bull3 -(192)pageeven -restore showpage -%%Page: 193 193 -%%BeginPageSetup -save -%%EndPageSetup -/193 pa -[(nasm.h: Added extern declaration for tasm_compatible_mode)]681 bull3 -[(nasm.c: Added global variable tasm_compatible_mode)]664 bull3 -[(Added command line switch for TASM compatible mode \(-t\))]647 bull3 -[(Changed version command line to reflect when compiled with TASM additions)]630 bull3 -[(Added response file processing to allow all arguments on a single line \(response file is @resp rather than)]613 bull1 -[(\226@resp for NASM format\).)]602 bull2 -[(labels.c: Changes islocal\(\) macro to support TASM style @@local labels.)]585 bull3 -[(Added islocalchar\(\) macro to support TASM style @@local labels.)]568 bull3 -[(parser.c: Added support for TASM style memory references \(ie: mov [DWORD eax],10 rather than the)]551 bull1 -[(NASM style mov DWORD [eax],10\).)]540 bull2 -[(preproc.c: Added new directives, )2(%arg)0(, )2(%local)0(, )2(%stacksize)0( to directives table)]523 bull3 -[(Added support for TASM style directives without a leading % symbol.)]506 bull3 -[(Integrated a block of changes from Andrew Zabolotny <bit@eltech.ru>:)]489 bull3 -[(A new keyword )2(%xdefine)0( and its case-insensitive counterpart )2(%ixdefine)0(. They work almost the)]472 bull1 -[(same way as )2(%define)0( and )2(%idefine)0( but expand the definition immediately, not on the invocation.)]461 bull0 -[(Something like a cross between )2(%define)0( and )2(%assign)0(. The "x" suffix stands for "eXpand", so)]450 bull0 -[("xdefine" can be deciphered as "expand-and-define". Thus you can do things like this:)]439 bull2 -[2( %assign ofs 0 )]422 code1 -[2()]411 code0 -[2( %macro arg 1 )]400 code0 -[2( %xdefine %1 dword [esp+ofs] )]389 code0 -[2( %assign ofs ofs+4 )]378 code0 -[2( %endmacro)]367 code2 -[(Changed the place where the expansion of %$name macros are expanded. Now they are converted into)]350 bull1 -[(..@ctxnum.name form when detokenizing, so there are no quirks as before when using %$name arguments)]339 bull0 -[(to macros, in macros etc. For example:)]328 bull2 -[2( %macro abc 1 )]311 code1 -[2( %define %1 hello )]300 code0 -[2( %endm )]289 code0 -[2()]278 code0 -[2( abc %$here )]267 code0 -[2( %$here)]256 code2 -[(Now last line will be expanded into "hello" as expected. This also allows for lots of goodies, a good example)]239 norm1 -[(are extended "proc" macros included in this archive.)]228 norm2 -[(Added a check for "cstk" in smacro_defined\(\) before calling get_ctx\(\) \226 this allows for things like:)]211 bull3 -[2( %ifdef %$abc )]194 code1 -[2( %endif)]183 code2 -[(to work without warnings even in no context.)]166 norm3 -[(Added a check for "cstk" in %if*ctx and %elif*ctx directives \226 this allows to use )2(%ifctx)0( without)]149 bull1 -[(excessive warnings. If there is no active context, )2(%ifctx)0( goes through "false" branch.)]138 bull2 -[(Removed "user error: " prefix with )2(%error)0( directive: it just clobbers the output and has absolutely no)]121 bull1 -[(functionality. Besides, this allows to write macros that does not differ from built-in functions in any way.)]110 bull2 -(193)pageodd -restore showpage -%%Page: 194 194 -%%BeginPageSetup -save -%%EndPageSetup -/194 pa -[(Added expansion of string that is output by )2(%error)0( directive. Now you can do things like:)]681 bull3 -[2( %define hello\(x\) Hello, x! )]664 code1 -[2()]653 code0 -[2( %define %$name andy )]642 code0 -[2( %error "hello\(%$name\)")]631 code2 -[(Same happened with )2(%include)0( directive.)]614 norm3 -[(Now all directives that expect an identifier will try to expand and concatenate everything without)]597 bull1 -[(whitespaces in between before usage. For example, with "unfixed" nasm the commands)]586 bull2 -[2( %define %$abc hello )]569 code1 -[2( %define __%$abc goodbye )]558 code0 -[2( __%$abc)]547 code2 -[(would produce "incorrect" output: last line will expand to)]530 norm3 -[2( hello goodbyehello)]513 code3 -[(Not quite what you expected, eh? :-\) The answer is that preprocessor treats the )2(%define)0( construct as if it)]496 norm1 -[(would be)]485 norm2 -[2( %define __ %$abc goodbye)]468 code3 -[(\(note the white space between __ and %$abc\). After my "fix" it will "correctly" expand into)]451 norm3 -[2( goodbye)]434 code3 -[(as expected. Note that I use quotes around words "correct", "incorrect" etc because this is rather a feature not)]417 norm1 -[(a bug; however current behaviour is more logical \(and allows more advanced macro usage :-\).)]406 norm2 -[(Same change was applied to: )2(%push)0(,)2(%macro)0(,)2(%imacro)0(,)2(%define)0(,)2(%idefine)0(,)2(%xdefine)0(,)2(%ixdefine)0(,)]389 norm1 -[2(%assign)0(,)2(%iassign)0(,)2(%undef)]378 norm2 -[(A new directive [WARNING {+|-}warning-id] have been added. It works only if the assembly phase is)]361 bull1 -[(enabled \(i.e. it doesn't work with nasm \226e\).)]350 bull2 -[(A new warning type: macro-selfref. By default this warning is disabled; when enabled NASM warns when)]333 bull1 -[(a macro self-references itself; for example the following source:)]322 bull2 -[2( [WARNING macro-selfref] )]305 code1 -[2()]294 code0 -[2( %macro push 1-* )]283 code0 -[2( %rep %0 )]272 code0 -[2( push %1 )]261 code0 -[2( %rotate 1 )]250 code0 -[2( %endrep )]239 code0 -[2( %endmacro )]228 code0 -[2()]217 code0 -[2( push eax,ebx,ecx)]206 code2 -[(will produce a warning, but if we remove the first line we won't see it anymore \(which is The Right Thing To)]189 norm1 -[(Do {tm} IMHO since C preprocessor eats such constructs without warnings at all\).)]178 norm2 -[(Added a "error" routine to preprocessor which always will set ERR_PASS1 bit in severity_code. This)]161 bull1 -[(removes annoying repeated errors on first and second passes from preprocessor.)]150 bull2 -[(Added the %+ operator in single-line macros for concatenating two identifiers. Usage example:)]133 bull3 -(194)pageeven -restore showpage -%%Page: 195 195 -%%BeginPageSetup -save -%%EndPageSetup -/195 pa -[2( %define _myfunc _otherfunc )]681 code1 -[2( %define cextern\(x\) _ %+ x )]670 code0 -[2( cextern \(myfunc\))]659 code2 -[(After first expansion, third line will become "_myfunc". After this expansion is performed again so it)]642 norm1 -[(becomes "_otherunc".)]631 norm2 -[(Now if preprocessor is in a non-emitting state, no warning or error will be emitted. Example:)]614 bull3 -[2( %if 1 )]597 code1 -[2( mov eax,ebx )]586 code0 -[2( %else )]575 code0 -[2( put anything you want between these two brackets, )]564 code0 -[2( even macro-parameter references %1 or local )]553 code0 -[2( labels %$zz or macro-local labels %%zz - no )]542 code0 -[2( warning will be emitted. )]531 code0 -[2( %endif)]520 code2 -[(Context-local variables on expansion as a last resort are looked up in outer contexts. For example, the)]503 bull1 -[(following piece:)]492 bull2 -[2( %push outer )]475 code1 -[2( %define %$a [esp] )]464 code0 -[2()]453 code0 -[2( %push inner )]442 code0 -[2( %$a )]431 code0 -[2( %pop )]420 code0 -[2( %pop)]409 code2 -[(will expand correctly the fourth line to [esp]; if we'll define another %$a inside the "inner" context, it will)]392 norm1 -[(take precedence over outer definition. However, this modification has been applied only to expand_smacro)]381 norm0 -[(and not to smacro_define: as a consequence expansion looks in outer contexts, but )2(%ifdef)0( won't look in)]370 norm0 -[(outer contexts.)]359 norm2 -[(This behaviour is needed because we don't want nested contexts to act on already defined local macros.)]342 norm1 -[(Example:)]331 norm2 -[2( %define %$arg1 [esp+4] )]314 code1 -[2( test eax,eax )]303 code0 -[2( if nz )]292 code0 -[2( mov eax,%$arg1 )]281 code0 -[2( endif)]270 code2 -[(In this example the "if" mmacro enters into the "if" context, so %$arg1 is not valid anymore inside "if". Of)]253 norm1 -[(course it could be worked around by using explicitely %$$arg1 but this is ugly IMHO.)]242 norm2 -[(Fixed memory leak in )2(%undef)0(. The origline wasn't freed before exiting on success.)]225 bull3 -[(Fixed trap in preprocessor when line expanded to empty set of tokens. This happens, for example, in the)]208 bull1 -[(following case:)]197 bull2 -[2( #define SOMETHING )]180 code1 -[2( SOMETHING)]169 code2 -[{/section-C.2.41 xa}(Version 0.98)](C.2.41)149.8 subh3 -[(All changes since NASM 0.98p3 have been produced by H. Peter Anvin <hpa@zytor.com>.)]132.8 norm3 -[(The documentation comment delimiter is)]115.8 bull3 -(195)pageodd -restore showpage -%%Page: 196 196 -%%BeginPageSetup -save -%%EndPageSetup -/196 pa -[(Allow EQU definitions to refer to external labels; reported by Pedro Gimeno.)]681 bull3 -[(Re-enable support for RDOFF v1; reported by Pedro Gimeno.)]664 bull3 -[(Updated License file per OK from Simon and Julian.)]647 bull3 -[{/section-C.2.42 xa}(Version 0.98p9)](C.2.42)627.8 subh3 -[(Update documentation \(although the instruction set reference will have to wait; I don't want to hold up the)]610.8 bull1 -[(0.98 release for it.\))]599.8 bull2 -[(Verified that the NASM implementation of the PEXTRW and PMOVMSKB instructions is correct. The)]582.8 bull1 -[(encoding differs from what the Intel manuals document, but the Pentium III behaviour matches NASM, not)]571.8 bull0 -[(the Intel manuals.)]560.8 bull2 -[(Fix handling of implicit sizes in PSHUFW and PINSRW, reported by Stefan Hoffmeister.)]543.8 bull3 -[(Resurrect the \226s option, which was removed when changing the diagnostic output to stdout.)]526.8 bull3 -[{/section-C.2.43 xa}(Version 0.98p8)](C.2.43)507.6 subh3 -[(Fix for "DB" when NASM is running on a bigendian machine.)]490.6 bull3 -[(Invoke insns.pl once for each output script, making Makefile.in legal for "make \226j".)]473.6 bull3 -[(Improve the Unix configure-based makefiles to make package creation easier.)]456.6 bull3 -[(Included an RPM .spec file for building RPM \(RedHat Package Manager\) packages on Linux or Unix)]439.6 bull1 -[(systems.)]428.6 bull2 -[(Fix Makefile dependency problems.)]411.6 bull3 -[(Change src/rdsrc.pl to include sectioning information in info output; required for install-info to work.)]394.6 bull3 -[(Updated the RDOFF distribution to version 2 from Jules; minor massaging to make it compile in my)]377.6 bull1 -[(environment.)]366.6 bull2 -[(Split doc files that can be built by anyone with a Perl interpreter off into a separate archive.)]349.6 bull3 -[("Dress rehearsal" release!)]332.6 bull3 -[{/section-C.2.44 xa}(Version 0.98p7)](C.2.44)313.4 subh3 -[(Fixed opcodes with a third byte-sized immediate argument to not complain if given "byte" on the)]296.4 bull1 -[(immediate.)]285.4 bull2 -[(Allow )2(%undef)0( to remove single-line macros with arguments. This matches the behaviour of #undef in the)]268.4 bull1 -[(C preprocessor.)]257.4 bull2 -[(Allow \226d, \226u, \226i and \226p to be specified as \226D, \226U, \226I and \226P for compatibility with most C compilers and)]240.4 bull1 -[(preprocessors. This allows Makefile options to be shared between cc and nasm, for example.)]229.4 bull2 -[(Minor cleanups.)]212.4 bull3 -[(Went through the list of Katmai instructions and hopefully fixed the \(rather few\) mistakes in it.)]195.4 bull3 -[(\(Hopefully\) fixed a number of disassembler bugs related to ambiguous instructions \(disambiguated by \226p\))]178.4 bull1 -[(and SSE instructions with REP.)]167.4 bull2 -[(Fix for bug reported by Mark Junger: "call dword 0x12345678" should work and may add an OSP)]150.4 bull1 -[(\(affected CALL, JMP, Jcc\).)]139.4 bull2 -[(Fix for environments when "stderr" isn't a compile-time constant.)]122.4 bull3 -(196)pageeven -restore showpage -%%Page: 197 197 -%%BeginPageSetup -save -%%EndPageSetup -/197 pa -[{/section-C.2.45 xa}(Version 0.98p6)](C.2.45)678.8 subh3 -[(Took officially over coordination of the 0.98 release; so drop the p3.x notation. Skipped p4 and p5 to avoid)]661.8 bull1 -[(confusion with John Fine's J4 and J5 releases.)]650.8 bull2 -[(Update the documentation; however, it still doesn't include documentation for the various new)]633.8 bull1 -[(instructions. I somehow wonder if it makes sense to have an instruction set reference in the assembler)]622.8 bull0 -[(manual when Intel et al have PDF versions of their manuals online.)]611.8 bull2 -[(Recognize "idt" or "centaur" for the \226p option to ndisasm.)]594.8 bull3 -[(Changed error messages back to stderr where they belong, but add an \226E option to redirect them elsewhere)]577.8 bull1 -[(\(the DOS shell cannot redirect stderr.\))]566.8 bull2 -[(\226M option to generate Makefile dependencies \(based on code from Alex Verstak.\))]549.8 bull3 -[2(%undef)0( preprocessor directive, and \226u option, that undefines a single-line macro.)]532.8 bull3 -[(OS/2 Makefile \(Mkfiles/Makefile.os2\) for Borland under OS/2; from Chuck Crayne.)]515.8 bull3 -[(Various minor bugfixes \(reported by\): \226 Dangling )2(%s)0( in preproc.c \(Martin Junker\))]498.8 bull3 -[(THERE ARE KNOWN BUGS IN SSE AND THE OTHER KATMAI INSTRUCTIONS. I am on a trip)]481.8 bull1 -[(and didn't bring the Katmai instruction reference, so I can't work on them right now.)]470.8 bull2 -[(Updated the License file per agreement with Simon and Jules to include a GPL distribution clause.)]453.8 bull3 -[{/section-C.2.46 xa}(Version 0.98p3.7)](C.2.46)434.6 subh3 -[(\(Hopefully\) fixed the canned Makefiles to include the outrdf2 and zoutieee modules.)]417.6 bull3 -[(Renamed changes.asm to changed.asm.)]400.6 bull3 -[{/section-C.2.47 xa}(Version 0.98p3.6)](C.2.47)381.4 subh3 -[(Fixed a bunch of instructions that were added in 0.98p3.5 which had memory operands, and the)]364.4 bull1 -[(address-size prefix was missing from the instruction pattern.)]353.4 bull2 -[{/section-C.2.48 xa}(Version 0.98p3.5)](C.2.48)334.2 subh3 -[(Merged in changes from John S. Fine's 0.98-J5 release. John's based 0.98-J5 on my 0.98p3.3 release; this)]317.2 bull1 -[(merges the changes.)]306.2 bull2 -[(Expanded the instructions flag field to a long so we can fit more flags; mark SSE \(KNI\) and AMD or)]289.2 bull1 -[(Katmai-specific instructions as such.)]278.2 bull2 -[(Fix the "PRIV" flag on a bunch of instructions, and create new "PROT" flag for protected-mode-only)]261.2 bull1 -[(instructions \(orthogonal to if the instruction is privileged!\) and new "SMM" flag for SMM-only)]250.2 bull0 -[(instructions.)]239.2 bull2 -[(Added AMD-only SYSCALL and SYSRET instructions.)]222.2 bull3 -[(Make SSE actually work, and add new Katmai MMX instructions.)]205.2 bull3 -[(Added a \226p \(preferred vendor\) option to ndisasm so that it can distinguish e.g. Cyrix opcodes also used in)]188.2 bull1 -[(SSE. For example:)]177.2 bull2 -[2( ndisasm -p cyrix aliased.bin )]160.2 code1 -[2( 00000000 670F514310 paddsiw mm0,[ebx+0x10] )]149.2 code0 -[2( 00000005 670F514320 paddsiw mm0,[ebx+0x20] )]138.2 code0 -[2( ndisasm -p intel aliased.bin )]127.2 code0 -[2( 00000000 670F514310 sqrtps xmm0,[ebx+0x10] )]116.2 code0 -[2( 00000005 670F514320 sqrtps xmm0,[ebx+0x20])]105.2 code2 -(197)pageodd -restore showpage -%%Page: 198 198 -%%BeginPageSetup -save -%%EndPageSetup -/198 pa -[(Added a bunch of Cyrix-specific instructions.)]681 bull3 -[{/section-C.2.49 xa}(Version 0.98p3.4)](C.2.49)661.8 subh3 -[(Made at least an attempt to modify all the additional Makefiles \(in the Mkfiles directory\). I can't test it, but)]644.8 bull1 -[(this was the best I could do.)]633.8 bull2 -[(DOS DJGPP+"Opus Make" Makefile from John S. Fine.)]616.8 bull3 -[(changes.asm changes from John S. Fine.)]599.8 bull3 -[{/section-C.2.50 xa}(Version 0.98p3.3)](C.2.50)580.6 subh3 -[(Patch from Conan Brink to allow nesting of )2(%rep)0( directives.)]563.6 bull3 -[(If we're going to allow INT01 as an alias for INT1/ICEBP \(one of Jules 0.98p3 changes\), then we should)]546.6 bull1 -[(allow INT03 as an alias for INT3 as well.)]535.6 bull2 -[(Updated changes.asm to include the latest changes.)]518.6 bull3 -[(Tried to clean up the <CR>s that had snuck in from a DOS/Windows environment into my Unix)]501.6 bull1 -[(environment, and try to make sure than DOS/Windows users get them back.)]490.6 bull2 -[(We would silently generate broken tools if insns.dat wasn't sorted properly. Change insns.pl so that the)]473.6 bull1 -[(order doesn't matter.)]462.6 bull2 -[(Fix bug in insns.pl \(introduced by me\) which would cause conditional instructions to have an extra "cc" in)]445.6 bull1 -[(disassembly, e.g. "jnz" disassembled as "jccnz".)]434.6 bull2 -[{/section-C.2.51 xa}(Version 0.98p3.2)](C.2.51)415.4 subh3 -[(Merged in John S. Fine's changes from his 0.98-J4 prerelease; see http://www.csoft.net/cz/johnfine/)]398.4 bull3 -[(Changed previous "spotless" Makefile target \(appropriate for distribution\) to "distclean", and added)]381.4 bull1 -[("cleaner" target which is same as "clean" except deletes files generated by Perl scripts; "spotless" is union.)]370.4 bull2 -[(Removed BASIC programs from distribution. Get a Perl interpreter instead \(see below.\))]353.4 bull3 -[(Calling this "pre-release 3.2" rather than "p3-hpa2" because of John's contributions.)]336.4 bull3 -[(Actually link in the IEEE output format \(zoutieee.c\); fix a bunch of compiler warnings in that file. Note I)]319.4 bull1 -[(don't know what IEEE output is supposed to look like, so these changes were made "blind".)]308.4 bull2 -[{/section-C.2.52 xa}(Version 0.98p3-hpa)](C.2.52)289.2 subh3 -[(Merged nasm098p3.zip with nasm-0.97.tar.gz to create a fully buildable version for Unix systems)]272.2 bull1 -[(\(Makefile.in updates, etc.\))]261.2 bull2 -[(Changed insns.pl to create the instruction tables in nasm.h and names.c, so that a new instruction can be)]244.2 bull1 -[(added by adding it *only* to insns.dat.)]233.2 bull2 -[(Added the following new instructions: SYSENTER, SYSEXIT, FXSAVE, FXRSTOR, UD1, UD2 \(the)]216.2 bull1 -[(latter two are two opcodes that Intel guarantee will never be used; one of them is documented as UD2 in)]205.2 bull0 -[(Intel documentation, the other one just as "Undefined Opcode" \226\226 calling it UD1 seemed to make sense.\))]194.2 bull2 -[(MAX_SYMBOL was defined to be 9, but LOADALL286 and LOADALL386 are 10 characters long. Now)]177.2 bull1 -[(MAX_SYMBOL is derived from insns.dat.)]166.2 bull2 -[(A note on the BASIC programs included: forget them. insns.bas is already out of date. Get yourself a Perl)]149.2 bull1 -[(interpreter for your platform of choice at ){(http://www.cpan.org/ports/index.html)wl}(http://www.cpan.org/ports/index.html){el}(.)]138.2 bull2 -[{/section-C.2.53 xa}(Version 0.98 pre-release 3)](C.2.53)119 subh3 -[(added response file support, improved command line handling, new layout help screen)]102 bull3 -(198)pageeven -restore showpage -%%Page: 199 199 -%%BeginPageSetup -save -%%EndPageSetup -/199 pa -[(fixed limit checking bug, 'OUT byte nn, reg' bug, and a couple of rdoff related bugs, updated Wishlist;)]681 bull1 -[(0.98 Prerelease 3.)]670 bull2 -[{/section-C.2.54 xa}(Version 0.98 pre-release 2)](C.2.54)650.8 subh3 -[(fixed bug in outcoff.c to do with truncating section names longer than 8 characters, referencing beyond end)]633.8 bull1 -[(of string; 0.98 pre-release 2)]622.8 bull2 -[{/section-C.2.55 xa}(Version 0.98 pre-release 1)](C.2.55)603.6 subh3 -[(Fixed a bug whereby STRUC didn't work at all in RDF.)]586.6 bull3 -[(Fixed a problem with group specification in PUBDEFs in OBJ.)]569.6 bull3 -[(Improved ease of adding new output formats. Contribution due to Fox Cutter.)]552.6 bull3 -[(Fixed a bug in relocations in the `bin' format: was showing up when a relocatable reference crossed an)]535.6 bull1 -[(8192-byte boundary in any output section.)]524.6 bull2 -[(Fixed a bug in local labels: local-label lookups were inconsistent between passes one and two if an EQU)]507.6 bull1 -[(occurred between the definition of a global label and the subsequent use of a local label local to that global.)]496.6 bull2 -[(Fixed a seg-fault in the preprocessor \(again\) which happened when you use a blank line as the first line of)]479.6 bull1 -[(a multi-line macro definition and then defined a label on the same line as a call to that macro.)]468.6 bull2 -[(Fixed a stale-pointer bug in the handling of the NASM environment variable. Thanks to Thomas)]451.6 bull1 -[(McWilliams.)]440.6 bull2 -[(ELF had a hard limit on the number of sections which caused segfaults when transgressed. Fixed.)]423.6 bull3 -[(Added ability for ndisasm to read from stdin by using `-' as the filename.)]406.6 bull3 -[(ndisasm wasn't outputting the TO keyword. Fixed.)]389.6 bull3 -[(Fixed error cascade on bogus expression in )2(%if)0( \226 an error in evaluation was causing the entire )2(%if)0( to be)]372.6 bull1 -[(discarded, thus creating trouble later when the )2(%else)0( or )2(%endif)0( was encountered.)]361.6 bull2 -[(Forward reference tracking was instruction-granular not operand- granular, which was causing)]344.6 bull1 -[(286-specific code to be generated needlessly on code of the form `shr word [forwardref],1'. Thanks to Jim)]333.6 bull0 -[(Hague for sending a patch.)]322.6 bull2 -[(All messages now appear on stdout, as sending them to stderr serves no useful purpose other than to make)]305.6 bull1 -[(redirection difficult.)]294.6 bull2 -[(Fixed the problem with EQUs pointing to an external symbol \226 this now generates an error message.)]277.6 bull3 -[(Allowed multiple size prefixes to an operand, of which only the first is taken into account.)]260.6 bull3 -[(Incorporated John Fine's changes, including fixes of a large number of preprocessor bugs, some small)]243.6 bull1 -[(problems in OBJ, and a reworking of label handling to define labels before their line is assembled, rather)]232.6 bull0 -[(than after.)]221.6 bull2 -[(Reformatted a lot of the source code to be more readable. Included 'coding.txt' as a guideline for how to)]204.6 bull1 -[(format code for contributors.)]193.6 bull2 -[(Stopped nested )2(%reps)0( causing a panic \226 they now cause a slightly more friendly error message instead.)]176.6 bull3 -[(Fixed floating point constant problems \(patch by Pedro Gimeno\))]159.6 bull3 -[(Fixed the return value of insn_size\(\) not being checked for \2261, indicating an error.)]142.6 bull3 -[(Incorporated 3Dnow! instructions.)]125.6 bull3 -[(Fixed the 'mov eax, eax + ebx' bug.)]108.6 bull3 -(199)pageodd -restore showpage -%%Page: 200 200 -%%BeginPageSetup -save -%%EndPageSetup -/200 pa -[(Fixed the GLOBAL EQU bug in ELF. Released developers release 3.)]681 bull3 -[(Incorporated John Fine's command line parsing changes)]664 bull3 -[(Incorporated David Lindauer's OMF debug support)]647 bull3 -[(Made changes for LCC 4.0 support \()2(__NASM_CDecl__)0(, removed register size specification warning)]630 bull1 -[(when sizes agree\).)]619 bull2 -[{/section-C.3 xa}(NASM 0.9 Series)](C.3)597.6 head3 -[(Revisions before 0.98.)]580.6 norm3 -[{/section-C.3.1 xa}(Version 0.97 released December 1997)](C.3.1)561.4 subh3 -[(This was entirely a bug-fix release to 0.96, which seems to have got cursed. Silly me.)]544.4 bull3 -[(Fixed stupid mistake in OBJ which caused `MOV EAX,<constant>' to fail. Caused by an error in the)]527.4 bull1 -[(`MOV EAX,<segment>' support.)]516.4 bull2 -[(ndisasm hung at EOF when compiled with lcc on Linux because lcc on Linux somehow breaks feof\(\).)]499.4 bull1 -[(ndisasm now does not rely on feof\(\).)]488.4 bull2 -[(A heading in the documentation was missing due to a markup error in the indexing. Fixed.)]471.4 bull3 -[(Fixed failure to update all pointers on realloc\(\) within extended- operand code in parser.c. Was causing)]454.4 bull1 -[(wrong behaviour and seg faults on lines such as `dd 0.0,0.0,0.0,0.0,...')]443.4 bull2 -[(Fixed a subtle preprocessor bug whereby invoking one multi-line macro on the first line of the expansion)]426.4 bull1 -[(of another, when the second had been invoked with a label defined before it, didn't expand the inner macro.)]415.4 bull2 -[(Added internal.doc back in to the distribution archives \226 it was missing in 0.96 *blush*)]398.4 bull3 -[(Fixed bug causing 0.96 to be unable to assemble its own test files, specifically objtest.asm. *blush again*)]381.4 bull3 -[(Fixed seg-faults and bogus error messages caused by mismatching )2(%rep)0( and )2(%endrep)0( within multi-line)]364.4 bull1 -[(macro definitions.)]353.4 bull2 -[(Fixed a problem with buffer overrun in OBJ, which was causing corruption at ends of long PUBDEF)]336.4 bull1 -[(records.)]325.4 bull2 -[(Separated DOS archives into main-program and documentation to reduce download size.)]308.4 bull3 -[{/section-C.3.2 xa}(Version 0.96 released November 1997)](C.3.2)289.2 subh3 -[(Fixed a bug whereby, if `nasm sourcefile' would cause a filename collision warning and put output into)]272.2 bull1 -[(`nasm.out', then `nasm sourcefile \226o outputfile' still gave the warning even though the `-o' was honoured.)]261.2 bull0 -[(Fixed name pollution under Digital UNIX: one of its header files defined R_SP, which broke the enum in)]250.2 bull0 -[(nasm.h.)]239.2 bull2 -[(Fixed minor instruction table problems: FUCOM and FUCOMP didn't have two-operand forms;)]222.2 bull1 -[(NDISASM didn't recognise the longer register forms of PUSH and POP \(eg FF F3 for PUSH BX\); TEST)]211.2 bull0 -[(mem,imm32 was flagged as undocumented; the 32-bit forms of CMOV had 16-bit operand size prefixes;)]200.2 bull0 -[(`AAD imm' and `AAM imm' are no longer flagged as undocumented because the Intel Architecture)]189.2 bull0 -[(reference documents them.)]178.2 bull2 -[(Fixed a problem with the local-label mechanism, whereby strange types of symbol \(EQUs, auto-defined)]161.2 bull1 -[(OBJ segment base symbols\) interfered with the `previous global label' value and screwed up local labels.)]150.2 bull2 -[(Fixed a bug whereby the stub preprocessor didn't communicate with the listing file generator, so that the)]133.2 bull1 -[(\226a and \226l options in conjunction would produce a useless listing file.)]122.2 bull2 -(200)pageeven -restore showpage -%%Page: 201 201 -%%BeginPageSetup -save -%%EndPageSetup -/201 pa -[(Merged `os2' object file format back into `obj', after discovering that `obj' _also_ shouldn't have a link)]681 bull1 -[(pass separator in a module containing a non-trivial MODEND. Flat segments are now declared using the)]670 bull0 -[(FLAT attribute. `os2' is no longer a valid object format name: use `obj'.)]659 bull2 -[(Removed the fixed-size temporary storage in the evaluator. Very very long expressions \(like `mov)]642 bull1 -[(ax,1+1+1+1+...' for two hundred 1s or so\) should now no longer crash NASM.)]631 bull2 -[(Fixed a bug involving segfaults on disassembly of MMX instructions, by changing the meaning of one of)]614 bull1 -[(the operand-type flags in nasm.h. This may cause other apparently unrelated MMX problems; it needs to)]603 bull0 -[(be tested thoroughly.)]592 bull2 -[(Fixed some buffer overrun problems with large OBJ output files. Thanks to DJ Delorie for the bug report)]575 bull1 -[(and fix.)]564 bull2 -[(Made preprocess-only mode actually listen to the )2(%line)0( markers as it prints them, so that it can report)]547 bull1 -[(errors more sanely.)]536 bull2 -[(Re-designed the evaluator to keep more sensible track of expressions involving forward references: can)]519 bull1 -[(now cope with previously-nightmare situations such as:)]508 bull2 -[2( mov ax,foo | bar )]491 code1 -[2( foo equ 1 )]480 code0 -[2( bar equ 2)]469 code2 -[(Added the ALIGN and ALIGNB standard macros.)]452 bull3 -[(Added PIC support in ELF: use of WRT to obtain the four extra relocation types needed.)]435 bull3 -[(Added the ability for output file formats to define their own extensions to the GLOBAL, COMMON and)]418 bull1 -[(EXTERN directives.)]407 bull2 -[(Implemented common-variable alignment, and global-symbol type and size declarations, in ELF.)]390 bull3 -[(Implemented NEAR and FAR keywords for common variables, plus far-common element size)]373 bull1 -[(specification, in OBJ.)]362 bull2 -[(Added a feature whereby EXTERNs and COMMONs in OBJ can be given a default WRT specification)]345 bull1 -[(\(either a segment or a group\).)]334 bull2 -[(Transformed the Unix NASM archive into an auto-configuring package.)]317 bull3 -[(Added a sanity-check for people applying SEG to things which are already segment bases: this previously)]300 bull1 -[(went unnoticed by the SEG processing and caused OBJ-driver panics later.)]289 bull2 -[(Added the ability, in OBJ format, to deal with `MOV EAX,<segment>' type references: OBJ doesn't)]272 bull1 -[(directly support dword-size segment base fixups, but as long as the low two bytes of the constant term are)]261 bull0 -[(zero, a word-size fixup can be generated instead and it will work.)]250 bull2 -[(Added the ability to specify sections' alignment requirements in Win32 object files and pure binary files.)]233 bull3 -[(Added preprocess-time expression evaluation: the )2(%assign)0( \(and )2(%iassign)0(\) directive and the bare )2(%if)]216 bull1 -[(\(and )2(%elif)0(\) conditional. Added relational operators to the evaluator, for use only in )2(%if)0( constructs: the)]205 bull0 -[(standard relationals = < > <= >= <> \(and C-like synonyms == and !=\) plus low-precedence logical)]194 bull0 -[(operators &&, ^^ and ||.)]183 bull2 -[(Added a preprocessor repeat construct: )2(%rep)0( / )2(%exitrep)0( / )2(%endrep)0(.)]166 bull3 -[(Added the __FILE__ and __LINE__ standard macros.)]149 bull3 -[(Added a sanity check for number constants being greater than 0xFFFFFFFF. The warning can be disabled.)]132 bull3 -[(Added the %0 token whereby a variadic multi-line macro can tell how many parameters it's been given in)]115 bull1 -[(a specific invocation.)]104 bull2 -(201)pageodd -restore showpage -%%Page: 202 202 -%%BeginPageSetup -save -%%EndPageSetup -/202 pa -[(Added )2(%rotate)0(, allowing multi-line macro parameters to be cycled.)]681 bull3 -[(Added the `*' option for the maximum parameter count on multi-line macros, allowing them to take)]664 bull1 -[(arbitrarily many parameters.)]653 bull2 -[(Added the ability for the user-level forms of EXTERN, GLOBAL and COMMON to take more than one)]636 bull1 -[(argument.)]625 bull2 -[(Added the IMPORT and EXPORT directives in OBJ format, to deal with Windows DLLs.)]608 bull3 -[(Added some more preprocessor )2(%if)0( constructs: )2(%ifidn)0( / )2(%ifidni)0( \(exact textual identity\), and )2(%ifid)]591 bull1 -[(/ )2(%ifnum)0( / )2(%ifstr)0( \(token type testing\).)]580 bull2 -[(Added the ability to distinguish SHL AX,1 \(the 8086 version\) from SHL AX,BYTE 1 \(the)]563 bull1 -[(286-and-upwards version whose constant happens to be 1\).)]552 bull2 -[(Added NetBSD/FreeBSD/OpenBSD's variant of a.out format, complete with PIC shared library features.)]535 bull3 -[(Changed NASM's idiosyncratic handling of FCLEX, FDISI, FENI, FINIT, FSAVE, FSTCW, FSTENV,)]518 bull1 -[(and FSTSW to bring it into line with the otherwise accepted standard. The previous behaviour, though it)]507 bull0 -[(was a deliberate feature, was a deliberate feature based on a misunderstanding. Apologies for the)]496 bull0 -[(inconvenience.)]485 bull2 -[(Improved the flexibility of ABSOLUTE: you can now give it an expression rather than being restricted to a)]468 bull1 -[(constant, and it can take relocatable arguments as well.)]457 bull2 -[(Added the ability for a variable to be declared as EXTERN multiple times, and the subsequent definitions)]440 bull1 -[(are just ignored.)]429 bull2 -[(We now allow instruction prefixes \(CS, DS, LOCK, REPZ etc\) to be alone on a line \(without a following)]412 bull1 -[(instruction\).)]401 bull2 -[(Improved sanity checks on whether the arguments to EXTERN, GLOBAL and COMMON are valid)]384 bull1 -[(identifiers.)]373 bull2 -[(Added misc/exebin.mac to allow direct generation of .EXE files by hacking up an EXE header using DB)]356 bull1 -[(and DW; also added test/binexe.asm to demonstrate the use of this. Thanks to Yann Guidon for)]345 bull0 -[(contributing the EXE header code.)]334 bull2 -[(ndisasm forgot to check whether the input file had been successfully opened. Now it does. Doh!)]317 bull3 -[(Added the Cyrix extensions to the MMX instruction set.)]300 bull3 -[(Added a hinting mechanism to allow [EAX+EBX] and [EBX+EAX] to be assembled differently. This is)]283 bull1 -[(important since [ESI+EBP] and [EBP+ESI] have different default base segment registers.)]272 bull2 -[(Added support for the PharLap OMF extension for 4096-byte segment alignment.)]255 bull3 -[{/section-C.3.3 xa}(Version 0.95 released July 1997)](C.3.3)235.8 subh3 -[(Fixed yet another ELF bug. This one manifested if the user relied on the default segment, and attempted to)]218.8 bull1 -[(define global symbols without first explicitly declaring the target segment.)]207.8 bull2 -[(Added makefiles \(for NASM and the RDF tools\) to build Win32 console apps under Symantec C++.)]190.8 bull1 -[(Donated by Mark Junker.)]179.8 bull2 -[(Added `macros.bas' and `insns.bas', QBasic versions of the Perl scripts that convert `standard.mac' to)]162.8 bull1 -[(`macros.c' and convert `insns.dat' to `insnsa.c' and `insnsd.c'. Also thanks to Mark Junker.)]151.8 bull2 -[(Changed the diassembled forms of the conditional instructions so that JB is now emitted as JC, and other)]134.8 bull1 -[(similar changes. Suggested list by Ulrich Doewich.)]123.8 bull2 -[(Added `@' to the list of valid characters to begin an identifier with.)]106.8 bull3 -(202)pageeven -restore showpage -%%Page: 203 203 -%%BeginPageSetup -save -%%EndPageSetup -/203 pa -[(Documentary changes, notably the addition of the `Common Problems' section in nasm.doc.)]681 bull3 -[(Fixed a bug relating to 32-bit PC-relative fixups in OBJ.)]664 bull3 -[(Fixed a bug in perm_copy\(\) in labels.c which was causing exceptions in cleanup_labels\(\) on some systems.)]647 bull3 -[(Positivity sanity check in TIMES argument changed from a warning to an error following a further)]630 bull1 -[(complaint.)]619 bull2 -[(Changed the acceptable limits on byte and word operands to allow things like `~10111001b' to work.)]602 bull3 -[(Fixed a major problem in the preprocessor which caused seg-faults if macro definitions contained blank)]585 bull1 -[(lines or comment-only lines.)]574 bull2 -[(Fixed inadequate error checking on the commas separating the arguments to `db', `dw' etc.)]557 bull3 -[(Fixed a crippling bug in the handling of macros with operand counts defined with a `+' modifier.)]540 bull3 -[(Fixed a bug whereby object file formats which stored the input file name in the output file \(such as OBJ)]523 bull1 -[(and COFF\) weren't doing so correctly when the output file name was specified on the command line.)]512 bull2 -[(Removed [INC] and [INCLUDE] support for good, since they were obsolete anyway.)]495 bull3 -[(Fixed a bug in OBJ which caused all fixups to be output in 16-bit \(old-format\) FIXUPP records, rather)]478 bull1 -[(than putting the 32-bit ones in FIXUPP32 \(new-format\) records.)]467 bull2 -[(Added, tentatively, OS/2 object file support \(as a minor variant on OBJ\).)]450 bull3 -[(Updates to Fox Cutter's Borland C makefile, Makefile.bc2.)]433 bull3 -[(Removed a spurious second fclose\(\) on the output file.)]416 bull3 -[(Added the `-s' command line option to redirect all messages which would go to stderr \(errors, help text\) to)]399 bull1 -[(stdout instead.)]388 bull2 -[(Added the `-w' command line option to selectively suppress some classes of assembly warning messages.)]371 bull3 -[(Added the `-p' pre-include and `-d' pre-define command-line options.)]354 bull3 -[(Added an include file search path: the `-i' command line option.)]337 bull3 -[(Fixed a silly little preprocessor bug whereby starting a line with a `%!' environment-variable reference)]320 bull1 -[(caused an `unknown directive' error.)]309 bull2 -[(Added the long-awaited listing file support: the `-l' command line option.)]292 bull3 -[(Fixed a problem with OBJ format whereby, in the absence of any explicit segment definition, non-global)]275 bull1 -[(symbols declared in the implicit default segment generated spurious EXTDEF records in the output.)]264 bull2 -[(Added the NASM environment variable.)]247 bull3 -[(From this version forward, Win32 console-mode binaries will be included in the DOS distribution in)]230 bull1 -[(addition to the 16-bit binaries. Added Makefile.vc for this purpose.)]219 bull2 -[(Added `return 0;' to test/objlink.c to prevent compiler warnings.)]202 bull3 -[(Added the __NASM_MAJOR__ and __NASM_MINOR__ standard defines.)]185 bull3 -[(Added an alternative memory-reference syntax in which prefixing an operand with `&' is equivalent to)]168 bull1 -[(enclosing it in square brackets, at the request of Fox Cutter.)]157 bull2 -[(Errors in pass two now cause the program to return a non-zero error code, which they didn't before.)]140 bull3 -[(Fixed the single-line macro cycle detection, which didn't work at all on macros with no parameters)]123 bull1 -[(\(caused an infinite loop\). Also changed the behaviour of single-line macro cycle detection to work like)]112 bull0 -[(cpp, so that macros like `extrn' as given in the documentation can be implemented.)]101 bull2 -(203)pageodd -restore showpage -%%Page: 204 204 -%%BeginPageSetup -save -%%EndPageSetup -/204 pa -[(Fixed the implementation of WRT, which was too restrictive in that you couldn't do `mov ax,[di+abc wrt)]681 bull1 -[(dgroup]' because \(di+abc\) wasn't a relocatable reference.)]670 bull2 -[{/section-C.3.4 xa}(Version 0.94 released April 1997)](C.3.4)650.8 subh3 -[(Major item: added the macro processor.)]633.8 bull3 -[(Added undocumented instructions SMI, IBTS, XBTS and LOADALL286. Also reorganised CMPXCHG)]616.8 bull1 -[(instruction into early-486 and Pentium forms. Thanks to Thobias Jones for the information.)]605.8 bull2 -[(Fixed two more stupid bugs in ELF, which were causing `ld' to continue to seg-fault in a lot of non-trivial)]588.8 bull1 -[(cases.)]577.8 bull2 -[(Fixed a seg-fault in the label manager.)]560.8 bull3 -[(Stopped FBLD and FBSTP from _requiring_ the TWORD keyword, which is the only option for BCD)]543.8 bull1 -[(loads/stores in any case.)]532.8 bull2 -[(Ensured FLDCW, FSTCW and FSTSW can cope with the WORD keyword, if anyone bothers to provide)]515.8 bull1 -[(it. Previously they complained unless no keyword at all was present.)]504.8 bull2 -[(Some forms of FDIV/FDIVR and FSUB/FSUBR were still inverted: a vestige of a bug that I thought had)]487.8 bull1 -[(been fixed in 0.92. This was fixed, hopefully for good this time...)]476.8 bull2 -[(Another minor phase error \(insofar as a phase error can _ever_ be minor\) fixed, this one occurring in code)]459.8 bull1 -[(of the form)]448.8 bull2 -[2( rol ax,forward_reference )]431.8 code1 -[2( forward_reference equ 1)]420.8 code2 -[(The number supplied to TIMES is now sanity-checked for positivity, and also may be greater than 64K)]403.8 bull1 -[(\(which previously didn't work on 16-bit systems\).)]392.8 bull2 -[(Added Watcom C makefiles, and misc/pmw.bat, donated by Dominik Behr.)]375.8 bull3 -[(Added the INCBIN pseudo-opcode.)]358.8 bull3 -[(Due to the advent of the preprocessor, the [INCLUDE] and [INC] directives have become obsolete. They)]341.8 bull1 -[(are still supported in this version, with a warning, but won't be in the next.)]330.8 bull2 -[(Fixed a bug in OBJ format, which caused incorrect object records to be output when absolute labels were)]313.8 bull1 -[(made global.)]302.8 bull2 -[(Updates to RDOFF subdirectory, and changes to outrdf.c.)]285.8 bull3 -[{/section-C.3.5 xa}(Version 0.93 released January 1997)](C.3.5)266.6 subh3 -[(This release went out in a great hurry after semi-crippling bugs were found in 0.92.)]249.6 norm3 -[(Really )1(did)0( fix the stack overflows this time. *blush*)]232.6 bull3 -[(Had problems with EA instruction sizes changing between passes, when an offset contained a forward)]215.6 bull1 -[(reference and so 4 bytes were allocated for the offset in pass one; by pass two the symbol had been defined)]204.6 bull0 -[(and happened to be a small absolute value, so only 1 byte got allocated, causing instruction size mismatch)]193.6 bull0 -[(between passes and hence incorrect address calculations. Fixed.)]182.6 bull2 -[(Stupid bug in the revised ELF section generation fixed \(associated string-table section for .symtab was)]165.6 bull1 -[(hard-coded as 7, even when this didn't fit with the real section table\). Was causing `ld' to seg-fault under)]154.6 bull0 -[(Linux.)]143.6 bull2 -[(Included a new Borland C makefile, Makefile.bc2, donated by Fox Cutter <lmb@comtch.iea.com>.)]126.6 bull3 -(204)pageeven -restore showpage -%%Page: 205 205 -%%BeginPageSetup -save -%%EndPageSetup -/205 pa -[{/section-C.3.6 xa}(Version 0.92 released January 1997)](C.3.6)678.8 subh3 -[(The FDIVP/FDIVRP and FSUBP/FSUBRP pairs had been inverted: this was fixed. This also affected the)]661.8 bull1 -[(LCC driver.)]650.8 bull2 -[(Fixed a bug regarding 32-bit effective addresses of the form )2([other_register+ESP])0(.)]633.8 bull3 -[(Documentary changes, notably documentation of the fact that Borland Win32 compilers use `obj' rather)]616.8 bull1 -[(than `win32' object format.)]605.8 bull2 -[(Fixed the COMENT record in OBJ files, which was formatted incorrectly.)]588.8 bull3 -[(Fixed a bug causing segfaults in large RDF files.)]571.8 bull3 -[(OBJ format now strips initial periods from segment and group definitions, in order to avoid complications)]554.8 bull1 -[(with the local label syntax.)]543.8 bull2 -[(Fixed a bug in disassembling far calls and jumps in NDISASM.)]526.8 bull3 -[(Added support for user-defined sections in COFF and ELF files.)]509.8 bull3 -[(Compiled the DOS binaries with a sensible amount of stack, to prevent stack overflows on any arithmetic)]492.8 bull1 -[(expression containing parentheses.)]481.8 bull2 -[(Fixed a bug in handling of files that do not terminate in a newline.)]464.8 bull3 -[{/section-C.3.7 xa}(Version 0.91 released November 1996)](C.3.7)445.6 subh3 -[(Loads of bug fixes.)]428.6 bull3 -[(Support for RDF added.)]411.6 bull3 -[(Support for DBG debugging format added.)]394.6 bull3 -[(Support for 32-bit extensions to Microsoft OBJ format added.)]377.6 bull3 -[(Revised for Borland C: some variable names changed, makefile added.)]360.6 bull3 -[(LCC support revised to actually work.)]343.6 bull3 -[(JMP/CALL NEAR/FAR notation added.)]326.6 bull3 -[(`a16', `o16', `a32' and `o32' prefixes added.)]309.6 bull3 -[(Range checking on short jumps implemented.)]292.6 bull3 -[(MMX instruction support added.)]275.6 bull3 -[(Negative floating point constant support added.)]258.6 bull3 -[(Memory handling improved to bypass 64K barrier under DOS.)]241.6 bull3 -[2($)0( prefix to force treatment of reserved words as identifiers added.)]224.6 bull3 -[(Default-size mechanism for object formats added.)]207.6 bull3 -[(Compile-time configurability added.)]190.6 bull3 -[2(#)0(, )2(@)0(, )2(~)0( and c{?} are now valid characters in labels.)]173.6 bull3 -[2(-e)0( and )2(-k)0( options in NDISASM added.)]156.6 bull3 -[{/section-C.3.8 xa}(Version 0.90 released October 1996)](C.3.8)137.4 subh3 -[(First release version. First support for object file output. Other changes from previous version \(0.3x\) too)]120.4 norm1 -[(numerous to document.)]109.4 norm2 -(205)pageodd -restore showpage -%%Page: 206 206 -%%BeginPageSetup -save -%%EndPageSetup -/206 pa -[{/index xa}(Index)]642.8 chap3 -[2(!)0( operator, unary)][{/34 pl}(34){el}]607.8 0 idx03 -[2(!=)0( operator)][{/50 pl}(50){el}]596.8 0 idx03 -[2($$)0( token)][{/33 pl}(33,){el}( ){/86 pl}(86){el}]585.8 0 idx03 -[2($)][]574.8 0 idx03 -[(Here token)][{/33 pl}(33){el}]563.8 0 idx13 -[(prefix)][{/26 pl}(26,){el}( ){/29 pl}(29,){el}( ){/89 pl}(89){el}]552.8 0 idx13 -[2(%)0( operator)][{/33 pl}(33){el}]541.8 0 idx03 -[2(%!)][{/60 pl}(60){el}]530.8 0 idx03 -[2(%$)0( and )2(%$$)0( prefixes)][{/54 pl}(54,){el}( ){/55 pl}(55){el}]519.8 0 idx03 -[2(%%)0( operator)][{/33 pl}(33,){el}( ){/44 pl}(44){el}]508.8 0 idx03 -[2(%+)][{/39 pl}(39){el}]497.8 0 idx03 -[2(%?)][{/39 pl}(39){el}]486.8 0 idx03 -[2(%??)][{/39 pl}(39){el}]475.8 0 idx03 -[2(%[)][{/39 pl}(39){el}]464.8 0 idx03 -[2(&)0( operator)][{/33 pl}(33){el}]453.8 0 idx03 -[2(&&)0( operator)][{/50 pl}(50){el}]442.8 0 idx03 -[2(*)0( operator)][{/33 pl}(33){el}]431.8 0 idx03 -[2(+)0( modifier)][{/44 pl}(44){el}]420.8 0 idx03 -[2(+)0( operator)][]409.8 0 idx03 -[(binary)][{/33 pl}(33){el}]398.8 0 idx13 -[(unary)][{/34 pl}(34){el}]387.8 0 idx13 -[2(-)0( operator)][]376.8 0 idx03 -[(binary)][{/33 pl}(33){el}]365.8 0 idx13 -[(unary)][{/34 pl}(34){el}]354.8 0 idx13 -[2(..@)0( symbol prefix)][{/36 pl}(36,){el}( ){/44 pl}(44){el}]343.8 0 idx03 -[2(/)0( operator)][{/33 pl}(33){el}]332.8 0 idx03 -[2(//)0( operator)][{/33 pl}(33){el}]321.8 0 idx03 -[2(<)0( operator)][{/50 pl}(50){el}]310.8 0 idx03 -[2(<<)0( operator)][{/33 pl}(33){el}]299.8 0 idx03 -[2(<=)0( operator)][{/50 pl}(50){el}]288.8 0 idx03 -[2(<>)0( operator)][{/50 pl}(50){el}]277.8 0 idx03 -[2(=)0( operator)][{/50 pl}(50){el}]266.8 0 idx03 -[2(==)0( operator)][{/50 pl}(50){el}]255.8 0 idx03 -[2(>)0( operator)][{/50 pl}(50){el}]244.8 0 idx03 -[2(>=)0( operator)][{/50 pl}(50){el}]233.8 0 idx03 -[2(>>)0( operator)][{/33 pl}(33){el}]222.8 0 idx03 -[2(?)0( MASM syntax)][{/27 pl}(27){el}]211.8 0 idx03 -[2(^)0( operator)][{/33 pl}(33){el}]200.8 0 idx03 -[2(^^)0( operator)][{/50 pl}(50){el}]189.8 0 idx03 -[2(|)0( operator)][{/33 pl}(33){el}]178.8 0 idx03 -[2(||)0( operator)][{/50 pl}(50){el}]167.8 0 idx03 -[2(~)0( operator)][{/34 pl}(34){el}]156.8 0 idx03 -[2(%0)0( parameter count)][{/45 pl}(45){el}]145.8 0 idx03 -[2(%+1)0( and )2(%-1)0( syntax)][{/47 pl}(47){el}]134.8 0 idx03 -[(16-bit mode, versus 32-bit mode)][{/67 pl}(67){el}]123.8 0 idx03 -[(64-bit displacement)][{/114 pl}(114){el}]112.8 0 idx03 -[(64-bit immediate)][{/113 pl}(113){el}]101.8 0 idx03 -[2(-a)0( option)][{/21 pl}(21,){el}( ){/120 pl}(120){el}]607.8 1 idx03 -[2(A16)][{/26 pl}(26){el}]596.8 1 idx03 -[2(a16)][{/111 pl}(111){el}]585.8 1 idx03 -[2(A32)][{/26 pl}(26){el}]574.8 1 idx03 -[2(a32)][{/111 pl}(111){el}]563.8 1 idx03 -[2(A64)][{/26 pl}(26){el}]552.8 1 idx03 -[2(a64)][{/111 pl}(111){el}]541.8 1 idx03 -[2(a86)][{/14 pl}(14,){el}( ){/24 pl}(24,){el}( ){/25 pl}(25){el}]530.8 1 idx03 -[2(ABS)][{/29 pl}(29){el}]519.8 1 idx03 -[2(ABSOLUTE)][{/69 pl}(69,){el}( ){/76 pl}(76){el}]508.8 1 idx03 -[(addition)][{/33 pl}(33){el}]497.8 1 idx03 -[(addressing, mixed-size)][{/110 pl}(110){el}]486.8 1 idx03 -[(address-size prefixes)][{/26 pl}(26){el}]475.8 1 idx03 -[(algebra)][{/29 pl}(29){el}]464.8 1 idx03 -[2(ALIGN)][{/64 pl}(64,){el}( ){/66 pl}(66,){el}( ){/73 pl}(73,){el}( ){/76 pl}(76){el}]453.8 1 idx03 -[(smart)][{/66 pl}(66){el}]442.8 1 idx13 -[2(ALIGNB)][{/64 pl}(64){el}]431.8 1 idx03 -[(alignment)][]420.8 1 idx03 -[(in )2(bin)0( sections)][{/74 pl}(74){el}]409.8 1 idx13 -[(in )2(elf)0( sections)][{/85 pl}(85){el}]398.8 1 idx13 -[(in )2(obj)0( sections)][{/76 pl}(76){el}]387.8 1 idx13 -[(in )2(win32)0( sections)][{/79 pl}(79){el}]376.8 1 idx13 -[(of )2(elf)0( common variables)][{/87 pl}(87){el}]365.8 1 idx13 -[2(ALIGNMODE)][{/66 pl}(66){el}]354.8 1 idx03 -[2(__ALIGNMODE__)][{/66 pl}(66){el}]343.8 1 idx03 -[2(ALINK)][{/91 pl}(91){el}]332.8 1 idx03 -[2(alink.sourceforge.net)][{/91 pl}(91){el}]321.8 1 idx03 -[2(all)][{/23 pl}(23){el}]310.8 1 idx03 -[2(alloc)][{/85 pl}(85){el}]299.8 1 idx03 -[(alternate register names)][{/66 pl}(66){el}]288.8 1 idx03 -[2(alt.lang.asm)][{/14 pl}(14){el}]277.8 1 idx03 -[2(altreg)][{/66 pl}(66){el}]266.8 1 idx03 -[(ambiguity)][{/24 pl}(24){el}]255.8 1 idx03 -[2(a.out)][]244.8 1 idx03 -[(BSD version)][{/88 pl}(88){el}]233.8 1 idx13 -[(Linux version)][{/88 pl}(88){el}]222.8 1 idx13 -[2(aout)][{/88 pl}(88){el}]211.8 1 idx03 -[2(aoutb)][{/88 pl}(88,){el}( ){/106 pl}(106){el}]200.8 1 idx03 -[2(%arg)][{/57 pl}(57){el}]189.8 1 idx03 -[2(arg)][{/98 pl}(98,){el}( ){/105 pl}(105){el}]178.8 1 idx03 -[2(as86)][{/14 pl}(14,){el}( ){/88 pl}(88){el}]167.8 1 idx03 -[(assembler directives)][{/67 pl}(67){el}]156.8 1 idx03 -[(assembly-time options)][{/21 pl}(21){el}]145.8 1 idx03 -[2(%assign)][{/40 pl}(40){el}]134.8 1 idx03 -[2(ASSUME)][{/25 pl}(25){el}]123.8 1 idx03 -[2(AT)][{/63 pl}(63){el}]112.8 1 idx03 -[(Autoconf)][{/16 pl}(16){el}]101.8 1 idx03 -(206)pageeven -restore showpage -%%Page: 207 207 -%%BeginPageSetup -save -%%EndPageSetup -/207 pa -[2(autoexec.bat)][{/15 pl}(15){el}]681 0 idx03 -[2(auto-sync)][{/120 pl}(120){el}]670 0 idx03 -[2(-b)][{/119 pl}(119){el}]659 0 idx03 -[(bin)][{/18 pl}(18,){el}( ){/73 pl}(73){el}]648 0 idx03 -[(multisection)][{/74 pl}(74){el}]637 0 idx13 -[(binary)][{/29 pl}(29){el}]626 0 idx03 -[(binary files)][{/27 pl}(27){el}]615 0 idx03 -[(bit shift)][{/33 pl}(33){el}]604 0 idx03 -[2(BITS)][{/67 pl}(67,){el}( ){/73 pl}(73){el}]593 0 idx03 -[2(__BITS__)][{/61 pl}(61){el}]582 0 idx03 -[(bitwise AND)][{/33 pl}(33){el}]571 0 idx03 -[(bitwise OR)][{/33 pl}(33){el}]560 0 idx03 -[(bitwise XOR)][{/33 pl}(33){el}]549 0 idx03 -[(block IFs)][{/55 pl}(55){el}]538 0 idx03 -[(boot loader)][{/73 pl}(73){el}]527 0 idx03 -[(boot sector)][{/116 pl}(116){el}]516 0 idx03 -[(Borland)][]505 0 idx03 -[(Pascal)][{/99 pl}(99){el}]494 0 idx13 -[(Win32 compilers)][{/75 pl}(75){el}]483 0 idx13 -[(braces)][]472 0 idx03 -[(after )2(%)0( sign)][{/47 pl}(47){el}]461 0 idx13 -[(around macro parameters)][{/42 pl}(42){el}]450 0 idx13 -[(BSD)][{/106 pl}(106){el}]439 0 idx03 -[2(.bss)][{/85 pl}(85,){el}( ){/88 pl}(88,){el}( ){/89 pl}(89){el}]428 0 idx03 -[(bugs)][{/117 pl}(117){el}]417 0 idx03 -[2(bugtracker)][{/117 pl}(117){el}]406 0 idx03 -[2(BYTE)][{/116 pl}(116){el}]395 0 idx03 -[(C calling convention)][{/96 pl}(96,){el}( ){/103 pl}(103){el}]384 0 idx03 -[(C symbol names)][{/94 pl}(94){el}]373 0 idx03 -[2(c16.mac)][{/98 pl}(98,){el}( ){/101 pl}(101){el}]362 0 idx03 -[2(c32.mac)][{/105 pl}(105){el}]351 0 idx03 -[2(CALL FAR)][{/34 pl}(34){el}]340 0 idx03 -[(case sensitivity)][{/24 pl}(24,){el}( ){/37 pl}(37,){el}( ){/38 pl}(38,){el}( ){/40 pl}(40,){el}( ){/42 pl}(42,){el}( ){/43 pl}(43,){el}( ){/50 pl}(50,){el}( ){/77 pl}(77){el}]329 0 idx03 -[(changing sections)][{/68 pl}(68){el}]318 0 idx03 -[(character constant)][{/27 pl}(27,){el}( ){/31 pl}(31){el}]307 0 idx03 -[(character strings)][{/30 pl}(30){el}]296 0 idx03 -[(circular references)][{/37 pl}(37){el}]285 0 idx03 -[2(CLASS)][{/76 pl}(76){el}]274 0 idx03 -[2(%clear)][{/60 pl}(60){el}]263 0 idx03 -[2(coff)][{/85 pl}(85){el}]252 0 idx03 -[(colon)][{/26 pl}(26){el}]241 0 idx03 -[2(.COM)][{/73 pl}(73,){el}( ){/93 pl}(93){el}]230 0 idx03 -[(command-line)][{/17 pl}(17,){el}( ){/73 pl}(73){el}]219 0 idx03 -[(commas in macro parameters)][{/45 pl}(45){el}]208 0 idx03 -[2(.comment)][{/85 pl}(85){el}]197 0 idx03 -[2(COMMON)][{/70 pl}(70,){el}( ){/75 pl}(75){el}]186 0 idx03 -[2(elf)0( extensions to)][{/87 pl}(87){el}]175 0 idx13 -[2(obj)0( extensions to)][{/78 pl}(78){el}]164 0 idx13 -[(Common Object File Format)][{/85 pl}(85){el}]153 0 idx03 -[(common variables)][{/70 pl}(70){el}]142 0 idx03 -[(alignment in )2(elf)][{/87 pl}(87){el}]131 0 idx13 -[(element size)][{/78 pl}(78){el}]120 0 idx13 -[2(comp.lang.asm.x86)][{/14 pl}(14,){el}( ){/15 pl}(15){el}]109 0 idx03 -[2(comp.os.msdos.programmer)][{/94 pl}(94){el}]681 1 idx03 -[(concatenating macro parameters)][{/46 pl}(46){el}]670 1 idx03 -[(concatenating strings)][{/41 pl}(41){el}]659 1 idx03 -[(condition codes as macro parameters)][{/47 pl}(47){el}]648 1 idx03 -[(conditional assembly)][{/49 pl}(49){el}]637 1 idx03 -[(conditional jumps)][{/116 pl}(116){el}]626 1 idx03 -[(conditional-return macro)][{/47 pl}(47){el}]615 1 idx03 -[2(configure)][{/16 pl}(16){el}]604 1 idx03 -[(constants)][{/29 pl}(29){el}]593 1 idx03 -[(context stack)][{/54 pl}(54,){el}( ){/55 pl}(55){el}]582 1 idx03 -[(context-local labels)][{/54 pl}(54){el}]571 1 idx03 -[(context-local single-line macros)][{/55 pl}(55){el}]560 1 idx03 -[(counting macro parameters)][{/45 pl}(45){el}]549 1 idx03 -[2(CPU)][{/71 pl}(71){el}]538 1 idx03 -[2(CPUID)][{/31 pl}(31){el}]527 1 idx03 -[(creating contexts)][{/54 pl}(54){el}]516 1 idx03 -[(critical expression)][{/27 pl}(27,){el}( ){/35 pl}(35,){el}( ){/40 pl}(40,){el}( ){/69 pl}(69){el}]505 1 idx03 -[2(-D)0( option)][{/20 pl}(20){el}]494 1 idx03 -[2(-d)0( option)][{/20 pl}(20){el}]483 1 idx03 -[(daily development snapshots)][{/15 pl}(15){el}]472 1 idx03 -[2(.data)][{/85 pl}(85,){el}( ){/88 pl}(88,){el}( ){/89 pl}(89){el}]461 1 idx03 -[2(_DATA)][{/96 pl}(96){el}]450 1 idx03 -[2(data)][{/87 pl}(87,){el}( ){/89 pl}(89){el}]439 1 idx03 -[(data structure)][{/98 pl}(98,){el}( ){/105 pl}(105){el}]428 1 idx03 -[2(__DATE__)][{/61 pl}(61){el}]417 1 idx03 -[2(__DATE_NUM__)][{/61 pl}(61){el}]406 1 idx03 -[2(DB)][{/27 pl}(27,){el}( ){/31 pl}(31){el}]395 1 idx03 -[2(dbg)][{/90 pl}(90){el}]384 1 idx03 -[2(DD)][{/27 pl}(27,){el}( ){/31 pl}(31){el}]373 1 idx03 -[(debug information)][{/19 pl}(19){el}]362 1 idx03 -[(debug information format)][{/19 pl}(19){el}]351 1 idx03 -[(declaring structures)][{/62 pl}(62){el}]340 1 idx03 -[2(DEFAULT)][{/68 pl}(68){el}]329 1 idx03 -[2(default)][{/87 pl}(87){el}]318 1 idx03 -[(default macro parameters)][{/45 pl}(45){el}]307 1 idx03 -[(default name)][{/73 pl}(73){el}]296 1 idx03 -[(default-)2(WRT)0( mechanism)][{/78 pl}(78){el}]285 1 idx03 -[2(%define)][{/20 pl}(20,){el}( ){/37 pl}(37){el}]274 1 idx03 -[(defining sections)][{/68 pl}(68){el}]263 1 idx03 -[2(%defstr)][{/41 pl}(41){el}]252 1 idx03 -[2(%deftok)][{/41 pl}(41){el}]241 1 idx03 -[2(%depend)][{/53 pl}(53){el}]230 1 idx03 -[(design goals)][{/24 pl}(24){el}]219 1 idx03 -[(DevPac)][{/27 pl}(27,){el}( ){/35 pl}(35){el}]208 1 idx03 -[(disabling listing expansion)][{/48 pl}(48){el}]197 1 idx03 -[(division)][{/33 pl}(33){el}]186 1 idx03 -[(DJGPP)][{/85 pl}(85,){el}( ){/103 pl}(103){el}]175 1 idx03 -[2(djlink)][{/91 pl}(91){el}]164 1 idx03 -[(DLL symbols)][]153 1 idx03 -[(exporting)][{/77 pl}(77){el}]142 1 idx13 -[(importing)][{/77 pl}(77){el}]131 1 idx13 -[2(DO)][{/27 pl}(27,){el}( ){/31 pl}(31){el}]120 1 idx03 -[(DOS)][{/15 pl}(15,){el}( ){/20 pl}(20){el}]109 1 idx03 -(207)pageodd -restore showpage -%%Page: 208 208 -%%BeginPageSetup -save -%%EndPageSetup -/208 pa -[(DOS archive)][]681 0 idx03 -[(DOS source archive)][{/15 pl}(15){el}]670 0 idx03 -[2(DQ)][{/27 pl}(27,){el}( ){/31 pl}(31){el}]659 0 idx03 -[2(.drectve)][{/79 pl}(79){el}]648 0 idx03 -[2(DT)][{/27 pl}(27,){el}( ){/31 pl}(31){el}]637 0 idx03 -[2(DUP)][{/25 pl}(25,){el}( ){/28 pl}(28){el}]626 0 idx03 -[2(DW)][{/27 pl}(27,){el}( ){/31 pl}(31){el}]615 0 idx03 -[2(DWORD)][{/27 pl}(27){el}]604 0 idx03 -[2(DY)][{/27 pl}(27,){el}( ){/31 pl}(31){el}]593 0 idx03 -[2(-E)0( option)][{/21 pl}(21){el}]582 0 idx03 -[2(-e)0( option)][{/21 pl}(21,){el}( ){/121 pl}(121){el}]571 0 idx03 -[(effective addresses)][{/26 pl}(26,){el}( ){/28 pl}(28){el}]560 0 idx03 -[(element size, in common variables)][{/78 pl}(78){el}]549 0 idx03 -[(ELF)][{/85 pl}(85){el}]538 0 idx03 -[(shared libraries)][{/86 pl}(86){el}]527 0 idx13 -[(16-bit code and)][{/88 pl}(88){el}]516 0 idx13 -[(elf, debug formats and)][{/88 pl}(88){el}]505 0 idx03 -[2(elf32)][{/85 pl}(85){el}]494 0 idx03 -[2(elf64)][{/85 pl}(85){el}]483 0 idx03 -[2(%elif)][{/49 pl}(49,){el}( ){/50 pl}(50){el}]472 0 idx03 -[2(%elifctx)][{/50 pl}(50){el}]461 0 idx03 -[2(%elifdef)][{/49 pl}(49){el}]450 0 idx03 -[2(%elifempty)][{/52 pl}(52){el}]439 0 idx03 -[2(%elifid)][{/51 pl}(51){el}]428 0 idx03 -[2(%elifidn)][{/51 pl}(51){el}]417 0 idx03 -[2(%elifidni)][{/51 pl}(51){el}]406 0 idx03 -[2(%elifmacro)][{/50 pl}(50){el}]395 0 idx03 -[2(%elifn)][{/49 pl}(49,){el}( ){/50 pl}(50){el}]384 0 idx03 -[2(%elifnctx)][{/50 pl}(50){el}]373 0 idx03 -[2(%elifndef)][{/49 pl}(49){el}]362 0 idx03 -[2(%elifnempty)][{/52 pl}(52){el}]351 0 idx03 -[2(%elifnid)][{/51 pl}(51){el}]340 0 idx03 -[2(%elifnidn)][{/51 pl}(51){el}]329 0 idx03 -[2(%elifnidni)][{/51 pl}(51){el}]318 0 idx03 -[2(%elifnmacro)][{/50 pl}(50){el}]307 0 idx03 -[2(%elifnnum)][{/51 pl}(51){el}]296 0 idx03 -[2(%elifnstr)][{/51 pl}(51){el}]285 0 idx03 -[2(%elifntoken)][{/52 pl}(52){el}]274 0 idx03 -[2(%elifnum)][{/51 pl}(51){el}]263 0 idx03 -[2(%elifstr)][{/51 pl}(51){el}]252 0 idx03 -[2(%eliftoken)][{/52 pl}(52){el}]241 0 idx03 -[2(%else)][{/49 pl}(49){el}]230 0 idx03 -[2(endproc)][{/98 pl}(98,){el}( ){/105 pl}(105){el}]219 0 idx03 -[2(%endrep)][{/52 pl}(52){el}]208 0 idx03 -[2(ENDSTRUC)][{/62 pl}(62,){el}( ){/69 pl}(69){el}]197 0 idx03 -[(environment)][{/23 pl}(23){el}]186 0 idx03 -[2(EQU)][{/27 pl}(27,){el}( ){/28 pl}(28){el}]175 0 idx03 -[2(%error)][{/58 pl}(58){el}]164 0 idx03 -[2(error)][{/23 pl}(23){el}]153 0 idx03 -[(error messages)][{/20 pl}(20){el}]142 0 idx03 -[(error reporting format)][{/19 pl}(19){el}]131 0 idx03 -[(escape sequences)][{/30 pl}(30){el}]120 0 idx03 -[2(EVEN)][{/64 pl}(64){el}]109 0 idx03 -[(exact matches)][{/48 pl}(48){el}]681 1 idx03 -[2(.EXE)][{/75 pl}(75,){el}( ){/91 pl}(91){el}]670 1 idx03 -[2(EXE2BIN)][{/93 pl}(93){el}]659 1 idx03 -[2(EXE_begin)][{/92 pl}(92){el}]648 1 idx03 -[2(exebin.mac)][{/92 pl}(92){el}]637 1 idx03 -[2(exec)][{/85 pl}(85){el}]626 1 idx03 -[(Executable and Linkable Format)][{/85 pl}(85){el}]615 1 idx03 -[2(EXE_end)][{/92 pl}(92){el}]604 1 idx03 -[2(EXE_stack)][{/92 pl}(92){el}]593 1 idx03 -[2(%exitmacro)][{/48 pl}(48){el}]582 1 idx03 -[2(%exitrep)][{/52 pl}(52){el}]571 1 idx03 -[2(EXPORT)][{/77 pl}(77){el}]560 1 idx03 -[2(export)][{/89 pl}(89){el}]549 1 idx03 -[(exporting symbols)][{/70 pl}(70){el}]538 1 idx03 -[(expressions)][{/21 pl}(21,){el}( ){/33 pl}(33){el}]527 1 idx03 -[(extension)][{/17 pl}(17,){el}( ){/73 pl}(73){el}]516 1 idx03 -[2(EXTERN)][{/70 pl}(70){el}]505 1 idx03 -[2(obj)0( extensions to)][{/78 pl}(78){el}]494 1 idx13 -[2(rdf)0( extensions to)][{/89 pl}(89){el}]483 1 idx13 -[(extracting substrings)][{/42 pl}(42){el}]472 1 idx03 -[2(-F)0( option)][{/19 pl}(19){el}]461 1 idx03 -[2(-f)0( option)][{/18 pl}(18,){el}( ){/73 pl}(73){el}]450 1 idx03 -[(far call)][{/25 pl}(25){el}]439 1 idx03 -[(far common variables)][{/78 pl}(78){el}]428 1 idx03 -[(far pointer)][{/34 pl}(34){el}]417 1 idx03 -[2(FARCODE)][{/99 pl}(99,){el}( ){/101 pl}(101){el}]406 1 idx03 -[2(%fatal)][{/58 pl}(58){el}]395 1 idx03 -[2(__FILE__)][{/61 pl}(61){el}]384 1 idx03 -[2(FLAT)][{/76 pl}(76){el}]373 1 idx03 -[(flat memory model)][{/103 pl}(103){el}]362 1 idx03 -[(flat-form binary)][{/73 pl}(73){el}]351 1 idx03 -[2(FLOAT)][{/71 pl}(71){el}]340 1 idx03 -[2(__FLOAT__)][{/72 pl}(72){el}]329 1 idx03 -[2(__float128h__)][{/31 pl}(31){el}]318 1 idx03 -[2(__float128l__)][{/31 pl}(31){el}]307 1 idx03 -[2(__float16__)][{/31 pl}(31){el}]296 1 idx03 -[2(__float32__)][{/31 pl}(31){el}]285 1 idx03 -[2(__float64__)][{/31 pl}(31){el}]274 1 idx03 -[2(__float8__)][{/31 pl}(31){el}]263 1 idx03 -[2(__float80e__)][{/31 pl}(31){el}]252 1 idx03 -[2(__float80m__)][{/31 pl}(31){el}]241 1 idx03 -[2(__FLOAT_DAZ__)][{/72 pl}(72){el}]230 1 idx03 -[2(float-denorm)][{/22 pl}(22){el}]219 1 idx03 -[(floating-point)][]208 1 idx03 -[(constants)][{/31 pl}(31,){el}( ){/71 pl}(71){el}]197 1 idx13 -[(packed BCD constants)][{/33 pl}(33){el}]186 1 idx13 -[(floating-point)][{/25 pl}(25,){el}( ){/26 pl}(26,){el}( ){/27 pl}(27,){el}( ){/31 pl}(31){el}]175 1 idx03 -[2(float-overflow)][{/22 pl}(22){el}]164 1 idx03 -[2(__FLOAT_ROUND__)][{/72 pl}(72){el}]153 1 idx03 -[2(float-toolong)][{/23 pl}(23){el}]142 1 idx03 -[2(float-underflow)][{/23 pl}(23){el}]131 1 idx03 -[2(follows=)][{/74 pl}(74){el}]120 1 idx03 -[(format-specific directives)][{/67 pl}(67){el}]109 1 idx03 -(208)pageeven -restore showpage -%%Page: 209 209 -%%BeginPageSetup -save -%%EndPageSetup -/209 pa -[(frame pointer)][{/96 pl}(96,){el}( ){/100 pl}(100,){el}( ){/103 pl}(103){el}]681 0 idx03 -[(FreeBSD)][{/88 pl}(88,){el}( ){/106 pl}(106){el}]670 0 idx03 -[(FreeLink)][{/91 pl}(91){el}]659 0 idx03 -[2(ftp.simtel.net)][{/91 pl}(91){el}]648 0 idx03 -[2(function)][{/87 pl}(87,){el}( ){/89 pl}(89){el}]637 0 idx03 -[(functions)][]626 0 idx03 -[(C calling convention)][{/96 pl}(96,){el}( ){/103 pl}(103){el}]615 0 idx13 -[(Pascal calling convention)][{/100 pl}(100){el}]604 0 idx13 -[2(-g)0( option)][{/19 pl}(19){el}]593 0 idx03 -[2(gas)][{/14 pl}(14){el}]582 0 idx03 -[2(gcc)][{/14 pl}(14){el}]571 0 idx03 -[2(GLOBAL)][{/70 pl}(70){el}]560 0 idx03 -[2(aoutb)0( extensions to)][{/87 pl}(87){el}]549 0 idx13 -[2(elf)0( extensions to)][{/87 pl}(87){el}]538 0 idx13 -[2(rdf)0( extensions to)][{/89 pl}(89){el}]527 0 idx13 -[(global offset table)][{/106 pl}(106){el}]516 0 idx03 -[2(_GLOBAL_OFFSET_TABLE_)][{/86 pl}(86){el}]505 0 idx03 -[2(gnu-elf-extensions)][{/22 pl}(22){el}]494 0 idx03 -[2(..got)][{/86 pl}(86){el}]483 0 idx03 -[2(GOT)0( relocations)][{/107 pl}(107){el}]472 0 idx03 -[(GOT)][{/86 pl}(86,){el}( ){/106 pl}(106){el}]461 0 idx03 -[2(..gotoff)][{/86 pl}(86){el}]450 0 idx03 -[2(GOTOFF)0( relocations)][{/107 pl}(107){el}]439 0 idx03 -[2(..gotpc)][{/86 pl}(86){el}]428 0 idx03 -[2(GOTPC)0( relocations)][{/107 pl}(107){el}]417 0 idx03 -[2(..gottpoff)][{/87 pl}(87){el}]406 0 idx03 -[(graphics)][{/27 pl}(27){el}]395 0 idx03 -[(greedy macro parameters)][{/44 pl}(44){el}]384 0 idx03 -[2(GROUP)][{/76 pl}(76){el}]373 0 idx03 -[(groups)][{/34 pl}(34){el}]362 0 idx03 -[2(-h)][{/119 pl}(119){el}]351 0 idx03 -[(hexadecimal)][{/29 pl}(29){el}]340 0 idx03 -[2(hidden)][{/87 pl}(87){el}]329 0 idx03 -[(hybrid syntaxes)][{/24 pl}(24){el}]318 0 idx03 -[2(-I)0( option)][{/20 pl}(20){el}]307 0 idx03 -[2(-i)0( option)][{/20 pl}(20,){el}( ){/120 pl}(120){el}]296 0 idx03 -[2(%iassign)][{/40 pl}(40){el}]285 0 idx03 -[2(%idefine)][{/37 pl}(37){el}]274 0 idx03 -[2(%idefstr)][{/41 pl}(41){el}]263 0 idx03 -[2(%ideftok)][{/41 pl}(41){el}]252 0 idx03 -[2(IEND)][{/63 pl}(63){el}]241 0 idx03 -[2(%if)][{/49 pl}(49,){el}( ){/50 pl}(50){el}]230 0 idx03 -[2(%ifctx)][{/50 pl}(50,){el}( ){/55 pl}(55){el}]219 0 idx03 -[2(%ifdef)][{/49 pl}(49){el}]208 0 idx03 -[2(%ifempty)][{/52 pl}(52){el}]197 0 idx03 -[2(%ifid)][{/51 pl}(51){el}]186 0 idx03 -[2(%ifidn)][{/50 pl}(50){el}]175 0 idx03 -[2(%ifidni)][{/50 pl}(50){el}]164 0 idx03 -[2(%ifmacro)][{/49 pl}(49){el}]153 0 idx03 -[2(%ifn)][{/49 pl}(49,){el}( ){/50 pl}(50){el}]142 0 idx03 -[2(%ifnctx)][{/50 pl}(50){el}]131 0 idx03 -[2(%ifndef)][{/49 pl}(49){el}]120 0 idx03 -[2(%ifnempty)][{/52 pl}(52){el}]109 0 idx03 -[2(%ifnid)][{/51 pl}(51){el}]681 1 idx03 -[2(%ifnidn)][{/51 pl}(51){el}]670 1 idx03 -[2(%ifnidni)][{/51 pl}(51){el}]659 1 idx03 -[2(%ifnmacro)][{/50 pl}(50){el}]648 1 idx03 -[2(%ifnnum)][{/51 pl}(51){el}]637 1 idx03 -[2(%ifnstr)][{/51 pl}(51){el}]626 1 idx03 -[2(%ifntoken)][{/52 pl}(52){el}]615 1 idx03 -[2(%ifnum)][{/51 pl}(51){el}]604 1 idx03 -[2(%ifstr)][{/51 pl}(51){el}]593 1 idx03 -[2(%iftoken)][{/52 pl}(52){el}]582 1 idx03 -[2(%imacro)][{/42 pl}(42){el}]571 1 idx03 -[2(IMPORT)][{/77 pl}(77){el}]560 1 idx03 -[(import library)][{/77 pl}(77){el}]549 1 idx03 -[(importing symbols)][{/70 pl}(70){el}]538 1 idx03 -[2(INCBIN)][{/27 pl}(27,){el}( ){/31 pl}(31){el}]527 1 idx03 -[2(%include)][{/20 pl}(20,){el}( ){/53 pl}(53){el}]516 1 idx03 -[(include search path)][{/20 pl}(20){el}]505 1 idx03 -[(including other files)][{/53 pl}(53){el}]494 1 idx03 -[(inefficient code)][{/116 pl}(116){el}]483 1 idx03 -[(infinite loop)][{/33 pl}(33){el}]472 1 idx03 -[2(__Infinity__)][{/32 pl}(32){el}]461 1 idx03 -[(infinity)][{/32 pl}(32){el}]450 1 idx03 -[(informational section)][{/79 pl}(79){el}]439 1 idx03 -[2(INSTALL)][{/16 pl}(16){el}]428 1 idx03 -[(installing)][{/15 pl}(15){el}]417 1 idx03 -[(instances of structures)][{/63 pl}(63){el}]406 1 idx03 -[(instruction list)][{/122 pl}(122){el}]395 1 idx03 -[(intel hex)][{/74 pl}(74){el}]384 1 idx03 -[(Intel number formats)][{/32 pl}(32){el}]373 1 idx03 -[2(internal)][{/87 pl}(87){el}]362 1 idx03 -[2(%irmacro)][{/43 pl}(43){el}]351 1 idx03 -[2(ISTRUC)][{/63 pl}(63){el}]340 1 idx03 -[(iterating over macro parameters)][{/46 pl}(46){el}]329 1 idx03 -[2(ith)][{/74 pl}(74){el}]318 1 idx03 -[2(%ixdefine)][{/38 pl}(38){el}]307 1 idx03 -[2(Jcc NEAR)][{/116 pl}(116){el}]296 1 idx03 -[2(JMP DWORD)][{/110 pl}(110){el}]285 1 idx03 -[(jumps, mixed-size)][{/110 pl}(110){el}]274 1 idx03 -[2(-k)][{/121 pl}(121){el}]263 1 idx03 -[2(-l)0( option)][{/18 pl}(18){el}]252 1 idx03 -[(label prefix)][{/36 pl}(36){el}]241 1 idx03 -[2(.lbss)][{/85 pl}(85){el}]230 1 idx03 -[2(ld86)][{/88 pl}(88){el}]219 1 idx03 -[2(.ldata)][{/85 pl}(85){el}]208 1 idx03 -[2(LIBRARY)][{/89 pl}(89){el}]197 1 idx03 -[(license)][{/14 pl}(14){el}]186 1 idx03 -[2(%line)][{/59 pl}(59){el}]175 1 idx03 -[2(__LINE__)][{/61 pl}(61){el}]164 1 idx03 -[(linker, free)][{/91 pl}(91){el}]153 1 idx03 -[(Linux)][]142 1 idx03 -[2(a.out)][{/88 pl}(88){el}]131 1 idx13 -[2(as86)][{/88 pl}(88){el}]120 1 idx13 -[(ELF)][{/85 pl}(85){el}]109 1 idx13 -(209)pageodd -restore showpage -%%Page: 210 210 -%%BeginPageSetup -save -%%EndPageSetup -/210 pa -[(listing file)][{/18 pl}(18){el}]681 0 idx03 -[(little-endian)][{/31 pl}(31){el}]670 0 idx03 -[2(%local)][{/58 pl}(58){el}]659 0 idx03 -[(local labels)][{/35 pl}(35){el}]648 0 idx03 -[(logical AND)][{/50 pl}(50){el}]637 0 idx03 -[(logical negation)][{/34 pl}(34){el}]626 0 idx03 -[(logical OR)][{/50 pl}(50){el}]615 0 idx03 -[(logical XOR)][{/50 pl}(50){el}]604 0 idx03 -[2(.lrodata)][{/85 pl}(85){el}]593 0 idx03 -[2(-M)0( option)][{/18 pl}(18){el}]582 0 idx03 -[(Mach, object file format)][{/85 pl}(85){el}]571 0 idx03 -[(Mach-O)][{/85 pl}(85){el}]560 0 idx03 -[2(macho)][{/85 pl}(85){el}]549 0 idx03 -[2(macho32)][{/85 pl}(85){el}]538 0 idx03 -[2(macho64)][{/85 pl}(85){el}]527 0 idx03 -[(MacOS X)][{/85 pl}(85){el}]516 0 idx03 -[2(%macro)][{/42 pl}(42){el}]505 0 idx03 -[(macro indirection)][{/39 pl}(39){el}]494 0 idx03 -[(macro library)][{/20 pl}(20){el}]483 0 idx03 -[(macro processor)][{/37 pl}(37){el}]472 0 idx03 -[2(macro-defaults)][{/22 pl}(22){el}]461 0 idx03 -[(macro-local labels)][{/43 pl}(43){el}]450 0 idx03 -[2(macro-params)][{/22 pl}(22){el}]439 0 idx03 -[(macros)][{/28 pl}(28){el}]428 0 idx03 -[2(macro-selfref)][{/22 pl}(22){el}]417 0 idx03 -[2(make)][{/16 pl}(16){el}]406 0 idx03 -[(makefile dependencies)][{/18 pl}(18){el}]395 0 idx03 -[(makefiles)][{/15 pl}(15,){el}( ){/16 pl}(16){el}]384 0 idx03 -[(man pages)][{/16 pl}(16){el}]373 0 idx03 -[(map files)][{/74 pl}(74){el}]362 0 idx03 -[2(MASM)][{/14 pl}(14){el}]351 0 idx03 -[(MASM)][{/24 pl}(24,){el}( ){/28 pl}(28,){el}( ){/75 pl}(75){el}]340 0 idx03 -[2(-MD)0( option)][{/18 pl}(18){el}]329 0 idx03 -[(memory models)][{/25 pl}(25,){el}( ){/95 pl}(95){el}]318 0 idx03 -[(memory operand)][{/27 pl}(27){el}]307 0 idx03 -[(memory references)][{/24 pl}(24,){el}( ){/28 pl}(28){el}]296 0 idx03 -[2(-MF)0( option)][{/18 pl}(18){el}]285 0 idx03 -[2(-MG)0( option)][{/18 pl}(18){el}]274 0 idx03 -[(Microsoft OMF)][{/75 pl}(75){el}]263 0 idx03 -[(minifloat)][{/32 pl}(32){el}]252 0 idx03 -[(Minix)][{/88 pl}(88){el}]241 0 idx03 -[2(misc)0( subdirectory)][{/92 pl}(92,){el}( ){/98 pl}(98,){el}( ){/105 pl}(105){el}]230 0 idx03 -[(mixed-language program)][{/94 pl}(94){el}]219 0 idx03 -[(mixed-size addressing)][{/110 pl}(110){el}]208 0 idx03 -[(mixed-size instruction)][{/110 pl}(110){el}]197 0 idx03 -[(MMX registers)][]186 0 idx03 -[(ModR/M byte)][]175 0 idx03 -[2(MODULE)][{/89 pl}(89){el}]164 0 idx03 -[(modulo operators)][{/33 pl}(33){el}]153 0 idx03 -[(motorola s-records)][{/74 pl}(74){el}]142 0 idx03 -[2(-MP)0( option)][{/19 pl}(19){el}]131 0 idx03 -[2(-MQ)0( option)][{/19 pl}(19){el}]120 0 idx03 -[(MS-DOS)][{/73 pl}(73){el}]109 0 idx03 -[(MS-DOS device drivers)][{/94 pl}(94){el}]681 1 idx03 -[2(-MT)0( option)][{/19 pl}(19){el}]670 1 idx03 -[(multi-line macros)][{/22 pl}(22,){el}( ){/42 pl}(42){el}]659 1 idx03 -[(multipass optimization)][{/21 pl}(21){el}]648 1 idx03 -[(multiple section names)][{/73 pl}(73){el}]637 1 idx03 -[(multiplication)][{/33 pl}(33){el}]626 1 idx03 -[2(multipush)0( macro)][{/46 pl}(46){el}]615 1 idx03 -[(multisection)][{/74 pl}(74){el}]604 1 idx03 -[2(__NaN__)][{/32 pl}(32){el}]593 1 idx03 -[(NaN)][{/32 pl}(32){el}]582 1 idx03 -[(NASM version)][{/60 pl}(60){el}]571 1 idx03 -[(nasm version history)][{/181 pl}(181){el}]560 1 idx03 -[(nasm version id)][{/60 pl}(60){el}]549 1 idx03 -[(nasm version string)][{/60 pl}(60){el}]538 1 idx03 -[2(nasm.1)][{/16 pl}(16){el}]527 1 idx03 -[2(__NASMDEFSEG)][{/75 pl}(75){el}]516 1 idx03 -[2(nasm-devel)][{/15 pl}(15){el}]505 1 idx03 -[2(NASMENV)][{/23 pl}(23){el}]494 1 idx03 -[2(nasm.exe)][{/15 pl}(15){el}]483 1 idx03 -[2(nasm -hf)][{/18 pl}(18){el}]472 1 idx03 -[2(__NASM_MAJOR__)][{/60 pl}(60){el}]461 1 idx03 -[2(__NASM_MINOR__)][{/60 pl}(60){el}]450 1 idx03 -[2(nasm.out)][{/18 pl}(18){el}]439 1 idx03 -[2(___NASM_PATCHLEVEL__)][{/60 pl}(60){el}]428 1 idx03 -[2(__NASM_SNAPSHOT__)][{/60 pl}(60){el}]417 1 idx03 -[2(__NASM_SUBMINOR__)][{/60 pl}(60){el}]406 1 idx03 -[2(__NASM_VER__)][{/60 pl}(60){el}]395 1 idx03 -[2(__NASM_VERSION_ID__)][{/60 pl}(60){el}]384 1 idx03 -[2(nasm-XXX-dos.zip)][{/15 pl}(15){el}]373 1 idx03 -[2(nasm-XXX.tar.gz)][{/16 pl}(16){el}]362 1 idx03 -[2(nasm-XXX-win32.zip)][{/15 pl}(15){el}]351 1 idx03 -[2(nasm-XXX.zip)][{/15 pl}(15){el}]340 1 idx03 -[(ndisasm)][{/119 pl}(119){el}]329 1 idx03 -[2(ndisasm.1)][{/16 pl}(16){el}]318 1 idx03 -[2(ndisasm.exe)][{/15 pl}(15){el}]307 1 idx03 -[(near call)][{/25 pl}(25){el}]296 1 idx03 -[(near common variables)][{/78 pl}(78){el}]285 1 idx03 -[(NetBSD)][{/88 pl}(88,){el}( ){/106 pl}(106){el}]274 1 idx03 -[(new releases)][{/15 pl}(15){el}]263 1 idx03 -[2(noalloc)][{/85 pl}(85){el}]252 1 idx03 -[2(nobits)][{/74 pl}(74,){el}( ){/85 pl}(85){el}]241 1 idx03 -[2(noexec)][{/85 pl}(85){el}]230 1 idx03 -[2(.nolist)][{/48 pl}(48){el}]219 1 idx03 -[(`nowait')][{/25 pl}(25){el}]208 1 idx03 -[2(nowrite)][{/85 pl}(85){el}]197 1 idx03 -[2(number-overflow)][{/22 pl}(22){el}]186 1 idx03 -[(numeric constants)][{/27 pl}(27,){el}( ){/29 pl}(29){el}]175 1 idx03 -[2(-O)0( option)][{/21 pl}(21){el}]164 1 idx03 -[2(-o)0( option)][{/17 pl}(17,){el}( ){/119 pl}(119){el}]153 1 idx03 -[2(O16)][{/26 pl}(26){el}]142 1 idx03 -[2(o16)][{/111 pl}(111){el}]131 1 idx03 -[2(O32)][{/26 pl}(26){el}]120 1 idx03 -[2(o32)][{/112 pl}(112){el}]109 1 idx03 -(210)pageeven -restore showpage -%%Page: 211 211 -%%BeginPageSetup -save -%%EndPageSetup -/211 pa -[2(O64)][{/26 pl}(26){el}]681 0 idx03 -[2(.OBJ)][{/91 pl}(91){el}]670 0 idx03 -[2(obj)][{/75 pl}(75){el}]659 0 idx03 -[2(object)][{/87 pl}(87,){el}( ){/89 pl}(89){el}]648 0 idx03 -[(octal)][{/29 pl}(29){el}]637 0 idx03 -[2(OF_DBG)][{/90 pl}(90){el}]626 0 idx03 -[2(OF_DEFAULT)][{/18 pl}(18){el}]615 0 idx03 -[2(OFFSET)][{/24 pl}(24){el}]604 0 idx03 -[(OMF)][{/75 pl}(75){el}]593 0 idx03 -[(omitted parameters)][{/45 pl}(45){el}]582 0 idx03 -[(one's complement)][{/34 pl}(34){el}]571 0 idx03 -[(OpenBSD)][{/88 pl}(88,){el}( ){/106 pl}(106){el}]560 0 idx03 -[(operands)][{/26 pl}(26){el}]549 0 idx03 -[(operand-size prefixes)][{/26 pl}(26){el}]538 0 idx03 -[(operating system)][{/73 pl}(73){el}]527 0 idx03 -[(writing)][{/110 pl}(110){el}]516 0 idx13 -[(operators)][{/33 pl}(33){el}]505 0 idx03 -[2(ORG)][{/73 pl}(73,){el}( ){/93 pl}(93,){el}( ){/94 pl}(94,){el}( ){/116 pl}(116){el}]494 0 idx03 -[2(orphan-labels)][{/22 pl}(22,){el}( ){/26 pl}(26){el}]483 0 idx03 -[(OS/2)][{/75 pl}(75,){el}( ){/76 pl}(76){el}]472 0 idx03 -[2(osabi)][{/85 pl}(85){el}]461 0 idx03 -[(other preprocessor directives)][{/59 pl}(59){el}]450 0 idx03 -[(out of range, jumps)][{/116 pl}(116){el}]439 0 idx03 -[(output file format)][{/18 pl}(18){el}]428 0 idx03 -[(output formats)][{/73 pl}(73){el}]417 0 idx03 -[2(__OUTPUT_FORMAT__)][{/61 pl}(61){el}]406 0 idx03 -[(overlapping segments)][{/34 pl}(34){el}]395 0 idx03 -[2(OVERLAY)][{/76 pl}(76){el}]384 0 idx03 -[(overloading)][]373 0 idx03 -[(multi-line macros)][{/43 pl}(43){el}]362 0 idx13 -[(single-line macros)][{/38 pl}(38){el}]351 0 idx13 -[2(-P)0( option)][{/20 pl}(20){el}]340 0 idx03 -[2(-p)0( option)][{/20 pl}(20,){el}( ){/53 pl}(53){el}]329 0 idx03 -[(paradox)][{/35 pl}(35){el}]318 0 idx03 -[2(PASCAL)][{/101 pl}(101){el}]307 0 idx03 -[(Pascal calling convention)][{/100 pl}(100){el}]296 0 idx03 -[2(__PASS__)][{/62 pl}(62){el}]285 0 idx03 -[(passes, assembly)][]274 0 idx03 -[2(PATH)][{/15 pl}(15){el}]263 0 idx03 -[2(%pathsearch)][{/20 pl}(20,){el}( ){/53 pl}(53){el}]252 0 idx03 -[(period)][{/35 pl}(35){el}]241 0 idx03 -[(Perl)][{/15 pl}(15){el}]230 0 idx03 -[(perverse)][{/20 pl}(20){el}]219 0 idx03 -[(PharLap)][{/76 pl}(76){el}]208 0 idx03 -[(PIC)][{/86 pl}(86,){el}( ){/88 pl}(88,){el}( ){/106 pl}(106){el}]197 0 idx03 -[2(..plt)][{/86 pl}(86){el}]186 0 idx03 -[2(PLT)0( relocations)][{/86 pl}(86,){el}( ){/108 pl}(108,){el}( ){/109 pl}(109){el}]175 0 idx03 -[(plt relocations)][{/109 pl}(109){el}]164 0 idx03 -[2(%pop)][{/54 pl}(54){el}]153 0 idx03 -[(position-independent code)][{/86 pl}(86,){el}( ){/88 pl}(88,){el}( ){/106 pl}(106){el}]142 0 idx03 -[2(--postfix)][{/23 pl}(23){el}]131 0 idx03 -[(precedence)][{/33 pl}(33){el}]120 0 idx03 -[(pre-defining macros)][{/20 pl}(20,){el}( ){/38 pl}(38){el}]109 0 idx03 -[(preferred)][{/34 pl}(34){el}]681 1 idx03 -[2(--prefix)][{/23 pl}(23){el}]670 1 idx03 -[(pre-including files)][{/20 pl}(20){el}]659 1 idx03 -[(preprocess-only mode)][{/21 pl}(21){el}]648 1 idx03 -[(preprocessor)][{/21 pl}(21,){el}( ){/28 pl}(28,){el}( ){/33 pl}(33,){el}( ){/37 pl}(37){el}]637 1 idx03 -[(preprocessor expressions)][{/21 pl}(21){el}]626 1 idx03 -[(preprocessor loops)][{/52 pl}(52){el}]615 1 idx03 -[(preprocessor variables)][{/40 pl}(40){el}]604 1 idx03 -[(primitive directives)][{/67 pl}(67){el}]593 1 idx03 -[2(PRIVATE)][{/75 pl}(75){el}]582 1 idx03 -[2(proc)][{/89 pl}(89,){el}( ){/98 pl}(98,){el}( ){/105 pl}(105){el}]571 1 idx03 -[(procedure linkage table)][{/86 pl}(86,){el}( ){/108 pl}(108,){el}( ){/109 pl}(109){el}]560 1 idx03 -[(processor mode)][{/67 pl}(67){el}]549 1 idx03 -[2(progbits)][{/74 pl}(74,){el}( ){/85 pl}(85){el}]538 1 idx03 -[(program entry point)][{/78 pl}(78,){el}( ){/91 pl}(91){el}]527 1 idx03 -[(program origin)][{/73 pl}(73){el}]516 1 idx03 -[2(protected)][{/87 pl}(87){el}]505 1 idx03 -[(pseudo-instructions)][{/27 pl}(27){el}]494 1 idx03 -[2(PUBLIC)][{/70 pl}(70,){el}( ){/75 pl}(75){el}]483 1 idx03 -[(pure binary)][{/73 pl}(73){el}]472 1 idx03 -[2(%push)][{/54 pl}(54){el}]461 1 idx03 -[2(__QNaN__)][{/32 pl}(32){el}]450 1 idx03 -[(quick start)][{/24 pl}(24){el}]439 1 idx03 -[2(QWORD)][{/27 pl}(27){el}]428 1 idx03 -[2(-r)][{/119 pl}(119){el}]417 1 idx03 -[2(rdf)][{/88 pl}(88){el}]406 1 idx03 -[2(rdoff)0( subdirectory)][{/16 pl}(16,){el}( ){/88 pl}(88,){el}( ){/89 pl}(89){el}]395 1 idx03 -[(recursive multi-line macros)][{/43 pl}(43){el}]384 1 idx03 -[(redirecting errors)][{/20 pl}(20){el}]373 1 idx03 -[2(REL)][{/29 pl}(29,){el}( ){/68 pl}(68){el}]362 1 idx03 -[(relational operators)][{/50 pl}(50){el}]351 1 idx03 -[(release candidates)][{/15 pl}(15){el}]340 1 idx03 -[(Relocatable Dynamic Object File Format)][{/88 pl}(88){el}]329 1 idx03 -[(relocations, PIC-specific)][{/86 pl}(86){el}]318 1 idx03 -[(removing contexts)][{/54 pl}(54){el}]307 1 idx03 -[(renaming contexts)][{/55 pl}(55){el}]296 1 idx03 -[2(%rep)][{/28 pl}(28,){el}( ){/52 pl}(52){el}]285 1 idx03 -[(repeating)][{/28 pl}(28,){el}( ){/52 pl}(52){el}]274 1 idx03 -[2(%repl)][{/55 pl}(55){el}]263 1 idx03 -[(reporting bugs)][{/117 pl}(117){el}]252 1 idx03 -[2(RESB)][{/25 pl}(25,){el}( ){/27 pl}(27){el}]241 1 idx03 -[2(RESD)][{/27 pl}(27){el}]230 1 idx03 -[2(RESO)][{/27 pl}(27){el}]219 1 idx03 -[2(RESQ)][{/27 pl}(27){el}]208 1 idx03 -[2(REST)][{/27 pl}(27){el}]197 1 idx03 -[2(RESW)][{/27 pl}(27){el}]186 1 idx03 -[2(RESY)][{/27 pl}(27){el}]175 1 idx03 -[2(%rmacro)][{/43 pl}(43){el}]164 1 idx03 -[2(.rodata)][{/85 pl}(85){el}]153 1 idx03 -[2(%rotate)][{/46 pl}(46){el}]142 1 idx03 -[(rotating macro parameters)][{/46 pl}(46){el}]131 1 idx03 -[2(-s)0( option)][{/20 pl}(20,){el}( ){/120 pl}(120){el}]120 1 idx03 -[(searching for include files)][{/53 pl}(53){el}]109 1 idx03 -(211)pageodd -restore showpage -%%Page: 212 212 -%%BeginPageSetup -save -%%EndPageSetup -/212 pa -[2(__SECT__)][{/68 pl}(68,){el}( ){/69 pl}(69){el}]681 0 idx03 -[2(SECTION)][{/68 pl}(68){el}]670 0 idx03 -[2(elf)0( extensions to)][{/85 pl}(85){el}]659 0 idx13 -[2(win32)0( extensions to)][{/79 pl}(79){el}]648 0 idx13 -[(section alignment)][]637 0 idx03 -[(in )2(bin)][{/74 pl}(74){el}]626 0 idx13 -[(in )2(elf)][{/85 pl}(85){el}]615 0 idx13 -[(in )2(obj)][{/76 pl}(76){el}]604 0 idx13 -[(in )2(win32)][{/79 pl}(79){el}]593 0 idx13 -[(section, bin extensions to)][{/73 pl}(73){el}]582 0 idx03 -[2(SEG)][{/34 pl}(34,){el}( ){/75 pl}(75){el}]571 0 idx03 -[2(SEGMENT)][{/68 pl}(68){el}]560 0 idx03 -[2(elf)0( extensions to)][{/75 pl}(75){el}]549 0 idx13 -[(segment address)][{/34 pl}(34){el}]538 0 idx03 -[(segment alignment)][]527 0 idx03 -[(in )2(bin)][{/74 pl}(74){el}]516 0 idx13 -[(in )2(obj)][{/76 pl}(76){el}]505 0 idx13 -[(segment names, Borland Pascal)][{/101 pl}(101){el}]494 0 idx03 -[(segment override)][{/25 pl}(25,){el}( ){/26 pl}(26){el}]483 0 idx03 -[(segments)][{/34 pl}(34){el}]472 0 idx03 -[(groups of)][{/76 pl}(76){el}]461 0 idx13 -[(separator character)][{/23 pl}(23){el}]450 0 idx03 -[(shared libraries)][{/88 pl}(88,){el}( ){/106 pl}(106){el}]439 0 idx03 -[(shared library)][{/87 pl}(87){el}]428 0 idx03 -[2(shift)0( command)][{/46 pl}(46){el}]417 0 idx03 -[(SIB byte)][]406 0 idx03 -[(signed division)][{/33 pl}(33){el}]395 0 idx03 -[(signed modulo)][{/33 pl}(33){el}]384 0 idx03 -[(single-line macros)][{/37 pl}(37){el}]373 0 idx03 -[(size, of symbols)][{/87 pl}(87){el}]362 0 idx03 -[2(smartalign)][{/66 pl}(66){el}]351 0 idx03 -[2(__SNaN__)][{/32 pl}(32){el}]340 0 idx03 -[(snapshots, daily development)][{/15 pl}(15){el}]329 0 idx03 -[(Solaris x86)][{/85 pl}(85){el}]318 0 idx03 -[2(-soname)][{/109 pl}(109){el}]307 0 idx03 -[(sound)][{/27 pl}(27){el}]296 0 idx03 -[(source code)][{/15 pl}(15){el}]285 0 idx03 -[(source-listing file)][{/18 pl}(18){el}]274 0 idx03 -[(square brackets)][{/24 pl}(24,){el}( ){/28 pl}(28){el}]263 0 idx03 -[2(srec)][{/74 pl}(74){el}]252 0 idx03 -[2(STACK)][{/75 pl}(75){el}]241 0 idx03 -[(stack relative preprocessor directives)][{/57 pl}(57){el}]230 0 idx03 -[2(%stacksize)][{/57 pl}(57){el}]219 0 idx03 -[(standard macro packages)][{/66 pl}(66){el}]208 0 idx03 -[(standard macros)][{/60 pl}(60){el}]197 0 idx03 -[(standardized section names)][{/68 pl}(68,){el}( ){/79 pl}(79,){el}( ){/85 pl}(85,){el}( ){/88 pl}(88,){el}( ){/89 pl}(89){el}]186 0 idx03 -[2(..start)][{/78 pl}(78,){el}( ){/91 pl}(91){el}]175 0 idx03 -[2(start=)][{/74 pl}(74){el}]164 0 idx03 -[2(stderr)][{/20 pl}(20){el}]153 0 idx03 -[2(stdout)][{/20 pl}(20){el}]142 0 idx03 -[2(%strcat)][{/41 pl}(41){el}]131 0 idx03 -[2(STRICT)][{/34 pl}(34){el}]120 0 idx03 -[(string constant)][{/27 pl}(27){el}]109 0 idx03 -[(string constants)][{/31 pl}(31){el}]681 1 idx03 -[(string length)][{/41 pl}(41){el}]670 1 idx03 -[(string manipulation in macros)][{/41 pl}(41){el}]659 1 idx03 -[(strings)][{/30 pl}(30){el}]648 1 idx03 -[2(%strlen)][{/41 pl}(41){el}]637 1 idx03 -[2(STRUC)][{/62 pl}(62,){el}( ){/69 pl}(69,){el}( ){/98 pl}(98,){el}( ){/105 pl}(105){el}]626 1 idx03 -[(stub preprocessor)][{/21 pl}(21){el}]615 1 idx03 -[2(%substr)][{/42 pl}(42){el}]604 1 idx03 -[(subtraction)][{/33 pl}(33){el}]593 1 idx03 -[(suppressible warning)][{/22 pl}(22){el}]582 1 idx03 -[(suppressing preprocessing)][{/21 pl}(21){el}]571 1 idx03 -[(switching between sections)][{/68 pl}(68){el}]560 1 idx03 -[2(..sym)][{/86 pl}(86){el}]549 1 idx03 -[(symbol sizes, specifying)][{/87 pl}(87){el}]538 1 idx03 -[(symbol types, specifying)][{/87 pl}(87){el}]527 1 idx03 -[(symbols)][]516 1 idx03 -[(exporting from DLLs)][{/77 pl}(77){el}]505 1 idx13 -[(importing from DLLs)][{/77 pl}(77){el}]494 1 idx13 -[2(synchronisation)][{/120 pl}(120){el}]483 1 idx03 -[2(.SYS)][{/73 pl}(73,){el}( ){/94 pl}(94){el}]472 1 idx03 -[2(-t)][{/22 pl}(22){el}]461 1 idx03 -[2(TASM)][{/14 pl}(14,){el}( ){/22 pl}(22){el}]450 1 idx03 -[(tasm)][{/24 pl}(24,){el}( ){/75 pl}(75){el}]439 1 idx03 -[2(.tbss)][{/85 pl}(85){el}]428 1 idx03 -[2(TBYTE)][{/25 pl}(25){el}]417 1 idx03 -[2(.tdata)][{/85 pl}(85){el}]406 1 idx03 -[2(test)0( subdirectory)][{/91 pl}(91){el}]395 1 idx03 -[(testing)][]384 1 idx03 -[(arbitrary numeric expressions)][{/50 pl}(50){el}]373 1 idx13 -[(context stack)][{/50 pl}(50){el}]362 1 idx13 -[(exact text identity)][{/50 pl}(50){el}]351 1 idx13 -[(multi-line macro existence)][{/49 pl}(49){el}]340 1 idx13 -[(single-line macro existence)][{/49 pl}(49){el}]329 1 idx13 -[(token types)][{/51 pl}(51){el}]318 1 idx13 -[2(.text)][{/85 pl}(85,){el}( ){/88 pl}(88,){el}( ){/89 pl}(89){el}]307 1 idx03 -[2(_TEXT)][{/96 pl}(96){el}]296 1 idx03 -[(thread local storage)][{/87 pl}(87){el}]285 1 idx03 -[2(__TIME__)][{/61 pl}(61){el}]274 1 idx03 -[2(__TIME_NUM__)][{/61 pl}(61){el}]263 1 idx03 -[2(TIMES)][{/27 pl}(27,){el}( ){/28 pl}(28,){el}( ){/35 pl}(35,){el}( ){/116 pl}(116,){el}( ){/117 pl}(117){el}]252 1 idx03 -[2(TLINK)][{/93 pl}(93){el}]241 1 idx03 -[2(tls)][{/85 pl}(85,){el}( ){/87 pl}(87){el}]230 1 idx03 -[2(..tlsie)][{/87 pl}(87){el}]219 1 idx03 -[(trailing colon)][{/26 pl}(26){el}]208 1 idx03 -[2(TWORD)][{/25 pl}(25,){el}( ){/27 pl}(27){el}]197 1 idx03 -[(type, of symbols)][{/87 pl}(87){el}]186 1 idx03 -[2(-U)0( option)][{/21 pl}(21){el}]175 1 idx03 -[2(-u)0( option)][{/21 pl}(21,){el}( ){/119 pl}(119){el}]164 1 idx03 -[(unary operators)][{/34 pl}(34){el}]153 1 idx03 -[2(%undef)][{/21 pl}(21,){el}( ){/40 pl}(40){el}]142 1 idx03 -[(undefining macros)][{/21 pl}(21){el}]131 1 idx03 -[(underscore, in C symbols)][{/94 pl}(94){el}]120 1 idx03 -[(Unicode)][{/30 pl}(30,){el}( ){/31 pl}(31){el}]109 1 idx03 -(212)pageeven -restore showpage -%%Page: 213 213 -%%BeginPageSetup -save -%%EndPageSetup -/213 pa -[(uninitialized)][{/27 pl}(27){el}]681 0 idx03 -[(uninitialized storage)][{/25 pl}(25){el}]670 0 idx03 -[(Unix)][{/16 pl}(16){el}]659 0 idx03 -[(SCO)][{/85 pl}(85){el}]648 0 idx13 -[(source archive)][{/16 pl}(16){el}]637 0 idx13 -[(System V)][{/85 pl}(85){el}]626 0 idx13 -[(UnixWare)][{/85 pl}(85){el}]615 0 idx03 -[2(%unmacro)][{/48 pl}(48){el}]604 0 idx03 -[(unrolled loops)][{/28 pl}(28){el}]593 0 idx03 -[(unsigned division)][{/33 pl}(33){el}]582 0 idx03 -[(unsigned modulo)][{/33 pl}(33){el}]571 0 idx03 -[2(UPPERCASE)][{/24 pl}(24,){el}( ){/77 pl}(77){el}]560 0 idx03 -[2(%use)][{/54 pl}(54,){el}( ){/66 pl}(66){el}]549 0 idx03 -[2(__USE_*__)][{/62 pl}(62){el}]538 0 idx03 -[2(USE16)][{/68 pl}(68,){el}( ){/76 pl}(76){el}]527 0 idx03 -[2(USE32)][{/68 pl}(68,){el}( ){/76 pl}(76){el}]516 0 idx03 -[2(user)][{/23 pl}(23){el}]505 0 idx03 -[(user-defined errors)][{/58 pl}(58){el}]494 0 idx03 -[(user-level assembler directives)][{/60 pl}(60){el}]483 0 idx03 -[(user-level directives)][{/67 pl}(67){el}]472 0 idx03 -[2(__UTC_DATE__)][{/61 pl}(61){el}]461 0 idx03 -[2(__UTC_DATE_NUM__)][{/61 pl}(61){el}]450 0 idx03 -[2(__UTC_TIME__)][{/61 pl}(61){el}]439 0 idx03 -[2(__UTC_TIME_NUM__)][{/61 pl}(61){el}]428 0 idx03 -[(UTF-16)][{/31 pl}(31){el}]417 0 idx03 -[(UTF-32)][{/31 pl}(31){el}]406 0 idx03 -[(UTF-8)][{/30 pl}(30){el}]395 0 idx03 -[2(__utf16__)][{/31 pl}(31){el}]384 0 idx03 -[2(__utf32__)][{/31 pl}(31){el}]373 0 idx03 -[2(-v)0( option)][{/23 pl}(23){el}]362 0 idx03 -[(VAL)][{/91 pl}(91){el}]351 0 idx03 -[(valid characters)][{/26 pl}(26){el}]340 0 idx03 -[(variable types)][{/24 pl}(24){el}]329 0 idx03 -[(version)][{/23 pl}(23){el}]318 0 idx03 -[(version number of NASM)][{/60 pl}(60){el}]307 0 idx03 -[2(vfollows=)][{/74 pl}(74){el}]296 0 idx03 -[(Visual C++)][{/79 pl}(79){el}]285 0 idx03 -[2(vstart=)][{/74 pl}(74){el}]274 0 idx03 -[2(-W)0( option)][{/22 pl}(22){el}]263 0 idx03 -[2(-w)0( option)][{/22 pl}(22){el}]252 0 idx03 -[2(%warning)][{/58 pl}(58){el}]241 0 idx03 -[(warnings)][{/22 pl}(22){el}]230 0 idx03 -[2([warning *warning-name])][{/23 pl}(23){el}]219 0 idx03 -[2([warning +warning-name])][{/23 pl}(23){el}]208 0 idx03 -[2([warning -warning-name])][{/23 pl}(23){el}]197 0 idx03 -[(website)][{/15 pl}(15){el}]186 0 idx03 -[2(win64)][{/81 pl}(81,){el}( ){/113 pl}(113){el}]175 0 idx03 -[(Win64)][{/75 pl}(75,){el}( ){/79 pl}(79,){el}( ){/103 pl}(103){el}]164 0 idx03 -[(Windows)][{/91 pl}(91){el}]153 0 idx03 -[(Windows 95)][]142 0 idx03 -[(Windows NT)][]131 0 idx03 -[2(write)][{/85 pl}(85){el}]120 0 idx03 -[(writing operating systems)][{/110 pl}(110){el}]109 0 idx03 -[2(WRT)][{/34 pl}(34,){el}( ){/75 pl}(75,){el}( ){/86 pl}(86,){el}( ){/87 pl}(87,){el}( ){/88 pl}(88){el}]681 1 idx03 -[2(WRT ..got)][{/107 pl}(107){el}]670 1 idx03 -[2(WRT ..gotoff)][{/107 pl}(107){el}]659 1 idx03 -[2(WRT ..gotpc)][{/107 pl}(107){el}]648 1 idx03 -[2(WRT ..plt)][{/109 pl}(109){el}]637 1 idx03 -[2(WRT ..sym)][{/108 pl}(108){el}]626 1 idx03 -[(WWW page)][]615 1 idx03 -[2(www.cpan.org)][{/15 pl}(15){el}]604 1 idx03 -[2(www.delorie.com)][{/91 pl}(91){el}]593 1 idx03 -[2(www.pcorner.com)][{/91 pl}(91){el}]582 1 idx03 -[2(-X)0( option)][{/19 pl}(19){el}]571 1 idx03 -[2(x2ftp.oulu.fi)][{/91 pl}(91){el}]560 1 idx03 -[2(%xdefine)][{/38 pl}(38){el}]549 1 idx03 -[2(-y)0( option)][{/23 pl}(23){el}]538 1 idx03 -[2(-Z)0( option)][{/20 pl}(20){el}]527 1 idx03 -(213)pageodd -restore showpage -%%EOF |