mirror of https://github.com/tLDP/LDP
version 0.6f
This commit is contained in:
parent
ebcb00b4ba
commit
31652cfef9
|
@ -1,6 +1,6 @@
|
|||
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V3.1//EN" [
|
||||
|
||||
<!ENTITY version "0.6e">
|
||||
<!ENTITY version "0.6f">
|
||||
|
||||
<!ENTITY s-intro "<link linkend=s-intro>Introduction</link>">
|
||||
<!ENTITY s-doyou "<link linkend=s-doyou>Do you need assembly?</link>">
|
||||
|
@ -230,6 +230,18 @@ and am pleased to announce
|
|||
|
||||
</simplesect>
|
||||
|
||||
<simplesect><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>.
|
||||
Also, there was French translation of the early HOWTO versions,
|
||||
but I couldn't find it now.
|
||||
</para>
|
||||
|
||||
</simplesect>
|
||||
|
||||
</chapter>
|
||||
|
||||
<chapter id="s-doyou" xreflabel="Do you need assembly?">
|
||||
|
@ -616,7 +628,7 @@ So, one of the possible ways is to rewrite some
|
|||
and this will really save you a lot of space.
|
||||
For instance, a simple <command>httpd</command> written in assembly
|
||||
can take less than 600 bytes;
|
||||
you can fit a webserver, consisting of kernel and httpd,
|
||||
you can fit a server consisting of kernel, httpd and ftpd
|
||||
in 400 KB or less... Think about it.
|
||||
</para>
|
||||
|
||||
|
@ -903,14 +915,11 @@ GAS is the GNU Assembler, that GCC relies upon.
|
|||
<section><title>Where to find it</title>
|
||||
|
||||
<para>
|
||||
Find it at the same place where you found GCC,
|
||||
in a package named binutils.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The latest version is available from HJLu at
|
||||
<ulink url="ftp://ftp.varesearch.com/pub/support/hjl/binutils/">
|
||||
ftp://ftp.varesearch.com/pub/support/hjl/binutils/
|
||||
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>.
|
||||
</para>
|
||||
|
||||
|
@ -969,7 +978,7 @@ as in <function>addl $5,%eax</function>
|
|||
(add immediate long value 5 to register <literal>%eax</literal>).
|
||||
</para></listitem>
|
||||
<listitem><para>
|
||||
Missing operand prefix indicates it is a memory-address;
|
||||
Missing operand prefix indicates that it is memory-contents;
|
||||
hence <function>movl $foo,%eax</function>
|
||||
puts the <emphasis>address</emphasis> of variable <literal>foo</literal>
|
||||
into register <literal>%eax</literal>,
|
||||
|
@ -990,8 +999,8 @@ from the cell pointed to by <literal>%ebp</literal>).
|
|||
|
||||
<para>
|
||||
<anchor id="p-convert">
|
||||
Note: There are <link linkend="s-res">few programs</link>
|
||||
which may help you to convert source code between AT&T and Intel assembler syntaxes;
|
||||
Note: There are <link linkend="s-res">few programs</link> which may help you
|
||||
to convert source code between AT&T and Intel assembler syntaxes;
|
||||
some of the are capable of performing conversion in both directions.
|
||||
</para>
|
||||
|
||||
|
@ -1012,7 +1021,7 @@ Again, the sources for Linux (the OS kernel) come in as excellent examples;
|
|||
see under <filename>linux/arch/i386/</filename> the following files:
|
||||
<filename>kernel/*.S</filename>,
|
||||
<filename>boot/compressed/*.S</filename>,
|
||||
<filename>mathemu/*.S</filename>.
|
||||
<filename>math-emu/*.S</filename>.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
|
@ -1105,7 +1114,7 @@ to eventually support all known syntaxes and object formats.
|
|||
<title>Where to find NASM</title>
|
||||
|
||||
<para>
|
||||
<ulink url="http://nasm.2y.net">http://nasm.2y.net</ulink>,
|
||||
<ulink url="http://nasm.sourceforge.net">http://nasm.sourceforge.net</ulink>,
|
||||
<ulink url="http://www.cryogen.com/nasm/">http://www.cryogen.com/nasm/</ulink>
|
||||
</para>
|
||||
|
||||
|
@ -1273,6 +1282,18 @@ http://www.tortall.net/projects/yasm/</ulink>.
|
|||
|
||||
</section>
|
||||
|
||||
<section><title>FASM</title>
|
||||
<para>
|
||||
FASM (flat assembler) is a fast, efficient 80x86 assembler
|
||||
that runs in 'flat real mode'. Unlike many other 80x86 assemblers,
|
||||
FASM only requires the 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 and COFF output.
|
||||
See <ulink url="http://fasm.sourceforge.net">http://fasm.sourceforge.net</ulink>.
|
||||
</para>
|
||||
</section>
|
||||
|
||||
<section><title>OSIMPA (SHASM)</title>
|
||||
|
||||
<para>
|
||||
|
@ -1311,6 +1332,59 @@ http://www.penguin.cz/~niki/tdasm/</ulink>.
|
|||
|
||||
</section>
|
||||
|
||||
<section><title>HLA</title>
|
||||
|
||||
<para>
|
||||
<ulink url="http://webster.cs.ucr.edu">HLA</ulink> is a
|
||||
<emphasis remap="bold">H</Emphasis>igh
|
||||
<emphasis remap="bold">L</Emphasis>evel
|
||||
<emphasis remap="bold">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 language syntax for the standard machine instructions.
|
||||
It also provides several high level language style control structures
|
||||
(if, while, repeat..until, etc.) that help you write much more readable code.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
HLA is free and comes with source, Linux and Win32 versions available.
|
||||
On Win32 you need MASM and a 32-bit version of MS-link on Win32,
|
||||
on Linux you nee GAS, because HLA produces specified assembler code
|
||||
and uses that assembler for final assembling and linking.
|
||||
</para>
|
||||
|
||||
</section>
|
||||
|
||||
<section><title>TALC</title>
|
||||
|
||||
<para>
|
||||
<ulink url="http://www.cs.cornell.edu/talc/">TALC</ulink>
|
||||
is another free MASM/Win32 based compiler
|
||||
(however it supports ELF output, does it?).
|
||||
</para>
|
||||
|
||||
<para>
|
||||
TAL stands for
|
||||
<emphasis>T</emphasis>yped
|
||||
<emphasis>A</Emphasis>ssembly
|
||||
<emphasis>L</Emphasis>anguage.
|
||||
It extends traditional untyped assembly languages with typing annotations,
|
||||
memory management primitives, and a sound set of typing rules, to guarantee
|
||||
the memory safety, control flow safety,and type safety of TAL programs.
|
||||
Moreover, the typing constructs are expressive enough to encode
|
||||
most source language programming features including records and structures,
|
||||
arrays, higher-order and polymorphic functions, exceptions, abstract data types,
|
||||
subtyping, and modules. Just as importantly,
|
||||
TAL is flexible enough to admit many low-level compiler optimizations.
|
||||
Consequently, TAL is an ideal target platform for type-directed compilers
|
||||
that want to produce verifiably safe code
|
||||
for use in secure mobile code applications
|
||||
or extensible operating system kernels.
|
||||
</para>
|
||||
|
||||
</section>
|
||||
|
||||
<section><title>Free Pascal</title>
|
||||
|
||||
<para>
|
||||
|
@ -1409,62 +1483,6 @@ improvement over many of its successors. -John"
|
|||
|
||||
</section>
|
||||
|
||||
<section><title>HLA</title>
|
||||
|
||||
<para>
|
||||
<ulink url="http://webster.cs.ucr.edu">HLA</ulink> is a
|
||||
<emphasis remap="bold">H</Emphasis>igh
|
||||
<emphasis remap="bold">L</Emphasis>evel
|
||||
<emphasis remap="bold">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 language syntax for the standard machine instructions.
|
||||
It also provides several high level language style control structures
|
||||
(if, while, repeat..until, etc.) that help you write much more readable code.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
HLA is free, but runs only under Win32.
|
||||
You need MASM and a 32-bit version of MS-link,
|
||||
because HLA produces MASM code and uses MASM for final
|
||||
assembling and linking. However it comes with
|
||||
<command>m2t</command> (MASM to TASM)
|
||||
post-processor program that converts the HLA MASM output to a form
|
||||
that will compile under TASM. Unfortunately, NASM is not supported.
|
||||
</para>
|
||||
|
||||
</section>
|
||||
|
||||
<section><title>TALC</title>
|
||||
|
||||
<para>
|
||||
<ulink url="http://www.cs.cornell.edu/talc/">TALC</ulink>
|
||||
is another free MASM/Win32 based compiler
|
||||
(however it supports ELF output, does it?).
|
||||
</para>
|
||||
|
||||
<para>
|
||||
TAL stands for
|
||||
<emphasis>T</emphasis>yped
|
||||
<emphasis>A</Emphasis>ssembly
|
||||
<emphasis>L</Emphasis>anguage.
|
||||
It extends traditional untyped assembly languages with typing annotations,
|
||||
memory management primitives, and a sound set of typing rules, to guarantee
|
||||
the memory safety, control flow safety,and type safety of TAL programs.
|
||||
Moreover, the typing constructs are expressive enough to encode
|
||||
most source language programming features including records and structures,
|
||||
arrays, higher-order and polymorphic functions, exceptions, abstract data types,
|
||||
subtyping, and modules. Just as importantly,
|
||||
TAL is flexible enough to admit many low-level compiler optimizations.
|
||||
Consequently, TAL is an ideal target platform for type-directed compilers
|
||||
that want to produce verifiably safe code
|
||||
for use in secure mobile code applications
|
||||
or extensible operating system kernels.
|
||||
</para>
|
||||
|
||||
</section>
|
||||
|
||||
<section><title>Non-free and/or Non-32bit x86 assemblers</title>
|
||||
|
||||
<para>
|
||||
|
@ -1744,6 +1762,10 @@ are callee-saved, other registers are caller-saved;
|
|||
<para>
|
||||
FP stack: I'm not sure, but I think result is in
|
||||
<literal>st(0)</literal>, whole stack caller-saved.
|
||||
The SVR4 i386 ABI specs at
|
||||
<ulink url="http://www.caldera.com/developer/devspecs/">
|
||||
http://www.caldera.com/developer/devspecs/</ulink>
|
||||
is a good reference point if you want more details.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
|
@ -2396,7 +2418,7 @@ _start:
|
|||
.data # section declaration
|
||||
|
||||
msg:
|
||||
.string "Hello, world!\n" # our dear string
|
||||
.ascii "Hello, world!\n" # our dear string
|
||||
len = . - msg # length of our dear string
|
||||
|
||||
.text # section declaration
|
||||
|
@ -3033,6 +3055,18 @@ that need not to be repeatedly mentioned every time.
|
|||
|
||||
<para><revhistory>
|
||||
|
||||
<revision>
|
||||
<revnumber>0.6f</revnumber><date>17 Aug 2002</date><authorinitials>konst</authorinitials>
|
||||
<revremark>
|
||||
Added FASM,
|
||||
added URL to Korean translation,
|
||||
added URL to SVR4 i386 ABI specs,
|
||||
update on HLA/Linux,
|
||||
small fix in hello.S example,
|
||||
misc URL updates;
|
||||
</revremark>
|
||||
</revision>
|
||||
|
||||
<revision>
|
||||
<revnumber>0.6e</revnumber><date>12 Jan 2002</date><authorinitials>konst</authorinitials>
|
||||
<revremark>
|
||||
|
|
Loading…
Reference in New Issue