• elke registermachine beschikt over een beperkt aantal registers en een stapel om waarden in
bij te houden, en over een beperkt aantal primitieve operaties om waarden te manipuleren
• elke registermachine heeft een klok die de frequentie bepaalt waaraan instructies van een
registermachineprogramma uitgevoerd worden
• bij elke klokslag wordt de instructie die overeenkomt met de huidige waarde van de
programma-teller uitgevoerd, en de teller met een verhoogt
• sommige instructies van het registermachineprogramma veranderen de programma-teller
1 Een iteratief proces in registermachinetaal
(define gcd-machine
(make-machine
Object-georiënteerde implementatie van registermachine
'(a b t)
Lijst van benodigde registers
(list (list 'rem remainder) (list '= =))
Lijst van benodigde primitieve operaties.
'(test-b
label
(test (op =) (reg b) (const 0))
(branch (label gcd-done))
(assign t (op rem) (reg a) (reg b))
(assign a (reg b))
(assign b (reg t))
(goto (label test-b))
Lijst van intructies
gcd-done)))
label
Uitvoeren van bovenstaande machine:
1
,2 Syntax voor eenvoudige registermachineprogramma’s
• een registermachineprogramma is een reeks van instructies en labels
o elk label is een symbool met een unieke naam: <label-name>
o elke instructie is van een van de volgende vormen:
(assign <register-name> <inputi>)
(assign <register-name> (op <operation-name>) <input1> ... <inputn>)
(perform (op <operation-name>) <input1> ... <inputn>)
(test (op <operation-name>) <input1> ... <inputn>)
(branch (label <label-name>))
(goto (label <label-name>))
o waarbij elke <inputi> van een van volgende vormen is:
(reg <register-name>)
(const <constant-value>)
3 Poging om tweemaal dezelfde procedure te berekenen
Eerste poging
Slecht!
o Machine met dubbel aantal registers
o Duplicatie van instructies
2
, Tweede poging
Slecht!
• Niet langer dubbel aantal registers nodig MAAR
• Nog steeds duplicatie van instructies
3.1 Uitbreiding registermachinetaal met labels als waarden
• elke instructie kan naast een van voorgaande vormen, nu ook een van de volgende vormen
aannemen:
o goto is een onvoorwaardelijke, directe sprong
(assign <register-name> (label <label-name>))))
(goto (reg <register-name>))
3