Merge pull request #43 from martin-a-brown/master

reverting my earlier changes to DocBook 5.0 Assembly-HOWTO, then making minor corrections
This commit is contained in:
Martin A. Brown 2016-03-04 00:19:08 -08:00
commit 0ece24b176
1 changed files with 116 additions and 118 deletions

View File

@ -1,26 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
<!DOCTYPE book [
<!ENTITY version "0.7">
]>
<!-- $id:$ -->
<book>
<book xmlns="http://docbook.org/ns/docbook" version="5.0"
xmlns:xlink="http://www.w3.org/1999/xlink"
xml:lang="en">
<!-- <?dbhtml filename="Assembly-HOWTO.html"?> -->
<bookinfo><title>Linux Assembly HOWTO</title>
<info><title>Linux Assembly HOWTO</title>
<authorgroup>
<author>
<personname>
<anchor xml:id="lnoor"/>
<personname xml:id="lnoor">
<firstname>Leo</firstname>
<surname>Noordergraaf</surname>
</personname>
<affiliation>
<orgname>
<ulink url="http://asm.sourceforge.net">Linux Assembly</ulink>
<link xlink:href="http://asm.sourceforge.net">Linux Assembly</link>
</orgname>
<address>
<email>lnoor@users.sourceforge.net</email>
@ -29,14 +29,13 @@
</author>
<author>
<personname>
<anchor xml:id="konst"/>
<personname xml:id="konst">
<firstname>Konstantin</firstname>
<surname>Boldyshev</surname>
</personname>
<affiliation>
<orgname>
<ulink url="http://asm.sourceforge.net">Linux Assembly</ulink>
<link xlink:href="http://asm.sourceforge.net">Linux Assembly</link>
</orgname>
<address>
<email>konst@users.sourceforge.net</email>
@ -45,14 +44,13 @@
</author>
<author>
<personname>
<anchor xml:id="fare"/>
<personname xml:id="fare">
<firstname>Francois-Rene</firstname>
<surname>Rideau</surname>
</personname>
<affiliation>
<orgname>
<ulink url="http://tunes.org">Tunes project</ulink>
<link xlink:href="http://tunes.org">Tunes project</link>
</orgname>
<address>
<email>fare@tunes.org</email>
@ -132,7 +130,7 @@ platforms.
<keyword>metaprogramming</keyword>
<keyword>preprocessor</keyword>
</keywordset>
</bookinfo>
</info>
<chapter xml:id="s-intro" xreflabel="Introduction">
<?dbhtml filename="introduction.html"?>
@ -149,16 +147,16 @@ read all this assembly-unrelated crap.
<title>Legal Blurb</title>
<para>
Permission is granted to copy, distribute and/or modify this document under the
terms of the GNU <ulink url="http://www.gnu.org/copyleft/fdl.html">Free
Documentation License</ulink> Version 1.1; with no Invariant Sections, with no
terms of the GNU <link xlink:href="http://www.gnu.org/copyleft/fdl.html">Free
Documentation License</link> Version 1.1; with no Invariant Sections, with no
Front-Cover Texts, and no Back-Cover texts. A copy of the license is included
in the <xref linkend="a-gfdl"/> appendix.
</para>
<para>
The most recent official version of this document is available from the
<ulink url="http://asm.sourceforge.net/howto.html">Linux Assembly</ulink>
and <ulink url="http://tldp.org/docs.html">LDP</ulink> sites. If you are
<link xlink:href="http://asm.sourceforge.net/howto.html">Linux Assembly</link>
and <link xlink:href="http://tldp.org/docs.html">LDP</link> sites. If you are
reading a few-months-old copy, consider checking the above URLs for a new
version.
</para>
@ -186,15 +184,15 @@ issue), we are focusing on development of such kind of software.
</para>
<para>
If you don't know what <ulink url="http://www.gnu.org/philosophy/">
<emphasis>free software</emphasis></ulink> is, please do read
If you don't know what <link xlink:href="http://www.gnu.org/philosophy/">
<emphasis>free software</emphasis></link> is, please do read
<emphasis>carefully</emphasis> the GNU
<ulink url="http://www.gnu.org/copyleft/gpl.html">
General Public License</ulink> (<acronym>GPL</acronym> or
<link xlink:href="http://www.gnu.org/copyleft/gpl.html">
General Public License</link> (<acronym>GPL</acronym> or
<acronym>copyleft</acronym>), which is used in a lot of free software, and is
the model for most of their licenses. It generally comes in a file named
<filename>COPYING</filename> (or <filename>COPYING.LIB</filename>). Literature
from the <ulink url="http://www.fsf.org">Free Software Foundation</ulink>
from the <link xlink:href="http://www.fsf.org">Free Software Foundation</link>
(<acronym>FSF</acronym>) might help you too. Particularly, the interesting
feature of free software is that it comes with source code which you can
consult and correct, or sometimes even borrow from. Read your particular
@ -229,11 +227,11 @@ version 0.5).
<title>Translations</title>
<para>
Korean translation of this HOWTO is avalilable at
<ulink url="http://kldp.org/HOWTO/html/Assembly-HOWTO/">
http://kldp.org/HOWTO/html/Assembly-HOWTO/</ulink>.
<link xlink:href="http://kldp.org/HOWTO/html/Assembly-HOWTO/">
http://kldp.org/HOWTO/html/Assembly-HOWTO/</link>.
Turkish translation of this HOWTO is available at
<ulink url="http://belgeler.org/howto/assembly-howto.html">
http://belgeler.org/howto/assembly-howto.html</ulink>.
<link xlink:href="http://belgeler.org/howto/assembly-howto.html">
http://belgeler.org/howto/assembly-howto.html</link>.
</para>
</simplesect>
</chapter>
@ -405,7 +403,7 @@ good);
<listitem>
<para>
And in any case, as moderator John Levine says on
<ulink url="news:comp.compilers">comp.compilers</ulink>,
<link xlink:href="news:comp.compilers">comp.compilers</link>,
</para>
<literallayout>
@ -491,7 +489,7 @@ written in assembly for speed up.
<section>
<title>General procedure to achieve efficient code</title>
<para>
As Charles Fiterman says on <ulink url="news:comp.compilers">comp.compilers</ulink>
As Charles Fiterman says on <link xlink:href="news:comp.compilers">comp.compilers</link>
about human vs computer-generated assembly code:
</para>
@ -689,19 +687,19 @@ available platforms, notably Linux, *BSD, VSTa, OS/2, *DOS, Win*, etc.
<section><title>Where to find GCC</title>
<para>
GCC home page is <ulink url="http://gcc.gnu.org">http://gcc.gnu.org</ulink>.
GCC home page is <link xlink:href="http://gcc.gnu.org">http://gcc.gnu.org</link>.
</para>
<para>
<anchor xml:id="p-djgpp"/>
DOS port of GCC is called
<ulink url="http://www.delorie.com/djgpp/">DJGPP</ulink>.
<link xlink:href="http://www.delorie.com/djgpp/">DJGPP</link>.
</para>
<para>
There are two Win32 GCC ports:
<ulink url="http://www.cygwin.com">cygwin</ulink> and
<ulink url="http://www.mingw.org">mingw</ulink>
<link xlink:href="http://www.cygwin.com">cygwin</link> and
<link xlink:href="http://www.mingw.org">mingw</link>
</para>
<para>
@ -709,8 +707,8 @@ There is also an OS/2 port of GCC called EMX;
it works under DOS too,
and includes lots of unix-emulation library routines.
Look around the following site:
<ulink url="ftp://ftp.leo.org/pub/comp/os/os2/leo/gnu/emx+gcc/">
ftp://ftp.leo.org/pub/comp/os/os2/leo/gnu/emx+gcc/</ulink>.
<link xlink:href="ftp://ftp.leo.org/pub/comp/os/os2/leo/gnu/emx+gcc/">
ftp://ftp.leo.org/pub/comp/os/os2/leo/gnu/emx+gcc/</link>.
</para>
</section>
@ -752,8 +750,8 @@ The DJGPP Games resource (not only for game hackers) had page specifically
about assembly, but it's down. Its data have nonetheless been recovered on the
<link linkend="p-djgpp">DJGPP site</link>, that contains a mine of other
useful information:
<ulink url="http://www.delorie.com/djgpp/doc/brennan/">
http://www.delorie.com/djgpp/doc/brennan/</ulink>.
<link xlink:href="http://www.delorie.com/djgpp/doc/brennan/">
http://www.delorie.com/djgpp/doc/brennan/</link>.
</para>
<para>
@ -826,7 +824,7 @@ obvious stupid errors.
You can add some CPU-specific <option>-m486</option> or such flag so that GCC
will produce code that is more adapted to your precise CPU. Note that modern
GCC has <option>-mpentium</option> and such flags (and
<ulink url="http://goof.com/pcg/">PGCC</ulink> has even more), whereas
<link xlink:href="http://goof.com/pcg/">PGCC</link> has even more), whereas
GCC 2.7.x and older versions do not. A good choice of CPU-specific flags should
be in the Linux kernel. Check the TeXinfo documentation of your current GCC
installation for more.
@ -907,8 +905,8 @@ GAS is the GNU Assembler, that GCC relies upon.
<para>
Find it at the same place where you've found GCC, in the binutils package.
The latest version of binutils is available from
<ulink url="http://sources.redhat.com/binutils/">
http://sources.redhat.com/binutils/</ulink>.
<link xlink:href="http://sources.redhat.com/binutils/">
http://sources.redhat.com/binutils/</link>.
</para>
</section>
@ -1014,9 +1012,9 @@ see under <filename>linux/arch/i386/</filename> the following files:
<para>
If you are writing kind of a language, a thread package, etc., you might as
well see how other languages (<ulink url="http://para.inria.fr/">
OCaml</ulink>, <ulink url="http://www.jwdt.com/~paysan/gforth.html">
Gforth</ulink>, etc.), or thread packages (QuickThreads, MIT pthreads,
well see how other languages (<link xlink:href="http://para.inria.fr/">
OCaml</link>, <link xlink:href="http://www.jwdt.com/~paysan/gforth.html">
Gforth</link>, etc.), or thread packages (QuickThreads, MIT pthreads,
LinuxThreads, etc), or whatever else do it.
</para>
@ -1035,8 +1033,8 @@ Good news are that starting from binutils 2.10 release, GAS supports Intel
syntax too. It can be triggered with <literal>.intel_syntax</literal>
directive. Unfortunately this mode is not documented (yet?) in the official
binutils manual, so if you want to use it, try to examine
<ulink url="http://www.lxhp.in-berlin.de/lhpas86.html">
http://www.lxhp.in-berlin.de/lhpas86.html</ulink>, which is an extract from AMD
<link xlink:href="http://www.lxhp.in-berlin.de/lhpas86.html">
http://www.lxhp.in-berlin.de/lhpas86.html</link>, which is an extract from AMD
64bit port of binutils 2.11.
</para>
</section>
@ -1094,9 +1092,9 @@ formats.
<title>Where to find NASM</title>
<para>
<ulink url="http://www.nasm.us">http://www.nasm.us</ulink>,
<ulink url="http://sourceforge.net/projects/nasm/">
http://sourceforge.net/projects/nasm/</ulink>
<link xlink:href="http://www.nasm.us">http://www.nasm.us</link>,
<link xlink:href="http://sourceforge.net/projects/nasm/">
http://sourceforge.net/projects/nasm/</link>
</para>
<para>
@ -1182,8 +1180,8 @@ ELKS continues to use it.
<para>
AS86 can be found at
<ulink url="http://www.debath.co.uk/dev86/">
http://www.debath.co.uk/dev86/</ulink>, in the bin86 package with linker (ld86),
<link xlink:href="http://www.debath.co.uk/dev86/">
http://www.debath.co.uk/dev86/</link>, in the bin86 package with linker (ld86),
or as separate archive. Documentation is available as the man page and as.doc
from the source package. When in doubt, the source code itself is often a good
doc: though it is not very well commented, the programming style is
@ -1242,7 +1240,7 @@ FASM (flat assembler) is a fast, efficient 80x86 assembler that runs in
source code to include the information it really needs. It is written in itself
and is very small and fast. It runs on DOS/Windows/Linux and can produce flat
binary, DOS EXE, Win32 PE, COFF and Linux ELF output. See
<ulink url="http://flatassembler.net">http://flatassembler.net</ulink>.
<link xlink:href="http://flatassembler.net">http://flatassembler.net</link>.
</para>
</section>
@ -1259,8 +1257,8 @@ and has various HLL-like extensions and programmer convenience commands.
<para>
It is (of course) slower than other assemblers. It has its own syntax (and uses
its own names for x86 opcodes) Fairly good documentation is included. Check it
out: <ulink url="ftp://linux01.gwdg.de/pub/cLIeNUX/interim/">
ftp://linux01.gwdg.de/pub/cLIeNUX/interim/</ulink> (Access is password
out: <link xlink:href="ftp://linux01.gwdg.de/pub/cLIeNUX/interim/">
ftp://linux01.gwdg.de/pub/cLIeNUX/interim/</link> (Access is password
controlled). You will probably not use it on regular basis, but at least it
deserves your interest as an interesting idea.
</para>
@ -1293,8 +1291,8 @@ formats.
</para>
<para>
<ulink url="http://savannah.nongnu.org/projects/aasm/">
http://savannah.nongnu.org/projects/aasm/</ulink>
<link xlink:href="http://savannah.nongnu.org/projects/aasm/">
http://savannah.nongnu.org/projects/aasm/</link>
</para>
</section>
@ -1309,8 +1307,8 @@ compilation process.
</para>
<para>
It is available from <ulink url="http://www.penguin.cz/~niki/tdasm/">
http://www.penguin.cz/~niki/tdasm/</ulink> but is seems it is no longer
It is available from <link xlink:href="http://www.penguin.cz/~niki/tdasm/">
http://www.penguin.cz/~niki/tdasm/</link> but is seems it is no longer
actively maintained.
</para>
</section>
@ -1319,8 +1317,8 @@ actively maintained.
<title>HLA</title>
<para>
<ulink url="http://www.plantation-productions.com/Webster/HighLevelAsm/index.html">
HLA</ulink> is a <emphasis>H</emphasis>igh <emphasis>L</emphasis>evel
<link xlink:href="http://www.plantation-productions.com/Webster/HighLevelAsm/index.html">
HLA</link> is a <emphasis>H</emphasis>igh <emphasis>L</emphasis>evel
<emphasis>A</emphasis>ssembly language. It uses a high level language like
syntax (similar to Pascal, C/C++, and other HLLs) for variable declarations,
procedure declarations, and procedure calls. It uses a modified assembly
@ -1341,7 +1339,7 @@ assembling and linking.
<title>TALC</title>
<para>
<ulink url="http://www.cs.cornell.edu/talc/">TALC</ulink> is another free
<link xlink:href="http://www.cs.cornell.edu/talc/">TALC</link> is another free
MASM/Win32 based compiler (however it supports ELF output, does it?).
</para>
@ -1365,7 +1363,7 @@ extensible operating system kernels.
<title>Free Pascal</title>
<para>
<ulink url="http://www.freepascal.org">Free Pascal</ulink> has an internal
<link xlink:href="http://www.freepascal.org">Free Pascal</link> has an internal
32-bit assembler (based on NASM tables) and a switchable output that allows:
<itemizedlist>
<listitem>
@ -1427,8 +1425,8 @@ FORTH language. Macro processing is done with the full power of the reflective
language FORTH; however, the only supported input and output contexts is
Win32For itself (no dumping of <filename>.obj</filename> file, but you could
add that feature yourself, of course). Find it at
<ulink url="ftp://ftp.forth.org/pub/Forth/Compilers/native/windows/Win32For/">
ftp://ftp.forth.org/pub/Forth/Compilers/native/windows/Win32For/</ulink>.
<link xlink:href="ftp://ftp.forth.org/pub/Forth/Compilers/native/windows/Win32For/">
ftp://ftp.forth.org/pub/Forth/Compilers/native/windows/Win32For/</link>.
</para>
</section>
@ -1436,7 +1434,7 @@ ftp://ftp.forth.org/pub/Forth/Compilers/native/windows/Win32For/</ulink>.
<title>Terse</title>
<para>
<ulink url="http://www.terse.com">Terse</ulink> is a programming tool that
<link xlink:href="http://www.terse.com">Terse</link> is a programming tool that
provides <emphasis>THE</emphasis> most compact assembler syntax for the x86
family! However, it is evil proprietary software. It is said that there was a
project for a free clone somewhere, that was abandoned after worthless pretenses
@ -1447,7 +1445,7 @@ develop a terse-syntax frontend to NASM, if you like that syntax.
<para>
As an interesting historic remark, on
<ulink url="news:comp.compilers">comp.compilers</ulink>,
<link xlink:href="news:comp.compilers">comp.compilers</link>,
</para>
<para>
@ -1561,8 +1559,8 @@ that CPP cannot.
<para>
See
<ulink url="ftp://ftp.forth.org/pub/Forth/Compilers/native/unix/this4th.tar.gz">
macro4th (this4th)</ulink> as an example of advanced macroprogramming using m4.
<link xlink:href="ftp://ftp.forth.org/pub/Forth/Compilers/native/unix/this4th.tar.gz">
macro4th (this4th)</link> as an example of advanced macroprogramming using m4.
</para>
<para>
@ -1680,8 +1678,8 @@ There is a project, using the programming language Icon
(with an experimental ML version),
to build a basis for producing assembly-manipulating code.
See around
<ulink url="http://www.eecs.harvard.edu/~nr/toolkit/">
http://www.eecs.harvard.edu/~nr/toolkit/</ulink>
<link xlink:href="http://www.eecs.harvard.edu/~nr/toolkit/">
http://www.eecs.harvard.edu/~nr/toolkit/</link>
</para>
</section>
@ -1689,7 +1687,7 @@ http://www.eecs.harvard.edu/~nr/toolkit/</ulink>
<title>TUNES</title>
<para>
The <ulink url="http://www.tunes.org">TUNES Project</ulink>
The <link xlink:href="http://www.tunes.org">TUNES Project</link>
for a Free Reflective Computing System is developing its own assembler
as an extension to the Scheme language, as part of its development process.
It doesn't run at all yet, though help is welcome.
@ -1926,10 +1924,10 @@ Therefore, you might have to reimplement large parts of libc, from
can be <emphasis>quite</emphasis> boring sometimes. Note that some people have
already reimplemented "light" replacements for parts of the libc - - check
them out! (Redhat's minilibc, Rick Hohensee's
<ulink url="ftp://linux01.gwdg.de/pub/cLIeNUX/interim/libsys.tgz">libsys</ulink>,
Felix von Leitner's <ulink url="http://www.fefe.de/dietlibc/">dietlibc</ulink>,
<!-- Christian Fowelin's <ulink url="http://www.fowelin.de/christian/computer/libASM/">libASM</link>, -->
<ulink url="http://asm.sourceforge.net/asmutils.html">asmutils</ulink>
<link xlink:href="ftp://linux01.gwdg.de/pub/cLIeNUX/interim/libsys.tgz">libsys</link>,
Felix von Leitner's <link xlink:href="http://www.fefe.de/dietlibc/">dietlibc</link>,
<!-- Christian Fowelin's <link xlink:href="http://www.fowelin.de/christian/computer/libASM/">libASM</link>, -->
<link xlink:href="http://asm.sourceforge.net/asmutils.html">asmutils</link>
project is working on pure assembly libc)
</para>
</listitem>
@ -2034,9 +2032,9 @@ previous Linux versions understand only 5 parameters in registers.
</note>
<para>
<ulink url="http://www.tldp.org/LDP/lki/">Linux Kernel Internals</ulink>,
and especially <ulink url="http://www.tldp.org/LDP/lki/lki-2.html#ss2.11">
How System Calls Are Implemented on i386 Architecture?</ulink> chapter will give
<link xlink:href="http://www.tldp.org/LDP/lki/">Linux Kernel Internals</link>,
and especially <link xlink:href="http://www.tldp.org/LDP/lki/lki-2.html#ss2.11">
How System Calls Are Implemented on i386 Architecture?</link> chapter will give
you more robust overview.
</para>
@ -2068,8 +2066,8 @@ and documents from the LDP.
<para>
Particularly, if what you want is Graphics programming, then do join one of the
<ulink url="http://www.ggi-project.org/">GGI</ulink> or
<ulink url="http://www.XFree86.org/">XFree86</ulink> projects.
<link xlink:href="http://www.ggi-project.org/">GGI</link> or
<link xlink:href="http://www.XFree86.org/">XFree86</link> projects.
</para>
<para>
@ -2092,7 +2090,7 @@ assembly source files.
<para>
Such thing is theoretically possible (proof: see how
<ulink url="http://www.dosemu.org">DOSEMU</ulink> can selectively grant
<link xlink:href="http://www.dosemu.org">DOSEMU</link> can selectively grant
hardware port access to programs), and I've heard rumors that someone somewhere
did actually do it (in the PCI driver? Some VESA access stuff? ISA PnP? dunno).
If you have some more precise information on that, you'll be most welcome.
@ -2165,8 +2163,8 @@ reflect the interrupt into the real-mode or vm86 handler).
<para>
Docs about DPMI (and much more) can be found on
<ulink url="http://en.wikipedia.org/wiki/DOS_Protected_Mode_Interface">
http://en.wikipedia.org/wiki/DOS_Protected_Mode_Interface</ulink>).
<link xlink:href="http://en.wikipedia.org/wiki/DOS_Protected_Mode_Interface">
http://en.wikipedia.org/wiki/DOS_Protected_Mode_Interface</link>).
</para>
<para>
@ -2178,7 +2176,7 @@ derivative/subset/replacement, too.
It is possible to cross-compile from Linux to DOS, see the
<filename>devel/msdos/</filename> directory of your local FTP mirror for
metalab.unc.edu; Also see the MOSS DOS-extender from the
<ulink url="http://www.cs.utah.edu/projects/flux/">Flux project</ulink>
<link xlink:href="http://www.cs.utah.edu/projects/flux/">Flux project</link>
from the university of Utah.
</para>
@ -2192,7 +2190,7 @@ development.
<para>
This document is not about Windows programming, you can find lots of documents
about it everywhere... The thing you should know is that there is the
<ulink url="http://www.cygwin.com">cygwin32.dll library</ulink>,
<link xlink:href="http://www.cygwin.com">cygwin32.dll library</link>,
for GNU programs to run on Win32 platform; thus, you can use GCC, GAS,
all the GNU tools, and many other Unix applications.
</para>
@ -2213,7 +2211,7 @@ an underlying system (much like Linux over Mach or OpenGenera over Unix).
<para>
Hence, for easier debugging purpose, you might like to develop your "OS" first
as a process running on top of Linux (despite the slowness), then use the
<ulink url="http://www.cs.utah.edu/projects/flux/oskit/">Flux OS kit</ulink>
<link xlink:href="http://www.cs.utah.edu/projects/flux/oskit/">Flux OS kit</link>
(which grants use of Linux and BSD drivers in your own OS) to make it
stand-alone. When your OS is stable, it is time to write your own hardware
drivers if you really love that.
@ -2228,8 +2226,8 @@ braindeadness, defining your object format and calling conventions.
<para>
The main place where to find reliable information about that all, is source
code of existing OSes and bootloaders. Lots of pointers are on the following
webpage: <ulink url="http://www.tunes.org/Review/OSes.html">
http://www.tunes.org/Review/OSes.html</ulink>
webpage: <link xlink:href="http://www.tunes.org/Review/OSes.html">
http://www.tunes.org/Review/OSes.html</link>
</para>
</section>
</chapter>
@ -2261,8 +2259,8 @@ and <command>gas</command>, thus showing Intel and AT&amp;T syntax.
<para>
You may also want to read
<ulink url="http://asm.sourceforge.net/intro.html">
Introduction to UNIX assembly programming</ulink> tutorial, it contains sample
<link xlink:href="http://asm.sourceforge.net/intro.html">
Introduction to UNIX assembly programming</link> tutorial, it contains sample
code for other UNIX-like OSes.
</para>
@ -2525,8 +2523,8 @@ Your main resource for Linux/UNIX assembly programming material is:
<blockquote>
<para>
<ulink url="http://asm.sourceforge.net/resources.html">
http://asm.sourceforge.net/resources.html</ulink>
<link xlink:href="http://asm.sourceforge.net/resources.html">
http://asm.sourceforge.net/resources.html</link>
</para>
</blockquote>
@ -2544,7 +2542,7 @@ If you are new to assembly in general, here are few starting pointers:
<itemizedlist>
<listitem>
<para>
<ulink url="http://savannah.nongnu.org/projects/pgubook/">Programming from the ground up</ulink>
<link xlink:href="http://savannah.nongnu.org/projects/pgubook/">Programming from the ground up</link>
</para>
</listitem>
@ -2556,7 +2554,7 @@ x86 assembly FAQ (use Google)
<listitem>
<para>
<ulink url="http://www.koth.org">CoreWars</ulink>,
<link xlink:href="http://www.koth.org">CoreWars</link>,
a fun way to learn assembly in general
</para>
</listitem>
@ -2564,8 +2562,8 @@ a fun way to learn assembly in general
<listitem>
<para>
Usenet:
<ulink url="news://comp.lang.asm.x86">comp.lang.asm.x86</ulink>;
<ulink url="news://alt.lang.asm">alt.lang.asm</ulink>
<link xlink:href="news://comp.lang.asm.x86">comp.lang.asm.x86</link>;
<link xlink:href="news://alt.lang.asm">alt.lang.asm</link>
</para>
</listitem>
</itemizedlist>
@ -2602,8 +2600,8 @@ subscribe linux-assembly
<para>
Detailed information and list archives are available at
<ulink url="http://asm.sourceforge.net/list.html">
http://asm.sourceforge.net/list.html</ulink>.
<link xlink:href="http://asm.sourceforge.net/list.html">
http://asm.sourceforge.net/list.html</link>.
</para>
</simplesect>
</chapter>
@ -2630,7 +2628,7 @@ How do I do graphics programming in Linux?
<answer>
<para>
An answer from <ulink url="mailto:paulf@gam.co.za">Paul Furber</ulink>:
An answer from <link xlink:href="mailto:paulf@gam.co.za">Paul Furber</link>:
</para>
<para>
@ -2698,7 +2696,7 @@ How do I debug pure assembly code under Linux?
<answer>
<para>
There's an early version of the
<ulink url="http://ald.sourceforge.net">Assembly Language Debugger</ulink>,
<link xlink:href="http://ald.sourceforge.net">Assembly Language Debugger</link>,
which is designed to work with assembly code,
and is portable enough to run on Linux and *BSD.
It is already functional and should be the right choice, check it out!
@ -2711,7 +2709,7 @@ pure assembly code, and with some trickery you can make
<command>gdb</command> to do what you need
(unfortunately, nasm '-g' switch does not generate
proper debug info for gdb; this is nasm bug, I think).
Here's an answer from <ulink url="mailto:dl@gazeta.ru">Dmitry Bakhvalov</ulink>:
Here's an answer from <link xlink:href="mailto:dl@gazeta.ru">Dmitry Bakhvalov</link>:
</para>
<para>
@ -2767,7 +2765,7 @@ If you want to set breakpoints across your code, you can just use
<para>
If you're using <application>gas</application>, you should consult
<application>gas</application> and <application>gdb</application> related
<ulink url="http://asm.sourceforge.net/resources.html#tutorials">tutorials</ulink>.
<link xlink:href="http://asm.sourceforge.net/resources.html#tutorials">tutorials</link>.
</para>
</answer>
</qandaentry>
@ -2897,7 +2895,7 @@ How do I allocate memory dynamically?
<answer>
<para>
A laconic answer from <ulink url="mailto:phpr@snafu.de">H-Peter Recktenwald</ulink>:
A laconic answer from <link xlink:href="mailto:phpr@snafu.de">H-Peter Recktenwald</link>:
</para>
<para>
@ -2915,7 +2913,7 @@ A laconic answer from <ulink url="mailto:phpr@snafu.de">H-Peter Recktenwald</uli
<answer>
<para>
An extensive answer from <ulink url="mailto:ee97034@fe.up.pt">Tiago Gasiba</ulink>:
An extensive answer from <link xlink:href="mailto:ee97034@fe.up.pt">Tiago Gasiba</link>:
</para>
<para>
<programlisting>
@ -2983,7 +2981,7 @@ I can't understand how to use <function>select</function> system call!
<answer>
<para>
An answer from <ulink url="mailto:mochel@transmeta.com">Patrick Mochel</ulink>:
An answer from <link xlink:href="mailto:mochel@transmeta.com">Patrick Mochel</link>:
</para>
<para>
@ -3544,7 +3542,7 @@ the following persons, by order of appearance:
<itemizedlist>
<listitem>
<para>
<ulink url="mailto:buried.alive@in.mail">Linus Torvalds</ulink>
<link xlink:href="mailto:buried.alive@in.mail">Linus Torvalds</link>
for Linux
</para>
</listitem>
@ -3552,37 +3550,37 @@ for Linux
<listitem>
<para>
<anchor xml:id="bde"/>
<ulink url="mailto:bde@zeta.org.au">Bruce Evans</ulink>
<link xlink:href="mailto:bde@zeta.org.au">Bruce Evans</link>
for bcc from which as86 is extracted
</para>
</listitem>
<listitem>
<para>
<ulink url="mailto:anakin@pobox.com">Simon Tatham</ulink> and
<ulink url="mailto:jules@earthcorp.com">Julian Hall</ulink>
<link xlink:href="mailto:anakin@pobox.com">Simon Tatham</link> and
<link xlink:href="mailto:jules@earthcorp.com">Julian Hall</link>
for NASM
</para>
</listitem>
<listitem>
<para>
<ulink url="mailto:gregh@metalab.unc.edu">Greg Hankins</ulink> and now
<ulink url="mailto:linux-howto@metalab.unc.edu">Tim Bynum</ulink>
<link xlink:href="mailto:gregh@metalab.unc.edu">Greg Hankins</link> and now
<link xlink:href="mailto:linux-howto@metalab.unc.edu">Tim Bynum</link>
for maintaining HOWTOs
</para>
</listitem>
<listitem>
<para>
<ulink url="mailto:raymoon@moonware.dgsys.com">Raymond Moon</ulink>
<link xlink:href="mailto:raymoon@moonware.dgsys.com">Raymond Moon</link>
for his FAQ
</para>
</listitem>
<listitem>
<para>
<ulink url="mailto:dumas@linux.eu.org">Eric Dumas</ulink>
<link xlink:href="mailto:dumas@linux.eu.org">Eric Dumas</link>
for his translation of the mini-HOWTO into French
(sad thing for the original author to be French and write in English)
</para>
@ -3590,22 +3588,22 @@ for his translation of the mini-HOWTO into French
<listitem>
<para>
<ulink url="mailto:paul@geeky1.ebtech.net">Paul Anderson</ulink> and
<ulink url="mailto:rahim@megsinet.net">Rahim Azizarab</ulink>
<link xlink:href="mailto:paul@geeky1.ebtech.net">Paul Anderson</link> and
<link xlink:href="mailto:rahim@megsinet.net">Rahim Azizarab</link>
for helping me, if not for taking over the HOWTO
</para>
</listitem>
<listitem>
<para>
<ulink url="mailto:pcg@goof.com">Marc Lehman</ulink>
<link xlink:href="mailto:pcg@goof.com">Marc Lehman</link>
for his insight on GCC invocation
</para>
</listitem>
<listitem>
<para>
<ulink url="mailto:ams@wiw.org">Abhijit Menon-Sen</ulink>
<link xlink:href="mailto:ams@wiw.org">Abhijit Menon-Sen</link>
for helping me figure out the argument passing convention
</para>
</listitem>
@ -4025,8 +4023,8 @@ Version 1.1, March 2000
versions of the GNU Free Documentation License from time to time.
Such new versions will be similar in spirit to the present
version, but may differ in detail to address new problems or
concerns. See <ulink url="http://www.gnu.org/copyleft/">
http://www.gnu.org/copyleft/</ulink>.</para>
concerns. See <link xlink:href="http://www.gnu.org/copyleft/">
http://www.gnu.org/copyleft/</link>.</para>
<para>Each version of the License is given a distinguishing
version number. If the Document specifies that a particular