Terms and Conditions:
Jonathan Bartlett wrote:Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in Appendix H. In addition, you are granted full rights to use the code examples for any purpose without even having to credit the authors. All trademarks are property of their respective owners.
In this era of visual programming and an ever-increasing rate of project requirements, the thinking of learning assembly language doesn't ring a bell as loud as it did a decade ago. Today a significant percentage of people who make a living from writing codes does so without really bothering on what is really happening behind
those cool buttons and windows. Perhaps they just too busy. Or perhaps they don't feel an urging need just like the early days of PCs when difference in the number of lines or the implementation of particular algorithms can result in a faster and more efficient program
. Today's PCs are much faster with more memory and disk capacity. And they certainly are more forgiving.
Yet for every people who happened to write lines of codes, either as a hobby or a living, there is always a need to know on how the computer actually works underneath. Knowing how the computer works from a bare-metal standpoint
is often the difference between top-level programmers and programmers who can never quite master their art. And this is where this book is coming at.
This book teaches assembly language for x86 processors
and the GNU/Linux
operating system. It is an introductory book, not a reference book. It is therefore not suitable by itself to learn how to professionally program in x86 assembly language, as some details have been left out to make the learning process smoother. The point of the book is to help the student understand how assembly language and computer programming works, not to be a reference to the subject. Reference information about a particular processor can be obtained by contacting the company which makes it.
Most introductory books on programming tend to pass over topics that are difficult even though they are important. This book will take readers through the difficult issues because that is the only way to move on to masterful programming.
The goal is to take readers from knowing nothing about programming to understanding how to think, write, and learn like a programmer. This book won't teach everything, but readers will have a background for how everything fits together. At the end of this book, readers should be able to do the following:
- understand how a program works and interacts with other programs
- read other people's programs and learn how they work
- learn new programming languages quickly
- learn advanced concepts in computer science quickly
This book assumes the reader has never programmed before, and introduces many topics skipped by other similar books, including memory management, debugging, interfacing with C, dynamic libraries, and even a bit on GUI programming.
Joel Spolsky, JoelOnSoftware.com
:) "I highly recommend working through this book even if you'll never program assembly again... you'll be a vastly better programmer."
:) "This is a very good supplementary book and the first book concerning Linux assembly language to date!"
:) "I have no intention of doing any real programming in assembly, but after learning the basics I have a better idea of what code in a higher level language compiles to, I finally really understand pointers and the difference between the heap and the stack, etc."
:) "... having read this book makes it easy to read Intel's documentation and the GNU Assembler Info pages."
:) "I definitely felt I gained a better understanding of how we get from source code in a text file to instructions that the machine can really understand."