Introduction to Computer Organization
Unlike other books about assembly language and computer organization, Introduction to Computer Organization is written with the understanding that most programmers will never have to write x86-64 assembly language or design hardware. This book is written to give those programmers a practical and concrete understanding of what's happening in a computer in the hopes that that knowledge will help them become a better programmer in their chosen field.
Readers learn how transistors are used to construct the binary switches that are used to implement the logic circuits that make up a computer; how these circuits are programmed to implement basic programming constructs; and how data items are organized and manipulated. By the end of the book readers should have a strong understanding of how binary is used to store data; how Boolean logic works, and how it's implemented in a computer; the basics of computer hardware; assembly language; program flow; and Input/Output.