Registermaschine



Aufgabe 1:

a) Welche Zahlenfolge gibt das Programm aus? Nenne dat(0) Variable a und dat(1) b
und bilde eine gleichwertige Befehlssequenz.

b) Welche Zahlenfolge wird durch folgende Befehlssequenz ausgegeben?

  0   a = 1
  1   b = 1
  2   out a
  3   out b
  4   a = a + b
  5   b = a + b
  6   goto 2

c) Die Schleife (siehe: 6 goto 2) soll fünfmal durchlaufen werden, so dass zehn Zahlen ausgegeben werden.
   Übersetze in ein Registermaschinenprogramm und teste.

d) Die Summe der Zahlen von 1 bis 12 soll berechnet werden.
  1) einen Befehl mul gibt es nicht.
  2) Ergänze mul und div und berechne erneut.

e) Zu einer eingegeben Zahl soll die Collatz-Folge ausgeben werden bis eine Eins erscheint.

Aufgabe 2:

Nach Drücken von "Minimum" erscheint ein unvollständiges Programmstück, mit dem das
Minimum zweier Eingaben in dat(0) und dat(1) ermittelt, nach dat(2) gebracht und ausgeben
wird.
Beachte: Dabei soll keine weitere Zeile eingefügt werden!
────────────────────────────────────────────────────────────────
Befehl      Befehlszähler      Akkumulator         Datenspeicher
================================================================
lda <Adr>   Bz := Bz +1        Ak := dat(Adr)            -----
ldk  Zahl   Bz := Bz +1        Ak := Zahl                -----
sta <Adr>   Bz := Bz +1           -----           dat(Adr) := Ak
add <Adr>   Bz := Bz +1        Ak := Ak + dat(Adr)       -----
sub <Adr>   Bz := Bz +1        Ak := Ak - dat(Adr)       -----
jmp <Adr>   Bz := Adr            ----                    -----
jez <Adr>   Bz := Adr wenn Ak = 0 sonst Bz := Bz + 1     ----- 
jne <Adr>   Bz := Adr wenn Ak ≠ 0 sonst Bz := Bz + 1     ----- 
jlz <Adr>   Bz := Adr wenn Ak < 0 sonst Bz := Bz + 1     ----- 
jle <Adr>   Bz := Adr wenn Ak  <= 0 sonst Bz := Bz + 1     ----- 
jgz <Adr>   Bz := Adr wenn Ak.> 0 sonst Bz := Bz + 1     ----- 
jge <Adr>   Bz := Adr wenn Ak ≥ 0 sonst Bz := Bz + 1     -----
inp <Adr>   Bz := Bz +1                         dat(Adr) := Zahl
out <Adr>   Bz := Bz +1                         Ausgabe  := dat(Adr)
hlt  0     Ende der Programmausführung                  -----
----------------------------------------------------------------
Kodiert man die Minimumermittlung (Aufgabe 2) wie im folgenden Bild, dann benötigt man 10 statt 9 Zeilen. Registermaschine
aus Rüdeger Baumann, Informatik für die Sekundarstufe II, Band2, Klett 1993