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.
aus Rüdeger Baumann, Informatik für die Sekundarstufe II, Band2, Klett 1993