Hardware

Literature references and annotations by Dick Grune, dick@dickgrune.com. Last update: Tue Sep 15 10:33:30 2009.
These references and annotations were originally intended for personal use and are presented here only in the hope that they may be useful to others. There is no claim to completeness or even correctness. Each annotation represents my understanding of the text at the moment I wrote the annotation.
No guarantees given; comments and content criticism welcome.

* Hans-Peter Messmer, "The Indispensable Pentium Book", Addison-Wesley, Wokingham, England, 1996, pp. 496.
The Pentium from the bit up. Basic 80x86 architecture, micro-programming, pipelines, coprocessors, caches, virtual 8086 mode, pins and signals, operating modes, busses, etc. Also includes a comparison with DEC's Alpha, PowerPC, MIPS, and even the Transputer.

* Philip J. Koopman, Jr., "Stack Computers", Ellis Horwood, Chichester, 1989, pp. ???.

* D.M. Harland, "REKURSIV -- Object Oriented Computer Architecture", Ellis Horwood, 1988,

* Andrew S. Tanenbaum, "Structured Computer Organization", 2nd Edn., Prentice-Hall, Englewood Cliffs, N.J., 1984, pp. 465.

* David R. Ditzel, H.R. McLellan, "Register allocation for free: the C machine stack cache", in Symposium on Architectural Support for Programming Languages and Operating Systems, ACM SIGPLAN Notices, 17, #4, April 1982, pp. 48-56.
A hardware replacement for registers, part of the Bell Labs C machine Project. Neither the machine description nor the compiler knows registers; all local variables are addressed through stack frame pointer offsets. This stack frame pointer remains constant during the execution of a procedure and changes only upon calling another procedure or upon return from a procedure.
The hardware knows enough of the layout of the stack frame to know where the local simple variables are, and it maps these at run time onto free registers from a bank of registers. References to locals on the stack are translated on the fly to reference to reigisters. Note that this scheme allows the address to be taken of any local variable, regardless of whether it is actually in a register or not.
If there are no more free registers, registers from the oldest stack frame are written to the corresponding memory locations on the stack and their mappings are cancelled.