Assembly Language

Other Free Books!
Free Computer Books Alliance
Agile Programming
3D Rendering
3D Graphics Libraries
Remember that these titles are copyright © the author or the publisher. The author / publisher has generously allowed them to be available for free online. Please respect the terms and conditions of the copyright.

If you know of a quality book that we should include on this page, please let me know.


IA-32 Intel® Architecture Software Developer's Manual (Volume 1 - Basic Architecture) Intel, Corp.
IA-32 Intel® Architecture Software Developer's Manual (Volume 2A: Instruction Set Reference, A-M) Intel, Corp.
IA-32 Intel® Architecture Software Developer's Manual (Volume 2B: Instruction Set Reference, N-Z) Intel, Corp.
IA-32 Intel® Architecture Software Developer's Manual (Volume 3: System Programming Guide) Intel, Corp.
The Art of Assembly Language Programming by Randall Hyde
Programming From The Ground Up by Jonathan Bartlett
PC Assembly Language by Dr Paul A. Carter

Non-Book Resources
Intel Assembler 80x86 CodeTable A very useful, compact list containing all instructions for the Intel x86 Assembly Language.
Optimizing Assembly Code A manual describing everything you need to know about optimizing code for the Intel microprocessors.

A program written in assembly language consists of a series of instructions mnemonics that correspond to a stream of executable instructions, when translated by an assembler, that can be loaded into memory and executed.

For example, an x86/IA-32 processor can execute the following binary instruction as expressed in machine language:

Binary: 10110000 01100001 (Hexadecimal: 0xb061)
The equivalent assembly language representation is easier to remember (more mnemonic):

mov al, 061h
This instruction means:

Move the hexadecimal value 61 (97 decimal) into the processor register named "al".
The mnemonic "mov" is an operation code or opcode, and was chosen by the instruction set designer to abbreviate "move." A comma-separated list of arguments or parameters follows the opcode; this is a typical assembly language statement.

Transforming assembly into machine language is accomplished by an assembler, and the reverse by a disassembler. Unlike in high-level languages, there is usually a 1-to-1 correspondence between simple assembly statements and machine language instructions. However, in some cases, an assembler may provide pseudoinstructions which expand into several machine language instructions to provide commonly needed functionality. For example, for a machine that lacks a "branch if greater or equal" instruction, an assembler may provide a pseudoinstruction that expands to the machine's "set if less than" and "branch if zero (on the result of the set instruction)". Most full-featured assemblers also provide a rich macro language (discussed below) which is used by vendors and programmers to generate more complex code and data sequences.

Every computer architecture has its own machine language. On this level, each instruction is simple enough to be executed using a relatively few number of electronic circuits. Computers differ by the number and type of operations they support. For example a new 64-bit machine would have different circuitry than a 32-bit machine. They may also have different sizes and numbers of registers, and different representations of data types in storage. While most general-purpose computers are able to carry out essentially the same functionality, the ways they do so differ; the corresponding assembly languages reflect these differences.

Multiple sets of mnemonics or assembly-language syntax may exist for a single instruction set, typically instantiated in different assembler programs. In these cases, the most popular one is usually that supplied by the manufacturer and used in its documentation.