Buy new:
-32% $43.99$43.99
Delivery Thursday, August 22
Ships from: Amazon.com Sold by: Amazon.com
Save with Used - Good
$29.96$29.96
Delivery Monday, August 26
Ships from: Amazon Sold by: Hermit's Grove Books & Oddities
Download the free Kindle app and start reading Kindle books instantly on your smartphone, tablet, or computer - no Kindle device required.
Read instantly on your browser with Kindle for Web.
Using your mobile phone camera - scan the code below and download the Kindle app.
Assembly Language Step-by-Step: Programming with Linux 3rd Edition
There is a newer edition of this item:
$45.17
(21)
Only 3 left in stock - order soon.
Purchase options and add-ons
The long-awaited third edition of this bestselling introduction to assembly language has been completely rewritten to focus on 32-bit protected-mode Linux and the free NASM assembler. Assembly is the fundamental language bridging human ideas and the pure silicon hearts of computers, and popular author Jeff Dunteman retains his distinctive lighthearted style as he presents a step-by-step approach to this difficult technical discipline.
He starts at the very beginning, explaining the basic ideas of programmable computing, the binary and hexadecimal number systems, the Intel x86 computer architecture, and the process of software development under Linux. From that foundation he systematically treats the x86 instruction set, memory addressing, procedures, macros, and interface to the C-language code libraries upon which Linux itself is built.
- Serves as an ideal introduction to x86 computing concepts, as demonstrated by the only language directly understood by the CPU itself
- Uses an approachable, conversational style that assumes no prior experience in programming of any kind
- Presents x86 architecture and assembly concepts through a cumulative tutorial approach that is ideal for self-paced instruction
- Focuses entirely on free, open-source software, including Ubuntu Linux, the NASM assembler, the Kate editor, and the Gdb/Insight debugger
- Includes an x86 instruction set reference for the most common machine instructions, specifically tailored for use by programming beginners
- Woven into the presentation are plenty of assembly code examples, plus practical tips on software design, coding, testing, and debugging, all using free, open-source software that may be downloaded without charge from the Internet.
- ISBN-100470497025
- ISBN-13978-0470497029
- Edition3rd
- PublisherWiley
- Publication dateOctober 5, 2009
- LanguageEnglish
- Dimensions7.3 x 1.6 x 8.9 inches
- Print length656 pages
Frequently bought together

Customers who bought this item also bought

Practical Malware Analysis: The Hands-On Guide to Dissecting Malicious SoftwarePaperback$13.33 shippingGet it as soon as Monday, Aug 26Only 1 left in stock - order soon.
Editorial Reviews
From the Inside Flap
In this third edition of his bestselling guide to Intel x86 assembly language under Linux, Jeff Duntemann positions assembly not as unapproachable geek arcana but as a first programming language, suitable for readers who have no previous programming experience. As the fundamental language of the CPU, assembly lays the groundwork for all other programming languages, especially native-code C, C++, and Pascal. By mastering assembly, programmers will learn how x86 computers operate all the way down to the bare silicon, at a level of detail that no other approach can equal.
Assembly Language Step by Step, Third Edition, helps you:
Review the fundamental concepts behind computing and programming, including the hexadecimal and binary number bases
Understand the evolution of the Intel CPUs and how modern x86 processors operate
Grasp the process of programming itself, from editing source code through assembly, linking, and debugging
Comprehend x86 32-bit protected-mode memory addressing
Learn the x86 instruction set by dissecting numerous complete example programs
Work with the wealth of free programming utilities under Ubuntu Linux, including the Kate editor, the NASM assembler, and the GNU toolset
Master practical details of Linux programming, including procedures, macros, the INT 80h call gate, and calls to the standard C libraries
From the Back Cover
Learn assembly language, and you learn the machine
In this third edition of his bestselling guide to Intel x86 assembly language under Linux, Jeff Duntemann positions assembly not as unapproachable geek arcana but as a first programming language, suitable for readers who have no previous programming experience. As the fundamental language of the CPU, assembly lays the groundwork for all other programming languages, especially native-code C, C++, and Pascal. By mastering assembly, programmers will learn how x86 computers operate all the way down to “the bare silicon,” at a level of detail that no other approach can equal.
Assembly Language Step by Step, Third Edition, helps you:
- Review the fundamental concepts behind computing and programming, including the hexadecimal and binary number bases
- Understand the evolution of the Intel CPUs and how modern x86 processors operate
- Grasp the process of programming itself, from editing source code through assembly, linking, and debugging
- Comprehend x86 32-bit protected-mode memory addressing
- Learn the x86 instruction set by dissecting numerous complete example programs
- Work with the wealth of free programming utilities under Ubuntu Linux, including the Kate editor, the NASM assembler, and the GNU toolset
- Master practical details of Linux programming, including procedures, macros, the INT 80h call gate, and calls to the standard C libraries
About the Author
Jeff Duntemann has been writing about computing for over thirty years, and is the author of numerous books on programming, wireless networking, and system administration. He has been a columnist in Dr. Dobb’s Journal, and has edited well-known programming publications like PC Techniques and Visual Developer. After hours, he enjoys blogging, astronomy, amateur radio, and writing science fiction.
Product details
- Publisher : Wiley; 3rd edition (October 5, 2009)
- Language : English
- Paperback : 656 pages
- ISBN-10 : 0470497025
- ISBN-13 : 978-0470497029
- Item Weight : 2.31 pounds
- Dimensions : 7.3 x 1.6 x 8.9 inches
- Best Sellers Rank: #1,098,575 in Books (See Top 100 in Books)
- #53 in Assembly Language Programming
- #87 in Linux Programming
- #1,412 in Software Development (Books)
- Customer Reviews:
About the author

I am a writer, editor, technologist and contrarian living in Scottsdale, Arizona. Although I've worked as a programmer, I've been in the technical publishing industry (both magazines and books) from 1985 until I retired in 2015. I co-founded Coriolis Group Books in 1989 and ran editorial until the company closed in 2002. Most of my book-length work has been on computer technology. (See ASSEMBLY LANGUAGE STEP BY STEP and LEARN COMPUTER ARCHITECTURE WITH RASPBERRY PI, as well as many more titles now out of print but available used.)
In my loose moments I'm an amateur radio operator (callsign K7JPD), amateur astronomer, and SF writer. My first SF novel, THE CUNNING BLOOD, appeared in 2005 but I have been selling SF stories to magazines and anthologies for 45 years, and was on the final Hugo Awards ballot in 1981.I now have seven volumes of SF and fantasy on KDP Select.
My wife Carol and I met in high school and have been married for 45 years. We live in Scottsdale with two Bichon Frise dogs.
There's more about me on my Web sites: contrapositivediary.com (my blog) junkbox.com (tech projects) and duntemann.com, which is a quick index to all that I've published online.
Related products with free delivery on eligible orders
Customer reviews
Customer Reviews, including Product Star Ratings help customers to learn more about the product and decide whether it is the right product for them.
To calculate the overall star rating and percentage breakdown by star, we don’t use a simple average. Instead, our system considers things like how recent a review is and if the reviewer bought the item on Amazon. It also analyzed reviews to verify trustworthiness.
Learn more how customers reviews work on AmazonCustomers say
Customers find the book great for learning assembly language and IA-32 architecture. They also say it provides nearly the same information, only more clearly, with numerous metaphors to make them obvious. Readers describe the writing quality as well written. However, some find the insights hard to find and the originality out of date.
AI-generated from the text of customer reviews
Customers find the book great for learning assembly language and IA-32 architecture. They say the programs are concrete, refreshing, and easy to pick up on. Readers also say the content is on point and covers much ground addressing issues. They also say it's a great complement to a book on C and provides nearly the same information, only more clearly.
"...for the beginning assembly newbie and also provides a very nice setup for experimentation..." Read more
"...an assembly language programmer may need, he provides clear explanations of the basics so that the reader can understand enough to look up any..." Read more
"...organization class in college, I can say that this book provides nearly the same information, only more clearly, for a much cheaper price...." Read more
"...grasp the *concepts* of assembly language and provides numerous metaphors to make them obvious...." Read more
Customers find the writing quality of the book well written, clear, and thorough. They also say it's a smart book for a 13-year-old.
"...Also, very nice use of diagrams not usually found in a topic as terse as assembly language!..." Read more
"...His writing is easy to understand and follow along with, but sometimes he gets too far off on his metaphors (in the first few chapters) to the point..." Read more
"...* The book is readable; i.e., I love just reading the book and learning from it, unlike many textbook style formats that inundate you with detail..." Read more
"...I was pleasantly surprised to find the text clear and well laid out, so I decided to read it cover to cover...." Read more
Customers find the insights in the book too much fluff and hard to find real insights. They also say the content is lacking.
"...It's really the content that is lacking...." Read more
"I am disappointed that this book took huge part telling unnecessary stories, not too mush contents in talking about the language." Read more
"Talks too much about himself, too much fluff, hard to find real insights in this book, best used for firewood..." Read more
Customers find the book out of date and poorly written. They also say the lack of updating to a new edition does not correct the flaws.
"...Writing this review in May 2016, the book is a bit outdated with respect to the referenced Ubuntu version and (presumably) other software used in..." Read more
"...bin of history... while it was an honorable attempt, the lack of updating to a new edition to correct the flaws, or providing errata as to how to..." Read more
"...Unfortunately, this book is out of date and poorly written." Read more
-
Top reviews
Top reviews from the United States
There was a problem filtering reviews right now. Please try again later.
If you're really ready to take your time and are shooting for a well-grounded point of departure than this book is for you. If you've already mastered things like IA-32 architecture, number theory, adding in hex, fundamentals of assembly, registers, eflags, etc., than this might move too slow for you. That being said, you may just find some interesting nuggets in this book.
One thing I really liked about this book is he moves at a very realistic gradient for the beginning assembly newbie and also provides a very nice setup for experimentation (that is, he suggests a certain toolset which, once setup, will allow you to step through your program and inspect the registers instruction by instruction). I found this quite helpful in making abstract concepts more concrete and to confirm my understanding. Also, very nice use of diagrams not usually found in a topic as terse as assembly language!
Some have complained on earlier editions that they don't like his writing style and that he takes too long to get you to the meat of assembly. I wasn't too crazy about the Martians FooBitidy whatever analogy that he uses, and he definitely can take a bit long to get to the point from time to time. However, this can come in useful for complicated sections as he really takes his time to lay it all out in such a way to where you'd have to be asleep not to "get it". As a programmer who has learned to do a lot of reading on the side, I don't much care if 100 pages could have been stripped down - I'm more concerned with whether I can actually learn from a book. If you require K&R style writing you my not like this. However, my suggestion - deal with a bit of annoying fluff and you'll be thankful in the end. I just don't see another resource that gets you this kind of grounding IMO.
You definitely should be ready to take your time with this one. For example, he will ask you to put down the book and learn to add up to 0Fh + 0Fx, and expects you to commit this to memory. I made flash cards and put the book down for a few days until I had that down pat (this only happens once in the book though) - so yes, there's some commitment involved on the reader's part. But it won't dump you on the side of the road half way in so you'll be happy you made the effort. Note that he many times will present a code example with a few new concepts and THEN explain those concepts shortly thereafter. He seems to like to show some things in context and this requires some forward references - nothing that leaves you too miffed though.
Overall, wish I had this book earlier in my career! Well down My Duntemann!
The author does a fantastic job of focusing on the most important information needed for assembly language programming. He does not present a comprehensive explanation of every instruction, but instead explains each type of instruction and the most used instructions. He covers the use of tools including debuggers and make, and explains how to interface with C programs and how to make Linux kernel calls. After reading each chapter, I was able to use references available on the Internet to find any information that wasn't in the book, such as a comprehensive list of kernel calls and Intel assembly language instructions.
The instructions given in the book for setting up the tools are for Ubuntu, but yum works well on Fedora:
yum install unzip bless nasm make gcc kdbg insight kdesdk kdebase
One problem with the book is that it sticks to 32-bit assembly language and doesn't explain what differs on 64-bit systems. I found that I had to change nasm's output format from elf to elf64 (-f elf64) and use the 64-bit registers (rax, rbx, rbp, etc.) The book describes pushad and popad to push and pop all general purpose registers, but these do not work with the 64-bit registers. Indicating that a memory reference is 64 bits is done with qword. I couldn't output command line arguments as set up by the Linux runtime without copying them into a different buffer.
On 64-bit Linux, the glibc calling conventions are completely different than those described in the book. I was able to figure out how to call printf by writing a C program and disassembling it with objdump, which I found more readable then gcc's assembly listing. The glibc calling convention for 64-bit is that the arguments are passed in registers, with the first argument in rdi, second in rsi, third in rdx, and fourth in rcx; also the rax register must be set to zero for variable-argument functions. The registers rbx, rbp, rsp, r12, r13, 14, and 15 must be saved by the called function.
The fact that I was able to program on a 64-bit system even though the book doesn't cover 64-bit systems is a testament to how well the author covers the basics. Instead of trying to provide every little piece of information an assembly language programmer may need, he provides clear explanations of the basics so that the reader can understand enough to look up any additional information needed. I recommend this book over all others for programmers who want to learn Intel assembly language.
I will say that all of the foundation he gives in the first 5 chapters is interesting and necessary (although maybe not right off the bat). Reading this book after taking an assembly / computer organization class in college, I can say that this book provides nearly the same information, only more clearly, for a much cheaper price. His writing is easy to understand and follow along with, but sometimes he gets too far off on his metaphors (in the first few chapters) to the point where you're actually just focusing on trying to learn his metaphors rather than the real information he's trying to convey. One such example is his "Alien Bases" Chapter 2, where he is trying to compare base number systems to martian counting with unintelligible symbols and less fingers on their hands than us. It's a good metaphor, but it's taken too far.
I recommend this book to someone who is willing to learn assembly from the ground up, and wants to understand all of the inter-workings of the computer and how it processes the assembly that you will be writing. However, if you want to learn the assembly instructions themselves, I would recommend that you get at least one more supplemental book on Assembly Language, that is more specific to that purpose, to read after the completion of this book. This book is not the quick and easy way to learn assembly, but it IS the right way to start out.
Top reviews from other countries
Der größte Nachteil:
Das Buch ist leicht veraltet, für das Assemblieren im 32 Bit Modus muss man spezielle Kommandozeilenparameter verwenden, die man auf der Website vom Buch oder auf Stackoverflow findet. Der Debugger wird nicht mehr offiziel von Ubuntu unterstützt, daher verwende ich den anderen vom Buch vorgeschlagenen: Kdbg
Vorteile:
Man lernt wie ein Rechner intern funktioniert. Für jeden der sich für Computersicherheit und Betriebssystemprogrammierung interessert ein absolutes muss. Dieses Buch überspringt dabei nicht die wesentlichen Grundlagen, die für das Verstehen und Erlernen von i386 Assembler notwendig sind, das hier ist kein Crash Kurs, aber auch keine Dokumentation.
Mir gefällt auch der Learning by Doing Charakter, ohne dass man die Aufgaben erst am Ende eines Kapitels hat, wie es typischerweise bei anderen IT Büchern ist.
Solltet ihr schon Assembler können, oder sucht ihr einen Quick and Dirty Einstieg: lasst die Finger von dem Buch. Dafür gibt es geeignetere Online Ressourcen.
Ganz nebenbei gefällt mir auch der Witz von dem Buch, der Autor ist mir sehr sympathisch und die Inhalte werden lebendig dargestellt.
One small thing: maybe I missed it, but the author didn't say why the instruction addresses aren't evenly spaced: it's because the instructions have different byte lengths. I reckon the bit on hex could have shorter or different. But otherwise I think is really a top book and you can see why it's been in 3 editions.
Another interesting feature of the book is the author's backstory and perspective. He's been playing with computers since the early seventies, and was clearly a big Pascal fan (something which maybe died in the early 90s, but still lives on in Delphi). This contributes to an outsider's perspective on UNIX and C culture which is refreshing.
Good job Jeff! :) the best book about assembly.




