This is a lovely little book; it explains exactly what goes on behind the scenes when we as programmers write our code.
This book is based on an introductory computer architecture course for first year computing students. It assumes the reader has no programming experience and notes it should be used in conjunction with learning a high level language. The book content relies on a public domain simulator with built-in debugger from the webor ftp that is available for MS-DOS, Windows 95 and several flavours of UNIX.
It begins with a very short, low-level description of the computer's organisation, using terms such as 'gate' and 'flip flop' without explanation. It defines the difference between machine and assembly language, explaining the advantages and disadvantages of using assembly. There is a description of number bases and how to convert between them, followed by the effects of addition and subtraction and how two's complement achieves this.
A description of the MIPS processor explains the memory layout, registers, I/O organisation and how the SPIM simulator explores these. There are many example programs building on the usual 'hello world' to give a good description of load, store and arithmetic instructions; followed by branches and loops.
There is an excellent discussion of addressing modes making a complex subject quite easy to follow, again with several example programs. Logical, shift and rotate instructions are explained using a decimal to hex conversion program. The stack structure is explained with a good description of procedure calls, parameter passing and stack frames, using a Fibonacci program to explain recursion; followed by a tower of Hanoi program.
The example programs are simple and effective with no obvious errors; most of these can be downloaded from the Web site and assembled through the simulator without any modification.
This is a lovely little book; it explains exactly what goes on behind the scenes when we as programmers write our code. The principles in this book can be applied to any language or machine, this information can help us write efficient code and aid us with maintainability.
In summary I would recommend this book to programmers who want to understand the 'nuts and bolts' of coding. This will help to understand exactly how the processor treats our 'English like' code statements.