Remove stealth whitespace (all of the form ". \n").
[platform/upstream/nasm.git] / doc / nasmdoc.src
index b2529ff..6ae6737 100644 (file)
@@ -2,6 +2,16 @@
 \#
 \# Source code to NASM documentation
 \#
+\M{category}{Programming}
+\M{title}{NASM - The Netwide Assembler}
+\M{year}{2002}
+\M{author}{The NASM Development Team}
+\M{license}{All rights reserved. This document is redistributable under the licence given in the file "COPYING" distributed in the NASM archive.}
+\M{summary}{This file documents NASM, the Netwide Assembler: an assembler targetting the Intel x86 series of processors, with portable source.}
+\M{infoname}{NASM}
+\M{infofile}{nasm}
+\M{infotitle}{The Netwide Assembler for x86}
+\M{epslogo}{nasmlogo.eps}
 \IR{-D} \c{-D} option
 \IR{-E} \c{-E} option
 \IR{-F} \c{-F} option
@@ -159,7 +169,7 @@ Object File Format
 \IR{segment alignment, in obj} segment alignment, in \c{obj}
 \IR{segment, obj extensions to} \c{SEGMENT}, \c{elf} extensions to
 \IR{segment names, borland pascal} segment names, Borland Pascal
-\IR{shift commane} \c{shift} command
+\IR{shift command} \c{shift} command
 \IA{sib}{sib byte}
 \IR{sib byte} SIB byte
 \IA{standard section names}{standardised section names}
@@ -208,26 +218,26 @@ essentially that there didn't seem to be a good \e{free} x86-series
 assembler around, and that maybe someone ought to write one.
 
 \b \i\c{a86} is good, but not free, and in particular you don't get any
-32-bit capability until you pay. It's \c{DOS} only, too.
+32-bit capability until you pay. It's DOS only, too.
 
-\b \i\c{gas} is free, and ports over \c{DOS} and \c{Unix}, but it's not
+\b \i\c{gas} is free, and ports over DOS and Unix, but it's not
 very good, since it's designed to be a back end to \i\c{gcc}, which
 always feeds it correct code. So its error checking is minimal. Also,
 its syntax is horrible, from the point of view of anyone trying to
 actually \e{write} anything in it. Plus you can't write 16-bit code in
 it (properly).
 
-\b \i\c{as86} is \c{Linux-specific}, and (my version at least) doesn't
+\b \i\c{as86} is Linux-specific, and (my version at least) doesn't
 seem to have much (or any) documentation.
 
-\b \i{MASM} isn't very good, and it's expensive, and it runs only under
-\c{DOS}.
+\b \i\c{MASM} isn't very good, and it's expensive, and it runs only under
+DOS.
 
-\b \i{TASM} is better, but still strives for \i{MASM} compatibility,
+\b \i\c{TASM} is better, but still strives for MASM compatibility,
 which means millions of directives and tons of red tape. And its syntax
-is essentially \i{MASM}'s, with the contradictions and quirks that
+is essentially MASM's, with the contradictions and quirks that
 entails (although it sorts out some of those by means of Ideal mode).
-It's expensive too. And it's \c{DOS-only}.
+It's expensive too. And it's DOS-only.
 
 So here, for your coding pleasure, is NASM. At present it's
 still in prototype stage - we don't promise that it can outperform
@@ -253,38 +263,38 @@ team of developers, accessible through the \c{nasm-devel} mailing list
 If you want to report a bug, please read \k{bugs} first.
 
 NASM has a \i{WWW page} at
-\W{http://www.web-sites.co.uk/nasm}\c{http://www.web-sites.co.uk/nasm}.
+\W{http://www.web-sites.co.uk/nasm}\c{http://www.web-sites.co.uk/nasm},
+and another, with additional information, at
+\W{http://nasm.2y.net/}\c{http://nasm.2y.net/}
 
 The original authors are \i{e\-mail}able as
 \W{mailto:jules@dsf.org.uk}\c{jules@dsf.org.uk} and
 \W{mailto:anakin@pobox.com}\c{anakin@pobox.com}.
 The latter is no longer involved in the development team.
 
-\i{New releases} of NASM are uploaded to the official site 
-\W{http://www.web-sites.co.uk/nasm}\c{http://www.web-sites.co.uk/nasm},
+\i{New releases} of NASM are uploaded to the official sites
+\W{http://www.web-sites.co.uk/nasm}\c{http://www.web-sites.co.uk/nasm}
 and to
 \W{ftp://ftp.kernel.org/pub/software/devel/nasm/}\i\c{ftp.kernel.org}
-and 
+and
 \W{ftp://ibiblio.org/pub/Linux/devel/lang/assemblers/}\i\c{ibiblio.org}.
-\# \W{ftp://ftp.simtel.net/pub/simtelnet/msdos/asmutl/}\i\c{ftp.simtel.net}
-\# and
-\# \W{ftp://ftp.coast.net/coast/msdos/asmutil/}\i\c{ftp.coast.net}.
 
 Announcements are posted to
 \W{news:comp.lang.asm.x86}\i\c{comp.lang.asm.x86},
 \W{news:alt.lang.asm}\i\c{alt.lang.asm} and
 \W{news:comp.os.linux.announce}\i\c{comp.os.linux.announce}
-\#  and
-\# \W{news:comp.archives.msdos.announce}\i\c{comp.archives.msdos.announce}
-\# (the last one is done automagically by uploading to
-\# \W{ftp://ftp.simtel.net/pub/simtelnet/msdos/asmutl/}\c{ftp.simtel.net}).
 
 If you want information about NASM beta releases, and the current
-development status, please subscribe to the \i\c{nasm-devel} email lists
+development status, please subscribe to the \i\c{nasm-devel} email list
 by registering at
-\W{http://groups.yahoo.com/group/nasm-devel}\c{http://groups.yahoo.com/group/nasm-devel}
-and
+\W{http://groups.yahoo.com/group/nasm-devel}\c{http://groups.yahoo.com/group/nasm-devel},
 \W{http://www.pairlist.net/mailman/listinfo/nasm-devel}\c{http://www.pairlist.net/mailman/listinfo/nasm-devel}
+and
+\W{http://sourceforge.net/projects/nasm}\c{http://sourceforge.net/projects/nasm}.
+
+The preferred list is the list at Sourceforge, which is also the home to
+the latest nasm source code and releases. The other lists are open, but
+may not continue to be supported in the long term.
 
 
 \H{install} Installation
@@ -309,7 +319,7 @@ your PATH, or alternatively edit \i\c{autoexec.bat} to add the
 \c{nasm} directory to your \i\c{PATH}. (If you're only installing the
 \c{Win32} version, you may wish to rename it to \c{nasm.exe}.)
 
-That's it - NASM is installed. You don't need the \c{nasm} directory
+That's it - NASM is installed. You don't need the nasm directory
 to be present to run NASM (unless you've added it to your \c{PATH}),
 so you can delete it if you need to save space; however, you may
 want to keep the documentation or test programs.
@@ -325,10 +335,10 @@ instruction table \c{insns.dat} by a Perl script; the file
 \c{macros.c} is generated from \c{standard.mac} by another Perl
 script. Although the NASM 0.98 distribution includes these generated
 files, you will need to rebuild them (and hence, will need a Perl
-interpreter) if you change \c{insns.dat}, \c{standard.mac} or the
+interpreter) if you change insns.dat, standard.mac or the
 documentation. It is possible future source distributions may not
-include these files at all.  Ports of \i{Perl} for a variety of
-platforms, including \c{DOS} and \c{Windows}, are available from
+include these files at all. Ports of \i{Perl} for a variety of
+platforms, including DOS and Windows, are available from
 \W{http://www.cpan.org/ports/}\i{www.cpan.org}.
 
 
@@ -351,7 +361,7 @@ Once NASM has auto-configured, you can type \i\c{make} to build the
 install them in \c{/usr/local/bin} and install the \i{man pages}
 \i\c{nasm.1} and \i\c{ndisasm.1} in \c{/usr/local/man/man1}.
 Alternatively, you can give options such as \c{--prefix} to the
-\c{configure} script (see the file \i\c{INSTALL} for more details), or
+configure script (see the file \i\c{INSTALL} for more details), or
 install the programs yourself.
 
 NASM also comes with a set of utilities for handling the \c{RDOFF}
@@ -362,7 +372,7 @@ install them with \c{make rdf_install}, if you want them.
 If NASM fails to auto-configure, you may still be able to make it
 compile by using the fall-back Unix makefile \i\c{Makefile.unx}.
 Copy or rename that file to \c{Makefile} and try typing \c{make}.
-There is also a \c{Makefile.unx} file in the \c{rdoff} subdirectory.
+There is also a Makefile.unx file in the \c{rdoff} subdirectory.
 
 
 \C{running} Running NASM
@@ -617,7 +627,7 @@ For example, the following command line:
 \c nasm myfile.asm -dFOO=100 -uFOO
 
 would result in \c{FOO} \e{not} being a predefined macro in the
-program.  This is useful to override options specified at a different
+program. This is useful to override options specified at a different
 point in a Makefile.
 
 For Makefile compatibility with many C compilers, this option can also
@@ -661,22 +671,22 @@ correctly, you have to tell it.
 Using the \c{-O} option, you can tell NASM to carry out multiple passes.
 The syntax is:
 
-\b  \c{-O0}    strict two-pass assembly, JMP and Jcc are handled more
-       like v0.98, except that backward JMPs are short, if possible.
+\b \c{-O0} strict two-pass assembly, JMP and Jcc are handled more
+        like v0.98, except that backward JMPs are short, if possible.
         Immediate operands take their long forms if a short form is
         not specified.
 
-\b  \c{-O1}    strict two-pass assembly, but forward branches are assembled
-       with code guaranteed to reach; may produce larger code than
-       -O0, but will produce successful assembly more often if
-       branch offset sizes are not specified.
-       Additionally, immediate operands which will fit in a signed byte
-       are optimised, unless the long form is specified.
+\b \c{-O1} strict two-pass assembly, but forward branches are assembled
+        with code guaranteed to reach; may produce larger code than
+        -O0, but will produce successful assembly more often if
+        branch offset sizes are not specified.
+        Additionally, immediate operands which will fit in a signed byte
+        are optimised, unless the long form is specified.
 
-\b  \c{-On}    multi-pass optimization, minimize branch offsets; also will
-       minimize signed immediate bytes, overriding size specification.
-       If 2 <= n <= 3, then there are 5 * n passes, otherwise there
-       are n passes.
+\b \c{-On} multi-pass optimization, minimize branch offsets; also will
+        minimize signed immediate bytes, overriding size specification.
+        If 2 <= n <= 3, then there are 5 * n passes, otherwise there
+        are n passes.
 
 
 Note that this is a capital O, and is different from a small o, which
@@ -691,17 +701,17 @@ When NASM's \c{-t} option is used, the following changes are made:
 \b local labels may be prefixed with \c{@@} instead of \c{.}
 
 \b TASM-style response files beginning with \c{@} may be specified on
-the command line.  This is different from the \c{-@resp} style that NASM
+the command line. This is different from the \c{-@resp} style that NASM
 natively supports.
 
-\b size override is supported within brackets.  In TASM compatible mode, 
-a size override inside square brackets changes the size of the operand, 
-and not the address type of the operand as it does in NASM syntax.  E.g.  
-\c{mov eax,[DWORD val]} is valid syntax in TASM compatibility mode.  
-Note that you lose the ability to override the default address type for 
+\b size override is supported within brackets. In TASM compatible mode,
+a size override inside square brackets changes the size of the operand,
+and not the address type of the operand as it does in NASM syntax. E.g.
+\c{mov eax,[DWORD val]} is valid syntax in TASM compatibility mode.
+Note that you lose the ability to override the default address type for
 the instruction.
 
-\b \c{%arg} preprocessor directive is supported which is similar to 
+\b \c{%arg} preprocessor directive is supported which is similar to
 TASM's \c{ARG} directive.
 
 \b \c{%local} preprocessor directive
@@ -712,9 +722,9 @@ TASM's \c{ARG} directive.
 \c{else}, \c{endif}, \c{if}, \c{ifdef}, \c{ifdifi}, \c{ifndef},
 \c{include}, \c{local})
 
-\b more... 
+\b more...
 
-For more information on the directives, see the section on TASM 
+For more information on the directives, see the section on TASM
 Compatiblity preprocessor directives in \k{tasmcompat}.
 
 
@@ -784,9 +794,9 @@ character} for options. So setting the \c{NASMENV} variable to the
 value \c{!-s!-ic:\\nasmlib} is equivalent to setting it to \c{-s
 -ic:\\nasmlib}, but \c{!-dNAME="my name"} will work.
 
-This variable was called \c{NASM} in earlier versions of NASM,
-however, this caused problems with makefiles which used a \c{$(NASM)}
-variable.
+This environment variable was previously called \c{NASM}. This was
+changed with version 0.98.31.
+
 
 \H{qstart} \i{Quick Start} for \i{MASM} Users
 
@@ -816,13 +826,13 @@ practical, for the user to look at a single line of NASM code
 and tell what opcode is generated by it. You can't do this in MASM:
 if you declare, for example,
 
-\c foo       equ 1
-\c bar       dw  2
+\c foo     equ     1
+\c bar     dw      2
 
 then the two lines of code
 
-\c           mov ax,foo
-\c           mov ax,bar
+\c         mov     ax,foo
+\c         mov     ax,bar
 
 generate completely different opcodes, despite having
 identical-looking syntaxes.
@@ -1004,11 +1014,11 @@ can use NASM's native single-operand forms in most cases. Details of
 all forms of each supported instruction are given in
 \k{iref}. For example, you can code:
 
-\c           fadd st1               ; this sets st0 := st0 + st1
-\c           fadd st0,st1           ; so does this
+\c         fadd    st1             ; this sets st0 := st0 + st1
+\c         fadd    st0,st1         ; so does this
 \c
-\c           fadd st1,st0           ; this sets st1 := st1 + st0
-\c           fadd to st1            ; so does this
+\c         fadd    st1,st0         ; this sets st1 := st1 + st0
+\c         fadd    to st1          ; so does this
 
 Almost any floating-point instruction that references memory must
 use one of the prefixes \i\c{DWORD}, \i\c{QWORD} or \i\c{TWORD} to
@@ -1033,18 +1043,18 @@ as in MASM, to declare initialised data in the output file. They can
 be invoked in a wide range of ways:
 \I{floating-point}\I{character constant}\I{string constant}
 
-\c           db 0x55                ; just the byte 0x55
-\c           db 0x55,0x56,0x57      ; three bytes in succession
-\c           db 'a',0x55            ; character constants are OK
-\c           db 'hello',13,10,'$'   ; so are string constants
-\c           dw 0x1234              ; 0x34 0x12
-\c           dw 'a'                 ; 0x41 0x00 (it's just a number)
-\c           dw 'ab'                ; 0x41 0x42 (character constant)
-\c           dw 'abc'               ; 0x41 0x42 0x43 0x00 (string)
-\c           dd 0x12345678          ; 0x78 0x56 0x34 0x12
-\c           dd 1.234567e20         ; floating-point constant
-\c           dq 1.234567e20         ; double-precision float
-\c           dt 1.234567e20         ; extended-precision float
+\c       db    0x55                ; just the byte 0x55
+\c       db    0x55,0x56,0x57      ; three bytes in succession
+\c       db    'a',0x55            ; character constants are OK
+\c       db    'hello',13,10,'$'   ; so are string constants
+\c       dw    0x1234              ; 0x34 0x12
+\c       dw    'a'                 ; 0x41 0x00 (it's just a number)
+\c       dw    'ab'                ; 0x41 0x42 (character constant)
+\c       dw    'abc'               ; 0x41 0x42 0x43 0x00 (string)
+\c       dd    0x12345678          ; 0x78 0x56 0x34 0x12
+\c       dd    1.234567e20         ; floating-point constant
+\c       dq    1.234567e20         ; double-precision float
+\c       dt    1.234567e20         ; extended-precision float
 
 \c{DQ} and \c{DT} do not accept \i{numeric constants} or string
 constants as operands.
@@ -1064,9 +1074,9 @@ similar things: this is what it does instead. The operand to a
 
 For example:
 
-\c buffer:   resb 64                ; reserve 64 bytes
-\c wordvar:  resw 1                 ; reserve a word
-\c realarray resq 10                ; array of ten reals
+\c buffer:         resb    64              ; reserve 64 bytes
+\c wordvar:        resw    1               ; reserve a word
+\c realarray       resq    10              ; array of ten reals
 
 
 \S{incbin} \i\c{INCBIN}: Including External \i{Binary Files}
@@ -1077,10 +1087,10 @@ handy for (for example) including \i{graphics} and \i{sound} data
 directly into a game executable file. It can be called in one of
 these three ways:
 
-\c           incbin "file.dat"      ; include the whole file
-\c           incbin "file.dat",1024 ; skip the first 1024 bytes
-\c           incbin "file.dat",1024,512 ; skip the first 1024, and
-\c                                  ; actually include at most 512
+\c     incbin  "file.dat"             ; include the whole file
+\c     incbin  "file.dat",1024        ; skip the first 1024 bytes
+\c     incbin  "file.dat",1024,512    ; skip the first 1024, and
+\c                                    ; actually include at most 512
 
 
 \S{equ} \i\c{EQU}: Defining Constants
@@ -1091,8 +1101,8 @@ to define the given label name to the value of its (only) operand.
 This definition is absolute, and cannot change later. So, for
 example,
 
-\c message   db 'hello, world'
-\c msglen    equ $-message
+\c message         db      'hello, world'
+\c msglen          equ     $-message
 
 defines \c{msglen} to be the constant 12. \c{msglen} may not then be
 redefined later. This is not a \i{preprocessor} definition either:
@@ -1111,20 +1121,20 @@ times. This is partly present as NASM's equivalent of the \i\c{DUP}
 syntax supported by \i{MASM}-compatible assemblers, in that you can
 code
 
-\c zerobuf:  times 64 db 0
+\c zerobuf:        times 64 db 0
 
 or similar things; but \c{TIMES} is more versatile than that. The
 argument to \c{TIMES} is not just a numeric constant, but a numeric
 \e{expression}, so you can do things like
 
-\c buffer:   db 'hello, world'
-\c           times 64-$+buffer db ' '
+\c buffer: db      'hello, world'
+\c         times 64-$+buffer db ' '
 
 which will store exactly enough spaces to make the total length of
 \c{buffer} up to 64. Finally, \c{TIMES} can be applied to ordinary
 instructions, so you can code trivial \i{unrolled loops} in it:
 
-\c           times 100 movsb
+\c         times 100 movsb
 
 Note that there is no effective difference between \c{times 100 resb
 1} and \c{resb 100}, except that the latter will be assembled about
@@ -1148,10 +1158,10 @@ have a very simple syntax: they consist of an expression evaluating
 to the desired address, enclosed in \i{square brackets}. For
 example:
 
-\c wordvar   dw 123
-\c           mov ax,[wordvar]
-\c           mov ax,[wordvar+1]
-\c           mov ax,[es:wordvar+bx]
+\c wordvar dw      123
+\c         mov     ax,[wordvar]
+\c         mov     ax,[wordvar+1]
+\c         mov     ax,[es:wordvar+bx]
 
 Anything not conforming to this simple system is not a valid memory
 reference in NASM, for example \c{es:wordvar[bx]}.
@@ -1159,15 +1169,15 @@ reference in NASM, for example \c{es:wordvar[bx]}.
 More complicated effective addresses, such as those involving more
 than one register, work in exactly the same way:
 
-\c           mov eax,[ebx*2+ecx+offset]
-\c           mov ax,[bp+di+8]
+\c         mov     eax,[ebx*2+ecx+offset]
+\c         mov     ax,[bp+di+8]
 
 NASM is capable of doing \i{algebra} on these effective addresses,
 so that things which don't necessarily \e{look} legal are perfectly
 all right:
 
-\c           mov eax,[ebx*5]        ; assembles as [ebx*4+ebx]
-\c           mov eax,[label1*2-label2] ; ie [label1+(label1-label2)]
+\c     mov     eax,[ebx*5]             ; assembles as [ebx*4+ebx]
+\c     mov     eax,[label1*2-label2]   ; ie [label1+(label1-label2)]
 
 Some forms of effective address have more than one assembled form;
 in most such cases NASM will generate the smallest form it can. For
@@ -1220,12 +1230,12 @@ sign must have a digit after the \c{$} rather than a letter.
 
 Some examples:
 
-\c           mov ax,100             ; decimal
-\c           mov ax,0a2h            ; hex
-\c           mov ax,$0a2            ; hex again: the 0 is required
-\c           mov ax,0xa2            ; hex yet again
-\c           mov ax,777q            ; octal
-\c           mov ax,10010011b       ; binary
+\c         mov     ax,100          ; decimal
+\c         mov     ax,0a2h         ; hex
+\c         mov     ax,$0a2         ; hex again: the 0 is required
+\c         mov     ax,0xa2         ; hex yet again
+\c         mov     ax,777q         ; octal
+\c         mov     ax,10010011b    ; binary
 
 
 \S{chrconst} \i{Character Constants}
@@ -1258,14 +1268,14 @@ A string constant looks like a character constant, only longer. It
 is treated as a concatenation of maximum-size character constants
 for the conditions. So the following are equivalent:
 
-\c           db 'hello'             ; string constant
-\c           db 'h','e','l','l','o' ; equivalent character constants
+\c       db    'hello'               ; string constant
+\c       db    'h','e','l','l','o'   ; equivalent character constants
 
 And the following are also equivalent:
 
-\c           dd 'ninechars'         ; doubleword string constant
-\c           dd 'nine','char','s'   ; becomes three doublewords
-\c           db 'ninechars',0,0,0   ; and really looks like this
+\c       dd    'ninechars'           ; doubleword string constant
+\c       dd    'nine','char','s'     ; becomes three doublewords
+\c       db    'ninechars',0,0,0     ; and really looks like this
 
 Note that when used as an operand to \c{db}, a constant like
 \c{'ab'} is treated as a string constant despite being short enough
@@ -1287,11 +1297,11 @@ floating-point constant.
 
 Some examples:
 
-\c           dd 1.2                 ; an easy one
-\c           dq 1.e10               ; 10,000,000,000
-\c           dq 1.e+10              ; synonymous with 1.e10
-\c           dq 1.e-10              ; 0.000 000 000 1
-\c           dt 3.141592653589793238462 ; pi
+\c       dd    1.2                     ; an easy one
+\c       dq    1.e10                   ; 10,000,000,000
+\c       dq    1.e+10                  ; synonymous with 1.e10
+\c       dq    1.e-10                  ; 0.000 000 000 1
+\c       dt    3.141592653589793238462 ; pi
 
 NASM cannot do compile-time arithmetic on floating-point constants.
 This is because NASM is designed to be portable - although it always
@@ -1400,9 +1410,9 @@ The \c{SEG} operator returns the \i\e{preferred} segment base of a
 symbol, defined as the segment base relative to which the offset of
 the symbol makes sense. So the code
 
-\c           mov ax,seg symbol
-\c           mov es,ax
-\c           mov bx,symbol
+\c         mov     ax,seg symbol
+\c         mov     es,ax
+\c         mov     bx,symbol
 
 will load \c{ES:BX} with a valid pointer to the symbol \c{symbol}.
 
@@ -1412,9 +1422,9 @@ want to refer to some symbol using a different segment base from the
 preferred one. NASM lets you do this, by the use of the \c{WRT}
 (With Reference To) keyword. So you can do things like
 
-\c           mov ax,weird_seg       ; weird_seg is a segment base
-\c           mov es,ax
-\c           mov bx,symbol wrt weird_seg
+\c         mov     ax,weird_seg        ; weird_seg is a segment base
+\c         mov     es,ax
+\c         mov     bx,symbol wrt weird_seg
 
 to load \c{ES:BX} with a different, but functionally equivalent,
 pointer to the symbol \c{symbol}.
@@ -1424,8 +1434,8 @@ syntax \c{call segment:offset}, where \c{segment} and \c{offset}
 both represent immediate values. So to call a far procedure, you
 could code either of
 
-\c           call (seg procedure):procedure
-\c           call weird_seg:(procedure wrt weird_seg)
+\c         call    (seg procedure):procedure
+\c         call    weird_seg:(procedure wrt weird_seg)
 
 (The parentheses are included for clarity, to show the intended
 parsing of the above instructions. They are not necessary in
@@ -1438,7 +1448,7 @@ to \c{CALL} in these examples.
 To declare a \i{far pointer} to a data item in a data segment, you
 must code
 
-\c           dw symbol, seg symbol
+\c         dw      symbol, seg symbol
 
 NASM supports no convenient synonym for this, though you can always
 invent one using the macro processor.
@@ -1457,8 +1467,8 @@ code, knows all the symbol addresses the code refers to. So one
 thing NASM can't handle is code whose size depends on the value of a
 symbol declared after the code in question. For example,
 
-\c           times (label-$) db 0
-\c label:    db 'Where am I?'
+\c         times (label-$) db 0
+\c label:  db      'Where am I?'
 
 The argument to \i\c{TIMES} in this case could equally legally
 evaluate to anything at all; NASM will reject this example because
@@ -1466,8 +1476,8 @@ it cannot tell the size of the \c{TIMES} line when it first sees it.
 It will just as firmly reject the slightly \I{paradox}paradoxical
 code
 
-\c           times (label-$+1) db 0
-\c label:    db 'NOW where am I?'
+\c         times (label-$+1) db 0
+\c label:  db      'NOW where am I?'
 
 in which \e{any} value for the \c{TIMES} argument is by definition
 wrong!
@@ -1483,8 +1493,8 @@ also critical expressions.
 Critical expressions can crop up in other contexts as well: consider
 the following code.
 
-\c           mov ax,symbol1
-\c symbol1   equ symbol2
+\c                 mov     ax,symbol1
+\c symbol1         equ     symbol2
 \c symbol2:
 
 On the first pass, NASM cannot determine the value of \c{symbol1},
@@ -1502,8 +1512,8 @@ NASM avoids this problem by defining the right-hand side of an
 There is a related issue involving \i{forward references}: consider
 this code fragment.
 
-\c           mov eax,[ebx+offset]
-\c offset    equ 10
+\c         mov     eax,[ebx+offset]
+\c offset  equ     10
 
 NASM, on pass one, must calculate the size of the instruction \c{mov
 eax,[ebx+offset]} without knowing the value of \c{offset}. It has no
@@ -1528,14 +1538,21 @@ A label beginning with a single period is treated as a \e{local}
 label, which means that it is associated with the previous non-local
 label. So, for example:
 
-\c label1    ; some code
-\c .loop     ; some more code
-\c           jne .loop
-\c           ret
-\c label2    ; some code
-\c .loop     ; some more code
-\c           jne .loop
-\c           ret
+\c label1  ; some code
+\c
+\c .loop
+\c         ; some more code
+\c
+\c         jne     .loop
+\c         ret
+\c
+\c label2  ; some code
+\c
+\c .loop
+\c         ; some more code
+\c
+\c         jne     .loop
+\c         ret
 
 In the above code fragment, each \c{JNE} instruction jumps to the
 line immediately before it, because the two definitions of \c{.loop}
@@ -1551,9 +1568,10 @@ really defining a symbol called \c{label1.loop}, and the second
 defines a symbol called \c{label2.loop}. So, if you really needed
 to, you could write
 
-\c label3    ; some more code
-\c           ; and some more
-\c           jmp label1.loop
+\c label3  ; some more code
+\c         ; and some more
+\c
+\c         jmp label1.loop
 
 Sometimes it is useful - in a macro, for instance - to be able to
 define a label which can be referenced from anywhere but which
@@ -1566,12 +1584,13 @@ probably only useful in macro definitions: if a label begins with
 the \I{label prefix}special prefix \i\c{..@}, then it does nothing
 to the local label mechanism. So you could code
 
-\c label1:   ; a non-local label
-\c .local:   ; this is really label1.local
-\c ..@foo:   ; this is a special symbol
-\c label2:   ; another non-local label
-\c .local:   ; this is really label2.local
-\c           jmp ..@foo             ; this will jump three lines up
+\c label1:                         ; a non-local label
+\c .local:                         ; this is really label1.local
+\c ..@foo:                         ; this is a special symbol
+\c label2:                         ; another non-local label
+\c .local:                         ; this is really label2.local
+\c
+\c         jmp     ..@foo          ; this will jump three lines up
 
 NASM has the capacity to define other special symbols beginning with
 a double period: for example, \c{..start} is used to specify the
@@ -1602,21 +1621,23 @@ Single-line macros are defined using the \c{%define} preprocessor
 directive. The definitions work in a similar way to C; so you can do
 things like
 
-\c %define ctrl 0x1F &
+\c %define ctrl    0x1F &
 \c %define param(a,b) ((a)+(a)*(b))
-\c           mov byte [param(2,ebx)], ctrl 'D'
+\c
+\c         mov     byte [param(2,ebx)], ctrl 'D'
 
 which will expand to
 
-\c           mov byte [(2)+(2)*(ebx)], 0x1F & 'D'
+\c         mov     byte [(2)+(2)*(ebx)], 0x1F & 'D'
 
 When the expansion of a single-line macro contains tokens which
 invoke another macro, the expansion is performed at invocation time,
 not at definition time. Thus the code
 
-\c %define a(x) 1+b(x)
-\c %define b(x) 2*x
-\c           mov ax,a(8)
+\c %define a(x)    1+b(x)
+\c %define b(x)    2*x
+\c
+\c         mov     ax,a(8)
 
 will evaluate in the expected way to \c{mov ax,1+2*8}, even though
 the macro \c{b} wasn't defined at the time of definition of \c{a}.
@@ -1635,8 +1656,9 @@ a result of a previous expansion of the same macro, to guard against
 preprocessor will only expand the first occurrence of the macro.
 Hence, if you code
 
-\c %define a(x) 1+a(x)
-\c           mov ax,a(3)
+\c %define a(x)    1+a(x)
+\c
+\c         mov     ax,a(3)
 
 the macro \c{a(3)} will expand once, becoming \c{1+a(3)}, and will
 then expand no further. This behaviour can be useful: see \k{32c}
@@ -1645,7 +1667,7 @@ for an example of its use.
 You can \I{overloading, single-line macros}overload single-line
 macros: if you write
 
-\c %define foo(x) 1+x
+\c %define foo(x)   1+x
 \c %define foo(x,y) 1+x*y
 
 the preprocessor will be able to handle both types of macro call,
@@ -1676,14 +1698,53 @@ You can \i{pre-define} single-line macros using the `-d' option on
 the NASM command line: see \k{opt-d}.
 
 
+\S{concat%+} Concatenating Single Line Macro Tokens: \i\c{%+}
+
+Individual tokens in single line macros can be concatenated, to produce
+longer tokens for later processing. This can be useful if there are
+several similar macros that perform similar functions.
+
+As an example, consider the following:
+
+\c %define BDASTART 400h                ; Start of BIOS data area
+
+\c struc   tBIOSDA                      ; its structure
+\c         .COM1addr       RESW    1
+\c         .COM2addr       RESW    1
+\c         ; ..and so on
+\c endstruc
+
+Now, if we need to access the elements of tBIOSDA in different places,
+we can end up with:
+
+\c         mov     ax,BDASTART + tBIOSDA.COM1addr
+\c         mov     bx,BDASTART + tBIOSDA.COM2addr
+
+This will become pretty ugly (and tedious) if used in many places, and
+can be reduced in size significantly by using the following macro:
+
+\c ; Macro to access BIOS variables by their names (from tBDA):
+
+\c %define BDA(x)  BDASTART + tBIOSDA. %+ x
+
+Now the above code can be written as:
+
+\c         mov     ax,BDA(COM1addr)
+\c         mov     bx,BDA(COM2addr)
+
+Using this feature, we can simplify references to a lot of macros (and,
+in turn, reduce typing errors).
+
+
 \S{undef} Undefining macros: \i\c{%undef}
 
 Single-line macros can be removed with the \c{%undef} command.  For
 example, the following sequence:
 
 \c %define foo bar
-\c %undef foo
-\c             mov eax, foo
+\c %undef  foo
+\c
+\c         mov     eax, foo
 
 will expand to the instruction \c{mov eax, foo}, since after
 \c{%undef} the macro \c{foo} is no longer defined.
@@ -1724,7 +1785,7 @@ involving a register).
 
 \H{strlen} \i{String Handling in Macros}: \i\c{%strlen} and \i\c{%substr}
 
-It's often useful to be able to handle strings in macros.  NASM 
+It's often useful to be able to handle strings in macros. NASM
 supports two simple string handling macro operators from which
 more complex operations can be constructed.
 
@@ -1732,21 +1793,21 @@ more complex operations can be constructed.
 \S{strlen} \i{String Length}: \i\c{%strlen}
 
 The \c{%strlen} macro is like \c{%assign} macro in that it creates
-(or redefines) a numeric value to a macro.  The difference is that
-with \c{%strlen}, the numeric value is the length of a string.  An
+(or redefines) a numeric value to a macro. The difference is that
+with \c{%strlen}, the numeric value is the length of a string. An
 example of the use of this would be:
 
 \c %strlen charcnt 'my string'
 
 In this example, \c{charcnt} would receive the value 8, just as
-if an \c{%assign} had been used.  In this example, \c{'my string'}
-was a literal string but it could also have been a single-line 
+if an \c{%assign} had been used. In this example, \c{'my string'}
+was a literal string but it could also have been a single-line
 macro that expands to a string, as in the following example:
 
 \c %define sometext 'my string'
 \c %strlen charcnt sometext
 
-As in the first case, this would result in \c{charcnt} being 
+As in the first case, this would result in \c{charcnt} being
 assigned the value of 8.
 
 
@@ -1755,16 +1816,16 @@ assigned the value of 8.
 Individual letters in strings can be extracted using \c{%substr}.
 An example of its use is probably more useful than the description:
 
-\c %substr mychar 'xyz' 1  ; equivalent to %define mychar 'x'
-\c %substr mychar 'xyz' 2  ; equivalent to %define mychar 'y'
-\c %substr mychar 'xyz' 3  ; equivalent to %define mychar 'z'
+\c %substr mychar  'xyz' 1         ; equivalent to %define mychar 'x'
+\c %substr mychar  'xyz' 2         ; equivalent to %define mychar 'y'
+\c %substr mychar  'xyz' 3         ; equivalent to %define mychar 'z'
 
-In this example, mychar gets the value of 'y'.  As with \c{%strlen}
-(see \k{strlen}), the first parameter is the single-line macro to 
-be created and the second is the string.  The third parameter 
-specifies which character is to be selected.  Note that the first 
-index is 1, not 0 and the last index is equal to the value that 
-\c{%strlen} would assign given the same string.  Index values out
+In this example, mychar gets the value of 'y'. As with \c{%strlen}
+(see \k{strlen}), the first parameter is the single-line macro to
+be created and the second is the string. The third parameter
+specifies which character is to be selected. Note that the first
+index is 1, not 0 and the last index is equal to the value that
+\c{%strlen} would assign given the same string. Index values out
 of range result in an empty string.
 
 
@@ -1774,10 +1835,12 @@ Multi-line macros are much more like the type of macro seen in MASM
 and TASM: a multi-line macro definition in NASM looks something like
 this.
 
-\c %macro prologue 1
-\c           push ebp
-\c           mov ebp,esp
-\c           sub esp,%1
+\c %macro  prologue 1
+\c
+\c         push    ebp
+\c         mov     ebp,esp
+\c         sub     esp,%1
+\c
 \c %endmacro
 
 This defines a C-like function prologue as a macro: so you would
@@ -1787,9 +1850,9 @@ invoke the macro with a call such as
 
 which would expand to the three lines of code
 
-\c myfunc:   push ebp
-\c           mov ebp,esp
-\c           sub esp,12
+\c myfunc: push    ebp
+\c         mov     ebp,esp
+\c         sub     esp,12
 
 The number \c{1} after the macro name in the \c{%macro} line defines
 the number of parameters the macro \c{prologue} expects to receive.
@@ -1806,12 +1869,15 @@ multi-line macro, you can do that by enclosing the entire parameter
 in \I{braces, around macro parameters}braces. So you could code
 things like
 
-\c %macro silly 2
-\c %2:       db %1
+\c %macro  silly 2
+\c
+\c     %2: db      %1
+\c
 \c %endmacro
-\c           silly 'a', letter_a    ; letter_a:  db 'a'
-\c           silly 'ab', string_ab  ; string_ab: db 'ab'
-\c           silly {13,10}, crlf    ; crlf:      db 13,10
+\c
+\c         silly 'a', letter_a             ; letter_a:  db 'a'
+\c         silly 'ab', string_ab           ; string_ab: db 'ab'
+\c         silly {13,10}, crlf             ; crlf:      db 13,10
 
 
 \S{mlmacover} \i{Overloading Multi-Line Macros}
@@ -1821,9 +1887,11 @@ defining the same macro name several times with different numbers of
 parameters. This time, no exception is made for macros with no
 parameters at all. So you could define
 
-\c %macro prologue 0
-\c           push ebp
-\c           mov ebp,esp
+\c %macro  prologue 0
+\c
+\c         push    ebp
+\c         mov     ebp,esp
+\c
 \c %endmacro
 
 to define an alternative form of the function prologue which
@@ -1832,15 +1900,17 @@ allocates no local stack space.
 Sometimes, however, you might want to `overload' a machine
 instruction; for example, you might want to define
 
-\c %macro push 2
-\c           push %1
-\c           push %2
+\c %macro  push 2
+\c
+\c         push    %1
+\c         push    %2
+\c
 \c %endmacro
 
 so that you could code
 
-\c           push ebx               ; this line is not a macro call
-\c           push eax,ecx           ; but this one is
+\c         push    ebx             ; this line is not a macro call
+\c         push    eax,ecx         ; but this one is
 
 Ordinarily, NASM will give a warning for the first of the above two
 lines, since \c{push} is now defined to be a macro, and is being
@@ -1859,10 +1929,12 @@ each time. You do this by prefixing \i\c{%%} to the label name. So
 you can invent an instruction which executes a \c{RET} if the \c{Z}
 flag is set by doing this:
 
-\c %macro retz 0
-\c           jnz %%skip
-\c           ret
-\c %%skip:
+\c %macro  retz 0
+\c
+\c         jnz     %%skip
+\c         ret
+\c     %%skip:
+\c
 \c %endmacro
 
 You can call this macro as many times as you want, and every time
@@ -1884,7 +1956,7 @@ extracting one or two smaller parameters from the front. An example
 might be a macro to write a text string to a file in MS-DOS, where
 you might want to be able to write
 
-\c           writefile [filehandle],"hello, world",13,10
+\c         writefile [filehandle],"hello, world",13,10
 
 NASM allows you to define the last parameter of a macro to be
 \e{greedy}, meaning that if you invoke the macro with more
@@ -1892,14 +1964,17 @@ parameters than it expects, all the spare parameters get lumped into
 the last defined one along with the separating commas. So if you
 code:
 
-\c %macro writefile 2+
-\c           jmp %%endstr
-\c %%str:    db %2
-\c %%endstr: mov dx,%%str
-\c           mov cx,%%endstr-%%str
-\c           mov bx,%1
-\c           mov ah,0x40
-\c           int 0x21
+\c %macro  writefile 2+
+\c
+\c         jmp     %%endstr
+\c   %%str:        db      %2
+\c   %%endstr:
+\c         mov     dx,%%str
+\c         mov     cx,%%endstr-%%str
+\c         mov     bx,%1
+\c         mov     ah,0x40
+\c         int     0x21
+\c
 \c %endmacro
 
 then the example call to \c{writefile} above will work as expected:
@@ -1940,10 +2015,12 @@ NASM also allows you to define a multi-line macro with a \e{range}
 of allowable parameter counts. If you do this, you can specify
 defaults for \i{omitted parameters}. So, for example:
 
-\c %macro die 0-1 "Painful program death has occurred."
-\c           writefile 2,%1
-\c           mov ax,0x4c01
-\c           int 0x21
+\c %macro  die 0-1 "Painful program death has occurred."
+\c
+\c         writefile 2,%1
+\c         mov     ax,0x4c01
+\c         int     0x21
+\c
 \c %endmacro
 
 This macro (which makes use of the \c{writefile} macro defined in
@@ -2012,11 +2089,13 @@ parameters are rotated to the right.
 \I{iterating over macro parameters}So a pair of macros to save and
 restore a set of registers might work as follows:
 
-\c %macro multipush 1-*
-\c %rep %0
-\c           push %1
-\c %rotate 1
-\c %endrep
+\c %macro  multipush 1-*
+\c
+\c   %rep  %0
+\c         push    %1
+\c   %rotate 1
+\c   %endrep
+\c
 \c %endmacro
 
 This macro invokes the \c{PUSH} instruction on each of its arguments
@@ -2041,11 +2120,13 @@ order from the one in which they were pushed.
 
 This can be done by the following definition:
 
-\c %macro multipop 1-*
-\c %rep %0
-\c %rotate -1
-\c           pop %1
-\c %endrep
+\c %macro  multipop 1-*
+\c
+\c   %rep %0
+\c   %rotate -1
+\c         pop     %1
+\c   %endrep
+\c
 \c %endmacro
 
 This macro begins by rotating its arguments one place to the
@@ -2064,9 +2145,12 @@ table of key codes along with offsets into the table, you could code
 something like
 
 \c %macro keytab_entry 2
-\c keypos%1 equ $-keytab
-\c           db %2
+\c
+\c     keypos%1    equ     $-keytab
+\c                 db      %2
+\c
 \c %endmacro
+\c
 \c keytab:
 \c           keytab_entry F1,128+1
 \c           keytab_entry F2,128+2
@@ -2075,12 +2159,12 @@ something like
 which would expand to
 
 \c keytab:
-\c keyposF1 equ $-keytab
-\c           db 128+1
-\c keyposF2 equ $-keytab
-\c           db 128+2
-\c keyposReturn equ $-keytab
-\c           db 13
+\c keyposF1        equ     $-keytab
+\c                 db     128+1
+\c keyposF2        equ     $-keytab
+\c                 db      128+2
+\c keyposReturn    equ     $-keytab
+\c                 db      13
 
 You can just as easily concatenate text on to the other end of a
 macro parameter, by writing \c{%1foo}.
@@ -2120,10 +2204,12 @@ means of \i\c{%-1}, which NASM will expand as the \e{inverse}
 condition code. So the \c{retz} macro defined in \k{maclocal} can be
 replaced by a general \i{conditional-return macro} like this:
 
-\c %macro retc 1
-\c           j%-1 %%skip
-\c           ret
-\c %%skip:
+\c %macro  retc 1
+\c
+\c         j%-1    %%skip
+\c         ret
+\c   %%skip:
+\c
 \c %endmacro
 
 This macro can now be invoked using calls like \c{retc ne}, which
@@ -2164,11 +2250,11 @@ file to be assembled only if certain conditions are met. The general
 syntax of this feature looks like this:
 
 \c %if<condition>
-\c ; some code which only appears if <condition> is met
+\c     ; some code which only appears if <condition> is met
 \c %elif<condition2>
-\c ; only appears if <condition> is not met but <condition2> is
+\c     ; only appears if <condition> is not met but <condition2> is
 \c %else
-\c ; this appears if neither <condition> nor <condition2> was met
+\c     ; this appears if neither <condition> nor <condition2> was met
 \c %endif
 
 The \i\c{%else} clause is optional, as is the \i\c{%elif} clause.
@@ -2201,6 +2287,42 @@ definitions in \c{%elif} blocks by using \i\c{%elifdef} and
 \i\c{%elifndef}.
 
 
+\S{ifmacro} \i\c{ifmacro}: \i{Testing Multi-Line Macro Existence}
+
+The \c{%ifmacro} directive operates in the same way as the \c{%ifdef}
+directive, except that it checks for the existence of a multi-line macro.
+
+For example, you may be working with a large project and not have control
+over the macros in a library. You may want to create a macro with one
+name if it doesn't already exist, and another name if one with that name
+does exist.
+
+The %ifmacro is considered true if defining a macro with the given name
+and number of arguments would cause a definitions conflict. For example:
+
+\c %ifmacro MyMacro 1-3
+\c
+\c      %error "MyMacro 1-3" causes a conflict with an existing macro.
+\c
+\c %else
+\c
+\c      %macro MyMacro 1-3
+\c
+\c              ; insert code to define the macro
+\c
+\c      %endmacro
+\c
+\c %endif
+
+This will create the macro "MyMacro 1-3" if no macro already exists which
+would conflict with it, and emits a warning if there would be a definition
+conflict.
+
+You can test for the macro not existing by using the \i\c{ifnmacro} instead
+of \c{ifmacro}. Additional tests can be performed in %elif blocks by using
+\i\c{elifmacro} and \i\c{elifnmacro}.
+
+
 \S{ifctx} \i\c{%ifctx}: \i{Testing the Context Stack}
 
 The conditional-assembly construct \c{%ifctx ctxname} will cause the
@@ -2253,13 +2375,15 @@ Differences in white space are not counted.
 For example, the following macro pushes a register or number on the
 stack, and allows you to treat \c{IP} as a real register:
 
-\c %macro pushparam 1
-\c %ifidni %1,ip
-\c           call %%label
-\c %%label:
-\c %else
-\c           push %1
-\c %endif
+\c %macro  pushparam 1
+\c
+\c   %ifidni %1,ip
+\c         call    %%label
+\c   %%label:
+\c   %else
+\c         push    %1
+\c   %endif
+\c
 \c %endmacro
 
 Like most other \c{%if} constructs, \c{%ifidn} has a counterpart
@@ -2287,29 +2411,31 @@ For example, the \c{writefile} macro defined in \k{mlmacgre} can be
 extended to take advantage of \c{%ifstr} in the following fashion:
 
 \c %macro writefile 2-3+
-\c %ifstr %2
-\c           jmp %%endstr
-\c %if %0 = 3
-\c %%str:        db %2,%3
-\c %else
-\c %%str:        db %2
-\c %endif
-\c %%endstr: mov dx,%%str
-\c           mov cx,%%endstr-%%str
-\c %else
-\c       mov dx,%2
-\c       mov cx,%3
-\c %endif
-\c           mov bx,%1
-\c           mov ah,0x40
-\c           int 0x21
+\c
+\c   %ifstr %2
+\c         jmp     %%endstr
+\c     %if %0 = 3
+\c       %%str:    db      %2,%3
+\c     %else
+\c       %%str:    db      %2
+\c     %endif
+\c       %%endstr: mov     dx,%%str
+\c                 mov     cx,%%endstr-%%str
+\c   %else
+\c                 mov     dx,%2
+\c                 mov     cx,%3
+\c   %endif
+\c                 mov     bx,%1
+\c                 mov     ah,0x40
+\c                 int     0x21
+\c
 \c %endmacro
 
 Then the \c{writefile} macro can cope with being called in either of
 the following two ways:
 
-\c           writefile [file], strpointer, length
-\c           writefile [file], "hello", 13, 10
+\c         writefile [file], strpointer, length
+\c         writefile [file], "hello", 13, 10
 
 In the first, \c{strpointer} is used as the address of an
 already-declared string, and \c{length} is used as its length; in
@@ -2336,11 +2462,11 @@ try to assemble your source files, you can ensure that they define
 the right macros by means of code like this:
 
 \c %ifdef SOME_MACRO
-\c ; do some setup
+\c     ; do some setup
 \c %elifdef SOME_OTHER_MACRO
-\c ; do some different setup
+\c     ; do some different setup
 \c %else
-\c %error Neither SOME_MACRO nor SOME_OTHER_MACRO was defined.
+\c     %error Neither SOME_MACRO nor SOME_OTHER_MACRO was defined.
 \c %endif
 
 Then any user who fails to understand the way your code is supposed
@@ -2362,8 +2488,8 @@ arguments) can be used to enclose a chunk of code, which is then
 replicated as many times as specified by the preprocessor:
 
 \c %assign i 0
-\c %rep 64
-\c           inc word [table+2*i]
+\c %rep    64
+\c         inc     word [table+2*i]
 \c %assign i i+1
 \c %endrep
 
@@ -2380,13 +2506,14 @@ terminate the loop, like this:
 \c %assign j 1
 \c %rep 100
 \c %if j > 65535
-\c %exitrep
+\c     %exitrep
 \c %endif
-\c           dw j
+\c         dw j
 \c %assign k j+i
 \c %assign i j
 \c %assign j k
 \c %endrep
+\c
 \c fib_number equ ($-fibonacci)/2
 
 This produces a list of all the Fibonacci numbers that will fit in
@@ -2419,8 +2546,8 @@ once is just as applicable in NASM: if the file \c{macros.mac} has
 the form
 
 \c %ifndef MACROS_MAC
-\c %define MACROS_MAC
-\c ; now define some macros
+\c     %define MACROS_MAC
+\c     ; now define some macros
 \c %endif
 
 then including the file more than once will not cause errors,
@@ -2456,7 +2583,7 @@ The \c{%push} directive is used to create a new context and place it
 on the top of the context stack. \c{%push} requires one argument,
 which is the name of the context. For example:
 
-\c %push foobar
+\c %push    foobar
 
 This pushes a new context called \c{foobar} on the stack. You can
 have several contexts on the stack with the same name: they can
@@ -2476,22 +2603,26 @@ of the context stack. So the \c{REPEAT} and \c{UNTIL} example given
 above could be implemented by means of:
 
 \c %macro repeat 0
-\c %push repeat
-\c %$begin:
+\c
+\c     %push   repeat
+\c     %$begin:
+\c
 \c %endmacro
-
+\c
 \c %macro until 1
-\c           j%-1 %$begin
-\c %pop
+\c
+\c         j%-1    %$begin
+\c     %pop
+\c
 \c %endmacro
 
 and invoked by means of, for example,
 
-\c           mov cx,string
-\c           repeat
-\c           add cx,3
-\c           scasb
-\c           until e
+\c         mov     cx,string
+\c         repeat
+\c         add     cx,3
+\c         scasb
+\c         until   e
 
 which would scan every fourth byte of a string in search of the byte
 in \c{AL}.
@@ -2526,7 +2657,7 @@ with a different name, without touching the associated macros and
 labels. So you could replace the destructive code
 
 \c %pop
-\c %push newname
+\c %push   newname
 
 with the non-destructive version \c{%repl newname}.
 
@@ -2538,30 +2669,36 @@ including the conditional-assembly construct \i\c{%ifctx}, to
 implement a block IF statement as a set of macros.
 
 \c %macro if 1
+\c
 \c     %push if
-\c     j%-1 %$ifnot
+\c     j%-1  %$ifnot
+\c
 \c %endmacro
-
+\c
 \c %macro else 0
-\c     %ifctx if
-\c         %repl else
-\c         jmp %$ifend
+\c
+\c   %ifctx if
+\c         %repl   else
+\c         jmp     %$ifend
 \c         %$ifnot:
-\c     %else
-\c         %error "expected `if' before `else'"
-\c     %endif
+\c   %else
+\c         %error  "expected `if' before `else'"
+\c   %endif
+\c
 \c %endmacro
-
+\c
 \c %macro endif 0
-\c     %ifctx if
+\c
+\c   %ifctx if
 \c         %$ifnot:
 \c         %pop
-\c     %elifctx else
+\c   %elifctx      else
 \c         %$ifend:
 \c         %pop
-\c     %else
-\c         %error "expected `if' or `else' before `endif'"
-\c     %endif
+\c   %else
+\c         %error  "expected `if' or `else' before `endif'"
+\c   %endif
+\c
 \c %endmacro
 
 This code is more robust than the \c{REPEAT} and \c{UNTIL} macros
@@ -2584,20 +2721,25 @@ intervening \c{else}. It does this by the use of \c{%repl}.
 
 A sample usage of these macros might look like:
 
-\c           cmp ax,bx
-\c           if ae
-\c             cmp bx,cx
-\c             if ae
-\c               mov ax,cx
-\c             else
-\c               mov ax,bx
-\c             endif
-\c           else
-\c             cmp ax,cx
-\c             if ae
-\c               mov ax,cx
-\c             endif
-\c           endif
+\c         cmp     ax,bx
+\c
+\c         if ae
+\c                cmp     bx,cx
+\c
+\c                if ae
+\c                        mov     ax,cx
+\c                else
+\c                        mov     ax,bx
+\c                endif
+\c
+\c         else
+\c                cmp     ax,cx
+\c
+\c                if ae
+\c                        mov     ax,cx
+\c                endif
+\c
+\c         endif
 
 The block-\c{IF} macros handle nesting quite happily, by means of
 pushing another context, describing the inner \c{if}, on top of the
@@ -2646,11 +2788,13 @@ example, one could write a routine \c{stillhere}, which is passed a
 line number in \c{EAX} and outputs something like `line 155: still
 here'. You could then write a macro
 
-\c %macro notdeadyet 0
-\c           push eax
-\c           mov eax,__LINE__
-\c           call stillhere
-\c           pop eax
+\c %macro  notdeadyet 0
+\c
+\c         push    eax
+\c         mov     eax,__LINE__
+\c         call    stillhere
+\c         pop     eax
+\c
 \c %endmacro
 
 and then pepper your code with calls to \c{notdeadyet} until you
@@ -2675,12 +2819,14 @@ using the \c{RESB} family of pseudo-instructions, and then invoke
 For example, to define a structure called \c{mytype} containing a
 longword, a word, a byte and a string of bytes, you might code
 
-\c           struc mytype
-\c mt_long:  resd 1
-\c mt_word:  resw 1
-\c mt_byte:  resb 1
-\c mt_str:   resb 32
-\c           endstruc
+\c struc   mytype
+\c
+\c   mt_long:      resd    1
+\c   mt_word:      resw    1
+\c   mt_byte:      resb    1
+\c   mt_str:       resb    32
+\c
+\c endstruc
 
 The above code defines six symbols: \c{mt_long} as 0 (the offset
 from the beginning of a \c{mytype} structure to the longword field),
@@ -2692,12 +2838,14 @@ effect of allowing structures to work with the local label
 mechanism: if your structure members tend to have the same names in
 more than one structure, you can define the above structure like this:
 
-\c           struc mytype
-\c .long:    resd 1
-\c .word:    resw 1
-\c .byte:    resb 1
-\c .str:     resb 32
-\c           endstruc
+\c struc mytype
+\c
+\c   .long:        resd    1
+\c   .word:        resw    1
+\c   .byte:        resb    1
+\c   .str:         resb    32
+\c
+\c endstruc
 
 This defines the offsets to the structure fields as \c{mytype.long},
 \c{mytype.word}, \c{mytype.byte} and \c{mytype.str}.
@@ -2720,12 +2868,15 @@ segment. NASM provides an easy way to do this in the \c{ISTRUC}
 mechanism. To declare a structure of type \c{mytype} in a program,
 you code something like this:
 
-\c mystruc:  istruc mytype
-\c           at mt_long, dd 123456
-\c           at mt_word, dw 1024
-\c           at mt_byte, db 'x'
-\c           at mt_str, db 'hello, world', 13, 10, 0
-\c           iend
+\c mystruc:
+\c     istruc mytype
+\c
+\c         at mt_long, dd      123456
+\c         at mt_word, dw      1024
+\c         at mt_byte, db      'x'
+\c         at mt_str,  db      'hello, world', 13, 10, 0
+\c
+\c     iend
 
 The function of the \c{AT} macro is to make use of the \c{TIMES}
 prefix to advance the assembly position to the correct point for the
@@ -2737,16 +2888,16 @@ If the data to go in a structure field requires more than one source
 line to specify, the remaining source lines can easily come after
 the \c{AT} line. For example:
 
-\c           at mt_str, db 123,134,145,156,167,178,189
-\c           db 190,100,0
+\c         at mt_str,  db      123,134,145,156,167,178,189
+\c                     db      190,100,0
 
 Depending on personal taste, you can also omit the code part of the
 \c{AT} line completely, and start the structure field on the next
 line:
 
-\c           at mt_str
-\c           db 'hello, world'
-\c           db 13,10,0
+\c         at mt_str
+\c                 db      'hello, world'
+\c                 db      13,10,0
 
 
 \S{align} \i\c{ALIGN} and \i\c{ALIGNB}: Data Alignment
@@ -2756,11 +2907,11 @@ align code or data on a word, longword, paragraph or other boundary.
 (Some assemblers call this directive \i\c{EVEN}.) The syntax of the
 \c{ALIGN} and \c{ALIGNB} macros is
 
-\c           align 4                ; align on 4-byte boundary
-\c           align 16               ; align on 16-byte boundary
-\c           align 8,db 0           ; pad with 0s rather than NOPs
-\c           align 4,resb 1         ; align to 4 in the BSS
-\c           alignb 4               ; equivalent to previous line
+\c         align   4               ; align on 4-byte boundary
+\c         align   16              ; align on 16-byte boundary
+\c         align   8,db 0          ; pad with 0s rather than NOPs
+\c         align   4,resb 1        ; align to 4 in the BSS
+\c         alignb  4               ; equivalent to previous line
 
 Both macros require their first argument to be a power of two; they
 both compute the number of additional bytes required to bring the
@@ -2784,14 +2935,20 @@ thing.
 \c{ALIGNB} (or \c{ALIGN} with a second argument of \c{RESB 1}) can
 be used within structure definitions:
 
-\c           struc mytype2
-\c mt_byte:  resb 1
-\c           alignb 2
-\c mt_word:  resw 1
-\c           alignb 4
-\c mt_long:  resd 1
-\c mt_str:   resb 32
-\c           endstruc
+\c struc mytype2
+\c
+\c   mt_byte:
+\c         resb 1
+\c         alignb 2
+\c   mt_word:
+\c         resw 1
+\c         alignb 4
+\c   mt_long:
+\c         resd 1
+\c   mt_str:
+\c         resb 32
+\c
+\c endstruc
 
 This will ensure that the structure members are sensibly aligned
 relative to the base of the structure.
@@ -2807,8 +2964,8 @@ the use of \c{ALIGN} or \c{ALIGNB}.
 
 \H{tasmcompat} \i{TASM Compatible Preprocessor Directives}
 
-The following preprocessor directives may only be used when TASM 
-compatibility is turned on using the \c{-t} command line switch 
+The following preprocessor directives may only be used when TASM
+compatibility is turned on using the \c{-t} command line switch
 (This switch is described in \k{opt-t}.)
 
 \b\c{%arg}  (see \k{arg})
@@ -2820,96 +2977,102 @@ compatibility is turned on using the \c{-t} command line switch
 
 \S{arg} \i\c{%arg} Directive
 
-The \c{%arg} directive is used to simplify the handling of 
-parameters passed on the stack.  Stack based parameter passing
-is used by many high level languages, including C, C++ and Pascal.  
+The \c{%arg} directive is used to simplify the handling of
+parameters passed on the stack. Stack based parameter passing
+is used by many high level languages, including C, C++ and Pascal.
 
-While NASM comes with macros which attempt to duplicate this 
-functionality (see \k{16cmacro}), the syntax is not particularly 
-convenient to use and is not TASM compatible.  Here is an example 
+While NASM comes with macros which attempt to duplicate this
+functionality (see \k{16cmacro}), the syntax is not particularly
+convenient to use and is not TASM compatible. Here is an example
 which shows the use of \c{%arg} without any external macros:
 
 \c some_function:
-\c           %push mycontext        ; save the current context 
-\c           %stacksize large       ; tell NASM to use bp
-\c           %arg i:word, j_ptr:word
-\c           mov ax,[i]
-\c           mov bx,[j_ptr]
-\c           add ax,[bx]
-\c           ret
-\c           %pop                   ; restore original context 
-
-This is similar to the procedure defined in \k{16cmacro} and adds 
-the value in i to the value pointed to by j_ptr and returns the 
-sum in the ax register.  See \k{pushpop} for an explanation of 
+\c
+\c     %push     mycontext        ; save the current context
+\c     %stacksize large           ; tell NASM to use bp
+\c     %arg      i:word, j_ptr:word
+\c
+\c         mov     ax,[i]
+\c         mov     bx,[j_ptr]
+\c         add     ax,[bx]
+\c         ret
+\c
+\c     %pop                       ; restore original context
+
+This is similar to the procedure defined in \k{16cmacro} and adds
+the value in i to the value pointed to by j_ptr and returns the
+sum in the ax register. See \k{pushpop} for an explanation of
 \c{push} and \c{pop} and the use of context stacks.
 
 
 \S{stacksize} \i\c{%stacksize} Directive
 
-The \c{%stacksize} directive is used in conjunction with the 
-\c{%arg} (see \k{arg}) and the \c{%local} (see \k{local}) directives.  
-It tells NASM the default size to use for subsequent \c{%arg} and 
-\c{%local} directives.  The \c{%stacksize} directive takes one 
+The \c{%stacksize} directive is used in conjunction with the
+\c{%arg} (see \k{arg}) and the \c{%local} (see \k{local}) directives.
+It tells NASM the default size to use for subsequent \c{%arg} and
+\c{%local} directives. The \c{%stacksize} directive takes one
 required argument which is one of \c{flat}, \c{large} or \c{small}.
 
 \c %stacksize flat
 
-This form causes NASM to use stack-based parameter addressing 
+This form causes NASM to use stack-based parameter addressing
 relative to \c{ebp} and it assumes that a near form of call was used
 to get to this label (i.e. that \c{eip} is on the stack).
 
 \c %stacksize large
 
 This form uses \c{bp} to do stack-based parameter addressing and
-assumes that a far form of call was used to get to this address 
+assumes that a far form of call was used to get to this address
 (i.e. that \c{ip} and \c{cs} are on the stack).
 
 \c %stacksize small
 
 This form also uses \c{bp} to address stack parameters, but it is
 different from \c{large} because it also assumes that the old value
-of bp is pushed onto the stack (i.e. it expects an \c{ENTER} 
-instruction).  In other words, it expects that \c{bp}, \c{ip} and 
+of bp is pushed onto the stack (i.e. it expects an \c{ENTER}
+instruction). In other words, it expects that \c{bp}, \c{ip} and
 \c{cs} are on the top of the stack, underneath any local space which
-may have been allocated by \c{ENTER}.  This form is probably most
-useful when used in combination with the \c{%local} directive 
+may have been allocated by \c{ENTER}. This form is probably most
+useful when used in combination with the \c{%local} directive
 (see \k{local}).
 
 
 \S{local} \i\c{%local} Directive
 
 The \c{%local} directive is used to simplify the use of local
-temporary stack variables allocated in a stack frame.  Automatic
-local variables in C are an example of this kind of variable.  The
+temporary stack variables allocated in a stack frame. Automatic
+local variables in C are an example of this kind of variable. The
 \c{%local} directive is most useful when used with the \c{%stacksize}
-(see \k{stacksize} and is also compatible with the \c{%arg} directive 
-(see \k{arg}).  It allows simplified reference to variables on the
-stack which have been allocated typically by using the \c{ENTER} 
+(see \k{stacksize} and is also compatible with the \c{%arg} directive
+(see \k{arg}). It allows simplified reference to variables on the
+stack which have been allocated typically by using the \c{ENTER}
 instruction (see \k{insENTER} for a description of that instruction).
 An example of its use is the following:
 
 \c silly_swap:
-\c           %push mycontext        ; save the current context 
-\c           %stacksize small       ; tell NASM to use bp
-\c           %assign %$localsize 0  ; see text for explanation
-\c           %local old_ax:word, old_dx:word
-\c           enter %$localsize,0    ; see text for explanation
-\c           mov [old_ax],ax        ; swap ax & bx
-\c           mov [old_dx],dx        ; and swap dx & cx
-\c           mov ax,bx
-\c           mov dx,cx
-\c           mov bx,[old_ax]
-\c           mov cx,[old_dx]
-\c           leave                  ; restore old bp
-\c           ret                    ;
-\c           %pop                   ; restore original context 
-
-The \c{%$localsize} variable is used internally by the 
-\c{%local} directive and \e{must} be defined within the 
+\c
+\c     %push mycontext             ; save the current context
+\c     %stacksize small            ; tell NASM to use bp
+\c     %assign %$localsize 0       ; see text for explanation
+\c     %local old_ax:word, old_dx:word
+\c
+\c         enter   %$localsize,0   ; see text for explanation
+\c         mov     [old_ax],ax     ; swap ax & bx
+\c         mov     [old_dx],dx     ; and swap dx & cx
+\c         mov     ax,bx
+\c         mov     dx,cx
+\c         mov     bx,[old_ax]
+\c         mov     cx,[old_dx]
+\c         leave                   ; restore old bp
+\c         ret                     ;
+\c
+\c     %pop                        ; restore original context
+
+The \c{%$localsize} variable is used internally by the
+\c{%local} directive and \e{must} be defined within the
 current context before the \c{%local} directive may be used.
 Failure to do so will result in one expression syntax error for
-each \c{%local} variable declared.  It then may be used in 
+each \c{%local} variable declared. It then may be used in
 the construction of an appropriately sized ENTER instruction
 as shown in the example.
 
@@ -3011,27 +3174,32 @@ defines the single-line macro \c{__SECT__} to be the primitive
 \c{[SECTION]} directive which it is about to issue, and then issues
 it. So the user-level directive
 
-\c           SECTION .text
+\c         SECTION .text
 
 expands to the two lines
 
-\c %define __SECT__ [SECTION .text]
-\c           [SECTION .text]
+\c %define __SECT__        [SECTION .text]
+\c         [SECTION .text]
 
 Users may find it useful to make use of this in their own macros.
 For example, the \c{writefile} macro defined in \k{mlmacgre} can be
 usefully rewritten in the following more sophisticated form:
 
-\c %macro writefile 2+
-\c           [section .data]
-\c %%str:    db %2
-\c %%endstr:
-\c           __SECT__
-\c           mov dx,%%str
-\c           mov cx,%%endstr-%%str
-\c           mov bx,%1
-\c           mov ah,0x40
-\c           int 0x21
+\c %macro  writefile 2+
+\c
+\c         [section .data]
+\c
+\c   %%str:        db      %2
+\c   %%endstr:
+\c
+\c         __SECT__
+\c
+\c         mov     dx,%%str
+\c         mov     cx,%%endstr-%%str
+\c         mov     bx,%1
+\c         mov     ah,0x40
+\c         int     0x21
+\c
 \c %endmacro
 
 This form of the macro, once passed a string to output, first
@@ -3056,10 +3224,11 @@ mode are the \c{RESB} family.
 
 \c{ABSOLUTE} is used as follows:
 
-\c           absolute 0x1A
-\c kbuf_chr  resw 1
-\c kbuf_free resw 1
-\c kbuf      resw 16
+\c absolute 0x1A
+\c
+\c     kbuf_chr    resw    1
+\c     kbuf_free   resw    1
+\c     kbuf        resw    16
 
 This example describes a section of the PC BIOS data area, at
 segment address 0x40: the above code defines \c{kbuf_chr} to be
@@ -3076,13 +3245,19 @@ argument: it can take an expression (actually, a \i{critical
 expression}: see \k{crit}) and it can be a value in a segment. For
 example, a TSR can re-use its setup code as run-time BSS like this:
 
-\c           org 100h               ; it's a .COM program
-\c           jmp setup              ; setup code comes last
-\c           ; the resident part of the TSR goes here
-\c setup:    ; now write the code that installs the TSR here
-\c           absolute setup
-\c runtimevar1 resw 1
-\c runtimevar2 resd 20
+\c         org     100h               ; it's a .COM program
+\c
+\c         jmp     setup              ; setup code comes last
+\c
+\c         ; the resident part of the TSR goes here
+\c setup:
+\c         ; now write the code that installs the TSR here
+\c
+\c absolute setup
+\c
+\c runtimevar1     resw    1
+\c runtimevar2     resd    20
+\c
 \c tsr_end:
 
 This defines some variables `on top of' the setup code, so that
@@ -3104,8 +3279,8 @@ the \c{bin} format cannot.
 The \c{EXTERN} directive takes as many arguments as you like. Each
 argument is the name of a symbol:
 
-\c           extern _printf
-\c           extern _sscanf,_fscanf
+\c extern  _printf
+\c extern  _sscanf,_fscanf
 
 Some object-file formats provide extra features to the \c{EXTERN}
 directive. In all cases, the extra features are used by suffixing a
@@ -3114,7 +3289,7 @@ For example, the \c{obj} format allows you to declare that the
 default segment base of an external should be the group \c{dgroup}
 by means of the directive
 
-\c           extern _variable:wrt dgroup
+\c extern  _variable:wrt dgroup
 
 The primitive form of \c{EXTERN} differs from the user-level form
 only in that it can take only one argument at a time: the support
@@ -3140,15 +3315,16 @@ the definition of the symbol.
 refer to symbols which \e{are} defined in the same module as the
 \c{GLOBAL} directive. For example:
 
-\c           global _main
-\c _main:    ; some code
+\c global _main
+\c _main:
+\c         ; some code
 
 \c{GLOBAL}, like \c{EXTERN}, allows object formats to define private
 extensions by means of a colon. The \c{elf} object format, for
 example, lets you specify whether global data items are functions or
 data:
 
-\c           global hashlookup:function, hashtable:data
+\c global  hashlookup:function, hashtable:data
 
 Like \c{EXTERN}, the primitive form of \c{GLOBAL} differs from the
 user-level form only in that it can take only one argument at a
@@ -3161,13 +3337,14 @@ The \c{COMMON} directive is used to declare \i\e{common variables}.
 A common variable is much like a global variable declared in the
 uninitialised data section, so that
 
-\c           common intvar 4
+\c common  intvar  4
 
 is similar in function to
 
-\c           global intvar
-\c           section .bss
-\c intvar    resd 1
+\c global  intvar
+\c section .bss
+\c
+\c intvar  resd    1
 
 The difference is that if more than one module defines the same
 common variable, then at link time those variables will be
@@ -3179,8 +3356,8 @@ specific extensions. For example, the \c{obj} format allows common
 variables to be NEAR or FAR, and the \c{elf} format allows you to
 specify the alignment requirements of a common variable:
 
-\c           common commvar 4:near  ; works in OBJ
-\c           common intarray 100:4  ; works in ELF: 4 byte aligned
+\c common  commvar  4:near  ; works in OBJ
+\c common  intarray 100:4   ; works in ELF: 4 byte aligned
 
 Once again, like \c{EXTERN} and \c{GLOBAL}, the primitive form of
 \c{COMMON} differs from the user-level form only in that it can take
@@ -3208,11 +3385,11 @@ Options are:
 
 \b\c{CPU PENTIUM}       Same as 586
 
-\b\c{CPU 686}           Pentium Pro instruction set
+\b\c{CPU 686}           P6 instruction set
 
 \b\c{CPU PPRO}          Same as 686
 
-\b\c{CPU P2}            Pentium II instruction set
+\b\c{CPU P2}            Same as 686
 
 \b\c{CPU P3}            Pentium III and Katmai instruction sets
 
@@ -3222,7 +3399,7 @@ Options are:
 
 \b\c{CPU WILLAMETTE}    Same as P4
 
-All options are case insensitive.  All instructions will
+All options are case insensitive. All instructions will
 be selected only if they apply to the selected cpu or lower.
 
 
@@ -3284,8 +3461,8 @@ the program begins at when it is loaded into memory.
 For example, the following code will generate the longword
 \c{0x00000104}:
 
-\c           org 0x100
-\c           dd label
+\c         org     0x100
+\c         dd      label
 \c label:
 
 Unlike the \c{ORG} directive provided by MASM-compatible assemblers,
@@ -3305,7 +3482,7 @@ directive to allow you to specify the alignment requirements of
 segments. This is done by appending the \i\c{ALIGN} qualifier to the
 end of the section-definition line. For example,
 
-\c           section .data align=16
+\c section .data   align=16
 
 switches to the section \c{.data} and also specifies that it must be
 aligned on a 16-byte boundary.
@@ -3343,25 +3520,30 @@ When you define a segment in an \c{obj} file, NASM defines the
 segment name as a symbol as well, so that you can access the segment
 address of the segment. So, for example:
 
-\c           segment data
-\c dvar:     dw 1234
-\c           segment code
-\c function: mov ax,data            ; get segment address of data
-\c           mov ds,ax              ; and move it into DS
-\c           inc word [dvar]        ; now this reference will work
-\c           ret
+\c segment data
+\c
+\c dvar:   dw      1234
+\c
+\c segment code
+\c
+\c function:
+\c         mov     ax,data         ; get segment address of data
+\c         mov     ds,ax           ; and move it into DS
+\c         inc     word [dvar]     ; now this reference will work
+\c         ret
 
 The \c{obj} format also enables the use of the \i\c{SEG} and
 \i\c{WRT} operators, so that you can write code which does things
 like
 
-\c           extern foo
-\c           mov ax,seg foo         ; get preferred segment of foo
-\c           mov ds,ax
-\c           mov ax,data            ; a different segment
-\c           mov es,ax
-\c           mov ax,[ds:foo]        ; this accesses `foo'
-\c           mov [es:foo wrt data],bx  ; so does this
+\c extern  foo
+\c
+\c       mov   ax,seg foo            ; get preferred segment of foo
+\c       mov   ds,ax
+\c       mov   ax,data               ; a different segment
+\c       mov   es,ax
+\c       mov   ax,[ds:foo]           ; this accesses `foo'
+\c       mov   [es:foo wrt data],bx  ; so does this
 
 
 \S{objseg} \c{obj} Extensions to the \c{SEGMENT}
@@ -3372,7 +3554,7 @@ directive to allow you to specify various properties of the segment
 you are defining. This is done by appending extra qualifiers to the
 end of the segment-definition line. For example,
 
-\c           segment code private align=16
+\c segment code private align=16
 
 defines the segment \c{code}, but also declares it to be a private
 segment, and requires that the portion of it described in this code
@@ -3434,11 +3616,15 @@ single segment register can be used to refer to all the segments in
 a group. NASM therefore supplies the \c{GROUP} directive, whereby
 you can code
 
-\c           segment data
-\c           ; some data
-\c           segment bss
-\c           ; some uninitialised data
-\c           group dgroup data bss
+\c segment data
+\c
+\c         ; some data
+\c
+\c segment bss
+\c
+\c         ; some uninitialised data
+\c
+\c group dgroup data bss
 
 which will define a group called \c{dgroup} to contain the segments
 \c{data} and \c{bss}. Like \c{SEGMENT}, \c{GROUP} causes the group
@@ -3490,14 +3676,14 @@ white space, which are (respectively) the name of the symbol you
 wish to import and the name of the library you wish to import it
 from. For example:
 
-\c           import WSAStartup wsock32.dll
+\c     import  WSAStartup wsock32.dll
 
 A third optional parameter gives the name by which the symbol is
 known in the library you are importing it from, in case this is not
 the same as the name you wish the symbol to be known by to your code
 once you have imported it. For example:
 
-\c           import asyncsel wsock32.dll WSAAsyncSelect
+\c     import  asyncsel wsock32.dll WSAAsyncSelect
 
 
 \S{export} \i\c{EXPORT}: Exporting DLL Symbols\I{DLL symbols,
@@ -3539,10 +3725,10 @@ the desired number.
 
 For example:
 
-\c           export myfunc
-\c           export myfunc TheRealMoreFormalLookingFunctionName
-\c           export myfunc myfunc 1234  ; export by ordinal
-\c           export myfunc myfunc resident parm=23 nodata
+\c     export  myfunc
+\c     export  myfunc TheRealMoreFormalLookingFunctionName
+\c     export  myfunc myfunc 1234  ; export by ordinal
+\c     export  myfunc myfunc resident parm=23 nodata
 
 
 \S{dotdotstart} \i\c{..start}: Defining the \i{Program Entry
@@ -3561,29 +3747,29 @@ Directive\I{EXTERN, obj extensions to}
 
 If you declare an external symbol with the directive
 
-\c           extern foo
+\c     extern  foo
 
 then references such as \c{mov ax,foo} will give you the offset of
 \c{foo} from its preferred segment base (as specified in whichever
 module \c{foo} is actually defined in). So to access the contents of
 \c{foo} you will usually need to do something like
 
-\c           mov ax,seg foo         ; get preferred segment base
-\c           mov es,ax              ; move it into ES
-\c           mov ax,[es:foo]        ; and use offset `foo' from it
+\c         mov     ax,seg foo      ; get preferred segment base
+\c         mov     es,ax           ; move it into ES
+\c         mov     ax,[es:foo]     ; and use offset `foo' from it
 
 This is a little unwieldy, particularly if you know that an external
 is going to be accessible from a given segment or group, say
 \c{dgroup}. So if \c{DS} already contained \c{dgroup}, you could
 simply code
 
-\c           mov ax,[foo wrt dgroup]
+\c         mov     ax,[foo wrt dgroup]
 
 However, having to type this every time you want to access \c{foo}
 can be a pain; so NASM allows you to declare \c{foo} in the
 alternative form
 
-\c           extern foo:wrt dgroup
+\c     extern  foo:wrt dgroup
 
 This form causes NASM to pretend that the preferred segment base of
 \c{foo} is in fact \c{dgroup}; so the expression \c{seg foo} will
@@ -3603,8 +3789,8 @@ The \c{obj} format allows common variables to be either near\I{near
 common variables} or far\I{far common variables}; NASM allows you to
 specify which your variables should be by the use of the syntax
 
-\c           common nearvar 2:near  ; `nearvar' is a near common
-\c           common farvar 10:far   ; and `farvar' is far
+\c common  nearvar 2:near   ; `nearvar' is a near common
+\c common  farvar  10:far   ; and `farvar' is far
 
 Far common variables may be greater in size than 64Kb, and so the
 OMF specification says that they are declared as a number of
@@ -3619,24 +3805,24 @@ in more than one module. Therefore NASM must allow you to specify
 the element size on your far common variables. This is done by the
 following syntax:
 
-\c           common c_5by2 10:far 5 ; two five-byte elements
-\c           common c_2by5 10:far 2 ; five two-byte elements
+\c common  c_5by2  10:far 5        ; two five-byte elements
+\c common  c_2by5  10:far 2        ; five two-byte elements
 
 If no element size is specified, the default is 1. Also, the \c{FAR}
 keyword is not required when an element size is specified, since
 only far commons may have element sizes at all. So the above
 declarations could equivalently be
 
-\c           common c_5by2 10:5     ; two five-byte elements
-\c           common c_2by5 10:2     ; five two-byte elements
+\c common  c_5by2  10:5            ; two five-byte elements
+\c common  c_2by5  10:2            ; five two-byte elements
 
 In addition to these extensions, the \c{COMMON} directive in \c{obj}
 also supports default-\c{WRT} specification like \c{EXTERN} does
 (explained in \k{objextern}). So you can also declare things like
 
-\c           common foo 10:wrt dgroup
-\c           common bar 16:far 2:wrt data
-\c           common baz 24:wrt data:6
+\c common  foo     10:wrt dgroup
+\c common  bar     16:far 2:wrt data
+\c common  baz     24:wrt data:6
 
 
 \H{win32fmt} \i\c{win32}: Microsoft Win32 Object Files
@@ -3705,10 +3891,10 @@ alignment), though the value does not matter.
 The defaults assumed by NASM if you do not specify the above
 qualifiers are:
 
-\c           section .text code align=16
-\c           section .data data align=4
-\c           section .rdata rdata align=8
-\c           section .bss bss align=4
+\c section .text    code  align=16
+\c section .data    data  align=4
+\c section .rdata   rdata align=8
+\c section .bss     bss   align=4
 
 Any other section name is treated by default like \c{.text}.
 
@@ -3769,10 +3955,10 @@ requirements of the section.
 The defaults assumed by NASM if you do not specify the above
 qualifiers are:
 
-\c           section .text progbits alloc   exec nowrite align=16
-\c           section .data progbits alloc noexec   write align=4
-\c           section .bss    nobits alloc noexec   write align=4
-\c           section other progbits alloc noexec nowrite align=1
+\c section .text   progbits alloc   exec    nowrite align=16
+\c section .data   progbits alloc   noexec  write   align=4
+\c section .bss    nobits   alloc   noexec  write   align=4
+\c section other   progbits alloc   noexec  nowrite align=1
 
 (Any section name other than \c{.text}, \c{.data} and \c{.bss} is
 treated by default like \c{other} in the above code.)
@@ -3853,7 +4039,7 @@ object by suffixing the name with a colon and the word
 \i\c{function} or \i\c{data}. (\i\c{object} is a synonym for
 \c{data}.) For example:
 
-\c           global hashlookup:function, hashtable:data
+\c global   hashlookup:function, hashtable:data
 
 exports the global symbol \c{hashlookup} as a function and
 \c{hashtable} as a data object.
@@ -3862,9 +4048,10 @@ You can also specify the size of the data associated with the
 symbol, as a numeric expression (which may involve labels, and even
 forward references) after the type specifier. Like this:
 
-\c           global hashtable:data (hashtable.end - hashtable)
+\c global  hashtable:data (hashtable.end - hashtable)
+\c
 \c hashtable:
-\c           db this,that,theother  ; some data here
+\c         db this,that,theother  ; some data here
 \c .end:
 
 This makes NASM automatically calculate the length of the table and
@@ -3875,8 +4062,8 @@ writing shared library code. For more information, see
 \k{picglobal}.
 
 
-\S{elfcomm} \c{elf} Extensions to the \c{COMMON} Directive\I{COMMON,
-elf extensions to}
+\S{elfcomm} \c{elf} Extensions to the \c{COMMON} Directive
+\I{COMMON, elf extensions to}
 
 \c{ELF} also allows you to specify alignment requirements \I{common
 variables, alignment in elf}\I{alignment, of elf common variables}on
@@ -3885,7 +4072,7 @@ power of two) after the name and size of the common variable,
 separated (as usual) by a colon. For example, an array of
 doublewords would benefit from 4-byte alignment:
 
-\c           common dwordarray 128:4
+\c common  dwordarray 128:4
 
 This declares the total size of the array to be 128 bytes, and
 requires that it be aligned on a 4-byte boundary.
@@ -3980,7 +4167,7 @@ library to be linked to the module, either at load time or run time.
 This is done by the \c{LIBRARY} directive, which takes one argument
 which is the name of the module:
 
-\c           library mylib.rdl
+\c     library  mylib.rdl
 
 
 \S{rdfmod} Specifying a Module Name: The \i\c{MODULE} Directive
@@ -3990,13 +4177,13 @@ It can be used, for example, by run-time loader to perform dynamic
 linking. \c{MODULE} directive takes one argument which is the name
 of current module:
 
-\c           module mymodname
+\c     module  mymodname
 
 Note that when you statically link modules and tell linker to strip
 the symbols from output file, all module names will be stripped too.
 To avoid it, you should start module names with \I{$prefix}\c{$}, like:
 
-\c           module $kernel.core
+\c     module  $kernel.core
 
 
 \S{rdfglob} \c{rdf} Extensions to the \c{GLOBAL} directive\I{GLOBAL,
@@ -4011,17 +4198,17 @@ is a procedure (function) or data object.
 Suffixing the name with a colon and the word \i\c{export} you make the
 symbol exported:
 
-\c           global sys_open:export
+\c     global  sys_open:export
 
 To specify that exported symbol is a procedure (function), you add the
 word \i\c{proc} or \i\c{function} after declaration:
 
-\c           global sys_open:export proc
+\c     global  sys_open:export proc
 
 Similarly, to specify exported data object, add the word \i\c{data}
 or \i\c{object} to the directive:
 
-\c           global kernel_ticks:export data
+\c     global  kernel_ticks:export data
 
 
 \H{dbgfmt} \i\c{dbg}: Debugging Format
@@ -4135,13 +4322,14 @@ the segment registers, and declaring a start point. This file is
 also provided in the \I{test subdirectory}\c{test} subdirectory of
 the NASM archives, under the name \c{objexe.asm}.
 
-\c           segment code
-\c 
-\c ..start:  mov ax,data
-\c           mov ds,ax
-\c           mov ax,stack
-\c           mov ss,ax
-\c           mov sp,stacktop
+\c segment code
+\c
+\c ..start:
+\c         mov     ax,data
+\c         mov     ds,ax
+\c         mov     ax,stack
+\c         mov     ss,ax
+\c         mov     sp,stacktop
 
 This initial piece of code sets up \c{DS} to point to the data
 segment, and initialises \c{SS} and \c{SP} to point to the top of
@@ -4155,27 +4343,28 @@ Note also that the special symbol \c{..start} is defined at the
 beginning of this code, which means that will be the entry point
 into the resulting executable file.
 
-\c           mov dx,hello
-\c           mov ah,9
-\c           int 0x21
+\c         mov     dx,hello
+\c         mov     ah,9
+\c         int     0x21
 
 The above is the main program: load \c{DS:DX} with a pointer to the
 greeting message (\c{hello} is implicitly relative to the segment
 \c{data}, which was loaded into \c{DS} in the setup code, so the
 full pointer is valid), and call the DOS print-string function.
 
-\c           mov ax,0x4c00
-\c           int 0x21
+\c         mov     ax,0x4c00
+\c         int     0x21
 
 This terminates the program using another DOS system call.
 
-\c           segment data
-\c hello:    db 'hello, world', 13, 10, '$'
+\c segment data
+\c
+\c hello:  db      'hello, world', 13, 10, '$'
 
 The data segment contains the string we want to display.
 
-\c           segment stack stack
-\c           resb 64
+\c segment stack stack
+\c         resb 64
 \c stacktop:
 
 The above code declares a stack segment containing 64 bytes of
@@ -4254,13 +4443,20 @@ segment (though the segment may change). Execution then begins at
 write a \c{.COM} program, you would create a source file looking
 like
 
-\c           org 100h
-\c           section .text
-\c start:    ; put your code here
-\c           section .data
-\c           ; put data items here
-\c           section .bss
-\c           ; put uninitialised data here
+\c         org 100h
+\c
+\c section .text
+\c
+\c start:
+\c         ; put your code here
+\c
+\c section .data
+\c
+\c         ; put data items here
+\c
+\c section .bss
+\c
+\c         ; put uninitialised data here
 
 The \c{bin} format puts the \c{.text} section first in the file, so
 you can declare data or BSS items before beginning to write code if
@@ -4356,14 +4552,18 @@ not have to worry about name clashes with C symbols.
 If you find the underscores inconvenient, you can define macros to
 replace the \c{GLOBAL} and \c{EXTERN} directives as follows:
 
-\c %macro cglobal 1
-\c           global _%1
-\c %define %1 _%1
+\c %macro  cglobal 1
+\c
+\c   global  _%1
+\c   %define %1 _%1
+\c
 \c %endmacro
-
-\c %macro cextern 1
-\c           extern _%1
-\c %define %1 _%1
+\c
+\c %macro  cextern 1
+\c
+\c   extern  _%1
+\c   %define %1 _%1
+\c
 \c %endmacro
 
 (These forms of the macros only take one argument at a time; a
@@ -4371,11 +4571,11 @@ replace the \c{GLOBAL} and \c{EXTERN} directives as follows:
 
 If you then declare an external like this:
 
-\c           cextern printf
+\c cextern printf
 
 then the macro will expand it as
 
-\c           extern _printf
+\c extern  _printf
 \c %define printf _printf
 
 Thereafter, you can reference \c{printf} as if it was a symbol, and
@@ -4524,15 +4724,19 @@ sequence points without performance suffering.
 Thus, you would define a function in C style in the following way.
 The following example is for small model:
 
-\c           global _myfunc
-\c _myfunc:  push bp
-\c           mov bp,sp
-\c           sub sp,0x40            ; 64 bytes of local stack space
-\c           mov bx,[bp+4]          ; first parameter to function
-\c           ; some more code
-\c           mov sp,bp              ; undo "sub sp,0x40" above
-\c           pop bp
-\c           ret
+\c global  _myfunc
+\c
+\c _myfunc:
+\c         push    bp
+\c         mov     bp,sp
+\c         sub     sp,0x40         ; 64 bytes of local stack space
+\c         mov     bx,[bp+4]       ; first parameter to function
+\c
+\c         ; some more code
+\c
+\c         mov     sp,bp           ; undo "sub sp,0x40" above
+\c         pop     bp
+\c         ret
 
 For a large-model function, you would replace \c{RET} by \c{RETF},
 and look for the first parameter at \c{[BP+6]} instead of
@@ -4544,16 +4748,21 @@ stack when passed as a parameter, whereas near pointers take up two.
 At the other end of the process, to call a C function from your
 assembly code, you would do something like this:
 
-\c           extern _printf
-\c           ; and then, further down...
-\c           push word [myint]      ; one of my integer variables
-\c           push word mystring     ; pointer into my data segment
-\c           call _printf
-\c           add sp,byte 4          ; `byte' saves space
-\c           ; then those data items...
-\c           segment _DATA
-\c myint     dw 1234
-\c mystring  db 'This number -> %d <- should be 1234',10,0
+\c extern  _printf
+\c
+\c       ; and then, further down...
+\c
+\c       push    word [myint]        ; one of my integer variables
+\c       push    word mystring       ; pointer into my data segment
+\c       call    _printf
+\c       add     sp,byte 4           ; `byte' saves space
+\c
+\c       ; then those data items...
+\c
+\c segment _DATA
+\c
+\c myint         dw    1234
+\c mystring      db    'This number -> %d <- should be 1234',10,0
 
 This piece of code is the small-model assembly equivalent of the C
 code
@@ -4566,11 +4775,11 @@ this example, it is assumed that \c{DS} already holds the segment
 base of the segment \c{_DATA}. If not, you would have to initialise
 it first.
 
-\c           push word [myint]
-\c           push word seg mystring ; Now push the segment, and...
-\c           push word mystring     ; ... offset of "mystring"
-\c           call far _printf
-\c           add sp,byte 6
+\c       push    word [myint]
+\c       push    word seg mystring   ; Now push the segment, and...
+\c       push    word mystring       ; ... offset of "mystring"
+\c       call    far _printf
+\c       add    sp,byte 6
 
 The integer value still takes up one word on the stack, since large
 model does not affect the size of the \c{int} data type. The first
@@ -4593,15 +4802,17 @@ C can access, you need only declare the names as \c{GLOBAL} or
 in \k{16cunder}.) Thus, a C variable declared as \c{int i} can be
 accessed from assembler as
 
-\c           extern _i
-\c           mov ax,[_i]
+\c extern _i
+\c
+\c         mov ax,[_i]
 
 And to declare your own integer variable which C programs can access
 as \c{extern int j}, you do this (making sure you are assembling in
 the \c{_DATA} segment, if necessary):
 
-\c           global _j
-\c _j        dw 0
+\c global  _j
+\c
+\c _j      dw      0
 
 To access a C array, you need to know the size of the components of
 the array. For example, \c{int} variables are two bytes long, so if
@@ -4644,19 +4855,21 @@ directory, is a file \c{c16.mac} of macros. It defines three macros:
 used for C-style procedure definitions, and they automate a lot of
 the work involved in keeping track of the calling convention.
 
-(An alternative, TASM compatible form of \c{arg} is also now built 
-into NASM's preprocessor.  See \k{tasmcompat} for details.)
+(An alternative, TASM compatible form of \c{arg} is also now built
+into NASM's preprocessor. See \k{tasmcompat} for details.)
 
 An example of an assembly function using the macro set is given
 here:
 
-\c           proc _nearproc
-\c %$i       arg
-\c %$j       arg
-\c           mov ax,[bp + %$i]
-\c           mov bx,[bp + %$j]
-\c           add ax,[bx]
-\c           endproc
+\c proc    _nearproc
+\c
+\c %$i     arg
+\c %$j     arg
+\c         mov     ax,[bp + %$i]
+\c         mov     bx,[bp + %$j]
+\c         add     ax,[bx]
+\c
+\c endproc
 
 This defines \c{_nearproc} to be a procedure taking two arguments,
 the first (\c{i}) an integer and the second (\c{j}) a pointer to an
@@ -4685,14 +4898,17 @@ many function parameters will be of type \c{int}.
 The large-model equivalent of the above function would look like this:
 
 \c %define FARCODE
-\c           proc _farproc
-\c %$i       arg
-\c %$j       arg 4
-\c           mov ax,[bp + %$i]
-\c           mov bx,[bp + %$j]
-\c           mov es,[bp + %$j + 2]
-\c           add ax,[bx]
-\c           endproc
+\c
+\c proc    _farproc
+\c
+\c %$i     arg
+\c %$j     arg     4
+\c         mov     ax,[bp + %$i]
+\c         mov     bx,[bp + %$j]
+\c         mov     es,[bp + %$j + 2]
+\c         add     ax,[bx]
+\c
+\c endproc
 
 This makes use of the argument to the \c{arg} macro to define a
 parameter of size 4, because \c{j} is now a far pointer. When we
@@ -4791,26 +5007,31 @@ do nothing further.
 Thus, you would define a function in Pascal style, taking two
 \c{Integer}-type parameters, in the following way:
 
-\c           global myfunc
-\c myfunc:   push bp
-\c           mov bp,sp
-\c           sub sp,0x40            ; 64 bytes of local stack space
-\c           mov bx,[bp+8]          ; first parameter to function
-\c           mov bx,[bp+6]          ; second parameter to function
-\c           ; some more code
-\c           mov sp,bp              ; undo "sub sp,0x40" above
-\c           pop bp
-\c           retf 4                 ; total size of params is 4
+\c global  myfunc
+\c
+\c myfunc: push    bp
+\c         mov     bp,sp
+\c         sub     sp,0x40         ; 64 bytes of local stack space
+\c         mov     bx,[bp+8]       ; first parameter to function
+\c         mov     bx,[bp+6]       ; second parameter to function
+\c
+\c         ; some more code
+\c
+\c         mov     sp,bp           ; undo "sub sp,0x40" above
+\c         pop     bp
+\c         retf    4               ; total size of params is 4
 
 At the other end of the process, to call a Pascal function from your
 assembly code, you would do something like this:
 
-\c           extern SomeFunc
-\c           ; and then, further down...
-\c           push word seg mystring ; Now push the segment, and...
-\c           push word mystring     ; ... offset of "mystring"
-\c           push word [myint]      ; one of my variables
-\c           call far SomeFunc
+\c extern  SomeFunc
+\c
+\c        ; and then, further down...
+\c
+\c        push   word seg mystring   ; Now push the segment, and...
+\c        push   word mystring       ; ... offset of "mystring"
+\c        push   word [myint]        ; one of my variables
+\c        call   far SomeFunc
 
 This is equivalent to the Pascal code
 
@@ -4855,14 +5076,17 @@ argument offsets; you must declare your function's arguments in
 reverse order. For example:
 
 \c %define PASCAL
-\c           proc _pascalproc
-\c %$j       arg 4
-\c %$i       arg
-\c           mov ax,[bp + %$i]
-\c           mov bx,[bp + %$j]
-\c           mov es,[bp + %$j + 2]
-\c           add ax,[bx]
-\c           endproc
+\c
+\c proc    _pascalproc
+\c
+\c %$j     arg 4
+\c %$i     arg
+\c         mov     ax,[bp + %$i]
+\c         mov     bx,[bp + %$j]
+\c         mov     es,[bp + %$j + 2]
+\c         add     ax,[bx]
+\c
+\c endproc
 
 This defines the same routine, conceptually, as the example in
 \k{16cmacro}: it defines a function taking two arguments, an integer
@@ -4988,28 +5212,37 @@ still pushed in right-to-left order.
 
 Thus, you would define a function in C style in the following way:
 
-\c           global _myfunc
-\c _myfunc:  push ebp
-\c           mov ebp,esp
-\c           sub esp,0x40           ; 64 bytes of local stack space
-\c           mov ebx,[ebp+8]        ; first parameter to function
-\c           ; some more code
-\c           leave                  ; mov esp,ebp / pop ebp
-\c           ret
+\c global  _myfunc
+\c
+\c _myfunc:
+\c         push    ebp
+\c         mov     ebp,esp
+\c         sub     esp,0x40        ; 64 bytes of local stack space
+\c         mov     ebx,[ebp+8]     ; first parameter to function
+\c
+\c         ; some more code
+\c
+\c         leave                   ; mov esp,ebp / pop ebp
+\c         ret
 
 At the other end of the process, to call a C function from your
 assembly code, you would do something like this:
 
-\c           extern _printf
-\c           ; and then, further down...
-\c           push dword [myint]     ; one of my integer variables
-\c           push dword mystring    ; pointer into my data segment
-\c           call _printf
-\c           add esp,byte 8         ; `byte' saves space
-\c           ; then those data items...
-\c           segment _DATA
-\c myint     dd 1234
-\c mystring  db 'This number -> %d <- should be 1234',10,0
+\c extern  _printf
+\c
+\c         ; and then, further down...
+\c
+\c         push    dword [myint]   ; one of my integer variables
+\c         push    dword mystring  ; pointer into my data segment
+\c         call    _printf
+\c         add     esp,byte 8      ; `byte' saves space
+\c
+\c         ; then those data items...
+\c
+\c segment _DATA
+\c
+\c myint       dd   1234
+\c mystring    db   'This number -> %d <- should be 1234',10,0
 
 This piece of code is the assembly equivalent of the C code
 
@@ -5080,13 +5313,15 @@ the work involved in keeping track of the calling convention.
 An example of an assembly function using the macro set is given
 here:
 
-\c           proc _proc32
-\c %$i       arg
-\c %$j       arg
-\c           mov eax,[ebp + %$i]
-\c           mov ebx,[ebp + %$j]
-\c           add eax,[ebx]
-\c           endproc
+\c proc    _proc32
+\c
+\c %$i     arg
+\c %$j     arg
+\c         mov     eax,[ebp + %$i]
+\c         mov     ebx,[ebp + %$j]
+\c         add     eax,[ebx]
+\c
+\c endproc
 
 This defines \c{_proc32} to be a procedure taking two arguments, the
 first (\c{i}) an integer and the second (\c{j}) a pointer to an
@@ -5127,7 +5362,7 @@ must therefore not depend on where it is loaded in memory.
 Therefore, you cannot get at your variables by writing code like
 this:
 
-\c           mov eax,[myvar]        ; WRONG
+\c         mov     eax,[myvar]             ; WRONG
 
 Instead, the linker provides an area of memory called the
 \i\e{global offset table}, or \i{GOT}; the GOT is situated at a
@@ -5150,25 +5385,28 @@ too much worry (but see \k{picglobal} for a caveat).
 Each code module in your shared library should define the GOT as an
 external symbol:
 
-\c           extern _GLOBAL_OFFSET_TABLE_   ; in ELF
-\c           extern __GLOBAL_OFFSET_TABLE_  ; in BSD a.out
+\c extern  _GLOBAL_OFFSET_TABLE_   ; in ELF
+\c extern  __GLOBAL_OFFSET_TABLE_  ; in BSD a.out
 
 At the beginning of any function in your shared library which plans
 to access your data or BSS sections, you must first calculate the
 address of the GOT. This is typically done by writing the function
 in this form:
 
-\c func:     push ebp
-\c           mov ebp,esp
-\c           push ebx
-\c           call .get_GOT
-\c .get_GOT: pop ebx
-\c           add ebx,_GLOBAL_OFFSET_TABLE_+$$-.get_GOT wrt ..gotpc
-\c           ; the function body comes here
-\c           mov ebx,[ebp-4]
-\c           mov esp,ebp
-\c           pop ebp
-\c           ret
+\c func:   push    ebp
+\c         mov     ebp,esp
+\c         push    ebx
+\c         call    .get_GOT
+\c .get_GOT:
+\c         pop     ebx
+\c         add     ebx,_GLOBAL_OFFSET_TABLE_+$$-.get_GOT wrt ..gotpc
+\c
+\c         ; the function body comes here
+\c
+\c         mov     ebx,[ebp-4]
+\c         mov     esp,ebp
+\c         pop     ebp
+\c         ret
 
 (For BSD, again, the symbol \c{_GLOBAL_OFFSET_TABLE} requires a
 second leading underscore.)
@@ -5200,10 +5438,13 @@ If you didn't follow that, don't worry: it's never necessary to
 obtain the address of the GOT by any other means, so you can put
 those three instructions into a macro and safely ignore them:
 
-\c %macro get_GOT 0
-\c           call %%getgot
-\c %%getgot: pop ebx
-\c           add ebx,_GLOBAL_OFFSET_TABLE_+$$-%%getgot wrt ..gotpc
+\c %macro  get_GOT 0
+\c
+\c         call    %%getgot
+\c   %%getgot:
+\c         pop     ebx
+\c         add     ebx,_GLOBAL_OFFSET_TABLE_+$$-%%getgot wrt ..gotpc
+\c
 \c %endmacro
 
 \S{piclocal} Finding Your Local Data Items
@@ -5214,7 +5455,7 @@ declared; they can be accessed using the \I{GOTOFF
 relocation}\c{..gotoff} special \I\c{WRT ..gotoff}\c{WRT} type. The
 way this works is like this:
 
-\c           lea eax,[ebx+myvar wrt ..gotoff]
+\c         lea     eax,[ebx+myvar wrt ..gotoff]
 
 The expression \c{myvar wrt ..gotoff} is calculated, when the shared
 library is linked, to be the offset to the local variable \c{myvar}
@@ -5246,7 +5487,7 @@ dynamic linker will place the correct address in it at load time. So
 to obtain the address of an external variable \c{extvar} in \c{EAX},
 you would code
 
-\c           mov eax,[ebx+extvar wrt ..got]
+\c         mov     eax,[ebx+extvar wrt ..got]
 
 This loads the address of \c{extvar} out of an entry in the GOT. The
 linker, when it builds the shared library, collects together every
@@ -5268,14 +5509,17 @@ declared.
 
 So to export a function to users of the library, you must use
 
-\c           global func:function   ; declare it as a function
-\c func:     push ebp
-\c           ; etc.
+\c global  func:function           ; declare it as a function
+\c
+\c func:   push    ebp
+\c
+\c         ; etc.
 
 And to export a data item such as an array, you would have to code
 
-\c           global array:data array.end-array ; give the size too
-\c array:    resd 128
+\c global  array:data array.end-array      ; give the size too
+\c
+\c array:  resd    128
 \c .end:
 
 Be careful: If you export a variable to the library user, by
@@ -5290,7 +5534,7 @@ Equally, if you need to store the address of an exported global in
 one of your data sections, you can't do it by means of the standard
 sort of code:
 
-\c dataptr:  dd global_data_item    ; WRONG
+\c dataptr:        dd      global_data_item        ; WRONG
 
 NASM will interpret this code as an ordinary relocation, in which
 \c{global_data_item} is merely an offset from the beginning of the
@@ -5300,7 +5544,7 @@ which resides elsewhere.
 
 Instead of the above code, then, you must write
 
-\c dataptr:  dd global_data_item wrt ..sym
+\c dataptr:        dd      global_data_item wrt ..sym
 
 which makes use of the special \c{WRT} type \I\c{WRT ..sym}\c{..sym}
 to instruct NASM to search the symbol table for a particular symbol
@@ -5309,11 +5553,11 @@ at that address, rather than just relocating by section base.
 Either method will work for functions: referring to one of your
 functions by means of
 
-\c funcptr:  dd my_function
+\c funcptr:        dd      my_function
 
 will give the user the address of the code you wrote, whereas
 
-\c funcptr:  dd my_function wrt ..sym
+\c funcptr:        dd      my_function wrt .sym
 
 will give the address of the procedure linkage table for the
 function, which is where the calling program will \e{believe} the
@@ -5382,7 +5626,7 @@ This jump must specify a 48-bit far address, since the target
 segment is a 32-bit one. However, it must be assembled in a 16-bit
 segment, so just coding, for example,
 
-\c           jmp 0x1234:0x56789ABC  ; wrong!
+\c         jmp     0x1234:0x56789ABC       ; wrong!
 
 will not work, since the offset part of the address will be
 truncated to \c{0x9ABC} and the jump will be an ordinary 16-bit far
@@ -5393,7 +5637,7 @@ generate the required instruction by coding it manually, using
 \c{DB} instructions. NASM can go one better than that, by actually
 generating the right instruction itself. Here's how to do it right:
 
-\c           jmp dword 0x1234:0x56789ABC  ; right
+\c         jmp     dword 0x1234:0x56789ABC         ; right
 
 \I\c{JMP DWORD}The \c{DWORD} prefix (strictly speaking, it should
 come \e{after} the colon, since it is declaring the \e{offset} field
@@ -5405,7 +5649,7 @@ segment to a 32-bit one.
 You can do the reverse operation, jumping from a 32-bit segment to a
 16-bit one, by means of the \c{WORD} prefix:
 
-\c           jmp word 0x8765:0x4321 ; 32 to 16 bit
+\c         jmp     word 0x8765:0x4321      ; 32 to 16 bit
 
 If the \c{WORD} prefix is specified in 16-bit mode, or the \c{DWORD}
 prefix in 32-bit mode, they will be ignored, since each is
@@ -5430,8 +5674,8 @@ The easiest way to do this is to make sure you use a register for
 the address, since any effective address containing a 32-bit
 register is forced to be a 32-bit address. So you can do
 
-\c           mov eax,offset_into_32_bit_segment_specified_by_fs
-\c           mov dword [fs:eax],0x11223344
+\c         mov     eax,offset_into_32_bit_segment_specified_by_fs
+\c         mov     dword [fs:eax],0x11223344
 
 This is fine, but slightly cumbersome (since it wastes an
 instruction and a register) if you already know the precise offset
@@ -5442,20 +5686,20 @@ NASM be able to generate the best instruction for the purpose?
 It can. As in \k{mixjump}, you need only prefix the address with the
 \c{DWORD} keyword, and it will be forced to be a 32-bit address:
 
-\c           mov dword [fs:dword my_offset],0x11223344
+\c         mov     dword [fs:dword my_offset],0x11223344
 
 Also as in \k{mixjump}, NASM is not fussy about whether the
 \c{DWORD} prefix comes before or after the segment override, so
 arguably a nicer-looking way to code the above instruction is
 
-\c           mov dword [dword fs:my_offset],0x11223344
+\c         mov     dword [dword fs:my_offset],0x11223344
 
 Don't confuse the \c{DWORD} prefix \e{outside} the square brackets,
 which controls the size of the data stored at the address, with the
 one \c{inside} the square brackets which controls the length of the
 address itself. The two can quite easily be different:
 
-\c           mov word [dword 0x12345678],0x9ABC
+\c         mov     word [dword 0x12345678],0x9ABC
 
 This moves 16 bits of data to an address specified by a 32-bit
 offset.
@@ -5463,7 +5707,7 @@ offset.
 You can also specify \c{WORD} or \c{DWORD} prefixes along with the
 \c{FAR} prefix to indirect far jumps or calls. For example:
 
-\c           call dword far [fs:word 0x4321]
+\c         call    dword far [fs:word 0x4321]
 
 This instruction contains an address specified by a 16-bit offset;
 it loads a 48-bit far pointer from that (16-bit segment and 32-bit
@@ -5483,7 +5727,7 @@ you are coding \c{LODSB} in a 16-bit segment but it is supposed to
 be accessing a string in a 32-bit segment, you should load the
 desired address into \c{ESI} and then code
 
-\c           a32 lodsb
+\c         a32     lodsb
 
 The prefix forces the addressing size to 32 bits, meaning that
 \c{LODSB} loads from \c{[DS:ESI]} instead of \c{[DS:SI]}. To access
@@ -5510,8 +5754,8 @@ give the value of the segment register being manipulated. To force
 the 16-bit behaviour of segment-register push and pop instructions,
 you can use the operand-size prefix \i\c{o16}:
 
-\c           o16 push ss
-\c           o16 push ds
+\c         o16 push    ss
+\c         o16 push    ds
 
 This code saves a doubleword of stack space by fitting two segment
 registers into the space which would normally be consumed by pushing
@@ -5571,19 +5815,23 @@ complain that \c{ORG} doesn't work the way they'd like: in order to
 place the \c{0xAA55} signature word at the end of a 512-byte boot
 sector, people who are used to MASM tend to code
 
-\c           ORG 0
-\c           ; some boot sector code
-\c           ORG 510
-\c           DW 0xAA55
+\c         ORG 0
+\c
+\c         ; some boot sector code
+\c
+\c         ORG 510
+\c         DW 0xAA55
 
 This is not the intended use of the \c{ORG} directive in NASM, and
 will not work. The correct way to solve this problem in NASM is to
 use the \i\c{TIMES} directive, like this:
 
-\c           ORG 0
-\c           ; some boot sector code
-\c           TIMES 510-($-$$) DB 0
-\c           DW 0xAA55
+\c         ORG 0
+\c
+\c         ; some boot sector code
+\c
+\c         TIMES 510-($-$$) DB 0
+\c         DW 0xAA55
 
 The \c{TIMES} directive will insert exactly enough zero bytes into
 the output to move the assembly point up to 510. This method also
@@ -5598,7 +5846,7 @@ find out what's wrong with it.
 The other common problem with the above code is people who write the
 \c{TIMES} line as
 
-\c           TIMES 510-$ DB 0
+\c         TIMES 510-$ DB 0
 
 by reasoning that \c{$} should be a pure number, just like 510, so
 the difference between them is also a pure number and can happily be
@@ -5618,7 +5866,7 @@ involving section bases cannot be passed as arguments to \c{TIMES}.
 The solution, as in the previous section, is to code the \c{TIMES}
 line in the form
 
-\c           TIMES 510-($-$$) DB 0
+\c         TIMES 510-($-$$) DB 0
 
 in which \c{$} and \c{$$} are offsets from the same section base,
 and so their difference is a pure number. This will solve the
@@ -5631,8 +5879,9 @@ We have never yet released a version of NASM with any \e{known}
 bugs. That doesn't usually stop there being plenty we didn't know
 about, though. Any that you find should be reported firstly via the
 \i\c{bugtracker} at
-\W{http://nasm.2y.net/bugtracker/}\c{http://nasm.2y.net/bugtracker/},
-or if that fails then through one of the contacts in \k{contact}
+\W{https://sourceforge.net/projects/nasm/}\c{https://sourceforge.net/projects/nasm/}
+(click on "Bugs"), or if that fails then through one of the
+contacts in \k{contact}.
 
 Please read \k{qstart} first, and don't report the bug if it's
 listed in there as a deliberate feature. (If you think the feature
@@ -5909,7 +6158,7 @@ disassembler works, because as far as I know, it isn't an efficient
 one anyway. You have been warned.
 
 
-\A{iref} Intel x86 Instruction Reference
+\A{iref} x86 Instruction Reference
 
 This appendix provides a complete list of the machine instructions
 which NASM will assemble, and a short description of the function of
@@ -5918,7 +6167,7 @@ each one.
 It is not intended to be exhaustive documentation on the fine
 details of the instructions' function, such as which exceptions they
 can trigger: for such documentation, you should go to Intel's Web
-site, \W{http://www.intel.com/}\c{http://www.intel.com/}.
+site, \W{http://developer.intel.com/design/Pentium4/manuals/}\c{http://developer.intel.com/design/Pentium4/manuals/}.
 
 Instead, this appendix is intended primarily to provide
 documentation on the way the instructions may be used within NASM.
@@ -6148,46 +6397,46 @@ to the "cc" in an integer instruction that used a condition code).
 The instructions that use this will give details of what the various
 mnemonics are, this table is used to help you work out details of what
 is happening.
-                                                                   
-Predi-  imm8  Description Relation where:   Emula- Result if QNaN 
- cate  Encod-             A Is 1st Operand  tion   NaN       Signals
-       ing               B Is 2nd Operand         Operand   Invalid
-
-EQ     000B   equal       A = B                    False     No
-
-LT     001B   less-than   A < B                    False     Yes
-
-LE     010B   less-than-  A <= B                   False     Yes
-               or-equal
-
----    ----   greater     A > B             Swap   False     Yes
-              than                          Operands,
-                                            Use LT
-
----    ----   greater-    A >= B            Swap   False     Yes
-              than-or-equal                 Operands,
-                                            Use LE
-
-UNORD  011B   unordered   A, B = Unordered         True      No
-
-NEQ    100B   not-equal   A != B                   True      No
 
-NLT    101B   not-less-   NOT(A < B)               True      Yes
-              than
-
-NLE    110B   not-less-   NOT(A <= B)              True      Yes
-              than-or-
-              equal
-
----    ----   not-greater NOT(A > B)        Swap   True      Yes
-              than                          Operands,
-                                            Use NLT
-
----    ----   not-greater NOT(A >= B)       Swap   True      Yes
-              than-                         Operands,
-              or-equal                      Use NLE
-
-ORD    111B   ordered      A , B = Ordered         False     No
+\c Predi-  imm8  Description Relation where:   Emula- Result   QNaN
+\c  cate  Encod-             A Is 1st Operand  tion   if NaN   Signal
+\c         ing               B Is 2nd Operand         Operand  Invalid
+\c
+\c EQ     000B   equal       A = B                    False     No
+\c
+\c LT     001B   less-than   A < B                    False     Yes
+\c
+\c LE     010B   less-than-  A <= B                   False     Yes
+\c                or-equal
+\c
+\c ---    ----   greater     A > B             Swap   False     Yes
+\c               than                          Operands,
+\c                                             Use LT
+\c
+\c ---    ----   greater-    A >= B            Swap   False     Yes
+\c               than-or-equal                 Operands,
+\c                                             Use LE
+\c
+\c UNORD  011B   unordered   A, B = Unordered         True      No
+\c
+\c NEQ    100B   not-equal   A != B                   True      No
+\c
+\c NLT    101B   not-less-   NOT(A < B)               True      Yes
+\c               than
+\c
+\c NLE    110B   not-less-   NOT(A <= B)              True      Yes
+\c               than-or-
+\c               equal
+\c
+\c ---    ----   not-greater NOT(A > B)        Swap   True      Yes
+\c               than                          Operands,
+\c                                             Use NLT
+\c
+\c ---    ----   not-greater NOT(A >= B)       Swap   True      Yes
+\c               than-                         Operands,
+\c               or-equal                      Use NLE
+\c
+\c ORD    111B   ordered      A , B = Ordered         False     No
 
 The unordered relationship is true when at least one of the two
 values being compared is a NaN or in an unsupported format.
@@ -6243,8 +6492,8 @@ indicates a negative value.)
 
 Set if the integer result is too large a positive number or too
 small a negative number (excluding the sign-bit) to fit in the
-destina-tion operand; cleared otherwise. This flag indicates an
-overflow condition for signed-integer (two\92s complement) arithmetic.
+destination operand; cleared otherwise. This flag indicates an
+overflow condition for signed-integer (two's complement) arithmetic.
 
 
 \S{iref-ea} Effective Address Encoding: \i{ModR/M} and \i{SIB}
@@ -6392,7 +6641,10 @@ part of the new instruction set in the Pentium 4 and Intel Xeon
 processors. These instructions are also known as SSE2 instructions.
 
 
-\H{insAAA} \i\c{AAA}, \i\c{AAS}, \i\c{AAM}, \i\c{AAD}: ASCII
+\H{iref-inst} x86 Instruction Set
+
+
+\S{insAAA} \i\c{AAA}, \i\c{AAS}, \i\c{AAM}, \i\c{AAD}: ASCII
 Adjustments
 
 \c AAA                           ; 37                   [8086]
@@ -6439,7 +6691,7 @@ operation to \c{AAM}: it multiplies \c{AH} by ten, adds it to
 be changed.
 
 
-\H{insADC} \i\c{ADC}: Add with Carry
+\S{insADC} \i\c{ADC}: Add with Carry
 
 \c ADC r/m8,reg8                 ; 10 /r                [8086]
 \c ADC r/m16,reg16               ; o16 11 /r            [8086]
@@ -6480,7 +6732,7 @@ To add two numbers without also adding the contents of the carry
 flag, use \c{ADD} (\k{insADD}).
 
 
-\H{insADD} \i\c{ADD}: Add Integers
+\S{insADD} \i\c{ADD}: Add Integers
 
 \c ADD r/m8,reg8                 ; 00 /r                [8086]
 \c ADD r/m16,reg16               ; o16 01 /r            [8086]
@@ -6518,7 +6770,7 @@ the \c{BYTE} qualifier is necessary to force NASM to generate this
 form of the instruction.
 
 
-\H{insADDPD} \i\c{ADDPD}: ADD Packed Double-Precision FP Values
+\S{insADDPD} \i\c{ADDPD}: ADD Packed Double-Precision FP Values
 
 \c ADDPD xmm1,xmm2/mem128        ; 66 0F 58 /r     [WILLAMETTE,SSE2]
 
@@ -6532,7 +6784,7 @@ The destination is an \c{XMM} register. The source operand can be
 either an \c{XMM} register or a 128-bit memory location.
 
 
-\H{insADDPS} \i\c{ADDPS}: ADD Packed Single-Precision FP Values
+\S{insADDPS} \i\c{ADDPS}: ADD Packed Single-Precision FP Values
 
 \c ADDPS xmm1,xmm2/mem128        ; 0F 58 /r        [KATMAI,SSE]
 
@@ -6548,7 +6800,7 @@ The destination is an \c{XMM} register. The source operand can be
 either an \c{XMM} register or a 128-bit memory location.
 
 
-\H{insADDSD} \i\c{ADDSD}: ADD Scalar Double-Precision FP Values
+\S{insADDSD} \i\c{ADDSD}: ADD Scalar Double-Precision FP Values
 
 \c ADDSD xmm1,xmm2/mem64         ; F2 0F 58 /r     [KATMAI,SSE]
 
@@ -6563,11 +6815,11 @@ The destination is an \c{XMM} register. The source operand can be
 either an \c{XMM} register or a 64-bit memory location.
 
 
-\H{insADDSS} \i\c{ADDSS}: ADD Scalar Single-Precision FP Values
+\S{insADDSS} \i\c{ADDSS}: ADD Scalar Single-Precision FP Values
 
 \c ADDSS xmm1,xmm2/mem32         ; F3 0F 58 /r     [WILLAMETTE,SSE2]
 
-\c{ADDSD} adds the low single-precision FP values from the source
+\c{ADDSS} adds the low single-precision FP values from the source
 and destination operands and stores the single-precision FP result
 in the destination operand.
 
@@ -6578,7 +6830,7 @@ The destination is an \c{XMM} register. The source operand can be
 either an \c{XMM} register or a 32-bit memory location.
 
 
-\H{insAND} \i\c{AND}: Bitwise AND
+\S{insAND} \i\c{AND}: Bitwise AND
 
 \c AND r/m8,reg8                 ; 20 /r                [8086]
 \c AND r/m16,reg16               ; o16 21 /r            [8086]
@@ -6602,7 +6854,7 @@ either an \c{XMM} register or a 32-bit memory location.
 \c{AND} performs a bitwise AND operation between its two operands
 (i.e. each bit of the result is 1 if and only if the corresponding
 bits of the two inputs were both 1), and stores the result in the
-destination (first) operand.  The destination operand can be a
+destination (first) operand. The destination operand can be a
 register or a memory location. The source operand can be a register,
 a memory location or an immediate value.
 
@@ -6616,7 +6868,7 @@ The \c{MMX} instruction \c{PAND} (see \k{insPAND}) performs the same
 operation on the 64-bit \c{MMX} registers.
 
 
-\H{insANDNPD} \i\c{ANDNPD}: Bitwise Logical AND NOT of
+\S{insANDNPD} \i\c{ANDNPD}: Bitwise Logical AND NOT of
 Packed Double-Precision FP Values
 
 \c ANDNPD xmm1,xmm2/mem128       ; 66 0F 55 /r     [WILLAMETTE,SSE2]
@@ -6634,7 +6886,7 @@ The destination is an \c{XMM} register. The source operand can be
 either an \c{XMM} register or a 128-bit memory location.
 
 
-\H{insANDNPS} \i\c{ANDNPS}: Bitwise Logical AND NOT of
+\S{insANDNPS} \i\c{ANDNPS}: Bitwise Logical AND NOT of
 Packed Single-Precision FP Values
 
 \c ANDNPS xmm1,xmm2/mem128       ; 0F 55 /r        [KATMAI,SSE]
@@ -6654,7 +6906,7 @@ The destination is an \c{XMM} register. The source operand can be
 either an \c{XMM} register or a 128-bit memory location.
 
 
-\H{insANDPD} \i\c{ANDPD}: Bitwise Logical AND For Single FP
+\S{insANDPD} \i\c{ANDPD}: Bitwise Logical AND For Single FP
 
 \c ANDPD xmm1,xmm2/mem128        ; 66 0F 54 /r     [WILLAMETTE,SSE2]
 
@@ -6669,7 +6921,7 @@ The destination is an \c{XMM} register. The source operand can be
 either an \c{XMM} register or a 128-bit memory location.
 
 
-\H{insANDPS} \i\c{ANDPS}: Bitwise Logical AND For Single FP
+\S{insANDPS} \i\c{ANDPS}: Bitwise Logical AND For Single FP
 
 \c ANDPS xmm1,xmm2/mem128        ; 0F 54 /r        [KATMAI,SSE]
 
@@ -6686,7 +6938,7 @@ The destination is an \c{XMM} register. The source operand can be
 either an \c{XMM} register or a 128-bit memory location.
 
 
-\H{insARPL} \i\c{ARPL}: Adjust RPL Field of Selector
+\S{insARPL} \i\c{ARPL}: Adjust RPL Field of Selector
 
 \c ARPL r/m16,reg16              ; 63 /r                [286,PRIV]
 
@@ -6698,7 +6950,7 @@ field of the source operand. The zero flag is set if and only if a
 change had to be made.
 
 
-\H{insBOUND} \i\c{BOUND}: Check Array Index against Bounds
+\S{insBOUND} \i\c{BOUND}: Check Array Index against Bounds
 
 \c BOUND reg16,mem               ; o16 62 /r            [186]
 \c BOUND reg32,mem               ; o32 62 /r            [386]
@@ -6712,7 +6964,7 @@ in-memory values, or is greater than or equal to the second, it
 throws a \c{BR} exception. Otherwise, it does nothing.
 
 
-\H{insBSF} \i\c{BSF}, \i\c{BSR}: Bit Scan
+\S{insBSF} \i\c{BSF}, \i\c{BSR}: Bit Scan
 
 \c BSF reg16,r/m16               ; o16 0F BC /r         [386]
 \c BSF reg32,r/m32               ; o32 0F BC /r         [386]
@@ -6730,11 +6982,11 @@ operand is zero, the zero flag is set.
 instead, so it finds the most significant set bit.
 
 Bit indices are from 0 (least significant) to 15 or 31 (most
-significant).  The destination operand can only be a register.
+significant). The destination operand can only be a register.
 The source operand can be a register or a memory location.
 
 
-\H{insBSWAP} \i\c{BSWAP}: Byte Swap
+\S{insBSWAP} \i\c{BSWAP}: Byte Swap
 
 \c BSWAP reg32                   ; o32 0F C8+r          [486]
 
@@ -6745,7 +6997,7 @@ bits 16-23. There is no explicit 16-bit equivalent: to byte-swap
 is used with a 16-bit register, the result is undefined.
 
 
-\H{insBT} \i\c{BT}, \i\c{BTC}, \i\c{BTR}, \i\c{BTS}: Bit Test
+\S{insBT} \i\c{BT}, \i\c{BTC}, \i\c{BTR}, \i\c{BTS}: Bit Test
 
 \c BT r/m16,reg16                ; o16 0F A3 /r         [386]
 \c BT r/m32,reg32                ; o32 0F A3 /r         [386]
@@ -6791,7 +7043,7 @@ is in a register, then it can be anything within the signed range of
 the register used (ie, for a 32-bit operand, it can be (-2^31) to (2^31 - 1)
 
 
-\H{insCALL} \i\c{CALL}: Call Subroutine
+\S{insCALL} \i\c{CALL}: Call Subroutine
 
 \c CALL imm                      ; E8 rw/rd             [8086]
 \c CALL imm:imm16                ; o16 9A iw iw         [8086]
@@ -6840,7 +7092,7 @@ the \c{NEAR} keyword (e.g. \c{CALL NEAR [address]}), even though it
 is not strictly necessary.
 
 
-\H{insCBW} \i\c{CBW}, \i\c{CWD}, \i\c{CDQ}, \i\c{CWDE}: Sign Extensions
+\S{insCBW} \i\c{CBW}, \i\c{CWD}, \i\c{CDQ}, \i\c{CWDE}: Sign Extensions
 
 \c CBW                           ; o16 98               [8086]
 \c CWDE                          ; o32 98               [386]
@@ -6859,7 +7111,7 @@ the top bit of \c{AX} throughout \c{DX}, and \c{CDQ} extends
 \c{EAX} into \c{EDX:EAX}.
 
 
-\H{insCLC} \i\c{CLC}, \i\c{CLD}, \i\c{CLI}, \i\c{CLTS}: Clear Flags
+\S{insCLC} \i\c{CLC}, \i\c{CLD}, \i\c{CLI}, \i\c{CLTS}: Clear Flags
 
 \c CLC                           ; F8                   [8086]
 \c CLD                           ; FC                   [8086]
@@ -6876,11 +7128,11 @@ To set the carry, direction, or interrupt flags, use the \c{STC},
 flag, use \c{CMC} (\k{insCMC}).
 
 
-\H{insCLFLUSH} \i\c{CLFLUSH}: Flush Cache Line
+\S{insCLFLUSH} \i\c{CLFLUSH}: Flush Cache Line
 
 \c CLFLUSH mem                   ; 0F AE /7        [WILLAMETTE,SSE2]
 
-\c{CLFLUSH} invlidates the cache line that contains the linear address
+\c{CLFLUSH} invalidates the cache line that contains the linear address
 specified by the source operand from all levels of the processor cache
 hierarchy (data and instruction). If, at any level of the cache
 hierarchy, the line is inconsistent with memory (dirty) it is written
@@ -6893,7 +7145,7 @@ supported on other processors; the \c{CPUID} instruction (\k{insCPUID})
 will return a bit which indicates support for the \c{CLFLUSH} instruction.
 
 
-\H{insCMC} \i\c{CMC}: Complement Carry Flag
+\S{insCMC} \i\c{CMC}: Complement Carry Flag
 
 \c CMC                           ; F5                   [8086]
 
@@ -6901,7 +7153,7 @@ will return a bit which indicates support for the \c{CLFLUSH} instruction.
 to 1, and vice versa.
 
 
-\H{insCMOVcc} \i\c{CMOVcc}: Conditional Move
+\S{insCMOVcc} \i\c{CMOVcc}: Conditional Move
 
 \c CMOVcc reg16,r/m16            ; o16 0F 40+cc /r      [P6]
 \c CMOVcc reg32,r/m32            ; o32 0F 40+cc /r      [P6]
@@ -6918,7 +7170,7 @@ instruction (\k{insCPUID}) will return a bit which indicates whether
 conditional moves are supported.
 
 
-\H{insCMP} \i\c{CMP}: Compare Integers
+\S{insCMP} \i\c{CMP}: Compare Integers
 
 \c CMP r/m8,reg8                 ; 38 /r                [8086]
 \c CMP r/m16,reg16               ; o16 39 /r            [8086]
@@ -6955,20 +7207,20 @@ source can be a register, memory location or an immediate value of
 the same size as the destination.
 
 
-\H{insCMPccPD} \i\c{CMPccPD}: Packed Double-Precision FP Compare
+\S{insCMPccPD} \i\c{CMPccPD}: Packed Double-Precision FP Compare
 \I\c{CMPEQPD} \I\c{CMPLTPD} \I\c{CMPLEPD} \I\c{CMPUNORDPD}
 \I\c{CMPNEQPD} \I\c{CMPNLTPD} \I\c{CMPNLEPD} \I\c{CMPORDPD}
 
-\c CMPPD xmm1,xmm2/mem128,imm8   ; 66 0F C2 /r ib  [WILLAMETTE,SSE2] 
+\c CMPPD xmm1,xmm2/mem128,imm8   ; 66 0F C2 /r ib  [WILLAMETTE,SSE2]
 
-\c CMPEQPD xmm1,xmm2/mem128      ; 66 0F C2 /r 00  [WILLAMETTE,SSE2] 
-\c CMPLTPD xmm1,xmm2/mem128      ; 66 0F C2 /r 01  [WILLAMETTE,SSE2] 
-\c CMPLEPD xmm1,xmm2/mem128      ; 66 0F C2 /r 02  [WILLAMETTE,SSE2] 
-\c CMPUNORDPD xmm1,xmm2/mem128   ; 66 0F C2 /r 03  [WILLAMETTE,SSE2] 
-\c CMPNEQPD xmm1,xmm2/mem128     ; 66 0F C2 /r 04  [WILLAMETTE,SSE2] 
-\c CMPNLTPD xmm1,xmm2/mem128     ; 66 0F C2 /r 05  [WILLAMETTE,SSE2] 
-\c CMPNLEPD xmm1,xmm2/mem128     ; 66 0F C2 /r 06  [WILLAMETTE,SSE2] 
-\c CMPORDPD xmm1,xmm2/mem128     ; 66 0F C2 /r 07  [WILLAMETTE,SSE2] 
+\c CMPEQPD xmm1,xmm2/mem128      ; 66 0F C2 /r 00  [WILLAMETTE,SSE2]
+\c CMPLTPD xmm1,xmm2/mem128      ; 66 0F C2 /r 01  [WILLAMETTE,SSE2]
+\c CMPLEPD xmm1,xmm2/mem128      ; 66 0F C2 /r 02  [WILLAMETTE,SSE2]
+\c CMPUNORDPD xmm1,xmm2/mem128   ; 66 0F C2 /r 03  [WILLAMETTE,SSE2]
+\c CMPNEQPD xmm1,xmm2/mem128     ; 66 0F C2 /r 04  [WILLAMETTE,SSE2]
+\c CMPNLTPD xmm1,xmm2/mem128     ; 66 0F C2 /r 05  [WILLAMETTE,SSE2]
+\c CMPNLEPD xmm1,xmm2/mem128     ; 66 0F C2 /r 06  [WILLAMETTE,SSE2]
+\c CMPORDPD xmm1,xmm2/mem128     ; 66 0F C2 /r 07  [WILLAMETTE,SSE2]
 
 The \c{CMPccPD} instructions compare the two packed double-precision
 FP values in the source and destination operands, and returns the
@@ -6998,20 +7250,20 @@ For more details of the comparison predicates, and details of how
 to emulate the "greater-than" equivalents, see \k{iref-SSE-cc}
 
 
-\H{insCMPccPS} \i\c{CMPccPS}: Packed Single-Precision FP Compare
+\S{insCMPccPS} \i\c{CMPccPS}: Packed Single-Precision FP Compare
 \I\c{CMPEQPS} \I\c{CMPLTPS} \I\c{CMPLEPS} \I\c{CMPUNORDPS}
 \I\c{CMPNEQPS} \I\c{CMPNLTPS} \I\c{CMPNLEPS} \I\c{CMPORDPS}
 
-\c CMPPS xmm1,xmm2/mem128,imm8   ; 0F C2 /r ib     [KATMAI,SSE] 
+\c CMPPS xmm1,xmm2/mem128,imm8   ; 0F C2 /r ib     [KATMAI,SSE]
 
-\c CMPEQPS xmm1,xmm2/mem128      ; 0F C2 /r 00     [KATMAI,SSE] 
-\c CMPLTPS xmm1,xmm2/mem128      ; 0F C2 /r 01     [KATMAI,SSE] 
-\c CMPLEPS xmm1,xmm2/mem128      ; 0F C2 /r 02     [KATMAI,SSE] 
-\c CMPUNORDPS xmm1,xmm2/mem128   ; 0F C2 /r 03     [KATMAI,SSE] 
-\c CMPNEQPS xmm1,xmm2/mem128     ; 0F C2 /r 04     [KATMAI,SSE] 
-\c CMPNLTPS xmm1,xmm2/mem128     ; 0F C2 /r 05     [KATMAI,SSE] 
-\c CMPNLEPS xmm1,xmm2/mem128     ; 0F C2 /r 06     [KATMAI,SSE] 
-\c CMPORDPS xmm1,xmm2/mem128     ; 0F C2 /r 07     [KATMAI,SSE] 
+\c CMPEQPS xmm1,xmm2/mem128      ; 0F C2 /r 00     [KATMAI,SSE]
+\c CMPLTPS xmm1,xmm2/mem128      ; 0F C2 /r 01     [KATMAI,SSE]
+\c CMPLEPS xmm1,xmm2/mem128      ; 0F C2 /r 02     [KATMAI,SSE]
+\c CMPUNORDPS xmm1,xmm2/mem128   ; 0F C2 /r 03     [KATMAI,SSE]
+\c CMPNEQPS xmm1,xmm2/mem128     ; 0F C2 /r 04     [KATMAI,SSE]
+\c CMPNLTPS xmm1,xmm2/mem128     ; 0F C2 /r 05     [KATMAI,SSE]
+\c CMPNLEPS xmm1,xmm2/mem128     ; 0F C2 /r 06     [KATMAI,SSE]
+\c CMPORDPS xmm1,xmm2/mem128     ; 0F C2 /r 07     [KATMAI,SSE]
 
 The \c{CMPccPS} instructions compare the two packed single-precision
 FP values in the source and destination operands, and returns the
@@ -7041,7 +7293,7 @@ For more details of the comparison predicates, and details of how
 to emulate the "greater-than" equivalents, see \k{iref-SSE-cc}
 
 
-\H{insCMPSB} \i\c{CMPSB}, \i\c{CMPSW}, \i\c{CMPSD}: Compare Strings
+\S{insCMPSB} \i\c{CMPSB}, \i\c{CMPSW}, \i\c{CMPSD}: Compare Strings
 
 \c CMPSB                         ; A6                   [8086]
 \c CMPSW                         ; o16 A7               [8086]
@@ -7073,20 +7325,20 @@ The \c{REPE} and \c{REPNE} prefixes (equivalently, \c{REPZ} and
 first unequal or equal byte is found.
 
 
-\H{insCMPccSD} \i\c{CMPccSD}: Scalar Double-Precision FP Compare
+\S{insCMPccSD} \i\c{CMPccSD}: Scalar Double-Precision FP Compare
 \I\c{CMPEQSD} \I\c{CMPLTSD} \I\c{CMPLESD} \I\c{CMPUNORDSD}
 \I\c{CMPNEQSD} \I\c{CMPNLTSD} \I\c{CMPNLESD} \I\c{CMPORDSD}
 
-\c CMPSD xmm1,xmm2/mem64,imm8    ; F2 0F C2 /r ib  [WILLAMETTE,SSE2] 
+\c CMPSD xmm1,xmm2/mem64,imm8    ; F2 0F C2 /r ib  [WILLAMETTE,SSE2]
 
-\c CMPEQSD xmm1,xmm2/mem64       ; F2 0F C2 /r 00  [WILLAMETTE,SSE2] 
-\c CMPLTSD xmm1,xmm2/mem64       ; F2 0F C2 /r 01  [WILLAMETTE,SSE2] 
-\c CMPLESD xmm1,xmm2/mem64       ; F2 0F C2 /r 02  [WILLAMETTE,SSE2] 
-\c CMPUNORDSD xmm1,xmm2/mem64    ; F2 0F C2 /r 03  [WILLAMETTE,SSE2] 
-\c CMPNEQSD xmm1,xmm2/mem64      ; F2 0F C2 /r 04  [WILLAMETTE,SSE2] 
-\c CMPNLTSD xmm1,xmm2/mem64      ; F2 0F C2 /r 05  [WILLAMETTE,SSE2] 
-\c CMPNLESD xmm1,xmm2/mem64      ; F2 0F C2 /r 06  [WILLAMETTE,SSE2] 
-\c CMPORDSD xmm1,xmm2/mem64      ; F2 0F C2 /r 07  [WILLAMETTE,SSE2] 
+\c CMPEQSD xmm1,xmm2/mem64       ; F2 0F C2 /r 00  [WILLAMETTE,SSE2]
+\c CMPLTSD xmm1,xmm2/mem64       ; F2 0F C2 /r 01  [WILLAMETTE,SSE2]
+\c CMPLESD xmm1,xmm2/mem64       ; F2 0F C2 /r 02  [WILLAMETTE,SSE2]
+\c CMPUNORDSD xmm1,xmm2/mem64    ; F2 0F C2 /r 03  [WILLAMETTE,SSE2]
+\c CMPNEQSD xmm1,xmm2/mem64      ; F2 0F C2 /r 04  [WILLAMETTE,SSE2]
+\c CMPNLTSD xmm1,xmm2/mem64      ; F2 0F C2 /r 05  [WILLAMETTE,SSE2]
+\c CMPNLESD xmm1,xmm2/mem64      ; F2 0F C2 /r 06  [WILLAMETTE,SSE2]
+\c CMPORDSD xmm1,xmm2/mem64      ; F2 0F C2 /r 07  [WILLAMETTE,SSE2]
 
 The \c{CMPccSD} instructions compare the low-order double-precision
 FP values in the source and destination operands, and returns the
@@ -7116,20 +7368,20 @@ For more details of the comparison predicates, and details of how
 to emulate the "greater-than" equivalents, see \k{iref-SSE-cc}
 
 
-\H{insCMPccSS} \i\c{CMPccSS}: Scalar Single-Precision FP Compare
+\S{insCMPccSS} \i\c{CMPccSS}: Scalar Single-Precision FP Compare
 \I\c{CMPEQSS} \I\c{CMPLTSS} \I\c{CMPLESS} \I\c{CMPUNORDSS}
 \I\c{CMPNEQSS} \I\c{CMPNLTSS} \I\c{CMPNLESS} \I\c{CMPORDSS}
 
-\c CMPSS xmm1,xmm2/mem32,imm8    ; F3 0F C2 /r ib  [KATMAI,SSE] 
+\c CMPSS xmm1,xmm2/mem32,imm8    ; F3 0F C2 /r ib  [KATMAI,SSE]
 
-\c CMPEQSS xmm1,xmm2/mem32       ; F3 0F C2 /r 00  [KATMAI,SSE] 
-\c CMPLTSS xmm1,xmm2/mem32       ; F3 0F C2 /r 01  [KATMAI,SSE] 
-\c CMPLESS xmm1,xmm2/mem32       ; F3 0F C2 /r 02  [KATMAI,SSE] 
-\c CMPUNORDSS xmm1,xmm2/mem32    ; F3 0F C2 /r 03  [KATMAI,SSE] 
-\c CMPNEQSS xmm1,xmm2/mem32      ; F3 0F C2 /r 04  [KATMAI,SSE] 
-\c CMPNLTSS xmm1,xmm2/mem32      ; F3 0F C2 /r 05  [KATMAI,SSE] 
-\c CMPNLESS xmm1,xmm2/mem32      ; F3 0F C2 /r 06  [KATMAI,SSE] 
-\c CMPORDSS xmm1,xmm2/mem32      ; F3 0F C2 /r 07  [KATMAI,SSE] 
+\c CMPEQSS xmm1,xmm2/mem32       ; F3 0F C2 /r 00  [KATMAI,SSE]
+\c CMPLTSS xmm1,xmm2/mem32       ; F3 0F C2 /r 01  [KATMAI,SSE]
+\c CMPLESS xmm1,xmm2/mem32       ; F3 0F C2 /r 02  [KATMAI,SSE]
+\c CMPUNORDSS xmm1,xmm2/mem32    ; F3 0F C2 /r 03  [KATMAI,SSE]
+\c CMPNEQSS xmm1,xmm2/mem32      ; F3 0F C2 /r 04  [KATMAI,SSE]
+\c CMPNLTSS xmm1,xmm2/mem32      ; F3 0F C2 /r 05  [KATMAI,SSE]
+\c CMPNLESS xmm1,xmm2/mem32      ; F3 0F C2 /r 06  [KATMAI,SSE]
+\c CMPORDSS xmm1,xmm2/mem32      ; F3 0F C2 /r 07  [KATMAI,SSE]
 
 The \c{CMPccSS} instructions compare the low-order single-precision
 FP values in the source and destination operands, and returns the
@@ -7159,7 +7411,7 @@ For more details of the comparison predicates, and details of how
 to emulate the "greater-than" equivalents, see \k{iref-SSE-cc}
 
 
-\H{insCMPXCHG} \i\c{CMPXCHG}, \i\c{CMPXCHG486}: Compare and Exchange
+\S{insCMPXCHG} \i\c{CMPXCHG}, \i\c{CMPXCHG486}: Compare and Exchange
 
 \c CMPXCHG r/m8,reg8             ; 0F B0 /r             [PENT]
 \c CMPXCHG r/m16,reg16           ; o16 0F B1 /r         [PENT]
@@ -7198,7 +7450,7 @@ notified of the failure by a cleared zero flag, so you can go round
 and try again.
 
 
-\H{insCMPXCHG8B} \i\c{CMPXCHG8B}: Compare and Exchange Eight Bytes
+\S{insCMPXCHG8B} \i\c{CMPXCHG8B}: Compare and Exchange Eight Bytes
 
 \c CMPXCHG8B mem                 ; 0F C7 /1             [PENT]
 
@@ -7213,9 +7465,9 @@ execution. This is useful in multi-processor and multi-tasking
 environments.
 
 
-\H{insCOMISD} \i\c{COMISD}: Scalar Ordered Double-Precision FP Compare and Set EFLAGS
+\S{insCOMISD} \i\c{COMISD}: Scalar Ordered Double-Precision FP Compare and Set EFLAGS
 
-\c COMISD xmm1,xmm2/mem64        ; 66 0F 2F /r     [WILLAMETTE,SSE2] 
+\c COMISD xmm1,xmm2/mem64        ; 66 0F 2F /r     [WILLAMETTE,SSE2]
 
 \c{COMISD} compares the low-order double-precision FP value in the
 two source operands. ZF, PF and CF are set according to the result.
@@ -7235,9 +7487,9 @@ The flags are set according to the following rules:
 \c    EQUAL:          ZF,PF,CF <-- 100;
 
 
-\H{insCOMISS} \i\c{COMISS}: Scalar Ordered Single-Precision FP Compare and Set EFLAGS
+\S{insCOMISS} \i\c{COMISS}: Scalar Ordered Single-Precision FP Compare and Set EFLAGS
 
-\c COMISS xmm1,xmm2/mem32        ; 66 0F 2F /r     [KATMAI,SSE] 
+\c COMISS xmm1,xmm2/mem32        ; 66 0F 2F /r     [KATMAI,SSE]
 
 \c{COMISS} compares the low-order single-precision FP value in the
 two source operands. ZF, PF and CF are set according to the result.
@@ -7257,7 +7509,7 @@ The flags are set according to the following rules:
 \c    EQUAL:          ZF,PF,CF <-- 100;
 
 
-\H{insCPUID} \i\c{CPUID}: Get CPU Identification Code
+\S{insCPUID} \i\c{CPUID}: Get CPU Identification Code
 
 \c CPUID                         ; 0F A2                [PENT]
 
@@ -7297,10 +7549,10 @@ For more information on the data returned from \c{CPUID}, see the
 documentation from Intel and other processor manufacturers.
 
 
-\H{insCVTDQ2PD} \i\c{CVTDQ2PD}:
+\S{insCVTDQ2PD} \i\c{CVTDQ2PD}:
 Packed Signed INT32 to Packed Double-Precision FP Conversion
 
-\c CVTDQ2PD xmm1,xmm2/mem64      ; F3 0F E6 /r     [WILLAMETTE,SSE2] 
+\c CVTDQ2PD xmm1,xmm2/mem64      ; F3 0F E6 /r     [WILLAMETTE,SSE2]
 
 \c{CVTDQ2PD} converts two packed signed doublewords from the source
 operand to two packed double-precision FP values in the destination
@@ -7311,10 +7563,10 @@ either an \c{XMM} register or a 64-bit memory location. If the
 source is a register, the packed integers are in the low quadword.
 
 
-\H{insCVTDQ2PS} \i\c{CVTDQ2PS}:
+\S{insCVTDQ2PS} \i\c{CVTDQ2PS}:
 Packed Signed INT32 to Packed Single-Precision FP Conversion
 
-\c CVTDQ2PS xmm1,xmm2/mem128     ; 0F 5B /r        [WILLAMETTE,SSE2] 
+\c CVTDQ2PS xmm1,xmm2/mem128     ; 0F 5B /r        [WILLAMETTE,SSE2]
 
 \c{CVTDQ2PS} converts four packed signed doublewords from the source
 operand to four packed single-precision FP values in the destination
@@ -7326,7 +7578,7 @@ either an \c{XMM} register or a 128-bit memory location.
 For more details of this instruction, see the Intel Processor manuals.
 
 
-\H{insCVTPD2DQ} \i\c{CVTPD2DQ}:
+\S{insCVTPD2DQ} \i\c{CVTPD2DQ}:
 Packed Double-Precision FP to Packed Signed INT32 Conversion
 
 \c CVTPD2DQ xmm1,xmm2/mem128     ; F2 0F E6 /r     [WILLAMETTE,SSE2]
@@ -7342,7 +7594,7 @@ either an \c{XMM} register or a 128-bit memory location.
 For more details of this instruction, see the Intel Processor manuals.
 
 
-\H{insCVTPD2PI} \i\c{CVTPD2PI}:
+\S{insCVTPD2PI} \i\c{CVTPD2PI}:
 Packed Double-Precision FP to Packed Signed INT32 Conversion
 
 \c CVTPD2PI mm,xmm/mem128        ; 66 0F 2D /r     [WILLAMETTE,SSE2]
@@ -7357,7 +7609,7 @@ either an \c{XMM} register or a 128-bit memory location.
 For more details of this instruction, see the Intel Processor manuals.
 
 
-\H{insCVTPD2PS} \i\c{CVTPD2PS}:
+\S{insCVTPD2PS} \i\c{CVTPD2PS}:
 Packed Double-Precision FP to Packed Single-Precision FP Conversion
 
 \c CVTPD2PS xmm1,xmm2/mem128     ; 66 0F 5A /r     [WILLAMETTE,SSE2]
@@ -7373,7 +7625,7 @@ either an \c{XMM} register or a 128-bit memory location.
 For more details of this instruction, see the Intel Processor manuals.
 
 
-\H{insCVTPI2PD} \i\c{CVTPI2PD}:
+\S{insCVTPI2PD} \i\c{CVTPI2PD}:
 Packed Signed INT32 to Packed Double-Precision FP Conversion
 
 \c CVTPI2PD xmm,mm/mem64         ; 66 0F 2A /r     [WILLAMETTE,SSE2]
@@ -7388,10 +7640,10 @@ either an \c{MMX} register or a 64-bit memory location.
 For more details of this instruction, see the Intel Processor manuals.
 
 
-\H{insCVTPI2PS} \i\c{CVTPI2PS}:
+\S{insCVTPI2PS} \i\c{CVTPI2PS}:
 Packed Signed INT32 to Packed Single-FP Conversion
 
-\c CVTPI2PS xmm,mm/mem64         ; 0F 2A /r        [KATMAI,SSE] 
+\c CVTPI2PS xmm,mm/mem64         ; 0F 2A /r        [KATMAI,SSE]
 
 \c{CVTPI2PS} converts two packed signed doublewords from the source
 operand to two packed single-precision FP values in the low quadword
@@ -7404,7 +7656,7 @@ either an \c{MMX} register or a 64-bit memory location.
 For more details of this instruction, see the Intel Processor manuals.
 
 
-\H{insCVTPS2DQ} \i\c{CVTPS2DQ}:
+\S{insCVTPS2DQ} \i\c{CVTPS2DQ}:
 Packed Single-Precision FP to Packed Signed INT32 Conversion
 
 \c CVTPS2DQ xmm1,xmm2/mem128     ; 66 0F 5B /r     [WILLAMETTE,SSE2]
@@ -7418,7 +7670,7 @@ either an \c{XMM} register or a 128-bit memory location.
 For more details of this instruction, see the Intel Processor manuals.
 
 
-\H{insCVTPS2PD} \i\c{CVTPS2PD}:
+\S{insCVTPS2PD} \i\c{CVTPS2PD}:
 Packed Single-Precision FP to Packed Double-Precision FP Conversion
 
 \c CVTPS2PD xmm1,xmm2/mem64      ; 0F 5A /r        [WILLAMETTE,SSE2]
@@ -7434,10 +7686,10 @@ is a register, the input values are in the low quadword.
 For more details of this instruction, see the Intel Processor manuals.
 
 
-\H{insCVTPS2PI} \i\c{CVTPS2PI}:
+\S{insCVTPS2PI} \i\c{CVTPS2PI}:
 Packed Single-Precision FP to Packed Signed INT32 Conversion
 
-\c CVTPS2PI mm,xmm/mem64         ; 0F 2D /r        [KATMAI,SSE] 
+\c CVTPS2PI mm,xmm/mem64         ; 0F 2D /r        [KATMAI,SSE]
 
 \c{CVTPS2PI} converts two packed single-precision FP values from
 the source operand to two packed signed doublewords in the destination
@@ -7450,7 +7702,7 @@ source is a register, the input values are in the low quadword.
 For more details of this instruction, see the Intel Processor manuals.
 
 
-\H{insCVTSD2SI} \i\c{CVTSD2SI}:
+\S{insCVTSD2SI} \i\c{CVTSD2SI}:
 Scalar Double-Precision FP to Signed INT32 Conversion
 
 \c CVTSD2SI reg32,xmm/mem64      ; F2 0F 2D /r     [WILLAMETTE,SSE2]
@@ -7465,10 +7717,10 @@ source is a register, the input value is in the low quadword.
 For more details of this instruction, see the Intel Processor manuals.
 
 
-\H{insCVTSD2SS} \i\c{CVTSD2SS}:
+\S{insCVTSD2SS} \i\c{CVTSD2SS}:
 Scalar Double-Precision FP to Scalar Single-Precision FP Conversion
 
-\c CVTSD2SS xmm1,xmm2/mem64      ; F2 0F 5A /r     [KATMAI,SSE] 
+\c CVTSD2SS xmm1,xmm2/mem64      ; F2 0F 5A /r     [KATMAI,SSE]
 
 \c{CVTSD2SS} converts a double-precision FP value from the source
 operand to a single-precision FP value in the low doubleword of the
@@ -7481,7 +7733,7 @@ source is a register, the input value is in the low quadword.
 For more details of this instruction, see the Intel Processor manuals.
 
 
-\H{insCVTSI2SD} \i\c{CVTSI2SD}:
+\S{insCVTSI2SD} \i\c{CVTSI2SD}:
 Signed INT32 to Scalar Double-Precision FP Conversion
 
 \c CVTSI2SD xmm,r/m32            ; F2 0F 2A /r     [WILLAMETTE,SSE2]
@@ -7496,7 +7748,7 @@ a general purpose register or a 32-bit memory location.
 For more details of this instruction, see the Intel Processor manuals.
 
 
-\H{insCVTSI2SS} \i\c{CVTSI2SS}:
+\S{insCVTSI2SS} \i\c{CVTSI2SS}:
 Signed INT32 to Scalar Single-Precision FP Conversion
 
 \c CVTSI2SS xmm,r/m32            ; F3 0F 2A /r     [KATMAI,SSE]
@@ -7511,7 +7763,7 @@ a general purpose register or a 32-bit memory location.
 For more details of this instruction, see the Intel Processor manuals.
 
 
-\H{insCVTSS2SD} \i\c{CVTSS2SD}:
+\S{insCVTSS2SD} \i\c{CVTSS2SD}:
 Scalar Single-Precision FP to Scalar Double-Precision FP Conversion
 
 \c CVTSS2SD xmm1,xmm2/mem32      ; F3 0F 5A /r     [WILLAMETTE,SSE2]
@@ -7527,10 +7779,10 @@ register, the input value is contained in the low doubleword.
 For more details of this instruction, see the Intel Processor manuals.
 
 
-\H{insCVTSS2SI} \i\c{CVTSS2SI}:
+\S{insCVTSS2SI} \i\c{CVTSS2SI}:
 Scalar Single-Precision FP to Signed INT32 Conversion
 
-\c CVTSS2SI reg32,xmm/mem32      ; F3 0F 2D /r     [KATMAI,SSE] 
+\c CVTSS2SI reg32,xmm/mem32      ; F3 0F 2D /r     [KATMAI,SSE]
 
 \c{CVTSS2SI} converts a single-precision FP value from the source
 operand to a signed doubleword in the destination operand.
@@ -7542,7 +7794,7 @@ source is a register, the input value is in the low doubleword.
 For more details of this instruction, see the Intel Processor manuals.
 
 
-\H{insCVTTPD2DQ} \i\c{CVTTPD2DQ}:
+\S{insCVTTPD2DQ} \i\c{CVTTPD2DQ}:
 Packed Double-Precision FP to Packed Signed INT32 Conversion with Truncation
 
 \c CVTTPD2DQ xmm1,xmm2/mem128    ; 66 0F E6 /r     [WILLAMETTE,SSE2]
@@ -7558,7 +7810,7 @@ either an \c{XMM} register or a 128-bit memory location.
 For more details of this instruction, see the Intel Processor manuals.
 
 
-\H{insCVTTPD2PI} \i\c{CVTTPD2PI}:
+\S{insCVTTPD2PI} \i\c{CVTTPD2PI}:
 Packed Double-Precision FP to Packed Signed INT32 Conversion with Truncation
 
 \c CVTTPD2PI mm,xmm/mem128        ; 66 0F 2C /r     [WILLAMETTE,SSE2]
@@ -7573,7 +7825,7 @@ either an \c{XMM} register or a 128-bit memory location.
 For more details of this instruction, see the Intel Processor manuals.
 
 
-\H{insCVTTPS2DQ} \i\c{CVTTPS2DQ}:
+\S{insCVTTPS2DQ} \i\c{CVTTPS2DQ}:
 Packed Single-Precision FP to Packed Signed INT32 Conversion with Truncation
 
 \c CVTTPS2DQ xmm1,xmm2/mem128    ; F3 0F 5B /r     [WILLAMETTE,SSE2]
@@ -7588,10 +7840,10 @@ either an \c{XMM} register or a 128-bit memory location.
 For more details of this instruction, see the Intel Processor manuals.
 
 
-\H{insCVTTPS2PI} \i\c{CVTTPS2PI}:
+\S{insCVTTPS2PI} \i\c{CVTTPS2PI}:
 Packed Single-Precision FP to Packed Signed INT32 Conversion with Truncation
 
-\c CVTTPS2PI mm,xmm/mem64         ; 0F 2C /r       [KATMAI,SSE] 
+\c CVTTPS2PI mm,xmm/mem64         ; 0F 2C /r       [KATMAI,SSE]
 
 \c{CVTTPS2PI} converts two packed single-precision FP values in the source
 operand to two packed signed doublewords in the destination operand.
@@ -7605,7 +7857,7 @@ is a register, the input value is in the low quadword.
 For more details of this instruction, see the Intel Processor manuals.
 
 
-\H{insCVTTSD2SI} \i\c{CVTTSD2SI}:
+\S{insCVTTSD2SI} \i\c{CVTTSD2SI}:
 Scalar Double-Precision FP to Signed INT32 Conversion with Truncation
 
 \c CVTTSD2SI reg32,xmm/mem64      ; F2 0F 2C /r    [WILLAMETTE,SSE2]
@@ -7621,10 +7873,10 @@ register, the input value is in the low quadword.
 For more details of this instruction, see the Intel Processor manuals.
 
 
-\H{insCVTTSS2SI} \i\c{CVTTSS2SI}:
+\S{insCVTTSS2SI} \i\c{CVTTSS2SI}:
 Scalar Single-Precision FP to Signed INT32 Conversion with Truncation
 
-\c CVTTSD2SI reg32,xmm/mem32      ; F3 0F 2C /r    [KATMAI,SSE] 
+\c CVTTSD2SI reg32,xmm/mem32      ; F3 0F 2C /r    [KATMAI,SSE]
 
 \c{CVTTSS2SI} converts a single-precision FP value in the source operand
 to a signed doubleword in the destination operand. If the result is
@@ -7637,7 +7889,7 @@ register, the input value is in the low doubleword.
 For more details of this instruction, see the Intel Processor manuals.
 
 
-\H{insDAA} \i\c{DAA}, \i\c{DAS}: Decimal Adjustments
+\S{insDAA} \i\c{DAA}, \i\c{DAS}: Decimal Adjustments
 
 \c DAA                           ; 27                   [8086]
 \c DAS                           ; 2F                   [8086]
@@ -7660,7 +7912,7 @@ of digits.
 instructions rather than \c{ADD}.
 
 
-\H{insDEC} \i\c{DEC}: Decrement Integer
+\S{insDEC} \i\c{DEC}: Decrement Integer
 
 \c DEC reg16                     ; o16 48+r             [8086]
 \c DEC reg32                     ; o32 48+r             [386]
@@ -7678,7 +7930,7 @@ execution.
 See also \c{INC} (\k{insINC}).
 
 
-\H{insDIV} \i\c{DIV}: Unsigned Integer Divide
+\S{insDIV} \i\c{DIV}: Unsigned Integer Divide
 
 \c DIV r/m8                      ; F6 /6                [8086]
 \c DIV r/m16                     ; o16 F7 /6            [8086]
@@ -7701,7 +7953,7 @@ Signed integer division is performed by the \c{IDIV} instruction:
 see \k{insIDIV}.
 
 
-\H{insDIVPD} \i\c{DIVPD}: Packed Double-Precision FP Divide
+\S{insDIVPD} \i\c{DIVPD}: Packed Double-Precision FP Divide
 
 \c DIVPD xmm1,xmm2/mem128        ; 66 0F 5E /r     [WILLAMETTE,SSE2]
 
@@ -7717,11 +7969,11 @@ either an \c{XMM} register or a 128-bit memory location.
 \c    dst[64-127] := dst[64-127] / src[64-127].
 
 
-\H{insDIVPS} \i\c{DIVPS}: Packed Single-Precision FP Divide
+\S{insDIVPS} \i\c{DIVPS}: Packed Single-Precision FP Divide
 
 \c DIVPS xmm1,xmm2/mem128        ; 0F 5E /r        [KATMAI,SSE]
 
-\c{DIVPD} divides the four packed single-precision FP values in
+\c{DIVPS} divides the four packed single-precision FP values in
 the destination operand by the four packed single-precision FP
 values in the source operand, and stores the packed single-precision
 results in the destination register.
@@ -7735,7 +7987,7 @@ either an \c{XMM} register or a 128-bit memory location.
 \c    dst[96-127] := dst[96-127] / src[96-127].
 
 
-\H{insDIVSD} \i\c{DIVPD}: Scalar Double-Precision FP Divide
+\S{insDIVSD} \i\c{DIVSD}: Scalar Double-Precision FP Divide
 
 \c DIVSD xmm1,xmm2/mem64         ; F2 0F 5E /r     [WILLAMETTE,SSE2]
 
@@ -7751,7 +8003,7 @@ either an \c{XMM} register or a 64-bit memory location.
 \c    dst[64-127] remains unchanged.
 
 
-\H{insDIVSS} \i\c{DIVSS}: Scalar Single-Precision FP Divide
+\S{insDIVSS} \i\c{DIVSS}: Scalar Single-Precision FP Divide
 
 \c DIVSS xmm1,xmm2/mem32         ; F3 0F 5E /r     [KATMAI,SSE]
 
@@ -7767,7 +8019,7 @@ either an \c{XMM} register or a 32-bit memory location.
 \c    dst[32-127] remains unchanged.
 
 
-\H{insEMMS} \i\c{EMMS}: Empty MMX State
+\S{insEMMS} \i\c{EMMS}: Empty MMX State
 
 \c EMMS                          ; 0F 77                [PENT,MMX]
 
@@ -7777,7 +8029,7 @@ the FPU to use. It should be used after executing \c{MMX} instructions
 and before executing any subsequent floating-point operations.
 
 
-\H{insENTER} \i\c{ENTER}: Create Stack Frame
+\S{insENTER} \i\c{ENTER}: Create Stack Frame
 
 \c ENTER imm,imm                 ; C8 iw ib             [186]
 
@@ -7816,7 +8068,7 @@ Stack frames created by \c{ENTER} can be destroyed by the \c{LEAVE}
 instruction: see \k{insLEAVE}.
 
 
-\H{insF2XM1} \i\c{F2XM1}: Calculate 2**X-1
+\S{insF2XM1} \i\c{F2XM1}: Calculate 2**X-1
 
 \c F2XM1                         ; D9 F0                [8086,FPU]
 
@@ -7825,7 +8077,7 @@ stores the result back into \c{ST0}. The initial contents of \c{ST0}
 must be a number in the range -1.0 to +1.0.
 
 
-\H{insFABS} \i\c{FABS}: Floating-Point Absolute Value
+\S{insFABS} \i\c{FABS}: Floating-Point Absolute Value
 
 \c FABS                          ; D9 E1                [8086,FPU]
 
@@ -7833,7 +8085,7 @@ must be a number in the range -1.0 to +1.0.
 bit, and stores the result back in \c{ST0}.
 
 
-\H{insFADD} \i\c{FADD}, \i\c{FADDP}: Floating-Point Addition
+\S{insFADD} \i\c{FADD}, \i\c{FADDP}: Floating-Point Addition
 
 \c FADD mem32                    ; D8 /0                [8086,FPU]
 \c FADD mem64                    ; DC /0                [8086,FPU]
@@ -7860,7 +8112,7 @@ To add an integer value to \c{ST0}, use the c{FIADD} instruction
 (\k{insFIADD})
 
 
-\H{insFBLD} \i\c{FBLD}, \i\c{FBSTP}: BCD Floating-Point Load and Store
+\S{insFBLD} \i\c{FBLD}, \i\c{FBSTP}: BCD Floating-Point Load and Store
 
 \c FBLD mem80                    ; DF /4                [8086,FPU]
 \c FBSTP mem80                   ; DF /6                [8086,FPU]
@@ -7872,7 +8124,7 @@ pushes it on the register stack. \c{FBSTP} stores the value of
 register stack.
 
 
-\H{insFCHS} \i\c{FCHS}: Floating-Point Change Sign
+\S{insFCHS} \i\c{FCHS}: Floating-Point Change Sign
 
 \c FCHS                          ; D9 E0                [8086,FPU]
 
@@ -7880,7 +8132,7 @@ register stack.
 negative numbers become positive, and vice versa.
 
 
-\H{insFCLEX} \i\c{FCLEX}, \c{FNCLEX}: Clear Floating-Point Exceptions
+\S{insFCLEX} \i\c{FCLEX}, \c{FNCLEX}: Clear Floating-Point Exceptions
 
 \c FCLEX                         ; 9B DB E2             [8086,FPU]
 \c FNCLEX                        ; DB E2                [8086,FPU]
@@ -7891,7 +8143,7 @@ floating-point operations (including the \e{handling} of pending
 exceptions) to finish first.
 
 
-\H{insFCMOVB} \i\c{FCMOVcc}: Floating-Point Conditional Move
+\S{insFCMOVB} \i\c{FCMOVcc}: Floating-Point Conditional Move
 
 \c FCMOVB fpureg                 ; DA C0+r              [P6,FPU]
 \c FCMOVB ST0,fpureg             ; DA C0+r              [P6,FPU]
@@ -7945,7 +8197,7 @@ instruction (\k{insCPUID}) will return a bit which indicates whether
 conditional moves are supported.
 
 
-\H{insFCOM} \i\c{FCOM}, \i\c{FCOMP}, \i\c{FCOMPP}, \i\c{FCOMI},
+\S{insFCOM} \i\c{FCOM}, \i\c{FCOMP}, \i\c{FCOMPP}, \i\c{FCOMI},
 \i\c{FCOMIP}: Floating-Point Compare
 
 \c FCOM mem32                    ; D8 /2                [8086,FPU]
@@ -7987,7 +8239,7 @@ will handle them silently and set the condition code flags to an
 `unordered' result, whereas \c{FCOM} will generate an exception.
 
 
-\H{insFCOS} \i\c{FCOS}: Cosine
+\S{insFCOS} \i\c{FCOS}: Cosine
 
 \c FCOS                          ; D9 FF                [386,FPU]
 
@@ -7997,7 +8249,7 @@ result in \c{ST0}. The absolute value of \c{ST0} must be less than 2**63.
 See also \c{FSINCOS} (\k{insFSIN}).
 
 
-\H{insFDECSTP} \i\c{FDECSTP}: Decrement Floating-Point Stack Pointer
+\S{insFDECSTP} \i\c{FDECSTP}: Decrement Floating-Point Stack Pointer
 
 \c FDECSTP                       ; D9 F6                [8086,FPU]
 
@@ -8007,7 +8259,7 @@ as if the contents of \c{ST7} had been pushed on the stack. See also
 \c{FINCSTP} (\k{insFINCSTP}).
 
 
-\H{insFDISI} \i\c{FxDISI}, \i\c{FxENI}: Disable and Enable Floating-Point Interrupts
+\S{insFDISI} \i\c{FxDISI}, \i\c{FxENI}: Disable and Enable Floating-Point Interrupts
 
 \c FDISI                         ; 9B DB E1             [8086,FPU]
 \c FNDISI                        ; DB E1                [8086,FPU]
@@ -8024,7 +8276,7 @@ respectively, but without waiting for the floating-point processor
 to finish what it was doing first.
 
 
-\H{insFDIV} \i\c{FDIV}, \i\c{FDIVP}, \i\c{FDIVR}, \i\c{FDIVRP}: Floating-Point Division
+\S{insFDIV} \i\c{FDIV}, \i\c{FDIVP}, \i\c{FDIVR}, \i\c{FDIVRP}: Floating-Point Division
 
 \c FDIV mem32                    ; D8 /6                [8086,FPU]
 \c FDIV mem64                    ; DC /6                [8086,FPU]
@@ -8070,9 +8322,9 @@ once it has finished.
 For FP/Integer divisions, see \c{FIDIV} (\k{insFIDIV}).
 
 
-\H{insFEMMS} \i\c{FEMMS}: Faster Enter/Exit of the MMX or floating-point state
+\S{insFEMMS} \i\c{FEMMS}: Faster Enter/Exit of the MMX or floating-point state
 
-\c FEMMS                         ; 0F 0E           [PENT,3DNOW] 
+\c FEMMS                         ; 0F 0E           [PENT,3DNOW]
 
 \c{FEMMS} can be used in place of the \c{EMMS} instruction on
 processors which support the 3DNow! instruction set. Following
@@ -8082,7 +8334,7 @@ is undefined, and this allows a faster context switch between
 also be used \e{before} executing \c{MMX} instructions
 
 
-\H{insFFREE} \i\c{FFREE}: Flag Floating-Point Register as Unused
+\S{insFFREE} \i\c{FFREE}: Flag Floating-Point Register as Unused
 
 \c FFREE fpureg                  ; DD C0+r              [8086,FPU]
 \c FFREEP fpureg                 ; DF C0+r              [286,FPU,UNDOC]
@@ -8093,7 +8345,7 @@ also be used \e{before} executing \c{MMX} instructions
 pops the register stack.
 
 
-\H{insFIADD} \i\c{FIADD}: Floating-Point/Integer Addition
+\S{insFIADD} \i\c{FIADD}: Floating-Point/Integer Addition
 
 \c FIADD mem16                   ; DE /0                [8086,FPU]
 \c FIADD mem32                   ; DA /0                [8086,FPU]
@@ -8102,7 +8354,7 @@ pops the register stack.
 memory location to \c{ST0}, storing the result in \c{ST0}.
 
 
-\H{insFICOM} \i\c{FICOM}, \i\c{FICOMP}: Floating-Point/Integer Compare
+\S{insFICOM} \i\c{FICOM}, \i\c{FICOMP}: Floating-Point/Integer Compare
 
 \c FICOM mem16                   ; DE /2                [8086,FPU]
 \c FICOM mem32                   ; DA /2                [8086,FPU]
@@ -8115,7 +8367,7 @@ in the given memory location, and sets the FPU flags accordingly.
 \c{FICOMP} does the same, but pops the register stack afterwards.
 
 
-\H{insFIDIV} \i\c{FIDIV}, \i\c{FIDIVR}: Floating-Point/Integer Division
+\S{insFIDIV} \i\c{FIDIV}, \i\c{FIDIVR}: Floating-Point/Integer Division
 
 \c FIDIV mem16                   ; DE /6                [8086,FPU]
 \c FIDIV mem32                   ; DA /6                [8086,FPU]
@@ -8129,7 +8381,7 @@ the given memory location, and stores the result in \c{ST0}.
 integer by \c{ST0}, but still stores the result in \c{ST0}.
 
 
-\H{insFILD} \i\c{FILD}, \i\c{FIST}, \i\c{FISTP}: Floating-Point/Integer Conversion
+\S{insFILD} \i\c{FILD}, \i\c{FIST}, \i\c{FISTP}: Floating-Point/Integer Conversion
 
 \c FILD mem16                    ; DF /0                [8086,FPU]
 \c FILD mem32                    ; DB /0                [8086,FPU]
@@ -8148,7 +8400,7 @@ real, and pushes it on the FPU register stack. \c{FIST} converts
 same as \c{FIST}, but pops the register stack afterwards.
 
 
-\H{insFIMUL} \i\c{FIMUL}: Floating-Point/Integer Multiplication
+\S{insFIMUL} \i\c{FIMUL}: Floating-Point/Integer Multiplication
 
 \c FIMUL mem16                   ; DE /1                [8086,FPU]
 \c FIMUL mem32                   ; DA /1                [8086,FPU]
@@ -8157,7 +8409,7 @@ same as \c{FIST}, but pops the register stack afterwards.
 in the given memory location, and stores the result in \c{ST0}.
 
 
-\H{insFINCSTP} \i\c{FINCSTP}: Increment Floating-Point Stack Pointer
+\S{insFINCSTP} \i\c{FINCSTP}: Increment Floating-Point Stack Pointer
 
 \c FINCSTP                       ; D9 F7                [8086,FPU]
 
@@ -8169,7 +8421,7 @@ flag the new \c{ST7} (previously \c{ST0}) as empty. See also
 \c{FDECSTP} (\k{insFDECSTP}).
 
 
-\H{insFINIT} \i\c{FINIT}, \i\c{FNINIT}: Initialise Floating-Point Unit
+\S{insFINIT} \i\c{FINIT}, \i\c{FNINIT}: Initialise Floating-Point Unit
 
 \c FINIT                         ; 9B DB E3             [8086,FPU]
 \c FNINIT                        ; DB E3                [8086,FPU]
@@ -8180,7 +8432,7 @@ the top of stack pointer. \c{FNINIT} does the same, without first
 waiting for pending exceptions to clear.
 
 
-\H{insFISUB} \i\c{FISUB}: Floating-Point/Integer Subtraction
+\S{insFISUB} \i\c{FISUB}: Floating-Point/Integer Subtraction
 
 \c FISUB mem16                   ; DE /4                [8086,FPU]
 \c FISUB mem32                   ; DA /4                [8086,FPU]
@@ -8195,7 +8447,7 @@ subtracts \c{ST0} from the given integer, but still stores the
 result in \c{ST0}.
 
 
-\H{insFLD} \i\c{FLD}: Floating-Point Load
+\S{insFLD} \i\c{FLD}: Floating-Point Load
 
 \c FLD mem32                     ; D9 /0                [8086,FPU]
 \c FLD mem64                     ; DD /0                [8086,FPU]
@@ -8206,7 +8458,7 @@ result in \c{ST0}.
 memory location, and pushes it on the FPU register stack.
 
 
-\H{insFLD1} \i\c{FLDxx}: Floating-Point Load Constants
+\S{insFLD1} \i\c{FLDxx}: Floating-Point Load Constants
 
 \c FLD1                          ; D9 E8                [8086,FPU]
 \c FLDL2E                        ; D9 EA                [8086,FPU]
@@ -8230,7 +8482,7 @@ register stack.
 \c  FLDZ           zero
 
 
-\H{insFLDCW} \i\c{FLDCW}: Load Floating-Point Control Word
+\S{insFLDCW} \i\c{FLDCW}: Load Floating-Point Control Word
 
 \c FLDCW mem16                   ; D9 /5                [8086,FPU]
 
@@ -8242,7 +8494,7 @@ generate one, use \c{FCLEX} or \c{FNCLEX} (\k{insFCLEX}) before
 loading the new control word.
 
 
-\H{insFLDENV} \i\c{FLDENV}: Load Floating-Point Environment
+\S{insFLDENV} \i\c{FLDENV}: Load Floating-Point Environment
 
 \c FLDENV mem                    ; D9 /4                [8086,FPU]
 
@@ -8252,7 +8504,7 @@ from memory. The memory area is 14 or 28 bytes long, depending on
 the CPU mode at the time. See also \c{FSTENV} (\k{insFSTENV}).
 
 
-\H{insFMUL} \i\c{FMUL}, \i\c{FMULP}: Floating-Point Multiply
+\S{insFMUL} \i\c{FMUL}, \i\c{FMULP}: Floating-Point Multiply
 
 \c FMUL mem32                    ; D8 /1                [8086,FPU]
 \c FMUL mem64                    ; DC /1                [8086,FPU]
@@ -8272,14 +8524,14 @@ it stores the result in the operand. \c{FMULP} performs the same
 operation as \c{FMUL TO}, and then pops the register stack.
 
 
-\H{insFNOP} \i\c{FNOP}: Floating-Point No Operation
+\S{insFNOP} \i\c{FNOP}: Floating-Point No Operation
 
 \c FNOP                          ; D9 D0                [8086,FPU]
 
 \c{FNOP} does nothing.
 
 
-\H{insFPATAN} \i\c{FPATAN}, \i\c{FPTAN}: Arctangent and Tangent
+\S{insFPATAN} \i\c{FPATAN}, \i\c{FPTAN}: Arctangent and Tangent
 
 \c FPATAN                        ; D9 F3                [8086,FPU]
 \c FPTAN                         ; D9 F2                [8086,FPU]
@@ -8298,7 +8550,7 @@ and stores the result back into \c{ST0}.
 The absolute value of \c{ST0} must be less than 2**63.
 
 
-\H{insFPREM} \i\c{FPREM}, \i\c{FPREM1}: Floating-Point Partial Remainder
+\S{insFPREM} \i\c{FPREM}, \i\c{FPREM1}: Floating-Point Partial Remainder
 
 \c FPREM                         ; D9 F8                [8086,FPU]
 \c FPREM1                        ; D9 F5                [386,FPU]
@@ -8325,7 +8577,7 @@ remainder, you should repeatedly execute \c{FPREM} or \c{FPREM1}
 until C2 becomes clear.
 
 
-\H{insFRNDINT} \i\c{FRNDINT}: Floating-Point Round to Integer
+\S{insFRNDINT} \i\c{FRNDINT}: Floating-Point Round to Integer
 
 \c FRNDINT                       ; D9 FC                [8086,FPU]
 
@@ -8334,7 +8586,7 @@ to the current rounding mode set in the FPU control word, and stores
 the result back in \c{ST0}.
 
 
-\H{insFRSTOR} \i\c{FSAVE}, \i\c{FRSTOR}: Save/Restore Floating-Point State
+\S{insFRSTOR} \i\c{FSAVE}, \i\c{FRSTOR}: Save/Restore Floating-Point State
 
 \c FSAVE mem                     ; 9B DD /6             [8086,FPU]
 \c FNSAVE mem                    ; DD /6                [8086,FPU]
@@ -8351,7 +8603,7 @@ state from the same area of memory.
 pending floating-point exceptions to clear.
 
 
-\H{insFSCALE} \i\c{FSCALE}: Scale Floating-Point Value by Power of Two
+\S{insFSCALE} \i\c{FSCALE}: Scale Floating-Point Value by Power of Two
 
 \c FSCALE                        ; D9 FD                [8086,FPU]
 
@@ -8360,16 +8612,16 @@ towards zero to obtain an integer, then multiplies \c{ST0} by two to
 the power of that integer, and stores the result in \c{ST0}.
 
 
-\H{insFSETPM} \i\c{FSETPM}: Set Protected Mode
+\S{insFSETPM} \i\c{FSETPM}: Set Protected Mode
 
 \c FSETPM                        ; DB E4                [286,FPU]
 
-This instruction initalises protected mode on the 287 floating-point
+This instruction initialises protected mode on the 287 floating-point
 coprocessor. It is only meaningful on that processor: the 387 and
 above treat the instruction as a no-operation.
 
 
-\H{insFSIN} \i\c{FSIN}, \i\c{FSINCOS}: Sine and Cosine
+\S{insFSIN} \i\c{FSIN}, \i\c{FSINCOS}: Sine and Cosine
 
 \c FSIN                          ; D9 FE                [386,FPU]
 \c FSINCOS                       ; D9 FB                [386,FPU]
@@ -8383,7 +8635,7 @@ than executing \c{FSIN} and \c{FCOS} (see \k{insFCOS}) in succession.
 The absolute value of \c{ST0} must be less than 2**63.
 
 
-\H{insFSQRT} \i\c{FSQRT}: Floating-Point Square Root
+\S{insFSQRT} \i\c{FSQRT}: Floating-Point Square Root
 
 \c FSQRT                         ; D9 FA                [8086,FPU]
 
@@ -8391,7 +8643,7 @@ The absolute value of \c{ST0} must be less than 2**63.
 result in \c{ST0}.
 
 
-\H{insFST} \i\c{FST}, \i\c{FSTP}: Floating-Point Store
+\S{insFST} \i\c{FST}, \i\c{FSTP}: Floating-Point Store
 
 \c FST mem32                     ; D9 /2                [8086,FPU]
 \c FST mem64                     ; DD /2                [8086,FPU]
@@ -8407,7 +8659,7 @@ or other FPU register. \c{FSTP} does the same, but then pops the
 register stack.
 
 
-\H{insFSTCW} \i\c{FSTCW}: Store Floating-Point Control Word
+\S{insFSTCW} \i\c{FSTCW}: Store Floating-Point Control Word
 
 \c FSTCW mem16                   ; 9B D9 /7             [8086,FPU]
 \c FNSTCW mem16                  ; D9 /7                [8086,FPU]
@@ -8420,7 +8672,7 @@ memory area. See also \c{FLDCW} (\k{insFLDCW}).
 for pending floating-point exceptions to clear.
 
 
-\H{insFSTENV} \i\c{FSTENV}: Store Floating-Point Environment
+\S{insFSTENV} \i\c{FSTENV}: Store Floating-Point Environment
 
 \c FSTENV mem                    ; 9B D9 /6             [8086,FPU]
 \c FNSTENV mem                   ; D9 /6                [8086,FPU]
@@ -8435,7 +8687,7 @@ depending on the CPU mode at the time. See also \c{FLDENV}
 for pending floating-point exceptions to clear.
 
 
-\H{insFSTSW} \i\c{FSTSW}: Store Floating-Point Status Word
+\S{insFSTSW} \i\c{FSTSW}: Store Floating-Point Status Word
 
 \c FSTSW mem16                   ; 9B DD /7             [8086,FPU]
 \c FSTSW AX                      ; 9B DF E0             [286,FPU]
@@ -8450,7 +8702,7 @@ memory area.
 for pending floating-point exceptions to clear.
 
 
-\H{insFSUB} \i\c{FSUB}, \i\c{FSUBP}, \i\c{FSUBR}, \i\c{FSUBRP}: Floating-Point Subtract
+\S{insFSUB} \i\c{FSUB}, \i\c{FSUBP}, \i\c{FSUBR}, \i\c{FSUBRP}: Floating-Point Subtract
 
 \c FSUB mem32                    ; D8 /4                [8086,FPU]
 \c FSUB mem64                    ; DC /4                [8086,FPU]
@@ -8494,7 +8746,7 @@ once it has finished.
 once it has finished.
 
 
-\H{insFTST} \i\c{FTST}: Test \c{ST0} Against Zero
+\S{insFTST} \i\c{FTST}: Test \c{ST0} Against Zero
 
 \c FTST                          ; D9 E4                [8086,FPU]
 
@@ -8504,7 +8756,7 @@ comparison, so that a `less-than' result is generated if \c{ST0} is
 negative.
 
 
-\H{insFUCOM} \i\c{FUCOMxx}: Floating-Point Unordered Compare
+\S{insFUCOM} \i\c{FUCOMxx}: Floating-Point Unordered Compare
 
 \c FUCOM fpureg                  ; DD E0+r              [386,FPU]
 \c FUCOM ST0,fpureg              ; DD E0+r              [386,FPU]
@@ -8541,7 +8793,7 @@ handle them silently and set the condition code flags to an
 `unordered' result, whereas \c{FCOM} will generate an exception.
 
 
-\H{insFXAM} \i\c{FXAM}: Examine Class of Value in \c{ST0}
+\S{insFXAM} \i\c{FXAM}: Examine Class of Value in \c{ST0}
 
 \c FXAM                          ; D9 E5                [8086,FPU]
 
@@ -8561,7 +8813,7 @@ the type of value stored in \c{ST0}:
 Additionally, the \c{C1} flag is set to the sign of the number.
 
 
-\H{insFXCH} \i\c{FXCH}: Floating-Point Exchange
+\S{insFXCH} \i\c{FXCH}: Floating-Point Exchange
 
 \c FXCH                          ; D9 C9                [8086,FPU]
 \c FXCH fpureg                   ; D9 C8+r              [8086,FPU]
@@ -8572,9 +8824,9 @@ Additionally, the \c{C1} flag is set to the sign of the number.
 form exchanges \c{ST0} with \c{ST1}.
 
 
-\H{insFXRSTOR} \i\c{FXRSTOR}: Restore \c{FP}, \c{MMX} and \c{SSE} State
+\S{insFXRSTOR} \i\c{FXRSTOR}: Restore \c{FP}, \c{MMX} and \c{SSE} State
 
-\c FXRSTOR memory                ; 0F AE /1               [P6,SSE,FPU] 
+\c FXRSTOR memory                ; 0F AE /1               [P6,SSE,FPU]
 
 The \c{FXRSTOR} instruction reloads the \c{FPU}, \c{MMX} and \c{SSE}
 state (environment and registers), from the 512 byte memory area defined
@@ -8582,9 +8834,9 @@ by the source operand. This data should have been written by a previous
 \c{FXSAVE}.
 
 
-\H{insFXSAVE} \i\c{FXSAVE}: Store \c{FP}, \c{MMX} and \c{SSE} State
+\S{insFXSAVE} \i\c{FXSAVE}: Store \c{FP}, \c{MMX} and \c{SSE} State
 
-\c FXSAVE memory                 ; 0F AE /0         [P6,SSE,FPU] 
+\c FXSAVE memory                 ; 0F AE /0         [P6,SSE,FPU]
 
 \c{FXSAVE}The FXSAVE instruction writes the current \c{FPU}, \c{MMX}
 and \c{SSE} technology states (environment and registers), to the
@@ -8594,11 +8846,11 @@ without checking for pending unmasked floating-point exceptions
 
 Unlike the \c{FSAVE/FNSAVE} instructions, the processor retains the
 contents of the \c{FPU}, \c{MMX} and \c{SSE} state in the processor
-after the state has been saved. This instruction has been optimized
+after the state has been saved. This instruction has been optimised
 to maximize floating-point save performance.
 
 
-\H{insFXTRACT} \i\c{FXTRACT}: Extract Exponent and Significand
+\S{insFXTRACT} \i\c{FXTRACT}: Extract Exponent and Significand
 
 \c FXTRACT                       ; D9 F4                [8086,FPU]
 
@@ -8608,7 +8860,7 @@ then pushes the significand on the register stack (so that the
 significand ends up in \c{ST0}, and the exponent in \c{ST1}).
 
 
-\H{insFYL2X} \i\c{FYL2X}, \i\c{FYL2XP1}: Compute Y times Log2(X) or Log2(X+1)
+\S{insFYL2X} \i\c{FYL2X}, \i\c{FYL2XP1}: Compute Y times Log2(X) or Log2(X+1)
 
 \c FYL2X                         ; D9 F1                [8086,FPU]
 \c FYL2XP1                       ; D9 F9                [8086,FPU]
@@ -8623,7 +8875,7 @@ positive.
 magnitude no greater than 1 minus half the square root of two.
 
 
-\H{insHLT} \i\c{HLT}: Halt Processor
+\S{insHLT} \i\c{HLT}: Halt Processor
 
 \c HLT                           ; F4                   [8086,PRIV]
 
@@ -8634,7 +8886,7 @@ reset.
 On the 286 and later processors, this is a privileged instruction.
 
 
-\H{insIBTS} \i\c{IBTS}: Insert Bit String
+\S{insIBTS} \i\c{IBTS}: Insert Bit String
 
 \c IBTS r/m16,reg16              ; o16 0F A7 /r         [386,UNDOC]
 \c IBTS r/m32,reg32              ; o32 0F A7 /r         [386,UNDOC]
@@ -8659,7 +8911,7 @@ supports it only for completeness. Its counterpart is \c{XBTS}
 (see \k{insXBTS}).
 
 
-\H{insIDIV} \i\c{IDIV}: Signed Integer Divide
+\S{insIDIV} \i\c{IDIV}: Signed Integer Divide
 
 \c IDIV r/m8                     ; F6 /7                [8086]
 \c IDIV r/m16                    ; o16 F7 /7            [8086]
@@ -8682,7 +8934,7 @@ Unsigned integer division is performed by the \c{DIV} instruction:
 see \k{insDIV}.
 
 
-\H{insIMUL} \i\c{IMUL}: Signed Integer Multiply
+\S{insIMUL} \i\c{IMUL}: Signed Integer Multiply
 
 \c IMUL r/m8                     ; F6 /5                [8086]
 \c IMUL r/m16                    ; o16 F7 /5            [8086]
@@ -8691,13 +8943,13 @@ see \k{insDIV}.
 \c IMUL reg16,r/m16              ; o16 0F AF /r         [386]
 \c IMUL reg32,r/m32              ; o32 0F AF /r         [386]
 
-\c IMUL reg16,imm8               ; o16 6B /r ib         [286]
-\c IMUL reg16,imm16              ; o16 69 /r iw         [286]
+\c IMUL reg16,imm8               ; o16 6B /r ib         [186]
+\c IMUL reg16,imm16              ; o16 69 /r iw         [186]
 \c IMUL reg32,imm8               ; o32 6B /r ib         [386]
 \c IMUL reg32,imm32              ; o32 69 /r id         [386]
 
-\c IMUL reg16,r/m16,imm8         ; o16 6B /r ib         [286]
-\c IMUL reg16,r/m16,imm16        ; o16 69 /r iw         [286]
+\c IMUL reg16,r/m16,imm8         ; o16 6B /r ib         [186]
+\c IMUL reg16,r/m16,imm16        ; o16 69 /r iw         [186]
 \c IMUL reg32,r/m32,imm8         ; o32 6B /r ib         [386]
 \c IMUL reg32,r/m32,imm32        ; o32 69 /r id         [386]
 
@@ -8735,7 +8987,7 @@ Unsigned integer multiplication is performed by the \c{MUL}
 instruction: see \k{insMUL}.
 
 
-\H{insIN} \i\c{IN}: Input from I/O Port
+\S{insIN} \i\c{IN}: Input from I/O Port
 
 \c IN AL,imm8                    ; E4 ib                [8086]
 \c IN AX,imm8                    ; o16 E5 ib            [8086]
@@ -8750,7 +9002,7 @@ be specified as an immediate value if it is between 0 and 255, and
 otherwise must be stored in \c{DX}. See also \c{OUT} (\k{insOUT}).
 
 
-\H{insINC} \i\c{INC}: Increment Integer
+\S{insINC} \i\c{INC}: Increment Integer
 
 \c INC reg16                     ; o16 40+r             [8086]
 \c INC reg32                     ; o32 40+r             [386]
@@ -8767,7 +9019,7 @@ This instruction can be used with a \c{LOCK} prefix to allow atomic execution.
 See also \c{DEC} (\k{insDEC}).
 
 
-\H{insINSB} \i\c{INSB}, \i\c{INSW}, \i\c{INSD}: Input String from I/O Port
+\S{insINSB} \i\c{INSB}, \i\c{INSW}, \i\c{INSD}: Input String from I/O Port
 
 \c INSB                          ; 6C                   [186]
 \c INSW                          ; o16 6D               [186]
@@ -8797,7 +9049,7 @@ The \c{REP} prefix may be used to repeat the instruction \c{CX} (or
 See also \c{OUTSB}, \c{OUTSW} and \c{OUTSD} (\k{insOUTSB}).
 
 
-\H{insINT} \i\c{INT}: Software Interrupt
+\S{insINT} \i\c{INT}: Software Interrupt
 
 \c INT imm8                      ; CD ib                [8086]
 
@@ -8811,7 +9063,7 @@ order to generate single-byte breakpoint instructions, use the
 \c{INT3} or \c{INT1} instructions (see \k{insINT1}) instead.
 
 
-\H{insINT1} \i\c{INT3}, \i\c{INT1}, \i\c{ICEBP}, \i\c{INT01}: Breakpoints
+\S{insINT1} \i\c{INT3}, \i\c{INT1}, \i\c{ICEBP}, \i\c{INT01}: Breakpoints
 
 \c INT1                          ; F1                   [P6]
 \c ICEBP                         ; F1                   [P6]
@@ -8837,7 +9089,7 @@ breakpoint, bypasses the normal \c{IOPL} checks in virtual-8086 mode,
 and also does not go through interrupt redirection.
 
 
-\H{insINTO} \i\c{INTO}: Interrupt if Overflow
+\S{insINTO} \i\c{INTO}: Interrupt if Overflow
 
 \c INTO                          ; CE                   [8086]
 
@@ -8845,7 +9097,7 @@ and also does not go through interrupt redirection.
 if and only if the overflow flag is set.
 
 
-\H{insINVD} \i\c{INVD}: Invalidate Internal Caches
+\S{insINVD} \i\c{INVD}: Invalidate Internal Caches
 
 \c INVD                          ; 0F 08                [486]
 
@@ -8856,7 +9108,7 @@ any modified data held in the caches will be lost. To write the data
 back first, use \c{WBINVD} (\k{insWBINVD}).
 
 
-\H{insINVLPG} \i\c{INVLPG}: Invalidate TLB Entry
+\S{insINVLPG} \i\c{INVLPG}: Invalidate TLB Entry
 
 \c INVLPG mem                    ; 0F 01 /7             [486]
 
@@ -8864,7 +9116,7 @@ back first, use \c{WBINVD} (\k{insWBINVD}).
 associated with the supplied memory address.
 
 
-\H{insIRET} \i\c{IRET}, \i\c{IRETW}, \i\c{IRETD}: Return from Interrupt
+\S{insIRET} \i\c{IRET}, \i\c{IRETW}, \i\c{IRETD}: Return from Interrupt
 
 \c IRET                          ; CF                   [8086]
 \c IRETW                         ; o16 CF               [8086]
@@ -8884,7 +9136,7 @@ taking 12 bytes off the stack.
 on the default \c{BITS} setting at the time.
 
 
-\H{insJcc} \i\c{Jcc}: Conditional Branch
+\S{insJcc} \i\c{Jcc}: Conditional Branch
 
 \c Jcc imm                       ; 70+cc rb             [8086]
 \c Jcc NEAR imm                  ; 0F 80+cc rw/rd       [386]
@@ -8905,7 +9157,7 @@ instruction, for clarity, but is not necessary.
 For details of the condition codes, see \k{iref-cc}.
 
 
-\H{insJCXZ} \i\c{JCXZ}, \i\c{JECXZ}: Jump if CX/ECX Zero
+\S{insJCXZ} \i\c{JCXZ}, \i\c{JECXZ}: Jump if CX/ECX Zero
 
 \c JCXZ imm                      ; a16 E3 rb            [8086]
 \c JECXZ imm                     ; a32 E3 rb            [386]
@@ -8915,14 +9167,14 @@ only if the contents of the \c{CX} register is 0. \c{JECXZ} does the
 same thing, but with \c{ECX}.
 
 
-\H{insJMP} \i\c{JMP}: Jump
+\S{insJMP} \i\c{JMP}: Jump
 
 \c JMP imm                       ; E9 rw/rd             [8086]
 \c JMP SHORT imm                 ; EB rb                [8086]
 \c JMP imm:imm16                 ; o16 EA iw iw         [8086]
 \c JMP imm:imm32                 ; o32 EA id iw         [386]
 \c JMP FAR mem                   ; o16 FF /5            [8086]
-\c JMP FAR mem                   ; o32 FF /5            [386]
+\c JMP FAR mem32                 ; o32 FF /5            [386]
 \c JMP r/m16                     ; o16 FF /4            [8086]
 \c JMP r/m32                     ; o32 FF /4            [386]
 
@@ -8960,7 +9212,7 @@ the \c{NEAR} keyword (e.g. \c{CALL NEAR [address]}), even though it
 is not strictly necessary.
 
 
-\H{insLAHF} \i\c{LAHF}: Load AH from Flags
+\S{insLAHF} \i\c{LAHF}: Load AH from Flags
 
 \c LAHF                          ; 9F                   [8086]
 
@@ -8974,7 +9226,7 @@ The operation of \c{LAHF} is:
 See also \c{SAHF} (\k{insSAHF}).
 
 
-\H{insLAR} \i\c{LAR}: Load Access Rights
+\S{insLAR} \i\c{LAR}: Load Access Rights
 
 \c LAR reg16,r/m16               ; o16 0F 02 /r         [286,PRIV]
 \c LAR reg32,r/m32               ; o32 0F 02 /r         [286,PRIV]
@@ -8985,7 +9237,7 @@ LDT, and loads the access-rights byte of the descriptor into its
 destination (first) operand.
 
 
-\H{insLDMXCSR} \i\c{LDMXCSR}: Load Streaming SIMD Extension
+\S{insLDMXCSR} \i\c{LDMXCSR}: Load Streaming SIMD Extension
  Control/Status
 
 \c LDMXCSR mem32                 ; 0F AE /2        [KATMAI,SSE]
@@ -9000,7 +9252,7 @@ For details of the \c{MXCSR} register, see the Intel processor docs.
 See also \c{STMXCSR} (\k{insSTMXCSR}
 
 
-\H{insLDS} \i\c{LDS}, \i\c{LES}, \i\c{LFS}, \i\c{LGS}, \i\c{LSS}: Load Far Pointer
+\S{insLDS} \i\c{LDS}, \i\c{LES}, \i\c{LFS}, \i\c{LGS}, \i\c{LSS}: Load Far Pointer
 
 \c LDS reg16,mem                 ; o16 C5 /r            [8086]
 \c LDS reg32,mem                 ; o32 C5 /r            [386]
@@ -9026,7 +9278,7 @@ loads the \e{next} 16 bits from memory into \c{DS}. \c{LES},
 segment registers.
 
 
-\H{insLEA} \i\c{LEA}: Load Effective Address
+\S{insLEA} \i\c{LEA}: Load Effective Address
 
 \c LEA reg16,mem                 ; o16 8D /r            [8086]
 \c LEA reg32,mem                 ; o32 8D /r            [386]
@@ -9049,7 +9301,7 @@ addressing mode was 32-bits, the low 16-bits are stored, and if the
 address was 16-bits, it is zero-extended to 32-bits before storing.
 
 
-\H{insLEAVE} \i\c{LEAVE}: Destroy Stack Frame
+\S{insLEAVE} \i\c{LEAVE}: Destroy Stack Frame
 
 \c LEAVE                         ; C9                   [186]
 
@@ -9059,7 +9311,7 @@ equivalent to \c{MOV ESP,EBP} followed by \c{POP EBP} (or \c{MOV
 SP,BP} followed by \c{POP BP} in 16-bit mode).
 
 
-\H{insLFENCE} \i\c{LFENCE}: Load Fence
+\S{insLFENCE} \i\c{LFENCE}: Load Fence
 
 \c LFENCE                        ; 0F AE /5        [WILLAMETTE,SSE2]
 
@@ -9092,7 +9344,7 @@ of these encodings risks incompatibility with future processors.
 See also \c{SFENCE} (\k{insSFENCE}) and \c{MFENCE} (\k{insMFENCE}).
 
 
-\H{insLGDT} \i\c{LGDT}, \i\c{LIDT}, \i\c{LLDT}: Load Descriptor Tables
+\S{insLGDT} \i\c{LGDT}, \i\c{LIDT}, \i\c{LLDT}: Load Descriptor Tables
 
 \c LGDT mem                      ; 0F 01 /2             [286,PRIV]
 \c LIDT mem                      ; 0F 01 /3             [286,PRIV]
@@ -9112,7 +9364,7 @@ given there into the \c{LDTR} (local descriptor table register).
 See also \c{SGDT}, \c{SIDT} and \c{SLDT} (\k{insSGDT}).
 
 
-\H{insLMSW} \i\c{LMSW}: Load/Store Machine Status Word
+\S{insLMSW} \i\c{LMSW}: Load/Store Machine Status Word
 
 \c LMSW r/m16                    ; 0F 01 /6             [286,PRIV]
 
@@ -9121,7 +9373,7 @@ bottom four bits of the \c{CR0} control register (or the Machine
 Status Word, on 286 processors). See also \c{SMSW} (\k{insSMSW}).
 
 
-\H{insLOADALL} \i\c{LOADALL}, \i\c{LOADALL286}: Load Processor State
+\S{insLOADALL} \i\c{LOADALL}, \i\c{LOADALL286}: Load Processor State
 
 \c LOADALL                       ; 0F 07                [386,UNDOC]
 \c LOADALL286                    ; 0F 05                [286,UNDOC]
@@ -9136,7 +9388,7 @@ this block is located implicitly at absolute address \c{0x800}, and
 on the 386 and 486 it is at \c{[ES:EDI]}.
 
 
-\H{insLODSB} \i\c{LODSB}, \i\c{LODSW}, \i\c{LODSD}: Load from String
+\S{insLODSB} \i\c{LODSB}, \i\c{LODSW}, \i\c{LODSD}: Load from String
 
 \c LODSB                         ; AC                   [8086]
 \c LODSW                         ; o16 AD               [8086]
@@ -9161,7 +9413,7 @@ word or a doubleword instead of a byte, and increment or decrement
 the addressing registers by 2 or 4 instead of 1.
 
 
-\H{insLOOP} \i\c{LOOP}, \i\c{LOOPE}, \i\c{LOOPZ}, \i\c{LOOPNE}, \i\c{LOOPNZ}: Loop with Counter
+\S{insLOOP} \i\c{LOOP}, \i\c{LOOPE}, \i\c{LOOPZ}, \i\c{LOOPNE}, \i\c{LOOPNZ}: Loop with Counter
 
 \c LOOP imm                      ; E2 rb                [8086]
 \c LOOP imm,CX                   ; a16 E2 rb            [8086]
@@ -9193,7 +9445,7 @@ is set. Similarly, \c{LOOPNE} (and \c{LOOPNZ}) jumps only if the
 counter is nonzero and the zero flag is clear.
 
 
-\H{insLSL} \i\c{LSL}: Load Segment Limit
+\S{insLSL} \i\c{LSL}: Load Segment Limit
 
 \c LSL reg16,r/m16               ; o16 0F 03 /r         [286,PRIV]
 \c LSL reg32,r/m32               ; o32 0F 03 /r         [286,PRIV]
@@ -9207,7 +9459,7 @@ byte limit in either case.) The segment limit obtained is then
 loaded into the destination (first) operand.
 
 
-\H{insLTR} \i\c{LTR}: Load Task Register
+\S{insLTR} \i\c{LTR}: Load Task Register
 
 \c LTR r/m16                     ; 0F 00 /3             [286,PRIV]
 
@@ -9216,7 +9468,7 @@ descriptor specified by the segment selector given as its operand,
 and loads them into the Task Register.
 
 
-\H{insMASKMOVDQU} \i\c{MASKMOVDQU}: Byte Mask Write
+\S{insMASKMOVDQU} \i\c{MASKMOVDQU}: Byte Mask Write
 
 \c MASKMOVDQU xmm1,xmm2          ; 66 0F F7 /r     [WILLAMETTE,SSE2]
 
@@ -9227,18 +9479,18 @@ register xmm2 is used to selectively write the data (0 = no write,
 1 = write) on a per-byte basis.
 
 
-\H{insMASKMOVQ} \i\c{MASKMOVQ}: Byte Mask Write
+\S{insMASKMOVQ} \i\c{MASKMOVQ}: Byte Mask Write
 
-\c MASKMOVQ mm1,mm2              ; 0F F7 /r        [KATMAI,MMX] 
+\c MASKMOVQ mm1,mm2              ; 0F F7 /r        [KATMAI,MMX]
 
-\c{MASKMOVQ} stores data from xmm1 to the location specified by
+\c{MASKMOVQ} stores data from mm1 to the location specified by
 \c{ES:(E)DI}. The size of the store depends on the address-size
 attribute. The most significant bit in each byte of the mask
-register xmm2 is used to selectively write the data (0 = no write,
+register mm2 is used to selectively write the data (0 = no write,
 1 = write) on a per-byte basis.
 
 
-\H{insMAXPD} \i\c{MAXPD}: Return Packed Double-Precision FP Maximum
+\S{insMAXPD} \i\c{MAXPD}: Return Packed Double-Precision FP Maximum
 
 \c MAXPD xmm1,xmm2/m128          ; 66 0F 5F /r     [WILLAMETTE,SSE2]
 
@@ -9250,9 +9502,9 @@ both zeroes, source2 (xmm2/m128) would be returned. If source2
 destination (i.e., a QNaN version of the SNaN is not returned).
 
 
-\H{insMAXPS} \i\c{MAXPS}: Return Packed Single-Precision FP Maximum
+\S{insMAXPS} \i\c{MAXPS}: Return Packed Single-Precision FP Maximum
 
-\c MAXPS xmm1,xmm2/m128          ; 0F 5F /r        [KATMAI,SSE] 
+\c MAXPS xmm1,xmm2/m128          ; 0F 5F /r        [KATMAI,SSE]
 
 \c{MAXPS} performs a SIMD compare of the packed single-precision
 FP numbers from xmm1 and xmm2/mem, and stores the maximum values
@@ -9262,7 +9514,7 @@ both zeroes, source2 (xmm2/m128) would be returned. If source2
 destination (i.e., a QNaN version of the SNaN is not returned).
 
 
-\H{insMAXSD} \i\c{MAXSD}: Return Scalar Double-Precision FP Maximum
+\S{insMAXSD} \i\c{MAXSD}: Return Scalar Double-Precision FP Maximum
 
 \c MAXSD xmm1,xmm2/m64           ; F2 0F 5F /r     [WILLAMETTE,SSE2]
 
@@ -9275,9 +9527,9 @@ the SNaN is not returned). The high quadword of the destination
 is left unchanged.
 
 
-\H{insMAXSS} \i\c{MAXSD}: Return Scalar Single-Precision FP Maximum
+\S{insMAXSS} \i\c{MAXSS}: Return Scalar Single-Precision FP Maximum
 
-\c MAXSS xmm1,xmm2/m32           ; F3 0F 5F /r     [KATMAI,SSE] 
+\c MAXSS xmm1,xmm2/m32           ; F3 0F 5F /r     [KATMAI,SSE]
 
 \c{MAXSS} compares the low-order single-precision FP numbers from
 xmm1 and xmm2/mem, and stores the maximum value in xmm1. If the
@@ -9288,7 +9540,7 @@ the SNaN is not returned). The high three doublewords of the
 destination are left unchanged.
 
 
-\H{insMFENCE} \i\c{MFENCE}: Memory Fence
+\S{insMFENCE} \i\c{MFENCE}: Memory Fence
 
 \c MFENCE                        ; 0F AE /6        [WILLAMETTE,SSE2]
 
@@ -9323,7 +9575,7 @@ of these encodings risks incompatibility with future processors.
 See also \c{LFENCE} (\k{insLFENCE}) and \c{SFENCE} (\k{insSFENCE}).
 
 
-\H{insMINPD} \i\c{MINPD}: Return Packed Double-Precision FP Minimum
+\S{insMINPD} \i\c{MINPD}: Return Packed Double-Precision FP Minimum
 
 \c MINPD xmm1,xmm2/m128          ; 66 0F 5D /r     [WILLAMETTE,SSE2]
 
@@ -9335,9 +9587,9 @@ both zeroes, source2 (xmm2/m128) would be returned. If source2
 destination (i.e., a QNaN version of the SNaN is not returned).
 
 
-\H{insMINPS} \i\c{MINPS}: Return Packed Single-Precision FP Minimum
+\S{insMINPS} \i\c{MINPS}: Return Packed Single-Precision FP Minimum
 
-\c MINPS xmm1,xmm2/m128          ; 0F 5D /r        [KATMAI,SSE] 
+\c MINPS xmm1,xmm2/m128          ; 0F 5D /r        [KATMAI,SSE]
 
 \c{MINPS} performs a SIMD compare of the packed single-precision
 FP numbers from xmm1 and xmm2/mem, and stores the minimum values
@@ -9347,7 +9599,7 @@ both zeroes, source2 (xmm2/m128) would be returned. If source2
 destination (i.e., a QNaN version of the SNaN is not returned).
 
 
-\H{insMINSD} \i\c{MINSD}: Return Scalar Double-Precision FP Minimum
+\S{insMINSD} \i\c{MINSD}: Return Scalar Double-Precision FP Minimum
 
 \c MINSD xmm1,xmm2/m64           ; F2 0F 5D /r     [WILLAMETTE,SSE2]
 
@@ -9360,9 +9612,9 @@ the SNaN is not returned). The high quadword of the destination
 is left unchanged.
 
 
-\H{insMINSS} \i\c{MINSD}: Return Scalar Single-Precision FP Minimum
+\S{insMINSS} \i\c{MINSS}: Return Scalar Single-Precision FP Minimum
 
-\c MINSS xmm1,xmm2/m32           ; F3 0F 5D /r     [KATMAI,SSE] 
+\c MINSS xmm1,xmm2/m32           ; F3 0F 5D /r     [KATMAI,SSE]
 
 \c{MINSS} compares the low-order single-precision FP numbers from
 xmm1 and xmm2/mem, and stores the minimum value in xmm1. If the
@@ -9373,7 +9625,7 @@ the SNaN is not returned). The high three doublewords of the
 destination are left unchanged.
 
 
-\H{insMOV} \i\c{MOV}: Move Data
+\S{insMOV} \i\c{MOV}: Move Data
 
 \c MOV r/m8,reg8                 ; 88 /r                [8086]
 \c MOV r/m16,reg16               ; o16 89 /r            [8086]
@@ -9428,12 +9680,12 @@ Test registers are supported on 386/486 processors and on some
 non-Intel Pentium class processors.
 
 
-\H{insMOVAPD} \i\c{MOVAPD}: Move Aligned Packed Double-Precision FP Values
+\S{insMOVAPD} \i\c{MOVAPD}: Move Aligned Packed Double-Precision FP Values
 
 \c MOVAPD xmm1,xmm2/mem128       ; 66 0F 28 /r     [WILLAMETTE,SSE2]
 \c MOVAPD xmm1/mem128,xmm2       ; 66 0F 29 /r     [WILLAMETTE,SSE2]
 
-\c{MOVAPS} moves a double quadword containing 2 packed double-precision
+\c{MOVAPD} moves a double quadword containing 2 packed double-precision
 FP values from the source operand to the destination. When the source
 or destination operand is a memory location, it must be aligned on a
 16-byte boundary.
@@ -9442,10 +9694,10 @@ To move data in and out of memory locations that are not known to be on
 16-byte boundaries, use the \c{MOVUPD} instruction (\k{insMOVUPD}).
 
 
-\H{insMOVAPS} \i\c{MOVAPS}: Move Aligned Packed Single-Precision FP Values
+\S{insMOVAPS} \i\c{MOVAPS}: Move Aligned Packed Single-Precision FP Values
 
-\c MOVAPS xmm1,xmm2/mem128       ; 0F 28 /r        [KATMAI,SSE] 
-\c MOVAPS xmm1/mem128,xmm2       ; 0F 29 /r        [KATMAI,SSE] 
+\c MOVAPS xmm1,xmm2/mem128       ; 0F 28 /r        [KATMAI,SSE]
+\c MOVAPS xmm1/mem128,xmm2       ; 0F 29 /r        [KATMAI,SSE]
 
 \c{MOVAPS} moves a double quadword containing 4 packed single-precision
 FP values from the source operand to the destination. When the source
@@ -9456,7 +9708,7 @@ To move data in and out of memory locations that are not known to be on
 16-byte boundaries, use the \c{MOVUPS} instruction (\k{insMOVUPS}).
 
 
-\H{insMOVD} \i\c{MOVD}: Move Doubleword to/from MMX Register
+\S{insMOVD} \i\c{MOVD}: Move Doubleword to/from MMX Register
 
 \c MOVD mm,r/m32                 ; 0F 6E /r             [PENT,MMX]
 \c MOVD r/m32,mm                 ; 0F 7E /r             [PENT,MMX]
@@ -9469,7 +9721,7 @@ register or a 128-bit \c{XMM} register, the input value is zero-extended
 to fill the destination register.
 
 
-\H{insMOVDQ2Q} \i\c{MOVDQ2Q}: Move Quadword from XMM to MMX register.
+\S{insMOVDQ2Q} \i\c{MOVDQ2Q}: Move Quadword from XMM to MMX register.
 
 \c MOVDQ2Q mm,xmm                ; F2 OF D6 /r     [WILLAMETTE,SSE2]
 
@@ -9477,7 +9729,7 @@ to fill the destination register.
 destination operand.
 
 
-\H{insMOVDQA} \i\c{MOVDQA}: Move Aligned Double Quadword
+\S{insMOVDQA} \i\c{MOVDQA}: Move Aligned Double Quadword
 
 \c MOVDQA xmm1,xmm2/m128         ; 66 OF 6F /r     [WILLAMETTE,SSE2]
 \c MOVDQA xmm1/m128,xmm2         ; 66 OF 7F /r     [WILLAMETTE,SSE2]
@@ -9490,7 +9742,7 @@ To move a double quadword to or from unaligned memory locations,
 use the \c{MOVDQU} instruction (\k{insMOVDQU}).
 
 
-\H{insMOVDQU} \i\c{MOVDQU}: Move Unaligned Double Quadword
+\S{insMOVDQU} \i\c{MOVDQU}: Move Unaligned Double Quadword
 
 \c MOVDQU xmm1,xmm2/m128         ; F3 OF 6F /r     [WILLAMETTE,SSE2]
 \c MOVDQU xmm1/m128,xmm2         ; F3 OF 7F /r     [WILLAMETTE,SSE2]
@@ -9503,9 +9755,9 @@ To move a double quadword to or from known aligned memory locations,
 use the \c{MOVDQA} instruction (\k{insMOVDQA}).
 
 
-\H{insMOVHLPS} \i\c{MOVHLPS}: Move Packed Single-Precision FP High to Low
+\S{insMOVHLPS} \i\c{MOVHLPS}: Move Packed Single-Precision FP High to Low
 
-\c MOVHLPS xmm1,xmm2             ; OF 12 /r        [KATMAI,SSE] 
+\c MOVHLPS xmm1,xmm2             ; OF 12 /r        [KATMAI,SSE]
 
 \c{MOVHLPS} moves the two packed single-precision FP values from the
 high quadword of the source register xmm2 to the low quadword of the
@@ -9517,7 +9769,7 @@ The operation of this instruction is:
 \c    dst[64-127] remains unchanged.
 
 
-\H{insMOVHPD} \i\c{MOVHPD}: Move High Packed Double-Precision FP
+\S{insMOVHPD} \i\c{MOVHPD}: Move High Packed Double-Precision FP
 
 \c MOVHPD xmm,m64               ; 66 OF 16 /r      [WILLAMETTE,SSE2]
 \c MOVHPD m64,xmm               ; 66 OF 17 /r      [WILLAMETTE,SSE2]
@@ -9536,7 +9788,7 @@ or
 \c    xmm[64-127] := mem[0-63].
 
 
-\H{insMOVHPS} \i\c{MOVHPS}: Move High Packed Single-Precision FP
+\S{insMOVHPS} \i\c{MOVHPS}: Move High Packed Single-Precision FP
 
 \c MOVHPS xmm,m64               ; 0F 16 /r         [KATMAI,SSE]
 \c MOVHPS m64,xmm               ; 0F 17 /r         [KATMAI,SSE]
@@ -9555,9 +9807,9 @@ or
 \c    xmm[64-127] := mem[0-63].
 
 
-\H{insMOVLHPS} \i\c{MOVLHPS}: Move Packed Single-Precision FP Low to High
+\S{insMOVLHPS} \i\c{MOVLHPS}: Move Packed Single-Precision FP Low to High
 
-\c MOVLHPS xmm1,xmm2             ; OF 16 /r         [KATMAI,SSE] 
+\c MOVLHPS xmm1,xmm2             ; OF 16 /r         [KATMAI,SSE]
 
 \c{MOVLHPS} moves the two packed single-precision FP values from the
 low quadword of the source register xmm2 to the high quadword of the
@@ -9568,7 +9820,7 @@ The operation of this instruction is:
 \c    dst[0-63]   remains unchanged;
 \c    dst[64-127] := src[0-63].
 
-\H{insMOVLPD} \i\c{MOVLPD}: Move Low Packed Double-Precision FP
+\S{insMOVLPD} \i\c{MOVLPD}: Move Low Packed Double-Precision FP
 
 \c MOVLPD xmm,m64                ; 66 OF 12 /r     [WILLAMETTE,SSE2]
 \c MOVLPD m64,xmm                ; 66 OF 13 /r     [WILLAMETTE,SSE2]
@@ -9586,10 +9838,10 @@ or
 \c    xmm(0-63)   := mem(0-63);
 \c    xmm(64-127) remains unchanged.
 
-\H{insMOVLPS} \i\c{MOVLPS}: Move Low Packed Single-Precision FP
+\S{insMOVLPS} \i\c{MOVLPS}: Move Low Packed Single-Precision FP
 
-\c MOVLPS xmm,m64                ; OF 12 /r        [KATMAI,SSE] 
-\c MOVLPS m64,xmm                ; OF 13 /r        [KATMAI,SSE] 
+\c MOVLPS xmm,m64                ; OF 12 /r        [KATMAI,SSE]
+\c MOVLPS m64,xmm                ; OF 13 /r        [KATMAI,SSE]
 
 \c{MOVLPS} moves two packed single-precision FP values between the source
 and destination operands. One of the operands is a 64-bit memory location,
@@ -9605,7 +9857,7 @@ or
 \c    xmm(64-127) remains unchanged.
 
 
-\H{insMOVMSKPD} \i\c{MOVMSKPD}: Extract Packed Double-Precision FP Sign Mask
+\S{insMOVMSKPD} \i\c{MOVMSKPD}: Extract Packed Double-Precision FP Sign Mask
 
 \c MOVMSKPD reg32,xmm              ; 66 0F 50 /r   [WILLAMETTE,SSE2]
 
@@ -9613,15 +9865,15 @@ or
 bits of each double-precision FP number of the source operand.
 
 
-\H{insMOVMSKPS} \i\c{MOVMSKPS}: Extract Packed Single-Precision FP Sign Mask
+\S{insMOVMSKPS} \i\c{MOVMSKPS}: Extract Packed Single-Precision FP Sign Mask
 
-\c MOVMSKPS reg32,xmm              ; 0F 50 /r      [KATMAI,SSE] 
+\c MOVMSKPS reg32,xmm              ; 0F 50 /r      [KATMAI,SSE]
 
 \c{MOVMSKPS} inserts a 4-bit mask in r32, formed of the most significant
 bits of each single-precision FP number of the source operand.
 
 
-\H{insMOVNTDQ} \i\c{MOVNTDQ}: Move Double Quadword Non Temporal
+\S{insMOVNTDQ} \i\c{MOVNTDQ}: Move Double Quadword Non Temporal
 
 \c MOVNTDQ m128,xmm              ; 66 0F E7 /r     [WILLAMETTE,SSE2]
 
@@ -9630,7 +9882,7 @@ register to the destination memory location, using a non-temporal
 hint. This store instruction minimizes cache pollution.
 
 
-\H{insMOVNTI} \i\c{MOVNTI}: Move Doubleword Non Temporal
+\S{insMOVNTI} \i\c{MOVNTI}: Move Doubleword Non Temporal
 
 \c MOVNTI m32,reg32              ; 0F C3 /r        [WILLAMETTE,SSE2]
 
@@ -9639,7 +9891,7 @@ to the destination memory location, using a non-temporal
 hint. This store instruction minimizes cache pollution.
 
 
-\H{insMOVNTPD} \i\c{MOVNTPD}: Move Aligned Four Packed Single-Precision
+\S{insMOVNTPD} \i\c{MOVNTPD}: Move Aligned Four Packed Single-Precision
 FP Values Non Temporal
 
 \c MOVNTPD m128,xmm              ; 66 0F 2B /r     [WILLAMETTE,SSE2]
@@ -9650,10 +9902,10 @@ hint. This store instruction minimizes cache pollution. The memory
 location must be aligned to a 16-byte boundary.
 
 
-\H{insMOVNTPS} \i\c{MOVNTPS}: Move Aligned Four Packed Single-Precision
+\S{insMOVNTPS} \i\c{MOVNTPS}: Move Aligned Four Packed Single-Precision
 FP Values Non Temporal
 
-\c MOVNTPS m128,xmm              ; 0F 2B /r        [KATMAI,SSE] 
+\c MOVNTPS m128,xmm              ; 0F 2B /r        [KATMAI,SSE]
 
 \c{MOVNTPS} moves the double quadword from the \c{XMM} source
 register to the destination memory location, using a non-temporal
@@ -9661,7 +9913,7 @@ hint. This store instruction minimizes cache pollution. The memory
 location must be aligned to a 16-byte boundary.
 
 
-\H{insMOVNTQ} \i\c{MOVNTQ}: Move Quadword Non Temporal
+\S{insMOVNTQ} \i\c{MOVNTQ}: Move Quadword Non Temporal
 
 \c MOVNTQ m64,mm                 ; 0F E7 /r        [KATMAI,MMX]
 
@@ -9670,7 +9922,7 @@ to the destination memory location, using a non-temporal
 hint. This store instruction minimizes cache pollution.
 
 
-\H{insMOVQ} \i\c{MOVQ}: Move Quadword to/from MMX Register
+\S{insMOVQ} \i\c{MOVQ}: Move Quadword to/from MMX Register
 
 \c MOVQ mm1,mm2/m64               ; 0F 6F /r             [PENT,MMX]
 \c MOVQ mm1/m64,mm2               ; 0F 7F /r             [PENT,MMX]
@@ -9684,7 +9936,7 @@ the low quadword is moved. When the destination is an \c{XMM} register,
 the destination is the low quadword, and the high quadword is cleared.
 
 
-\H{insMOVQ2DQ} \i\c{MOVQ2DQ}: Move Quadword from MMX to XMM register.
+\S{insMOVQ2DQ} \i\c{MOVQ2DQ}: Move Quadword from MMX to XMM register.
 
 \c MOVQ2DQ xmm,mm                ; F3 OF D6 /r     [WILLAMETTE,SSE2]
 
@@ -9692,7 +9944,7 @@ the destination is the low quadword, and the high quadword is cleared.
 quadword of the destination operand, and clears the high quadword.
 
 
-\H{insMOVSB} \i\c{MOVSB}, \i\c{MOVSW}, \i\c{MOVSD}: Move String
+\S{insMOVSB} \i\c{MOVSB}, \i\c{MOVSW}, \i\c{MOVSD}: Move String
 
 \c MOVSB                         ; A4                   [8086]
 \c MOVSW                         ; o16 A5               [8086]
@@ -9721,27 +9973,27 @@ The \c{REP} prefix may be used to repeat the instruction \c{CX} (or
 \c{ECX} - again, the address size chooses which) times.
 
 
-\H{insMOVSD} \i\c{MOVSD}: Move Scalar Double-Precision FP Value
+\S{insMOVSD} \i\c{MOVSD}: Move Scalar Double-Precision FP Value
 
 \c MOVSD xmm1,xmm2/m64           ; F2 0F 10 /r     [WILLAMETTE,SSE2]
 \c MOVSD xmm1/m64,xmm2           ; F2 0F 11 /r     [WILLAMETTE,SSE2]
 
-\c{MOVDS} moves a double-precision FP value from the source operand
+\c{MOVSD} moves a double-precision FP value from the source operand
 to the destination operand. When the source or destination is a
 register, the low-order FP value is read or written.
 
 
-\H{insMOVSS} \i\c{MOVSS}: Move Scalar Single-Precision FP Value
+\S{insMOVSS} \i\c{MOVSS}: Move Scalar Single-Precision FP Value
 
-\c MOVSS xmm1,xmm2/m32           ; F3 0F 10 /r     [KATMAI,SSE] 
-\c MOVSS xmm1/m32,xmm2           ; F3 0F 11 /r     [KATMAI,SSE] 
+\c MOVSS xmm1,xmm2/m32           ; F3 0F 10 /r     [KATMAI,SSE]
+\c MOVSS xmm1/m32,xmm2           ; F3 0F 11 /r     [KATMAI,SSE]
 
 \c{MOVSS} moves a single-precision FP value from the source operand
 to the destination operand. When the source or destination is a
 register, the low-order FP value is read or written.
 
 
-\H{insMOVSX} \i\c{MOVSX}, \i\c{MOVZX}: Move Data with Sign or Zero Extend
+\S{insMOVSX} \i\c{MOVSX}, \i\c{MOVZX}: Move Data with Sign or Zero Extend
 
 \c MOVSX reg16,r/m8              ; o16 0F BE /r         [386]
 \c MOVSX reg32,r/m8              ; o32 0F BE /r         [386]
@@ -9757,7 +10009,7 @@ destination operand. \c{MOVZX} does the same, but zero-extends
 rather than sign-extending.
 
 
-\H{insMOVUPD} \i\c{MOVUPD}: Move Unaligned Packed Double-Precision FP Values
+\S{insMOVUPD} \i\c{MOVUPD}: Move Unaligned Packed Double-Precision FP Values
 
 \c MOVUPD xmm1,xmm2/mem128       ; 66 0F 10 /r     [WILLAMETTE,SSE2]
 \c MOVUPD xmm1/mem128,xmm2       ; 66 0F 11 /r     [WILLAMETTE,SSE2]
@@ -9770,10 +10022,10 @@ To move data in and out of memory locations that are known to be on 16-byte
 boundaries, use the \c{MOVAPD} instruction (\k{insMOVAPD}).
 
 
-\H{insMOVUPS} \i\c{MOVUPS}: Move Unaligned Packed Single-Precision FP Values
+\S{insMOVUPS} \i\c{MOVUPS}: Move Unaligned Packed Single-Precision FP Values
 
-\c MOVUPS xmm1,xmm2/mem128       ; 0F 10 /r        [KATMAI,SSE] 
-\c MOVUPS xmm1/mem128,xmm2       ; 0F 11 /r        [KATMAI,SSE] 
+\c MOVUPS xmm1,xmm2/mem128       ; 0F 10 /r        [KATMAI,SSE]
+\c MOVUPS xmm1/mem128,xmm2       ; 0F 11 /r        [KATMAI,SSE]
 
 \c{MOVUPS} moves a double quadword containing 4 packed single-precision
 FP values from the source operand to the destination. This instruction
@@ -9783,7 +10035,7 @@ To move data in and out of memory locations that are known to be on 16-byte
 boundaries, use the \c{MOVAPS} instruction (\k{insMOVAPS}).
 
 
-\H{insMUL} \i\c{MUL}: Unsigned Integer Multiply
+\S{insMUL} \i\c{MUL}: Unsigned Integer Multiply
 
 \c MUL r/m8                      ; F6 /4                [8086]
 \c MUL r/m16                     ; o16 F7 /4            [8086]
@@ -9806,7 +10058,7 @@ Signed integer multiplication is performed by the \c{IMUL}
 instruction: see \k{insIMUL}.
 
 
-\H{insMULPD} \i\c{MULPD}: Packed Single-FP Multiply
+\S{insMULPD} \i\c{MULPD}: Packed Single-FP Multiply
 
 \c MULPD xmm1,xmm2/mem128        ; 66 0F 59 /r     [WILLAMETTE,SSE2]
 
@@ -9814,15 +10066,15 @@ instruction: see \k{insIMUL}.
 values in both operands, and stores the results in the destination register.
 
 
-\H{insMULPS} \i\c{MULPS}: Packed Single-FP Multiply
+\S{insMULPS} \i\c{MULPS}: Packed Single-FP Multiply
 
-\c MULPS xmm1,xmm2/mem128        ; 0F 59 /r        [KATMAI,SSE] 
+\c MULPS xmm1,xmm2/mem128        ; 0F 59 /r        [KATMAI,SSE]
 
 \c{MULPS} performs a SIMD multiply of the packed single-precision FP
 values in both operands, and stores the results in the destination register.
 
 
-\H{insMULSD} \i\c{MULSD}: Scalar Single-FP Multiply
+\S{insMULSD} \i\c{MULSD}: Scalar Single-FP Multiply
 
 \c MULSD xmm1,xmm2/mem32         ; F2 0F 59 /r     [WILLAMETTE,SSE2]
 
@@ -9830,15 +10082,15 @@ values in both operands, and stores the results in the destination register.
 operands, and stores the result in the low quadword of xmm1.
 
 
-\H{insMULSS} \i\c{MULSS}: Scalar Single-FP Multiply
+\S{insMULSS} \i\c{MULSS}: Scalar Single-FP Multiply
 
-\c MULSS xmm1,xmm2/mem32         ; F3 0F 59 /r     [KATMAI,SSE] 
+\c MULSS xmm1,xmm2/mem32         ; F3 0F 59 /r     [KATMAI,SSE]
 
 \c{MULSS} multiplies the lowest single-precision FP values of both
 operands, and stores the result in the low doubleword of xmm1.
 
 
-\H{insNEG} \i\c{NEG}, \i\c{NOT}: Two's and One's Complement
+\S{insNEG} \i\c{NEG}, \i\c{NOT}: Two's and One's Complement
 
 \c NEG r/m8                      ; F6 /3                [8086]
 \c NEG r/m16                     ; o16 F7 /3            [8086]
@@ -9854,7 +10106,7 @@ value. \c{NOT}, similarly, performs one's complement (inverts all
 the bits).
 
 
-\H{insNOP} \i\c{NOP}: No Operation
+\S{insNOP} \i\c{NOP}: No Operation
 
 \c NOP                           ; 90                   [8086]
 
@@ -9863,7 +10115,7 @@ generated by \c{XCHG AX,AX} or \c{XCHG EAX,EAX} (depending on the
 processor mode; see \k{insXCHG}).
 
 
-\H{insOR} \i\c{OR}: Bitwise OR
+\S{insOR} \i\c{OR}: Bitwise OR
 
 \c OR r/m8,reg8                  ; 08 /r                [8086]
 \c OR r/m16,reg16                ; o16 09 /r            [8086]
@@ -9899,7 +10151,7 @@ The MMX instruction \c{POR} (see \k{insPOR}) performs the same
 operation on the 64-bit MMX registers.
 
 
-\H{insORPD} \i\c{ORPD}: Bit-wise Logical OR of Double-Precision FP Data
+\S{insORPD} \i\c{ORPD}: Bit-wise Logical OR of Double-Precision FP Data
 
 \c ORPD xmm1,xmm2/m128           ; 66 0F 56 /r     [WILLAMETTE,SSE2]
 
@@ -9908,16 +10160,16 @@ and stores the result in xmm1. If the source operand is a memory
 location, it must be aligned to a 16-byte boundary.
 
 
-\H{insORPS} \i\c{ORPS}: Bit-wise Logical OR of Single-Precision FP Data
+\S{insORPS} \i\c{ORPS}: Bit-wise Logical OR of Single-Precision FP Data
 
-\c ORPS xmm1,xmm2/m128           ; 0F 56 /r        [KATMAI,SSE] 
+\c ORPS xmm1,xmm2/m128           ; 0F 56 /r        [KATMAI,SSE]
 
 \c{ORPS} return a bit-wise logical OR between xmm1 and xmm2/mem,
 and stores the result in xmm1. If the source operand is a memory
 location, it must be aligned to a 16-byte boundary.
 
 
-\H{insOUT} \i\c{OUT}: Output Data to I/O Port
+\S{insOUT} \i\c{OUT}: Output Data to I/O Port
 
 \c OUT imm8,AL                   ; E6 ib                [8086]
 \c OUT imm8,AX                   ; o16 E7 ib            [8086]
@@ -9932,12 +10184,10 @@ value if it is between 0 and 255, and otherwise must be stored in
 \c{DX}. See also \c{IN} (\k{insIN}).
 
 
-\H{insOUTSB} \i\c{OUTSB}, \i\c{OUTSW}, \i\c{OUTSD}: Output String to I/O Port
+\S{insOUTSB} \i\c{OUTSB}, \i\c{OUTSW}, \i\c{OUTSD}: Output String to I/O Port
 
 \c OUTSB                         ; 6E                   [186]
-
 \c OUTSW                         ; o16 6F               [186]
-
 \c OUTSD                         ; o32 6F               [386]
 
 \c{OUTSB} loads a byte from \c{[DS:SI]} or \c{[DS:ESI]} and writes
@@ -9962,7 +10212,7 @@ The \c{REP} prefix may be used to repeat the instruction \c{CX} (or
 \c{ECX} - again, the address size chooses which) times.
 
 
-\H{insPACKSSDW} \i\c{PACKSSDW}, \i\c{PACKSSWB}, \i\c{PACKUSWB}: Pack Data
+\S{insPACKSSDW} \i\c{PACKSSDW}, \i\c{PACKSSWB}, \i\c{PACKUSWB}: Pack Data
 
 \c PACKSSDW mm1,mm2/m64          ; 0F 6B /r             [PENT,MMX]
 \c PACKSSWB mm1,mm2/m64          ; 0F 63 /r             [PENT,MMX]
@@ -9979,7 +10229,7 @@ two 64-bit operands into one 64-bit register, while the \c{SSE}
 versions pack two 128-bit operands into one 128-bit register.
 
 \b \c{PACKSSWB} splits the combined value into words, and then reduces
-the words to btes, using signed saturation. It then packs the bytes
+the words to bytes, using signed saturation. It then packs the bytes
 into the destination register in the same order the words were in.
 
 \b \c{PACKSSDW} performs the same operation as \c{PACKSSWB}, except that
@@ -9997,7 +10247,7 @@ treated as unsigned, and the input is replaced by the largest unsigned
 number that will fit.
 
 
-\H{insPADDB} \i\c{PADDB}, \i\c{PADDW}, \i\c{PADDD}: Add Packed Integers
+\S{insPADDB} \i\c{PADDB}, \i\c{PADDW}, \i\c{PADDD}: Add Packed Integers
 
 \c PADDB mm1,mm2/m64             ; 0F FC /r             [PENT,MMX]
 \c PADDW mm1,mm2/m64             ; 0F FD /r             [PENT,MMX]
@@ -10022,7 +10272,7 @@ is wrapped around and the low bits are stored, with the carry bit
 discarded.
 
 
-\H{insPADDQ} \i\c{PADDQ}: Add Packed Quadword Integers
+\S{insPADDQ} \i\c{PADDQ}: Add Packed Quadword Integers
 
 \c PADDQ mm1,mm2/m64             ; 0F D4 /r             [PENT,MMX]
 
@@ -10036,7 +10286,7 @@ is wrapped around and the low bits are stored, with the carry bit
 discarded.
 
 
-\H{insPADDSB} \i\c{PADDSB}, \i\c{PADDSW}: Add Packed Signed Integers With Saturation
+\S{insPADDSB} \i\c{PADDSB}, \i\c{PADDSW}: Add Packed Signed Integers With Saturation
 
 \c PADDSB mm1,mm2/m64            ; 0F EC /r             [PENT,MMX]
 \c PADDSW mm1,mm2/m64            ; 0F ED /r             [PENT,MMX]
@@ -10055,7 +10305,7 @@ largest magnitude of the same sign as the result which will fit in
 the available space.
 
 
-\H{insPADDSIW} \i\c{PADDSIW}: MMX Packed Addition to Implicit Destination
+\S{insPADDSIW} \i\c{PADDSIW}: MMX Packed Addition to Implicit Destination
 
 \c PADDSIW mmxreg,r/m64          ; 0F 51 /r             [CYRIX,MMX]
 
@@ -10068,7 +10318,7 @@ number. So \c{PADDSIW MM0,MM2} would put the result in \c{MM1}, but
 \c{PADDSIW MM1,MM2} would put the result in \c{MM0}.
 
 
-\H{insPADDUSB} \i\c{PADDUSB}, \i\c{PADDUSW}: Add Packed Unsigned Integers With Saturation
+\S{insPADDUSB} \i\c{PADDUSB}, \i\c{PADDUSW}: Add Packed Unsigned Integers With Saturation
 
 \c PADDUSB mm1,mm2/m64           ; 0F DC /r             [PENT,MMX]
 \c PADDUSW mm1,mm2/m64           ; 0F DD /r             [PENT,MMX]
@@ -10086,7 +10336,7 @@ saturated value is stored. The resulting value is the maximum value
 that will fit in the available space.
 
 
-\H{insPAND} \i\c{PAND}, \i\c{PANDN}: MMX Bitwise AND and AND-NOT
+\S{insPAND} \i\c{PAND}, \i\c{PANDN}: MMX Bitwise AND and AND-NOT
 
 \c PAND mm1,mm2/m64              ; 0F DB /r             [PENT,MMX]
 \c PANDN mm1,mm2/m64             ; 0F DF /r             [PENT,MMX]
@@ -10104,7 +10354,7 @@ destination (first) operand.
 complement operation on the destination (first) operand first.
 
 
-\H{insPAUSE} \i\c{PAUSE}: Spin Loop Hint
+\S{insPAUSE} \i\c{PAUSE}: Spin Loop Hint
 
 \c PAUSE                         ; F3 90           [WILLAMETTE,SSE2]
 
@@ -10114,7 +10364,7 @@ possible memory order violations. On older processors, this instruction
 operates as a \c{NOP}.
 
 
-\H{insPAVEB} \i\c{PAVEB}: MMX Packed Average
+\S{insPAVEB} \i\c{PAVEB}: MMX Packed Average
 
 \c PAVEB mmxreg,r/m64            ; 0F 50 /r             [CYRIX,MMX]
 
@@ -10127,10 +10377,10 @@ This opcode maps to \c{MOVMSKPS r32, xmm} on processors that support
 the SSE instruction set.
 
 
-\H{insPAVGB} \i\c{PAVGB} \i\c{PAVGW}: Average Packed Integers
+\S{insPAVGB} \i\c{PAVGB} \i\c{PAVGW}: Average Packed Integers
 
-\c PAVGB mm1,mm2/m64             ; 0F E0 /r        [KATMAI,MMX] 
-\c PAVGW mm1,mm2/m64             ; 0F E3 /r        [KATMAI,MMX,SM] 
+\c PAVGB mm1,mm2/m64             ; 0F E0 /r        [KATMAI,MMX]
+\c PAVGW mm1,mm2/m64             ; 0F E3 /r        [KATMAI,MMX,SM]
 
 \c PAVGB xmm1,xmm2/m128          ; 66 0F E0 /r     [WILLAMETTE,SSE2]
 \c PAVGW xmm1,xmm2/m128          ; 66 0F E3 /r     [WILLAMETTE,SSE2]
@@ -10144,10 +10394,10 @@ sum.
 
 \b \c{PAVGB} operates on packed unsigned bytes, and
 
-\b \c{PAVGW} operates on packed unsigned words. 
+\b \c{PAVGW} operates on packed unsigned words.
 
 
-\H{insPAVGUSB} \i\c{PAVGUSB}: Average of unsigned packed 8-bit values
+\S{insPAVGUSB} \i\c{PAVGUSB}: Average of unsigned packed 8-bit values
 
 \c PAVGUSB mm1,mm2/m64           ; 0F 0F /r BF          [PENT,3DNOW]
 
@@ -10162,7 +10412,7 @@ This instruction performs exactly the same operations as the \c{PAVGB}
 \c{MMX} instruction (\k{insPAVGB}).
 
 
-\H{insPCMPEQB} \i\c{PCMPxx}: Compare Packed Integers.
+\S{insPCMPEQB} \i\c{PCMPxx}: Compare Packed Integers.
 
 \c PCMPEQB mm1,mm2/m64           ; 0F 74 /r             [PENT,MMX]
 \c PCMPEQW mm1,mm2/m64           ; 0F 75 /r             [PENT,MMX]
@@ -10200,7 +10450,7 @@ of the first (destination) operand is greater (treated as a signed
 integer) than that of the second (source) operand.
 
 
-\H{insPDISTIB} \i\c{PDISTIB}: MMX Packed Distance and Accumulate
+\S{insPDISTIB} \i\c{PDISTIB}: MMX Packed Distance and Accumulate
 with Implied Register
 
 \c PDISTIB mm,m64                ; 0F 54 /r             [CYRIX,MMX]
@@ -10219,7 +10469,7 @@ number. So \c{PDISTIB MM0,M64} would put the result in \c{MM1}, but
 Note that \c{PDISTIB} cannot take a register as its second source
 operand.
 
-Opration:
+Operation:
 
 \c    dstI[0-7]     := dstI[0-7]   + ABS(src0[0-7] - src1[0-7]),
 \c    dstI[8-15]    := dstI[8-15]  + ABS(src0[8-15] - src1[8-15]),
@@ -10228,7 +10478,7 @@ Opration:
 \c    dstI[56-63]   := dstI[56-63] + ABS(src0[56-63] - src1[56-63]).
 
 
-\H{insPEXTRW} \i\c{PEXTRW}: Extract Word
+\S{insPEXTRW} \i\c{PEXTRW}: Extract Word
 
 \c PEXTRW reg32,mm,imm8          ; 0F C5 /r ib     [KATMAI,MMX]
 \c PEXTRW reg32,xmm,imm8         ; 66 0F C5 /r ib  [WILLAMETTE,SSE2]
@@ -10244,9 +10494,9 @@ an \c{SSE} register, the three least significant bits specify the
 word location.
 
 
-\H{insPF2ID} \i\c{PF2ID}: Packed Single-Precision FP to Integer Convert
+\S{insPF2ID} \i\c{PF2ID}: Packed Single-Precision FP to Integer Convert
 
-\c PF2ID mm1,mm2/m64             ; 0F 0F /r 1D          [PENT,3DNOW] 
+\c PF2ID mm1,mm2/m64             ; 0F 0F /r 1D          [PENT,3DNOW]
 
 \c{PF2ID} converts two single-precision FP values in the source operand
 to signed 32-bit integers, using truncation, and stores them in the
@@ -10255,9 +10505,9 @@ by the destination are saturated to the largest absolute value of the
 same sign.
 
 
-\H{insPF2IW} \i\c{PF2IW}: Packed Single-Precision FP to Integer Word Convert
+\S{insPF2IW} \i\c{PF2IW}: Packed Single-Precision FP to Integer Word Convert
 
-\c PF2IW mm1,mm2/m64             ; 0F 0F /r 1C          [PENT,3DNOW] 
+\c PF2IW mm1,mm2/m64             ; 0F 0F /r 1C          [PENT,3DNOW]
 
 \c{PF2IW} converts two single-precision FP values in the source operand
 to signed 16-bit integers, using truncation, and stores them in the
@@ -10272,9 +10522,9 @@ before storing.
 to 32-bits before storing.
 
 
-\H{insPFACC} \i\c{PFACC}: Packed Single-Precision FP Accumulate
+\S{insPFACC} \i\c{PFACC}: Packed Single-Precision FP Accumulate
 
-\c PFACC mm1,mm2/m64             ; 0F 0F /r AE          [PENT,3DNOW] 
+\c PFACC mm1,mm2/m64             ; 0F 0F /r AE          [PENT,3DNOW]
 
 \c{PFACC} adds the two single-precision FP values from the destination
 operand together, then adds the two single-precision FP values from the
@@ -10287,9 +10537,9 @@ The operation is:
 \c    dst[32-63]  := src[0-31] + src[32-63].
 
 
-\H{insPFADD} \i\c{PFADD}: Packed Single-Precision FP Addition
+\S{insPFADD} \i\c{PFADD}: Packed Single-Precision FP Addition
 
-\c PFADD mm1,mm2/m64             ; 0F 0F /r 9E          [PENT,3DNOW] 
+\c PFADD mm1,mm2/m64             ; 0F 0F /r 9E          [PENT,3DNOW]
 
 \c{PFADD} performs addition on each of two packed single-precision
 FP value pairs.
@@ -10298,12 +10548,12 @@ FP value pairs.
 \c    dst[32-63]  := dst[32-63] + src[32-63].
 
 
-\H{insPFCMP} \i\c{PFCMPxx}: Packed Single-Precision FP Compare
+\S{insPFCMP} \i\c{PFCMPxx}: Packed Single-Precision FP Compare
 \I\c{PFCMPEQ} \I\c{PFCMPGE} \I\c{PFCMPGT}
 
-\c PFCMPEQ mm1,mm2/m64           ; 0F 0F /r B0          [PENT,3DNOW] 
-\c PFCMPGE mm1,mm2/m64           ; 0F 0F /r 90          [PENT,3DNOW] 
-\c PFCMPGT mm1,mm2/m64           ; 0F 0F /r A0          [PENT,3DNOW] 
+\c PFCMPEQ mm1,mm2/m64           ; 0F 0F /r B0          [PENT,3DNOW]
+\c PFCMPGE mm1,mm2/m64           ; 0F 0F /r 90          [PENT,3DNOW]
+\c PFCMPGT mm1,mm2/m64           ; 0F 0F /r A0          [PENT,3DNOW]
 
 The \c{PFCMPxx} instructions compare the packed single-point FP values
 in the source and destination operands, and set the destination
@@ -10317,25 +10567,25 @@ set to all 1s, otherwise it's set to all 0s.
 \b \c{PFCMPGT} tests whether dst >  src.
 
 
-\H{insPFMAX} \i\c{PFMAX}: Packed Single-Precision FP Maximum
+\S{insPFMAX} \i\c{PFMAX}: Packed Single-Precision FP Maximum
 
-\c PFMAX mm1,mm2/m64             ; 0F 0F /r A4          [PENT,3DNOW] 
+\c PFMAX mm1,mm2/m64             ; 0F 0F /r A4          [PENT,3DNOW]
 
 \c{PFMAX} returns the higher of each pair of single-precision FP values.
 If the higher value is zero, it is returned as positive zero.
 
 
-\H{insPFMIN} \i\c{PFMIN}: Packed Single-Precision FP Minimum
+\S{insPFMIN} \i\c{PFMIN}: Packed Single-Precision FP Minimum
 
-\c PFMIN mm1,mm2/m64             ; 0F 0F /r 94          [PENT,3DNOW] 
+\c PFMIN mm1,mm2/m64             ; 0F 0F /r 94          [PENT,3DNOW]
 
 \c{PFMIN} returns the lower of each pair of single-precision FP values.
 If the lower value is zero, it is returned as positive zero.
 
 
-\H{insPFMUL} \i\c{PFMUL}: Packed Single-Precision FP Multiply
+\S{insPFMUL} \i\c{PFMUL}: Packed Single-Precision FP Multiply
 
-\c PFMUL mm1,mm2/m64             ; 0F 0F /r B4          [PENT,3DNOW] 
+\c PFMUL mm1,mm2/m64             ; 0F 0F /r B4          [PENT,3DNOW]
 
 \c{PFMUL} returns the product of each pair of single-precision FP values.
 
@@ -10343,11 +10593,11 @@ If the lower value is zero, it is returned as positive zero.
 \c    dst[32-63] := dst[32-63] * src[32-63].
 
 
-\H{insPFNACC} \i\c{PFNACC}: Packed Single-Precision FP Negative Accumulate
+\S{insPFNACC} \i\c{PFNACC}: Packed Single-Precision FP Negative Accumulate
 
-\c PFNACC mm1,mm2/m64            ; 0F 0F /r 8A          [PENT,3DNOW] 
+\c PFNACC mm1,mm2/m64            ; 0F 0F /r 8A          [PENT,3DNOW]
 
-\c{PFACC} performs a negative accumulate of the two single-precision
+\c{PFNACC} performs a negative accumulate of the two single-precision
 FP values in the source and destination registers. The result of the
 accumulate from the destination register is stored in the low doubleword
 of the destination, and the result of the source accumulate is stored in
@@ -10359,11 +10609,11 @@ The operation is:
 \c    dst[32-63] := src[0-31] - src[32-63].
 
 
-\H{insPFNACC} \i\c{PFNACC}: Packed Single-Precision FP Mixed Accumulate
+\S{insPFPNACC} \i\c{PFPNACC}: Packed Single-Precision FP Mixed Accumulate
 
-\c PFNACC mm1,mm2/m64            ; 0F 0F /r 8E          [PENT,3DNOW] 
+\c PFPNACC mm1,mm2/m64           ; 0F 0F /r 8E          [PENT,3DNOW]
 
-\c{PFACC} performs a positive accumulate of the two single-precision
+\c{PFPNACC} performs a positive accumulate of the two single-precision
 FP values in the source register and a negative accumulate of the
 destination register. The result of the accumulate from the destination
 register is stored in the low doubleword of the destination, and the
@@ -10376,7 +10626,7 @@ The operation is:
 \c    dst[32-63] := src[0-31] + src[32-63].
 
 
-\H{insPFRCP} \i\c{PFRCP}: Packed Single-Precision FP Reciprocal Approximation
+\S{insPFRCP} \i\c{PFRCP}: Packed Single-Precision FP Reciprocal Approximation
 
 \c PFRCP mm1,mm2/m64             ; 0F 0F /r 96          [PENT,3DNOW]
 
@@ -10391,7 +10641,7 @@ two more instructions: \c{PFRCPIT1} (\k{insPFRCPIT1}) and \c{PFRCPIT2}
 see the AMD 3DNow! technology manual.
 
 
-\H{insPFRCPIT1} \i\c{PFRCPIT1}: Packed Single-Precision FP Reciprocal,
+\S{insPFRCPIT1} \i\c{PFRCPIT1}: Packed Single-Precision FP Reciprocal,
 First Iteration Step
 
 \c PFRCPIT1 mm1,mm2/m64          ; 0F 0F /r A6          [PENT,3DNOW]
@@ -10406,7 +10656,7 @@ of a single-precision FP value, see \c{PFRCPIT2} (\k{insPFRCPIT2}). For
 more details, see the AMD 3DNow! technology manual.
 
 
-\H{insPFRCPIT2} \i\c{PFRCPIT2}: Packed Single-Precision FP
+\S{insPFRCPIT2} \i\c{PFRCPIT2}: Packed Single-Precision FP
 Reciprocal/ Reciprocal Square Root, Second Iteration Step
 
 \c PFRCPIT2 mm1,mm2/m64          ; 0F 0F /r B6          [PENT,3DNOW]
@@ -10422,7 +10672,7 @@ either the \c{PFRCP} or the \c{PFRSQRT} instruction. For more details,
 see the AMD 3DNow! technology manual.
 
 
-\H{insPFRSQIT1} \i\c{PFRSQIT1}: Packed Single-Precision FP Reciprocal
+\S{insPFRSQIT1} \i\c{PFRSQIT1}: Packed Single-Precision FP Reciprocal
 Square Root, First Iteration Step
 
 \c PFRSQIT1 mm1,mm2/m64          ; 0F 0F /r A7          [PENT,3DNOW]
@@ -10438,7 +10688,7 @@ of a single-precision FP value, see \c{PFRCPIT2} (\k{insPFRCPIT2}). For
 more details, see the AMD 3DNow! technology manual.
 
 
-\H{insPFRSQRT} \i\c{PFRSQRT}: Packed Single-Precision FP Reciprocal
+\S{insPFRSQRT} \i\c{PFRSQRT}: Packed Single-Precision FP Reciprocal
 Square Root Approximation
 
 \c PFRSQRT mm1,mm2/m64           ; 0F 0F /r 97          [PENT,3DNOW]
@@ -10454,9 +10704,9 @@ two more instructions: \c{PFRSQIT1} (\k{insPFRSQIT1}) and \c{PFRCPIT2}
 see the AMD 3DNow! technology manual.
 
 
-\H{insPFSUB} \i\c{PFSUB}: Packed Single-Precision FP Subtract
+\S{insPFSUB} \i\c{PFSUB}: Packed Single-Precision FP Subtract
 
-\c PFSUB mm1,mm2/m64             ; 0F 0F /r 9A          [PENT,3DNOW] 
+\c PFSUB mm1,mm2/m64             ; 0F 0F /r 9A          [PENT,3DNOW]
 
 \c{PFSUB} subtracts the single-precision FP values in the source from
 those in the destination, and stores the result in the destination
@@ -10466,9 +10716,9 @@ operand.
 \c    dst[32-63] := dst[32-63] - src[32-63].
 
 
-\H{insPFSUBR} \i\c{PFSUBR}: Packed Single-Precision FP Reverse Subtract
+\S{insPFSUBR} \i\c{PFSUBR}: Packed Single-Precision FP Reverse Subtract
 
-\c PFSUBR mm1,mm2/m64            ; 0F 0F /r AA          [PENT,3DNOW] 
+\c PFSUBR mm1,mm2/m64            ; 0F 0F /r AA          [PENT,3DNOW]
 
 \c{PFSUBR} subtracts the single-precision FP values in the destination
 from those in the source, and stores the result in the destination
@@ -10478,25 +10728,25 @@ operand.
 \c    dst[32-63] := src[32-63] - dst[32-63].
 
 
-\H{insPI2FD} \i\c{PI2FD}: Packed Doubleword Integer to Single-Precision FP Convert
+\S{insPI2FD} \i\c{PI2FD}: Packed Doubleword Integer to Single-Precision FP Convert
 
-\c PI2FD mm1,mm2/m64             ; 0F 0F /r 0D          [PENT,3DNOW] 
+\c PI2FD mm1,mm2/m64             ; 0F 0F /r 0D          [PENT,3DNOW]
 
 \c{PF2ID} converts two signed 32-bit integers in the source operand
 to single-precision FP values, using truncation of significant digits,
 and stores them in the destination operand.
 
 
-\H{insPF2IW} \i\c{PF2IW}: Packed Word Integer to Single-Precision FP Convert
+\S{insPF2IW} \i\c{PF2IW}: Packed Word Integer to Single-Precision FP Convert
 
-\c PI2FW mm1,mm2/m64             ; 0F 0F /r 0C          [PENT,3DNOW] 
+\c PI2FW mm1,mm2/m64             ; 0F 0F /r 0C          [PENT,3DNOW]
 
 \c{PF2IW} converts two signed 16-bit integers in the source operand
 to single-precision FP values, and stores them in the destination
 operand. The input values are in the low word of each doubleword.
 
 
-\H{insPINSRW} \i\c{PINSRW}: Insert Word
+\S{insPINSRW} \i\c{PINSRW}: Insert Word
 
 \c PINSRW mm,r16/r32/m16,imm8    ;0F C4 /r ib      [KATMAI,MMX]
 \c PINSRW xmm,r16/r32/m16,imm8   ;66 0F C4 /r ib   [WILLAMETTE,SSE2]
@@ -10510,7 +10760,7 @@ bits are used. The insertion is done in such a way that the other
 words from the destination register are left untouched.
 
 
-\H{insPMACHRIW} \i\c{PMACHRIW}: Packed Multiply and Accumulate with Rounding
+\S{insPMACHRIW} \i\c{PMACHRIW}: Packed Multiply and Accumulate with Rounding
 
 \c PMACHRIW mm,m64               ; 0F 5E /r             [CYRIX,MMX]
 
@@ -10534,7 +10784,7 @@ Note that \c{PMACHRIW} cannot take a register as its second source
 operand.
 
 
-\H{insPMADDWD} \i\c{PMADDWD}: MMX Packed Multiply and Add
+\S{insPMADDWD} \i\c{PMADDWD}: MMX Packed Multiply and Add
 
 \c PMADDWD mm1,mm2/m64           ; 0F F5 /r             [PENT,MMX]
 \c PMADDWD xmm1,xmm2/m128        ; 66 0F F5 /r     [WILLAMETTE,SSE2]
@@ -10559,7 +10809,7 @@ The following apply to the \c{SSE} version of the instruction:
 \c                                + (dst[112-127] * src[112-127]).
 
 
-\H{insPMAGW} \i\c{PMAGW}: MMX Packed Magnitude
+\S{insPMAGW} \i\c{PMAGW}: MMX Packed Magnitude
 
 \c PMAGW mm1,mm2/m64             ; 0F 52 /r             [CYRIX,MMX]
 
@@ -10570,7 +10820,7 @@ of the destination (first) operand to whichever of the two words in
 that position had the larger absolute value.
 
 
-\H{insPMAXSW} \i\c{PMAXSW}: Packed Signed Integer Word Maximum
+\S{insPMAXSW} \i\c{PMAXSW}: Packed Signed Integer Word Maximum
 
 \c PMAXSW mm1,mm2/m64            ; 0F EE /r        [KATMAI,MMX]
 \c PMAXSW xmm1,xmm2/m128         ; 66 0F EE /r     [WILLAMETTE,SSE2]
@@ -10579,7 +10829,7 @@ that position had the larger absolute value.
 for each pair it stores the maximum value in the destination register.
 
 
-\H{insPMAXUB} \i\c{PMAXUB}: Packed Unsigned Integer Byte Maximum
+\S{insPMAXUB} \i\c{PMAXUB}: Packed Unsigned Integer Byte Maximum
 
 \c PMAXUB mm1,mm2/m64            ; 0F DE /r        [KATMAI,MMX]
 \c PMAXUB xmm1,xmm2/m128         ; 66 0F DE /r     [WILLAMETTE,SSE2]
@@ -10588,7 +10838,7 @@ for each pair it stores the maximum value in the destination register.
 for each pair it stores the maximum value in the destination register.
 
 
-\H{insPMINSW} \i\c{PMINSW}: Packed Signed Integer Word Minimum
+\S{insPMINSW} \i\c{PMINSW}: Packed Signed Integer Word Minimum
 
 \c PMINSW mm1,mm2/m64            ; 0F EA /r        [KATMAI,MMX]
 \c PMINSW xmm1,xmm2/m128         ; 66 0F EA /r     [WILLAMETTE,SSE2]
@@ -10597,7 +10847,7 @@ for each pair it stores the maximum value in the destination register.
 for each pair it stores the minimum value in the destination register.
 
 
-\H{insPMINUB} \i\c{PMINUB}: Packed Unsigned Integer Byte Minimum
+\S{insPMINUB} \i\c{PMINUB}: Packed Unsigned Integer Byte Minimum
 
 \c PMINUB mm1,mm2/m64            ; 0F DA /r        [KATMAI,MMX]
 \c PMINUB xmm1,xmm2/m128         ; 66 0F DA /r     [WILLAMETTE,SSE2]
@@ -10606,7 +10856,7 @@ for each pair it stores the minimum value in the destination register.
 for each pair it stores the minimum value in the destination register.
 
 
-\H{insPMOVMSKB} \i\c{PMOVMSKB}: Move Byte Mask To Integer
+\S{insPMOVMSKB} \i\c{PMOVMSKB}: Move Byte Mask To Integer
 
 \c PMOVMSKB reg32,mm             ; 0F D7 /r        [KATMAI,MMX]
 \c PMOVMSKB reg32,xmm            ; 66 0F D7 /r     [WILLAMETTE,SSE2]
@@ -10616,7 +10866,7 @@ significant bits of each byte of source operand (8-bits for an
 \c{MMX} register, 16-bits for an \c{XMM} register).
 
 
-\H{insPMULHRW} \i\c{PMULHRWC}, \i\c{PMULHRIW}: Multiply Packed 16-bit Integers
+\S{insPMULHRW} \i\c{PMULHRWC}, \i\c{PMULHRIW}: Multiply Packed 16-bit Integers
 With Rounding, and Store High Word
 
 \c PMULHRWC mm1,mm2/m64         ; 0F 59 /r              [CYRIX,MMX]
@@ -10643,7 +10893,7 @@ See also \c{PMULHRWA} (\k{insPMULHRWA}) for a 3DNow! version of this
 instruction.
 
 
-\H{insPMULHRWA} \i\c{PMULHRWA}: Multiply Packed 16-bit Integers
+\S{insPMULHRWA} \i\c{PMULHRWA}: Multiply Packed 16-bit Integers
 With Rounding, and Store High Word
 
 \c PMULHRWA mm1,mm2/m64          ; 0F 0F /r B7     [PENT,3DNOW]
@@ -10664,7 +10914,7 @@ See also \c{PMULHRWC} (\k{insPMULHRW}) for a Cyrix version of this
 instruction.
 
 
-\H{insPMULHUW} \i\c{PMULHUW}: Multiply Packed 16-bit Integers,
+\S{insPMULHUW} \i\c{PMULHUW}: Multiply Packed 16-bit Integers,
 and Store High Word
 
 \c PMULHUW mm1,mm2/m64           ; 0F E4 /r        [KATMAI,MMX]
@@ -10675,7 +10925,7 @@ the values in the inputs, then stores bits 16-31 of each result to the
 corresponding position of the destination register.
 
 
-\H{insPMULHW} \i\c{PMULHW}, \i\c{PMULLW}: Multiply Packed 16-bit Integers,
+\S{insPMULHW} \i\c{PMULHW}, \i\c{PMULLW}: Multiply Packed 16-bit Integers,
 and Store
 
 \c PMULHW mm1,mm2/m64            ; 0F E5 /r             [PENT,MMX]
@@ -10694,7 +10944,7 @@ destination (first) operand;
 destination operand.
 
 
-\H{insPMULUDQ} \i\c{PMULUDQ}: Multiply Packed Unsigned
+\S{insPMULUDQ} \i\c{PMULUDQ}: Multiply Packed Unsigned
 32-bit Integers, and Store.
 
 \c PMULUDQ mm1,mm2/m64           ; 0F F4 /r        [WILLAMETTE,SSE2]
@@ -10714,7 +10964,7 @@ The operation is:
 \c    dst[64-127] := dst[64-95] * src[64-95].
 
 
-\H{insPMVccZB} \i\c{PMVccZB}: MMX Packed Conditional Move
+\S{insPMVccZB} \i\c{PMVccZB}: MMX Packed Conditional Move
 
 \c PMVZB mmxreg,mem64            ; 0F 58 /r             [CYRIX,MMX]
 \c PMVNZB mmxreg,mem64           ; 0F 5A /r             [CYRIX,MMX]
@@ -10742,7 +10992,7 @@ Note that these instructions cannot take a register as their second
 source operand.
 
 
-\H{insPOP} \i\c{POP}: Pop Data from Stack
+\S{insPOP} \i\c{POP}: Pop Data from Stack
 
 \c POP reg16                     ; o16 58+r             [8086]
 \c POP reg32                     ; o32 58+r             [386]
@@ -10782,7 +11032,7 @@ prefix for instruction set extensions). However, at least some 8086
 processors do support it, and so NASM generates it for completeness.
 
 
-\H{insPOPA} \i\c{POPAx}: Pop All General-Purpose Registers
+\S{insPOPA} \i\c{POPAx}: Pop All General-Purpose Registers
 
 \c POPA                          ; 61                   [186]
 \c POPAW                         ; o16 61               [186]
@@ -10807,10 +11057,10 @@ Note that the registers are popped in reverse order of their numeric
 values in opcodes (see \k{iref-rv}).
 
 
-\H{insPOPF} \i\c{POPFx}: Pop Flags Register
+\S{insPOPF} \i\c{POPFx}: Pop Flags Register
 
-\c POPF                          ; 9D                   [186]
-\c POPFW                         ; o16 9D               [186]
+\c POPF                          ; 9D                   [8086]
+\c POPFW                         ; o16 9D               [8086]
 \c POPFD                         ; o32 9D               [386]
 
 \b \c{POPFW} pops a word from the stack and stores it in the bottom 16
@@ -10825,7 +11075,7 @@ depending on the current \c{BITS} setting.
 See also \c{PUSHF} (\k{insPUSHF}).
 
 
-\H{insPOR} \i\c{POR}: MMX Bitwise OR
+\S{insPOR} \i\c{POR}: MMX Bitwise OR
 
 \c POR mm1,mm2/m64               ; 0F EB /r             [PENT,MMX]
 \c POR xmm1,xmm2/m128            ; 66 0F EB /r     [WILLAMETTE,SSE2]
@@ -10836,7 +11086,7 @@ corresponding bits of the two inputs was 1), and stores the result
 in the destination (first) operand.
 
 
-\H{insPREFETCH} \i\c{PREFETCH}: Prefetch Data Into Caches
+\S{insPREFETCH} \i\c{PREFETCH}: Prefetch Data Into Caches
 
 \c PREFETCH mem8                 ; 0F 0D /0             [PENT,3DNOW]
 \c PREFETCHW mem8                ; 0F 0D /1             [PENT,3DNOW]
@@ -10848,13 +11098,13 @@ Athlon to earlier processors.
 For more details, see the 3DNow! Technology Manual.
 
 
-\H{insPREFETCHh} \i\c{PREFETCHh}: Prefetch Data Into Caches
+\S{insPREFETCHh} \i\c{PREFETCHh}: Prefetch Data Into Caches
 \I\c{PREFETCHNTA} \I\c{PREFETCHT0} \I\c{PREFETCHT1} \I\c{PREFETCHT2}
 
-\c PREFETCHNTA m8                ; 0F 18 /0        [KATMAI] 
-\c PREFETCHT0 m8                 ; 0F 18 /1        [KATMAI] 
-\c PREFETCHT1 m8                 ; 0F 18 /2        [KATMAI] 
-\c PREFETCHT2 m8                 ; 0F 18 /3        [KATMAI] 
+\c PREFETCHNTA m8                ; 0F 18 /0        [KATMAI]
+\c PREFETCHT0 m8                 ; 0F 18 /1        [KATMAI]
+\c PREFETCHT1 m8                 ; 0F 18 /2        [KATMAI]
+\c PREFETCHT2 m8                 ; 0F 18 /3        [KATMAI]
 
 The \c{PREFETCHh} instructions fetch the line of data from memory
 that contains the specified byte. It is placed in the cache
@@ -10871,7 +11121,7 @@ prefetch data into level 2 cache and higher.
 \b \c{T2} (temporal data with respect to second level cache) -
 prefetch data into level 2 cache and higher.
 
-\b \c{NTA} (non-temporal data with respect to all cache levels) \97
+\b \c{NTA} (non-temporal data with respect to all cache levels) -
 prefetch data into non-temporal cache structure and into a
 location close to the processor, minimizing cache pollution.
 
@@ -10880,7 +11130,7 @@ that the data will be in the cache when it is needed. For more
 details, see the Intel IA32 Software Developer Manual, Volume 2.
 
 
-\H{insPSADBW} \i\c{PSADBW}: Packed Sum of Absolute Differences
+\S{insPSADBW} \i\c{PSADBW}: Packed Sum of Absolute Differences
 
 \c PSADBW mm1,mm2/m64            ; 0F F6 /r        [KATMAI,MMX]
 \c PSADBW xmm1,xmm2/m128         ; 66 0F F6 /r     [WILLAMETTE,SSE2]
@@ -10893,7 +11143,7 @@ cleared. The destination operand is an \c{MMX} or an \c{XMM} register.
 The source operand can either be a register or a memory operand.
 
 
-\H{insPSHUFD} \i\c{PSHUFD}: Shuffle Packed Doublewords
+\S{insPSHUFD} \i\c{PSHUFD}: Shuffle Packed Doublewords
 
 \c PSHUFD xmm1,xmm2/m128,imm8    ; 66 0F 70 /r ib  [WILLAMETTE,SSE2]
 
@@ -10909,7 +11159,7 @@ bits 0 and 1 of imm8 indicates that the doubleword at bits 64-95 of
 the source operand will be copied to bits 0-31 of the destination.
 
 
-\H{insPSHUFHW} \i\c{PSHUFHW}: Shuffle Packed High Words
+\S{insPSHUFHW} \i\c{PSHUFHW}: Shuffle Packed High Words
 
 \c PSHUFHW xmm1,xmm2/m128,imm8   ; F3 0F 70 /r ib  [WILLAMETTE,SSE2]
 
@@ -10925,11 +11175,11 @@ The low quadword is copied from the source to the destination
 without any changes.
 
 
-\H{insPSHUFLW} \i\c{PSHUFLW}: Shuffle Packed Low Words
+\S{insPSHUFLW} \i\c{PSHUFLW}: Shuffle Packed Low Words
 
 \c PSHUFLW xmm1,xmm2/m128,imm8   ; F2 0F 70 /r ib  [WILLAMETTE,SSE2]
 
-\c{PSHUFW} shuffles the words in the low quadword of the source
+\c{PSHUFLW} shuffles the words in the low quadword of the source
 (second) operand according to the encoding specified by imm8, and
 stores the result in the low quadword of the destination (first)
 operand.
@@ -10941,7 +11191,7 @@ The high quadword is copied from the source to the destination
 without any changes.
 
 
-\H{insPSHUFW} \i\c{PSHUFW}: Shuffle Packed Words
+\S{insPSHUFW} \i\c{PSHUFW}: Shuffle Packed Words
 
 \c PSHUFW mm1,mm2/m64,imm8       ; 0F 70 /r ib     [KATMAI,MMX]
 
@@ -10957,7 +11207,7 @@ of imm8 indicates that the word at bits 32-47 of the source operand
 will be copied to bits 0-15 of the destination.
 
 
-\H{insPSLLD} \i\c{PSLLx}: Packed Data Bit Shift Left Logical
+\S{insPSLLD} \i\c{PSLLx}: Packed Data Bit Shift Left Logical
 
 \c PSLLW mm1,mm2/m64             ; 0F F1 /r             [PENT,MMX]
 \c PSLLW mm,imm8                 ; 0F 71 /6 ib          [PENT,MMX]
@@ -10993,7 +11243,7 @@ clearing the low-order bits as they are vacated.
 \b \c{PSLLDQ} shifts double quadword sized elements.
 
 
-\H{insPSRAD} \i\c{PSRAx}: Packed Data Bit Shift Right Arithmetic
+\S{insPSRAD} \i\c{PSRAx}: Packed Data Bit Shift Right Arithmetic
 
 \c PSRAW mm1,mm2/m64             ; 0F E1 /r             [PENT,MMX]
 \c PSRAW mm,imm8                 ; 0F 71 /4 ib          [PENT,MMX]
@@ -11017,7 +11267,7 @@ setting the high-order bits to the value of the original sign bit.
 \b \c{PSRAD} shifts doubleword sized elements.
 
 
-\H{insPSRLD} \i\c{PSRLx}: Packed Data Bit Shift Right Logical
+\S{insPSRLD} \i\c{PSRLx}: Packed Data Bit Shift Right Logical
 
 \c PSRLW mm1,mm2/m64             ; 0F D1 /r             [PENT,MMX]
 \c PSRLW mm,imm8                 ; 0F 71 /2 ib          [PENT,MMX]
@@ -11053,7 +11303,7 @@ clearing the high-order bits as they are vacated.
 \b \c{PSRLDQ} shifts double quadword sized elements.
 
 
-\H{insPSUBB} \i\c{PSUBx}: Subtract Packed Integers
+\S{insPSUBB} \i\c{PSUBx}: Subtract Packed Integers
 
 \c PSUBB mm1,mm2/m64             ; 0F F8 /r             [PENT,MMX]
 \c PSUBW mm1,mm2/m64             ; 0F F9 /r             [PENT,MMX]
@@ -11078,7 +11328,7 @@ and unsigned integers, and doesn't set any of the flags.
 \b \c{PSUBQ} operates on quadword sized elements.
 
 
-\H{insPSUBSB} \i\c{PSUBSxx}, \i\c{PSUBUSx}: Subtract Packed Integers With Saturation
+\S{insPSUBSB} \i\c{PSUBSxx}, \i\c{PSUBUSx}: Subtract Packed Integers With Saturation
 
 \c PSUBSB mm1,mm2/m64            ; 0F E8 /r             [PENT,MMX]
 \c PSUBSW mm1,mm2/m64            ; 0F E9 /r             [PENT,MMX]
@@ -11094,7 +11344,7 @@ and unsigned integers, and doesn't set any of the flags.
 
 \c{PSUBSx} and \c{PSUBUSx} subtracts packed integers in the source
 operand from those in the destination operand, and use saturation for
-results that are outide the range supported by the destination operand.
+results that are outside the range supported by the destination operand.
 
 \b \c{PSUBSB} operates on signed bytes, and uses signed saturation on the
 results.
@@ -11109,7 +11359,7 @@ the results.
 the results.
 
 
-\H{insPSUBSIW} \i\c{PSUBSIW}: MMX Packed Subtract with Saturation to
+\S{insPSUBSIW} \i\c{PSUBSIW}: MMX Packed Subtract with Saturation to
 Implied Destination
 
 \c PSUBSIW mm1,mm2/m64           ; 0F 55 /r             [CYRIX,MMX]
@@ -11121,7 +11371,7 @@ but instead in the implied destination register, specified as for
 \c{PADDSIW} (\k{insPADDSIW}).
 
 
-\H{insPSWAPD} \i\c{PSWAPD}: Swap Packed Data
+\S{insPSWAPD} \i\c{PSWAPD}: Swap Packed Data
 \I\c{PSWAPW}
 
 \c PSWAPD mm1,mm2/m64            ; 0F 0F /r BB     [PENT,3DNOW]
@@ -11146,7 +11396,7 @@ The operation in the \c{K6-x+}, \c{ATHLON} and later processors is:
 \c    dst[32-63] = src[0-31].
 
 
-\H{insPUNPCKHBW} \i\c{PUNPCKxxx}: Unpack and Interleave Data
+\S{insPUNPCKHBW} \i\c{PUNPCKxxx}: Unpack and Interleave Data
 
 \c PUNPCKHBW mm1,mm2/m64         ; 0F 68 /r             [PENT,MMX]
 \c PUNPCKHWD mm1,mm2/m64         ; 0F 69 /r             [PENT,MMX]
@@ -11207,7 +11457,7 @@ then:
 \b \c{PUNPCKLDQ} would return \c{0x3B2B1B0B3A2A1A0A}.
 
 
-\H{insPUSH} \i\c{PUSH}: Push Data on Stack
+\S{insPUSH} \i\c{PUSH}: Push Data on Stack
 
 \c PUSH reg16                    ; o16 50+r             [8086]
 \c PUSH reg32                    ; o32 50+r             [386]
@@ -11222,8 +11472,8 @@ then:
 \c PUSH FS                       ; 0F A0                [386]
 \c PUSH GS                       ; 0F A8                [386]
 
-\c PUSH imm8                     ; 6A ib                [286]
-\c PUSH imm16                    ; o16 68 iw            [286]
+\c PUSH imm8                     ; 6A ib                [186]
+\c PUSH imm16                    ; o16 68 iw            [186]
 \c PUSH imm32                    ; o32 68 id            [386]
 
 \c{PUSH} decrements the stack pointer (\c{SP} or \c{ESP}) by 2 or 4,
@@ -11255,7 +11505,7 @@ value it has \e{after} the push instruction, whereas on later
 processors it is the value \e{before} the push instruction.
 
 
-\H{insPUSHA} \i\c{PUSHAx}: Push All General-Purpose Registers
+\S{insPUSHA} \i\c{PUSHAx}: Push All General-Purpose Registers
 
 \c PUSHA                         ; 60                   [186]
 \c PUSHAD                        ; o32 60               [386]
@@ -11281,11 +11531,11 @@ in opcodes (see \k{iref-rv}).
 See also \c{POPA} (\k{insPOPA}).
 
 
-\H{insPUSHF} \i\c{PUSHFx}: Push Flags Register
+\S{insPUSHF} \i\c{PUSHFx}: Push Flags Register
 
-\c PUSHF                         ; 9C                   [186]
+\c PUSHF                         ; 9C                   [8086]
 \c PUSHFD                        ; o32 9C               [386]
-\c PUSHFW                        ; o16 9C               [186]
+\c PUSHFW                        ; o16 9C               [8086]
 
 \b \c{PUSHFW} pops a word from the stack and stores it in the
 bottom 16 bits of the flags register (or the whole flags register,
@@ -11300,7 +11550,7 @@ depending on the current \c{BITS} setting.
 See also \c{POPF} (\k{insPOPF}).
 
 
-\H{insPXOR} \i\c{PXOR}: MMX Bitwise XOR
+\S{insPXOR} \i\c{PXOR}: MMX Bitwise XOR
 
 \c PXOR mm1,mm2/m64              ; 0F EF /r             [PENT,MMX]
 \c PXOR xmm1,xmm2/m128           ; 66 0F EF /r     [WILLAMETTE,SSE2]
@@ -11311,24 +11561,24 @@ corresponding bits of the two inputs was 1), and stores the result
 in the destination (first) operand.
 
 
-\H{insRCL} \i\c{RCL}, \i\c{RCR}: Bitwise Rotate through Carry Bit
+\S{insRCL} \i\c{RCL}, \i\c{RCR}: Bitwise Rotate through Carry Bit
 
 \c RCL r/m8,1                    ; D0 /2                [8086]
 \c RCL r/m8,CL                   ; D2 /2                [8086]
-\c RCL r/m8,imm8                 ; C0 /2 ib             [286]
+\c RCL r/m8,imm8                 ; C0 /2 ib             [186]
 \c RCL r/m16,1                   ; o16 D1 /2            [8086]
 \c RCL r/m16,CL                  ; o16 D3 /2            [8086]
-\c RCL r/m16,imm8                ; o16 C1 /2 ib         [286]
+\c RCL r/m16,imm8                ; o16 C1 /2 ib         [186]
 \c RCL r/m32,1                   ; o32 D1 /2            [386]
 \c RCL r/m32,CL                  ; o32 D3 /2            [386]
 \c RCL r/m32,imm8                ; o32 C1 /2 ib         [386]
 
 \c RCR r/m8,1                    ; D0 /3                [8086]
 \c RCR r/m8,CL                   ; D2 /3                [8086]
-\c RCR r/m8,imm8                 ; C0 /3 ib             [286]
+\c RCR r/m8,imm8                 ; C0 /3 ib             [186]
 \c RCR r/m16,1                   ; o16 D1 /3            [8086]
 \c RCR r/m16,CL                  ; o16 D3 /3            [8086]
-\c RCR r/m16,imm8                ; o16 C1 /3 ib         [286]
+\c RCR r/m16,imm8                ; o16 C1 /3 ib         [186]
 \c RCR r/m32,1                   ; o32 D1 /3            [386]
 \c RCR r/m32,CL                  ; o32 D3 /3            [386]
 \c RCR r/m32,imm8                ; o32 C1 /3 ib         [386]
@@ -11350,18 +11600,18 @@ byte) form of \c{RCL foo,1} by using a \c{BYTE} prefix: \c{RCL
 foo,BYTE 1}. Similarly with \c{RCR}.
 
 
-\H{insRCPPS} \i\c{RCPPS}: Packed Single-Precision FP Reciprocal
+\S{insRCPPS} \i\c{RCPPS}: Packed Single-Precision FP Reciprocal
 
-\c RCPPS xmm1,xmm2/m128          ; 0F 53 /r        [KATMAI,SSE] 
+\c RCPPS xmm1,xmm2/m128          ; 0F 53 /r        [KATMAI,SSE]
 
 \c{RCPPS} returns an approximation of the reciprocal of the packed
 single-precision FP values from xmm2/m128. The maximum error for this
 approximation is: |Error| <= 1.5 x 2^-12
 
 
-\H{insRCPSS} \i\c{RCPSS}: Scalar Single-Precision FP Reciprocal
+\S{insRCPSS} \i\c{RCPSS}: Scalar Single-Precision FP Reciprocal
 
-\c RCPSS xmm1,xmm2/m128          ; F3 0F 53 /r     [KATMAI,SSE] 
+\c RCPSS xmm1,xmm2/m128          ; F3 0F 53 /r     [KATMAI,SSE]
 
 \c{RCPSS} returns an approximation of the reciprocal of the lower
 single-precision FP value from xmm2/m32; the upper three fields are
@@ -11369,7 +11619,7 @@ passed through from xmm1. The maximum error for this approximation is:
 |Error| <= 1.5 x 2^-12
 
 
-\H{insRDMSR} \i\c{RDMSR}: Read Model-Specific Registers
+\S{insRDMSR} \i\c{RDMSR}: Read Model-Specific Registers
 
 \c RDMSR                         ; 0F 32                [PENT,PRIV]
 
@@ -11378,7 +11628,7 @@ index is stored in \c{ECX}, and stores the result in \c{EDX:EAX}.
 See also \c{WRMSR} (\k{insWRMSR}).
 
 
-\H{insRDPMC} \i\c{RDPMC}: Read Performance-Monitoring Counters
+\S{insRDPMC} \i\c{RDPMC}: Read Performance-Monitoring Counters
 
 \c RDPMC                         ; 0F 33                [P6]
 
@@ -11389,7 +11639,7 @@ This instruction is available on P6 and later processors and on MMX
 class processors.
 
 
-\H{insRDSHR} \i\c{RDSHR}: Read SMM Header Pointer Register
+\S{insRDSHR} \i\c{RDSHR}: Read SMM Header Pointer Register
 
 \c RDSHR r/m32                   ; 0F 36 /0        [386,CYRIX,SMM]
 
@@ -11400,14 +11650,14 @@ memory location or a 32 bit register.
 See also \c{WRSHR} (\k{insWRSHR}).
 
 
-\H{insRDTSC} \i\c{RDTSC}: Read Time-Stamp Counter
+\S{insRDTSC} \i\c{RDTSC}: Read Time-Stamp Counter
 
 \c RDTSC                         ; 0F 31                [PENT]
 
 \c{RDTSC} reads the processor's time-stamp counter into \c{EDX:EAX}.
 
 
-\H{insRET} \i\c{RET}, \i\c{RETF}, \i\c{RETN}: Return from Procedure Call
+\S{insRET} \i\c{RET}, \i\c{RETF}, \i\c{RETN}: Return from Procedure Call
 
 \c RET                           ; C3                   [8086]
 \c RET imm16                     ; C2 iw                [8086]
@@ -11428,24 +11678,24 @@ then pops \c{CS}, and \e{then} increments the stack pointer by the
 optional argument if present.
 
 
-\H{insROL} \i\c{ROL}, \i\c{ROR}: Bitwise Rotate
+\S{insROL} \i\c{ROL}, \i\c{ROR}: Bitwise Rotate
 
 \c ROL r/m8,1                    ; D0 /0                [8086]
 \c ROL r/m8,CL                   ; D2 /0                [8086]
-\c ROL r/m8,imm8                 ; C0 /0 ib             [286]
+\c ROL r/m8,imm8                 ; C0 /0 ib             [186]
 \c ROL r/m16,1                   ; o16 D1 /0            [8086]
 \c ROL r/m16,CL                  ; o16 D3 /0            [8086]
-\c ROL r/m16,imm8                ; o16 C1 /0 ib         [286]
+\c ROL r/m16,imm8                ; o16 C1 /0 ib         [186]
 \c ROL r/m32,1                   ; o32 D1 /0            [386]
 \c ROL r/m32,CL                  ; o32 D3 /0            [386]
 \c ROL r/m32,imm8                ; o32 C1 /0 ib         [386]
 
 \c ROR r/m8,1                    ; D0 /1                [8086]
 \c ROR r/m8,CL                   ; D2 /1                [8086]
-\c ROR r/m8,imm8                 ; C0 /1 ib             [286]
+\c ROR r/m8,imm8                 ; C0 /1 ib             [186]
 \c ROR r/m16,1                   ; o16 D1 /1            [8086]
 \c ROR r/m16,CL                  ; o16 D3 /1            [8086]
-\c ROR r/m16,imm8                ; o16 C1 /1 ib         [286]
+\c ROR r/m16,imm8                ; o16 C1 /1 ib         [186]
 \c ROR r/m32,1                   ; o32 D1 /1            [386]
 \c ROR r/m32,CL                  ; o32 D3 /1            [386]
 \c ROR r/m32,imm8                ; o32 C1 /1 ib         [386]
@@ -11465,7 +11715,7 @@ byte) form of \c{ROL foo,1} by using a \c{BYTE} prefix: \c{ROL
 foo,BYTE 1}. Similarly with \c{ROR}.
 
 
-\H{insRSDC} \i\c{RSDC}: Restore Segment Register and Descriptor
+\S{insRSDC} \i\c{RSDC}: Restore Segment Register and Descriptor
 
 \c RSDC segreg,m80               ; 0F 79 /r        [486,CYRIX,SMM]
 
@@ -11473,14 +11723,14 @@ foo,BYTE 1}. Similarly with \c{ROR}.
 and sets up its descriptor.
 
 
-\H{insRSLDT} \i\c{RSLDT}: Restore Segment Register and Descriptor
+\S{insRSLDT} \i\c{RSLDT}: Restore Segment Register and Descriptor
 
 \c RSLDT m80                     ; 0F 7B /0        [486,CYRIX,SMM]
 
 \c{RSLDT} restores the Local Descriptor Table (LDTR) from mem80.
 
 
-\H{insRSM} \i\c{RSM}: Resume from System-Management Mode
+\S{insRSM} \i\c{RSM}: Resume from System-Management Mode
 
 \c RSM                           ; 0F AA                [PENT]
 
@@ -11488,9 +11738,9 @@ and sets up its descriptor.
 was in System-Management Mode.
 
 
-\H{insRSQRTPS} \i\c{RSQRTPS}: Packed Single-Precision FP Square Root Reciprocal
+\S{insRSQRTPS} \i\c{RSQRTPS}: Packed Single-Precision FP Square Root Reciprocal
 
-\c RSQRTPS xmm1,xmm2/m128        ; 0F 52 /r        [KATMAI,SSE] 
+\c RSQRTPS xmm1,xmm2/m128        ; 0F 52 /r        [KATMAI,SSE]
 
 \c{RSQRTPS} computes the approximate reciprocals of the square
 roots of the packed single-precision floating-point values in the
@@ -11498,9 +11748,9 @@ source and stores the results in xmm1. The maximum error for this
 approximation is: |Error| <= 1.5 x 2^-12
 
 
-\H{insRSQRTSS} \i\c{RSQRTSS}: Scalar Single-Precision FP Square Root Reciprocal
+\S{insRSQRTSS} \i\c{RSQRTSS}: Scalar Single-Precision FP Square Root Reciprocal
 
-\c RSQRTSS xmm1,xmm2/m128        ; F3 0F 52 /r     [KATMAI,SSE] 
+\c RSQRTSS xmm1,xmm2/m128        ; F3 0F 52 /r     [KATMAI,SSE]
 
 \c{RSQRTSS} returns an approximation of the reciprocal of the
 square root of the lowest order single-precision FP value from
@@ -11509,14 +11759,14 @@ register. The upper three fields of xmm1 are preserved. The maximum
 error for this approximation is: |Error| <= 1.5 x 2^-12
 
 
-\H{insRSTS} \i\c{RSTS}: Restore TSR and Descriptor
+\S{insRSTS} \i\c{RSTS}: Restore TSR and Descriptor
 
 \c RSTS m80                      ; 0F 7D /0        [486,CYRIX,SMM]
 
 \c{RSTS} restores Task State Register (TSR) from mem80.
 
 
-\H{insSAHF} \i\c{SAHF}: Store AH to Flags
+\S{insSAHF} \i\c{SAHF}: Store AH to Flags
 
 \c SAHF                          ; 9E                   [8086]
 
@@ -11530,24 +11780,24 @@ The operation of \c{SAHF} is:
 See also \c{LAHF} (\k{insLAHF}).
 
 
-\H{insSAL} \i\c{SAL}, \i\c{SAR}: Bitwise Arithmetic Shifts
+\S{insSAL} \i\c{SAL}, \i\c{SAR}: Bitwise Arithmetic Shifts
 
 \c SAL r/m8,1                    ; D0 /4                [8086]
 \c SAL r/m8,CL                   ; D2 /4                [8086]
-\c SAL r/m8,imm8                 ; C0 /4 ib             [286]
+\c SAL r/m8,imm8                 ; C0 /4 ib             [186]
 \c SAL r/m16,1                   ; o16 D1 /4            [8086]
 \c SAL r/m16,CL                  ; o16 D3 /4            [8086]
-\c SAL r/m16,imm8                ; o16 C1 /4 ib         [286]
+\c SAL r/m16,imm8                ; o16 C1 /4 ib         [186]
 \c SAL r/m32,1                   ; o32 D1 /4            [386]
 \c SAL r/m32,CL                  ; o32 D3 /4            [386]
 \c SAL r/m32,imm8                ; o32 C1 /4 ib         [386]
 
 \c SAR r/m8,1                    ; D0 /7                [8086]
 \c SAR r/m8,CL                   ; D2 /7                [8086]
-\c SAR r/m8,imm8                 ; C0 /7 ib             [286]
+\c SAR r/m8,imm8                 ; C0 /7 ib             [186]
 \c SAR r/m16,1                   ; o16 D1 /7            [8086]
 \c SAR r/m16,CL                  ; o16 D3 /7            [8086]
-\c SAR r/m16,imm8                ; o16 C1 /7 ib         [286]
+\c SAR r/m16,imm8                ; o16 C1 /7 ib         [186]
 \c SAR r/m32,1                   ; o32 D1 /7            [386]
 \c SAR r/m32,CL                  ; o32 D3 /7            [386]
 \c SAR r/m32,imm8                ; o32 C1 /7 ib         [386]
@@ -11570,7 +11820,7 @@ byte) form of \c{SAL foo,1} by using a \c{BYTE} prefix: \c{SAL
 foo,BYTE 1}. Similarly with \c{SAR}.
 
 
-\H{insSALC} \i\c{SALC}: Set AL from Carry Flag
+\S{insSALC} \i\c{SALC}: Set AL from Carry Flag
 
 \c SALC                          ; D6                  [8086,UNDOC]
 
@@ -11579,7 +11829,7 @@ foo,BYTE 1}. Similarly with \c{SAR}.
 the carry flag is clear, or to \c{0xFF} if it is set.
 
 
-\H{insSBB} \i\c{SBB}: Subtract with Borrow
+\S{insSBB} \i\c{SBB}: Subtract with Borrow
 
 \c SBB r/m8,reg8                 ; 18 /r                [8086]
 \c SBB r/m16,reg16               ; o16 19 /r            [8086]
@@ -11594,7 +11844,7 @@ the carry flag is clear, or to \c{0xFF} if it is set.
 \c SBB r/m32,imm32               ; o32 81 /3 id         [386]
 
 \c SBB r/m16,imm8                ; o16 83 /3 ib         [8086]
-\c SBB r/m32,imm8                ; o32 83 /3 ib         [8086]
+\c SBB r/m32,imm8                ; o32 83 /3 ib         [386]
 
 \c SBB AL,imm8                   ; 1C ib                [8086]
 \c SBB AX,imm16                  ; o16 1D iw            [8086]
@@ -11617,7 +11867,7 @@ To subtract one number from another without also subtracting the
 contents of the carry flag, use \c{SUB} (\k{insSUB}).
 
 
-\H{insSCASB} \i\c{SCASB}, \i\c{SCASW}, \i\c{SCASD}: Scan String
+\S{insSCASB} \i\c{SCASB}, \i\c{SCASW}, \i\c{SCASD}: Scan String
 
 \c SCASB                         ; AE                   [8086]
 \c SCASW                         ; o16 AF               [8086]
@@ -11648,7 +11898,7 @@ The \c{REPE} and \c{REPNE} prefixes (equivalently, \c{REPZ} and
 first unequal or equal byte is found.
 
 
-\H{insSETcc} \i\c{SETcc}: Set Register from Condition
+\S{insSETcc} \i\c{SETcc}: Set Register from Condition
 
 \c SETcc r/m8                    ; 0F 90+cc /2          [386]
 
@@ -11656,9 +11906,9 @@ first unequal or equal byte is found.
 not satisfied, and to 1 if it is.
 
 
-\H{insSFENCE} \i\c{SFENCE}: Store Fence
+\S{insSFENCE} \i\c{SFENCE}: Store Fence
 
-\c SFENCE                 ; 0F AE /7               [KATMAI] 
+\c SFENCE                 ; 0F AE /7               [KATMAI]
 
 \c{SFENCE} performs a serialising operation on all writes to memory
 that were issued before the \c{SFENCE} instruction. This guarantees that
@@ -11689,7 +11939,7 @@ of these encodings risks incompatibility with future processors.
 See also \c{LFENCE} (\k{insLFENCE}) and \c{MFENCE} (\k{insMFENCE}).
 
 
-\H{insSGDT} \i\c{SGDT}, \i\c{SIDT}, \i\c{SLDT}: Store Descriptor Table Pointers
+\S{insSGDT} \i\c{SGDT}, \i\c{SIDT}, \i\c{SLDT}: Store Descriptor Table Pointers
 
 \c SGDT mem                      ; 0F 01 /0             [286,PRIV]
 \c SIDT mem                      ; 0F 01 /1             [286,PRIV]
@@ -11708,24 +11958,24 @@ descriptor table) into the given operand.
 See also \c{LGDT}, \c{LIDT} and \c{LLDT} (\k{insLGDT}).
 
 
-\H{insSHL} \i\c{SHL}, \i\c{SHR}: Bitwise Logical Shifts
+\S{insSHL} \i\c{SHL}, \i\c{SHR}: Bitwise Logical Shifts
 
 \c SHL r/m8,1                    ; D0 /4                [8086]
 \c SHL r/m8,CL                   ; D2 /4                [8086]
-\c SHL r/m8,imm8                 ; C0 /4 ib             [286]
+\c SHL r/m8,imm8                 ; C0 /4 ib             [186]
 \c SHL r/m16,1                   ; o16 D1 /4            [8086]
 \c SHL r/m16,CL                  ; o16 D3 /4            [8086]
-\c SHL r/m16,imm8                ; o16 C1 /4 ib         [286]
+\c SHL r/m16,imm8                ; o16 C1 /4 ib         [186]
 \c SHL r/m32,1                   ; o32 D1 /4            [386]
 \c SHL r/m32,CL                  ; o32 D3 /4            [386]
 \c SHL r/m32,imm8                ; o32 C1 /4 ib         [386]
 
 \c SHR r/m8,1                    ; D0 /5                [8086]
 \c SHR r/m8,CL                   ; D2 /5                [8086]
-\c SHR r/m8,imm8                 ; C0 /5 ib             [286]
+\c SHR r/m8,imm8                 ; C0 /5 ib             [186]
 \c SHR r/m16,1                   ; o16 D1 /5            [8086]
 \c SHR r/m16,CL                  ; o16 D3 /5            [8086]
-\c SHR r/m16,imm8                ; o16 C1 /5 ib         [286]
+\c SHR r/m16,imm8                ; o16 C1 /5 ib         [186]
 \c SHR r/m32,1                   ; o32 D1 /5            [386]
 \c SHR r/m32,CL                  ; o32 D3 /5            [386]
 \c SHR r/m32,imm8                ; o32 C1 /5 ib         [386]
@@ -11747,7 +11997,7 @@ byte) form of \c{SHL foo,1} by using a \c{BYTE} prefix: \c{SHL
 foo,BYTE 1}. Similarly with \c{SHR}.
 
 
-\H{insSHLD} \i\c{SHLD}, \i\c{SHRD}: Bitwise Double-Precision Shifts
+\S{insSHLD} \i\c{SHLD}, \i\c{SHRD}: Bitwise Double-Precision Shifts
 
 \c SHLD r/m16,reg16,imm8         ; o16 0F A4 /r ib      [386]
 \c SHLD r/m16,reg32,imm8         ; o32 0F A4 /r ib      [386]
@@ -11779,7 +12029,7 @@ The number of bits to shift by is given by the third operand. Only
 the bottom five bits of the shift count are considered.
 
 
-\H{insSHUFPD} \i\c{SHUFPD}: Shuffle Packed Double-Precision FP Values
+\S{insSHUFPD} \i\c{SHUFPD}: Shuffle Packed Double-Precision FP Values
 
 \c SHUFPD xmm1,xmm2/m128,imm8    ; 66 0F C6 /r ib  [WILLAMETTE,SSE2]
 
@@ -11797,11 +12047,11 @@ which value is moved from the source operand to the result.
 Bits 2 through 7 of the shuffle operand are reserved.
 
 
-\H{insSHUFPS} \i\c{SHUFPS}: Shuffle Packed Single-Precision FP Values
+\S{insSHUFPS} \i\c{SHUFPS}: Shuffle Packed Single-Precision FP Values
 
 \c SHUFPS xmm1,xmm2/m128,imm8    ; 0F C6 /r ib     [KATMAI,SSE]
 
-\c{SHUFPD} moves two of the packed single-precision FP values from
+\c{SHUFPS} moves two of the packed single-precision FP values from
 the destination operand into the low quadword of the destination
 operand; the upper quadword is generated by moving two of the
 single-precision FP values from the source operand into the
@@ -11817,7 +12067,7 @@ doubleword of the result, and bits 6 and 7 select the value to be
 moved from the source operand to the high doubleword of the result.
 
 
-\H{insSMI} \i\c{SMI}: System Management Interrupt
+\S{insSMI} \i\c{SMI}: System Management Interrupt
 
 \c SMI                           ; F1                   [386,UNDOC]
 
@@ -11826,7 +12076,7 @@ moved from the source operand to the high doubleword of the result.
 otherwise it generates an Int 1.
 
 
-\H{insSMINT} \i\c{SMINT}, \i\c{SMINTOLD}: Software SMM Entry (CYRIX)
+\S{insSMINT} \i\c{SMINT}, \i\c{SMINTOLD}: Software SMM Entry (CYRIX)
 
 \c SMINT                         ; 0F 38                [PENT,CYRIX]
 \c SMINTOLD                      ; 0F 7E                [486,CYRIX]
@@ -11841,7 +12091,7 @@ This pair of opcodes are specific to the Cyrix and compatible range of
 processors (Cyrix, IBM, Via).
 
 
-\H{insSMSW} \i\c{SMSW}: Store Machine Status Word
+\S{insSMSW} \i\c{SMSW}: Store Machine Status Word
 
 \c SMSW r/m16                    ; 0F 01 /4             [286,PRIV]
 
@@ -11854,7 +12104,7 @@ register (or a 16bit memory location), without needing an operand
 size override byte.
 
 
-\H{insSQRTPD} \i\c{SQRTPD}: Packed Double-Precision FP Square Root
+\S{insSQRTPD} \i\c{SQRTPD}: Packed Double-Precision FP Square Root
 
 \c SQRTPD xmm1,xmm2/m128         ; 66 0F 51 /r     [WILLAMETTE,SSE2]
 
@@ -11863,7 +12113,7 @@ FP value from the source operand, and stores the double-precision
 results in the destination register.
 
 
-\H{insSQRTPS} \i\c{SQRTPS}: Packed Single-Precision FP Square Root
+\S{insSQRTPS} \i\c{SQRTPS}: Packed Single-Precision FP Square Root
 
 \c SQRTPS xmm1,xmm2/m128         ; 0F 51 /r        [KATMAI,SSE]
 
@@ -11872,7 +12122,7 @@ FP value from the source operand, and stores the single-precision
 results in the destination register.
 
 
-\H{insSQRTSD} \i\c{SQRTSD}: Scalar Double-Precision FP Square Root
+\S{insSQRTSD} \i\c{SQRTSD}: Scalar Double-Precision FP Square Root
 
 \c SQRTSD xmm1,xmm2/m128         ; F2 0F 51 /r     [WILLAMETTE,SSE2]
 
@@ -11881,7 +12131,7 @@ FP value from the source operand, and stores the double-precision
 result in the destination register. The high-quadword remains unchanged.
 
 
-\H{insSQRTSS} \i\c{SQRTSS}: Scalar Single-Precision FP Square Root
+\S{insSQRTSS} \i\c{SQRTSS}: Scalar Single-Precision FP Square Root
 
 \c SQRTSS xmm1,xmm2/m128         ; F3 0F 51 /r     [KATMAI,SSE]
 
@@ -11891,7 +12141,7 @@ result in the destination register. The three high doublewords remain
 unchanged.
 
 
-\H{insSTC} \i\c{STC}, \i\c{STD}, \i\c{STI}: Set Flags
+\S{insSTC} \i\c{STC}, \i\c{STD}, \i\c{STI}: Set Flags
 
 \c STC                           ; F9                   [8086]
 \c STD                           ; FD                   [8086]
@@ -11906,10 +12156,10 @@ To clear the carry, direction, or interrupt flags, use the \c{CLC},
 flag, use \c{CMC} (\k{insCMC}).
 
 
-\H{insSTMXCSR} \i\c{STMXCSR}: Store Streaming SIMD Extension
+\S{insSTMXCSR} \i\c{STMXCSR}: Store Streaming SIMD Extension
  Control/Status
 
-\c STMXCSR m32                   ; 0F AE /3        [KATMAI,SSE] 
+\c STMXCSR m32                   ; 0F AE /3        [KATMAI,SSE]
 
 \c{STMXCSR} stores the contents of the \c{MXCSR} control/status
 register to the specified memory location. \c{MXCSR} is used to
@@ -11922,7 +12172,7 @@ For details of the \c{MXCSR} register, see the Intel processor docs.
 See also \c{LDMXCSR} (\k{insLDMXCSR}).
 
 
-\H{insSTOSB} \i\c{STOSB}, \i\c{STOSW}, \i\c{STOSD}: Store Byte to String
+\S{insSTOSB} \i\c{STOSB}, \i\c{STOSW}, \i\c{STOSD}: Store Byte to String
 
 \c STOSB                         ; AA                   [8086]
 \c STOSW                         ; o16 AB               [8086]
@@ -11951,7 +12201,7 @@ The \c{REP} prefix may be used to repeat the instruction \c{CX} (or
 \c{ECX} - again, the address size chooses which) times.
 
 
-\H{insSTR} \i\c{STR}: Store Task Register
+\S{insSTR} \i\c{STR}: Store Task Register
 
 \c STR r/m16                     ; 0F 00 /1             [286,PRIV]
 
@@ -11962,7 +12212,7 @@ operand is a memory location, 16 bits are written regardless of the
 operand size.
 
 
-\H{insSUB} \i\c{SUB}: Subtract Integers
+\S{insSUB} \i\c{SUB}: Subtract Integers
 
 \c SUB r/m8,reg8                 ; 28 /r                [8086]
 \c SUB r/m16,reg16               ; o16 29 /r            [8086]
@@ -11996,7 +12246,7 @@ the \c{BYTE} qualifier is necessary to force NASM to generate this
 form of the instruction.
 
 
-\H{insSUBPD} \i\c{SUBPD}: Packed Double-Precision FP Subtract
+\S{insSUBPD} \i\c{SUBPD}: Packed Double-Precision FP Subtract
 
 \c SUBPD xmm1,xmm2/m128          ; 66 0F 5C /r     [WILLAMETTE,SSE2]
 
@@ -12005,7 +12255,7 @@ the source operand from those of the destination operand, and
 stores the result in the destination operation.
 
 
-\H{insSUBPS} \i\c{SUBPS}: Packed Single-Precision FP Subtract
+\S{insSUBPS} \i\c{SUBPS}: Packed Single-Precision FP Subtract
 
 \c SUBPS xmm1,xmm2/m128          ; 0F 5C /r        [KATMAI,SSE]
 
@@ -12014,7 +12264,7 @@ the source operand from those of the destination operand, and
 stores the result in the destination operation.
 
 
-\H{insSUBSD} \i\c{SUBSD}: Scalar Single-FP Subtract
+\S{insSUBSD} \i\c{SUBSD}: Scalar Single-FP Subtract
 
 \c SUBSD xmm1,xmm2/m128          ; F2 0F 5C /r     [WILLAMETTE,SSE2]
 
@@ -12024,7 +12274,7 @@ stores the result in the destination operation. The high
 quadword is unchanged.
 
 
-\H{insSUBSS} \i\c{SUBSS}: Scalar Single-FP Subtract
+\S{insSUBSS} \i\c{SUBSS}: Scalar Single-FP Subtract
 
 \c SUBSS xmm1,xmm2/m128          ; F3 0F 5C /r     [KATMAI,SSE]
 
@@ -12034,7 +12284,7 @@ stores the result in the destination operation. The three high
 doublewords are unchanged.
 
 
-\H{insSVDC} \i\c{SVDC}: Save Segment Register and Descriptor
+\S{insSVDC} \i\c{SVDC}: Save Segment Register and Descriptor
 
 \c SVDC m80,segreg               ; 0F 78 /r        [486,CYRIX,SMM]
 
@@ -12042,36 +12292,36 @@ doublewords are unchanged.
 descriptor to mem80.
 
 
-\H{insSVLDT} \i\c{SVLDT}: Save LDTR and Descriptor
+\S{insSVLDT} \i\c{SVLDT}: Save LDTR and Descriptor
 
 \c SVLDT m80                     ; 0F 7A /0        [486,CYRIX,SMM]
 
 \c{SVLDT} saves the Local Descriptor Table (LDTR) to mem80.
 
 
-\H{insSVTS} \i\c{SVTS}: Save TSR and Descriptor
+\S{insSVTS} \i\c{SVTS}: Save TSR and Descriptor
 
 \c SVTS m80                      ; 0F 7C /0        [486,CYRIX,SMM]
 
 \c{SVTS} saves the Task State Register (TSR) to mem80.
 
 
-\H{insSYSCALL} \i\c{SYSCALL}: Call Operating System
+\S{insSYSCALL} \i\c{SYSCALL}: Call Operating System
 
 \c SYSCALL                       ; 0F 05                [P6,AMD]
 
-\c{SYSCALL} provides a fast method of transfering control to a fixed
+\c{SYSCALL} provides a fast method of transferring control to a fixed
 entry point in an operating system.
 
 \b The \c{EIP} register is copied into the \c{ECX} register.
 
-\b Bits [31\960] of the 64-bit SYSCALL/SYSRET Target Address Register
+\b Bits [31-0] of the 64-bit SYSCALL/SYSRET Target Address Register
 (\c{STAR}) are copied into the \c{EIP} register.
 
-\b Bits [47\9632] of the \c{STAR} register specify the selector that is
+\b Bits [47-32] of the \c{STAR} register specify the selector that is
 copied into the \c{CS} register.
 
-\b Bits [47\9632]+1000b of the \c{STAR} register specify the selector that
+\b Bits [47-32]+1000b of the \c{STAR} register specify the selector that
 is copied into the SS register.
 
 The \c{CS} and \c{SS} registers should not be modified by the operating
@@ -12082,7 +12332,7 @@ For more information, see the \c{SYSCALL and SYSRET Instruction Specification}
 (AMD document number 21086.pdf).
 
 
-\H{insSYSENTER} \i\c{SYSENTER}: Fast System Call
+\S{insSYSENTER} \i\c{SYSENTER}: Fast System Call
 
 \c SYSENTER                      ; 0F 34                [P6]
 
@@ -12126,17 +12376,17 @@ In particular, note that this instruction des not save the values of
 \c{CS} or \c{(E)IP}. If you need to return to the calling code, you
 need to write your code to cater for this.
 
-For more information, see the Intel Architecture Software Developer\92s
+For more information, see the Intel Architecture Software Developer's
 Manual, Volume 2.
 
 
-\H{insSYSEXIT} \i\c{SYSEXIT}: Fast Return From System Call
+\S{insSYSEXIT} \i\c{SYSEXIT}: Fast Return From System Call
 
 \c SYSEXIT                       ; 0F 35                [P6,PRIV]
 
 \c{SYSEXIT} executes a fast return to privilege level 3 user code.
 This instruction is a companion instruction to the \c{SYSENTER}
-instruction, and can only be executed by privelege level 0 code.
+instruction, and can only be executed by privilege level 0 code.
 Various registers need to be set up before calling this instruction:
 
 \b \c{SYSENTER_CS_MSR} contains the 32-bit segment selector for the
@@ -12169,11 +12419,11 @@ register.
 \b Begins executing the user code at the \c{EIP} address.
 
 For more information on the use of the \c{SYSENTER} and \c{SYSEXIT}
-instructions, see the Intel Architecture Software Developer\92s
+instructions, see the Intel Architecture Software Developer's
 Manual, Volume 2.
 
 
-\H{insSYSRET} \i\c{SYSRET}: Return From Operating System
+\S{insSYSRET} \i\c{SYSRET}: Return From Operating System
 
 \c SYSRET                        ; 0F 07                [P6,AMD,PRIV]
 
@@ -12184,14 +12434,14 @@ Manual, Volume 2.
 after the corresponding \c{SYSCALL} instruction, is copied into the \c{EIP}
 register.
 
-\b Bits [63\9648] of the \c{STAR} register specify the selector that is copied
+\b Bits [63-48] of the \c{STAR} register specify the selector that is copied
 into the \c{CS} register.
 
-\b Bits [63\9648]+1000b of the \c{STAR} register specify the selector that is
+\b Bits [63-48]+1000b of the \c{STAR} register specify the selector that is
 copied into the \c{SS} register.
 
-\b Bits [1\960] of the \c{SS} register are set to 11b (RPL of 3) regardless of
-the value of bits [49\9648] of the \c{STAR} register.
+\b Bits [1-0] of the \c{SS} register are set to 11b (RPL of 3) regardless of
+the value of bits [49-48] of the \c{STAR} register.
 
 The \c{CS} and \c{SS} registers should not be modified by the operating
 system between the execution of the \c{SYSCALL} instruction and its
@@ -12201,7 +12451,7 @@ For more information, see the \c{SYSCALL and SYSRET Instruction Specification}
 (AMD document number 21086.pdf).
 
 
-\H{insTEST} \i\c{TEST}: Test Bits (notional bitwise AND)
+\S{insTEST} \i\c{TEST}: Test Bits (notional bitwise AND)
 
 \c TEST r/m8,reg8                ; 84 /r                [8086]
 \c TEST r/m16,reg16              ; o16 85 /r            [8086]
@@ -12220,7 +12470,7 @@ affects the flags as if the operation had taken place, but does not
 store the result of the operation anywhere.
 
 
-\H{insUCOMISD} \i\c{UCOMISD}: Unordered Scalar Double-Precision FP
+\S{insUCOMISD} \i\c{UCOMISD}: Unordered Scalar Double-Precision FP
 compare and set EFLAGS
 
 \c UCOMISD xmm1,xmm2/m128        ; 66 0F 2E /r     [WILLAMETTE,SSE2]
@@ -12233,10 +12483,10 @@ in the \c{EFLAGS} register are zeroed out. The unordered predicate
 operand is a \c{NaN} (\c{qNaN} or \c{sNaN}).
 
 
-\H{insUCOMISS} \i\c{UCOMISS}: Unordered Scalar Single-Precision FP
+\S{insUCOMISS} \i\c{UCOMISS}: Unordered Scalar Single-Precision FP
 compare and set EFLAGS
 
-\c UCOMISS xmm1,xmm2/m128        ; 0F 2E /r        [KATMAI,SSE] 
+\c UCOMISS xmm1,xmm2/m128        ; 0F 2E /r        [KATMAI,SSE]
 
 \c{UCOMISS} compares the low-order single-precision FP numbers in the
 two operands, and sets the \c{ZF}, \c{PF} and \c{CF} bits in the
@@ -12246,7 +12496,7 @@ in the \c{EFLAGS} register are zeroed out. The unordered predicate
 operand is a \c{NaN} (\c{qNaN} or \c{sNaN}).
 
 
-\H{insUD2} \i\c{UD0}, \i\c{UD1}, \i\c{UD2}: Undefined Instruction
+\S{insUD2} \i\c{UD0}, \i\c{UD1}, \i\c{UD2}: Undefined Instruction
 
 \c UD0                           ; 0F FF                [186,UNDOC]
 \c UD1                           ; 0F B9                [186,UNDOC]
@@ -12268,7 +12518,7 @@ All these opcodes can be used to generate invalid opcode exceptions on
 all processors that are available at the current time.
 
 
-\H{insUMOV} \i\c{UMOV}: User Move Data
+\S{insUMOV} \i\c{UMOV}: User Move Data
 
 \c UMOV r/m8,reg8                ; 0F 10 /r             [386,UNDOC]
 \c UMOV r/m16,reg16              ; o16 0F 11 /r         [386,UNDOC]
@@ -12287,14 +12537,14 @@ This instruction is only available on some AMD and IBM 386 and 486
 processors.
 
 
-\H{insUNPCKHPD} \i\c{UNPCKHPD}: Unpack and Interleave High Packed
+\S{insUNPCKHPD} \i\c{UNPCKHPD}: Unpack and Interleave High Packed
 Double-Precision FP Values
 
 \c UNPCKHPD xmm1,xmm2/m128       ; 66 0F 15 /r     [WILLAMETTE,SSE2]
 
 \c{UNPCKHPD} performs an interleaved unpack of the high-order data
 elements of the source and destination operands, saving the result
-in \c{xmm1}. It ignores the lower half of the sources. 
+in \c{xmm1}. It ignores the lower half of the sources.
 
 The operation of this instruction is:
 
@@ -12302,7 +12552,7 @@ The operation of this instruction is:
 \c    dst[127-64] := src[127-64].
 
 
-\H{insUNPCKHPS} \i\c{UNPCKHPS}: Unpack and Interleave High Packed
+\S{insUNPCKHPS} \i\c{UNPCKHPS}: Unpack and Interleave High Packed
 Single-Precision FP Values
 
 \c UNPCKHPS xmm1,xmm2/m128       ; 0F 15 /r        [KATMAI,SSE]
@@ -12319,7 +12569,7 @@ The operation of this instruction is:
 \c    dst[127-96] := src[127-96].
 
 
-\H{insUNPCKLPD} \i\c{UNPCKLPD}: Unpack and Interleave Low Packed
+\S{insUNPCKLPD} \i\c{UNPCKLPD}: Unpack and Interleave Low Packed
 Double-Precision FP Data
 
 \c UNPCKLPD xmm1,xmm2/m128       ; 66 0F 14 /r     [WILLAMETTE,SSE2]
@@ -12334,7 +12584,7 @@ The operation of this instruction is:
 \c    dst[127-64] := src[63-0].
 
 
-\H{insUNPCKLPS} \i\c{UNPCKLPS}: Unpack and Interleave Low Packed
+\S{insUNPCKLPS} \i\c{UNPCKLPS}: Unpack and Interleave Low Packed
 Single-Precision FP Data
 
 \c UNPCKLPS xmm1,xmm2/m128       ; 0F 14 /r        [KATMAI,SSE]
@@ -12351,7 +12601,7 @@ The operation of this instruction is:
 \c    dst[127-96] := src[63-32].
 
 
-\H{insVERR} \i\c{VERR}, \i\c{VERW}: Verify Segment Readability/Writability
+\S{insVERR} \i\c{VERR}, \i\c{VERW}: Verify Segment Readability/Writability
 
 \c VERR r/m16                    ; 0F 00 /4             [286,PRIV]
 
@@ -12364,7 +12614,7 @@ Otherwise it is cleared.
 \b \c{VERW} sets the zero flag if the segment can be written.
 
 
-\H{insWAIT} \i\c{WAIT}: Wait for Floating-Point Processor
+\S{insWAIT} \i\c{WAIT}: Wait for Floating-Point Processor
 
 \c WAIT                          ; 9B                   [8086]
 \c FWAIT                         ; 9B                   [8086]
@@ -12380,7 +12630,7 @@ it has the alternative purpose of ensuring that any pending unmasked
 FPU exceptions have happened before execution continues.
 
 
-\H{insWBINVD} \i\c{WBINVD}: Write Back and Invalidate Cache
+\S{insWBINVD} \i\c{WBINVD}: Write Back and Invalidate Cache
 
 \c WBINVD                        ; 0F 09                [486]
 
@@ -12391,7 +12641,7 @@ data is lost. To flush the caches quickly without bothering to write
 the data back first, use \c{INVD} (\k{insINVD}).
 
 
-\H{insWRMSR} \i\c{WRMSR}: Write Model-Specific Registers
+\S{insWRMSR} \i\c{WRMSR}: Write Model-Specific Registers
 
 \c WRMSR                         ; 0F 30                [PENT]
 
@@ -12400,7 +12650,7 @@ Model-Specific Register (MSR) whose index is stored in \c{ECX}.
 See also \c{RDMSR} (\k{insRDMSR}).
 
 
-\H{insWRSHR} \i\c{WRSHR}: Write SMM Header Pointer Register
+\S{insWRSHR} \i\c{WRSHR}: Write SMM Header Pointer Register
 
 \c WRSHR r/m32                   ; 0F 37 /0        [386,CYRIX,SMM]
 
@@ -12410,7 +12660,7 @@ See also \c{RDMSR} (\k{insRDMSR}).
 See also \c{RDSHR} (\k{insRDSHR}).
 
 
-\H{insXADD} \i\c{XADD}: Exchange and Add
+\S{insXADD} \i\c{XADD}: Exchange and Add
 
 \c XADD r/m8,reg8                ; 0F C0 /r             [486]
 \c XADD r/m16,reg16              ; o16 0F C1 /r         [486]
@@ -12422,7 +12672,7 @@ operand. This instruction can be used with a \c{LOCK} prefix for
 multi-processor synchronisation purposes.
 
 
-\H{insXBTS} \i\c{XBTS}: Extract Bit String
+\S{insXBTS} \i\c{XBTS}: Extract Bit String
 
 \c XBTS reg16,r/m16              ; o16 0F A6 /r         [386,UNDOC]
 \c XBTS reg32,r/m32              ; o32 0F A6 /r         [386,UNDOC]
@@ -12434,7 +12684,7 @@ The implied operation of this instruction is:
 
 Writes a bit string from the source operand to the destination. \c{CL}
 indicates the number of bits to be copied, and \c{(E)AX} indicates the
-low order bit offset in the source. The bist are written to the low
+low order bit offset in the source. The bits are written to the low
 order bits of the destination register. For example, if \c{CL} is set
 to 4 and \c{AX} (for 16-bit code) is set to 5, bits 5-8 of \c{src} will
 be copied to bits 0-3 of \c{dst}. This instruction is very poorly
@@ -12446,7 +12696,7 @@ the opcodes for \c{CMPXCHG486} (on early Intel 486s). NASM supports it
 only for completeness. Its counterpart is \c{IBTS} (see \k{insIBTS}).
 
 
-\H{insXCHG} \i\c{XCHG}: Exchange
+\S{insXCHG} \i\c{XCHG}: Exchange
 
 \c XCHG reg8,r/m8                ; 86 /r                [8086]
 \c XCHG reg16,r/m8               ; o16 87 /r            [8086]
@@ -12470,7 +12720,7 @@ setting) generates the opcode \c{90h}, and so is a synonym for
 \c{NOP} (\k{insNOP}).
 
 
-\H{insXLATB} \i\c{XLATB}: Translate Byte in Lookup Table
+\S{insXLATB} \i\c{XLATB}: Translate Byte in Lookup Table
 
 \c XLAT                          ; D7                   [8086]
 \c XLATB                         ; D7                   [8086]
@@ -12489,7 +12739,7 @@ can be overridden by using a segment register name as a prefix (for
 example, \c{es xlatb}).
 
 
-\H{insXOR} \i\c{XOR}: Bitwise Exclusive OR
+\S{insXOR} \i\c{XOR}: Bitwise Exclusive OR
 
 \c XOR r/m8,reg8                 ; 30 /r                [8086]
 \c XOR r/m16,reg16               ; o16 31 /r            [8086]
@@ -12525,19 +12775,19 @@ The \c{MMX} instruction \c{PXOR} (see \k{insPXOR}) performs the same
 operation on the 64-bit \c{MMX} registers.
 
 
-\H{insXORPD} \i\c{XORPD}: Bitwise Logical XOR of Double-Precision FP Values
+\S{insXORPD} \i\c{XORPD}: Bitwise Logical XOR of Double-Precision FP Values
 
 \c XORPD xmm1,xmm2/m128          ; 66 0F 57 /r     [WILLAMETTE,SSE2]
 
-\c{XORPD} returns a bit-wise logical XOR  between the source and
+\c{XORPD} returns a bit-wise logical XOR between the source and
 destination operands, storing the result in the destination operand.
 
 
-\H{insXORPS} \i\c{XORPS}: Bitwise Logical XOR of Single-Precision FP Values
+\S{insXORPS} \i\c{XORPS}: Bitwise Logical XOR of Single-Precision FP Values
 
 \c XORPS xmm1,xmm2/m128          ; 0F 57 /r        [KATMAI,SSE]
 
-\c{XORPS} returns a bit-wise logical XOR  between the source and
+\c{XORPS} returns a bit-wise logical XOR between the source and
 destination operands, storing the result in the destination operand.