This book aims to help you develop a consistent vision of the domain of low-level programming. We want to enable a careful reader to • Freely write in assembly language.
• Understand the Intel 64 programming model.
• Write maintainable and robust code in C11.
• Understand the compilation process and decipher assembly listings.
• Debug errors in compiled assembly code.
• Use appropriate models of computation to greatly reduce program complexity.
• Write performance-critical code.
There are two kinds of technical books: those used as a reference and those used to learn. This book is, without doubt, the second kind. It is pretty dense on purpose, and in order to successfully digest the information we highly suggest continuous reading. To quickly memorize new information you should try to connect it with the information with which you are already familiar. That is why we tried, whenever possible, to base our explanation of each topic on the information you received from previous topics.
This book is written for programming students, intermediate-to-advanced programmers, and low-level programming enthusiasts. The prerequisites are a basic understanding of binary and hexadecimal systems and a basic knowledge of Unix commands.