IA32 and Pentium III documentation
For this course, we will be using the Gnu GCC compiler to generate
code targeted to machines running Intel IA32 (popularly known as
``x86'') programs under Linux. GCC uses an assembler format known as
``GAS'' (for Gnu ASsembler). The documentation on this particular
combination of machine and assembler format is a bit spotty. Here are
some useful resources:
- Our own Handout #2 on
Machine-Level Programs on Linux/IA32
(pdf,
ps).
- Some information extracted from the GCC info pages about GAS
format for IA32 (known in the GCC world as ``i386'') in text format. This documentation is
helpful if you are either familiar with the Intel/Microsoft assembly
format, or if you do much reading of the Intel manuals.
- Intel Architecture Software Developer's Manual
- Volume 1: Basic Architecture
(pdf,
ps2up.gz).
Chapters 3--6 contain
useful information. Note that much of this documention is
irrelevant---we are only running in ``flat'' addressing mode, and GAS
does not support conditional moves, MMX, or SSE instructions. The
overall document is 369 pages long. You probably don't want to print
it out.
- Volume 2: Instruction Set Reference
(pdf,
ps2up.gz).
Chapter 3 contains a detailed description of every instruction. Note
that they list the operands in the reverse order from their ordering
in GAS. This manual is 854 pages long. You definitely don't want to
print it out.
- Volume 3: System Programming
(pdf,
ps2up.gz).
Contains lots of useful information on the interface between the
hardware and the operating system, including cache and TLB specs,
virtual memory, exceptions and interrupt handling, and processes.
- Intel Architecture Optimization: Reference Manual
(pdf,
ps2up.gz).
Desrcibes how to write IA32 code that runs fast.
Linux documentation
- ELF object file format
(pdf, ps)
- Overview of the Linux kernel
(pdf, ps)