Chapter 5: Computing with Register Machines

we have so far studied processes in lisp with successive models:

but still we don't know how it works deep down, at the machine level

a computer is really a register machine
that sequentially executes instructions
on some storage elements i.e. registers

a register machine applies a primitive operation to the contents of
some registers and assigns the result to another register

we will approach this study from the perspective of a hardware architect

5.1 Designing Register Machines

we need two elements to design a register machine:

data paths
registers and operations
a controller
to sequence the operations

algorithm analysis (1.2.5's euclid algo):

(define (gcd a b)
  (if (= b 0)
      a
      (gcd b (remainder a b))))

5.1.1 a language for describing register machines

the controller is a sequence of instructions with labels that
define entry points in the sequence

5.1.2 abstraction in machine design

we are assuming a lot here, hiding a lot of complexity in
primitives. this is good though bc it allows us to think about design
in other parts of the system

5.1.3 subroutines

we'd like to share components rather than duplicating them. we can do
this by sharing registers. a better way is to have the 'continue'
register hold the label of the entrypoint so that computation can
continue after processing

5.1.4 using a stack to implement recursion

the register machine so far can compute any iterative
procedure. consider the following algorithm (from 1.2.1)

(define (factorial n)
  (if (= n 1)
      1
      (* (factorial (- n 1)) n)))

we have to solve for recursive execution

5.1.5 instruction summary

(assign r (reg r))
(assign r (const r))
(assign r (op p) x ... )
(perform (op p) x ... )
(test (op p) x ...)
(branch (label n))
(goto (label n))

(assign r (label n))
(goto (reg r))

(save r)
(restore r)

Author: jordyn

Created: 2021-02-15 Mon 16:09