Part I Assembly Language and ArchitectureEdit
Part II: Computer Organization and ImplementationEdit
Stated simply, this book is about how computers work. In the first part of the book, we will explore computer behavior by means of writing computer programs. Unlike most programmers, we will be writing programs for computers at their most basic level. We will be commanding them directly in assembly code and machine language with the aim of seeing what is going on "under the hood." This type of programming used to be very common anywhere performace was an issue, but in this modern era of plentiful CPU cycles and inexpensive vast memory devices, few people write assembly code these days. Even though the art of writing these kind of programs is becoming rarer, learning assembly language is still a worthy pursuit as it reveals what is going on inside the machine and teaches programmers to "think like a computer." The exploration of assembly will begin with writing programs for the x86 family of processors. In later chapters we will be looking at other architectures and instruction sets. Ideas will be presented in the most general way possible throughout the assembly language chapters so that the reader will have no trouble transitioning to any computing platform / operating system environment.
In the second part of the book, we will explore digital electronics with an aim to designing a CPU. In this section, we will be using a logic circuit simulator to put the computer together. You will be able to execute software on this fictional computer, and if you really wanted to you could implement it in physical hardware. After completing this part of the book you will have intiment knowledge of the theory behind computer operation. In the last chapter of the second part, we will explore various sample programs and present some ideas for how the computer we design could be expanded.
I am writing this book primarily for my students at Knoxville College, who will use this book in a two part course on Computer Organization. It is my hope that this book will be useful to other students and also to the curious people among the general public. I assume absolutely no knowledge of computer programming, as these courses are the first courses in our Computer Science program at Knoxville College. All you will need in order to enjoy this book is a basic knowledge of arithmetic, and a bit of patience. The key to this course is to not be intimidated by the complexity of what we are going to explore. I will attempt to keep the text as friendly as I can, and we will be taking everything one step at a time. I hope you enjoy exploring the inner workings of computers with this book!