Registermaschine



Aufgabe 1:


a) Welche Zahlenfolge wird durch folgende Befehlssequenz ausgegeben?

   00   A = 1
   01   B = 1
   02   OUT A
   03   OUT B
   04   A = A + B
   05   B = A + B
   06   GOTO 02
(nach Arthur Engel, Elementarmathematik vom algorithmischen Standpunkt, Klett 1977)

  Übersetze in ein Registermaschinenprogramm und teste.
  Teste auch: A = B = 1; (LABEL) OUT A; C = A; A = B; B = B + C; GOTO (LABEL)

b) Die Summe der Zahlen von 1 bis 10 soll berechnet werden.

c) Die Summe der Zahlen von 1 bis n soll berechnet werden. (n = INP 01).

d) Die Summe a + a+1 + a+2 + ... + b soll berechnet werden.

   Registermaschinen-Befehle MUL und DIV gibt es (noch) nicht.

Aufgabe 2:

00 INP 01   |   00 INP 01 ;a = eingabe
01 INP 02   |   01 INP 02 ;b = eingabe
02 LDA 01   |   02 LDA 02 ;AKKU = b
03 SUB 02   |   03
04 JGE 09   |   04
05 LDA 01   |   05
06 STA 03   |   06
07 JMP 11   |   07
08 LDA 02   |   08 LDA 03 ;AKKU = c
09 STA 03   |   09 PRT 00 ;
10 LDA 03   |   10 HLT 00 ;Speicherende!
11 PRT 00   |   
13 HLT 99   |  
Programm 1  |   Programm 2
Das Maschinenprogramm links wurde von einem Compiler erzeugt und
speichert das Minimum zweier eingegebener Zahlen in Datenspeicher 03.

Ergänze Programm 2 so, dass das Minimum in drei Schritten weniger berechnet wird.

Nach Drücken von "Minimum" erscheint Programmstück 2 im Textfeld rechts.
Beachte: Es 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)
PRT  00     Bz := Bz + 1                        Ausgabe  := AKKU
HLT  99     Ende der Programmausführung                  -----
----------------------------------------------------------------
Registermaschine
aus Rüdeger Baumann, Informatik für die Sekundarstufe II, Band2, Klett 1993