Registermaschiene Endwerte berechnen

Jawad1231

Lt. Junior Grade
Registriert
Aug. 2017
Beiträge
365
Gegeben sei eine Registermaschine bezüglich der Operationen ADD, SUB, MULT, DIV, CADD, CSUB, CMULT, CDIV. Die Maschine verwendet die Register b, c0, c1, c2, c3.

Hinweis: c1 und c2 sind Eingabewerte, c3 wird das Ergebnis enthalten

1 CLOAD 1

2 STORE 3

3 LOAD 2

4 IF c0 = 0 GOTO 12

5 LOAD 3

6 MULT 1

7 STORE 3

8 LOAD 2

9 CSUB 1

10 STORE 2

11 GOTO 4

12 END

Berechnen sie die End-Konfiguration der Maschine für die Start-Zustände

(1,0,2,1,0) (1,0,2,3,0) und (1,0,2,5,0)

Kann mir jemand erklären, wie das ganze System funktioniert?
 
Ich denke das ist deine Aufgabe oder die deines Lehrers/Dozenten? Vor allem, was genau hast du dazu bisher in Eigenrecherche so rausgefunden? Du kannst mir nicht erzaehlen dass du dazu kein Material findest?

Also, an welchem Teil genau haengst du? Was hast du verstanden? Weisst du was eine Registermaschine ueberhaupt ist? Weisst du was ein Zustand ist?
 
Da hättest auch gleich das PDF deines Dozenten hochladen können, wäre besser formatiert :D

Wo genau kommst du nicht weiter? Du hast doch sicher für jeden der Befehle auf einer Folie Beschreibungen. Nach denen musst du eigentlich nur alles Zeile für Zeile abarbeiten.
 
Wir haben 1 Aufgabe zu der Registermaschiene gemacht und die Lösung gibt es nicht.

Es gibt den Befehlszähler B1 Arbeitsregister C0 und Speicherregister C1-C3. In dieser Aufgabe haben wir eine
"Konfiguration", da wir b1,c0,c1,c,2 und so weiter haben.

Wir sollen folgende Konfigurationen berechnen 1) (1,0,2,1,0) 2) (1,0,2,3,0) und 3) (1,0,2,5,0)

Der Aufgabenstellung können wir entnehmen, dass für jede Berechnung eine "Konfiguration" notwendig ist.

Fangen wir mit 1) (1,0,2,1,0) an. 1= Hat den 1 Befehl durchgeführt, die 0 steht für den Arbeitsregister die 2 1 0 stehen für die Speicherregister c1=2 c2=1 c3=0

Das ist alles was ich aktuell zum Thema weiß.
Ergänzung ()

PERKELE schrieb:
Das sieht nach einer klassischen Hausaufgabe aus, wie weit bist du @TE bereits gekommen?

Ohne Eigeninitiative keine Hilfe.
Wir haben 1 Aufgabe zu der Registermaschiene gemacht und die Lösung gibt es nicht.

Es gibt den Befehlszähler B1 Arbeitsregister C0 und Speicherregister C1-C3. In dieser Aufgabe haben wir eine
"Konfiguration", da wir b1,c0,c1,c,2 und so weiter haben.

Wir sollen folgende Konfigurationen berechnen 1) (1,0,2,1,0) 2) (1,0,2,3,0) und 3) (1,0,2,5,0)

Der Aufgabenstellung können wir entnehmen, dass für jede Berechnung eine "Konfiguration" notwendig ist.

Fangen wir mit 1) (1,0,2,1,0) an. 1= Hat den 1 Befehl durchgeführt, die 0 steht für den Arbeitsregister die 2 1 0 stehen für die Speicherregister c1=2 c2=1 c3=0

Das ist alles was ich aktuell zum Thema weiß.
abcddcba schrieb:
Ich denke das ist deine Aufgabe oder die deines Lehrers/Dozenten? Vor allem, was genau hast du dazu bisher in Eigenrecherche so rausgefunden? Du kannst mir nicht erzaehlen dass du dazu kein Material findest?

Also, an welchem Teil genau haengst du? Was hast du verstanden? Weisst du was eine Registermaschine ueberhaupt ist? Weisst du was ein Zustand ist?
laut definition:"Ein einfachere Version eines Computer mit Prozessor und speicher".
 
Ich weiß ist dämlich und ich hab keine ahung aber ChatGPT hat mir das hier generiert. Ob das richtig ist kein plan =)
Um die Endkonfiguration der Registermaschine zu berechnen, müssen wir die gegebenen Startzustände nacheinander durch das Programm ausführen. Die Register werden als (b, c0, c1, c2, c3) dargestellt. Hier sind die Schritte für jeden Startzustand:
Startzustand (1,0,2,1,0):
  1. CLOAD 1: Lade den Wert 1 in das Register c1. Zustand: (1,0,1,1,0).
  2. STORE 3: Speichere den Wert aus c1 im Register c3. Zustand: (1,0,1,1,1).
  3. LOAD 2: Lade den Wert 2 in das Register c2. Zustand: (1,0,1,2,1).
  4. IF c0 = 0 GOTO 12: Da c0 den Wert 0 hat, wird der Sprung nicht ausgeführt.
  5. LOAD 3: Lade den Wert aus c3 in das Register c3. Zustand: (1,0,1,2,1).
  6. MULT 1: Multipliziere den Wert in c3 mit 1 und speichere das Ergebnis in c3. Zustand: (1,0,1,2,1).
  7. STORE 3: Speichere den Wert aus c3 im Register c3. Zustand: (1,0,1,2,1).
  8. LOAD 2: Lade den Wert 2 in das Register c2. Zustand: (1,0,1,2,1).
  9. CSUB 1: Subtrahiere den Wert in c1 von c2 und speichere das Ergebnis in c2. Zustand: (1,0,1,1,1).
  10. STORE 2: Speichere den Wert aus c2 im Register c2. Zustand: (1,0,1,1,1).
  11. GOTO 4: Gehe zu Schritt 4.
  12. END: Beende die Ausführung. Endzustand: (1,0,1,1,1).
Endzustand für Startzustand (1,0,2,1,0): (1,0,1,1,1).
Startzustand (1,0,2,3,0):
  1. CLOAD 1: Lade den Wert 1 in das Register c1. Zustand: (1,0,1,3,0).
  2. STORE 3: Speichere den Wert aus c1 im Register c3. Zustand: (1,0,1,3,1).
  3. LOAD 2: Lade den Wert 2 in das Register c2. Zustand: (1,0,1,2,1).
  4. IF c0 = 0 GOTO 12: Da c0 den Wert 0 hat, wird der Sprung nicht ausgeführt.
  5. LOAD 3: Lade den Wert aus c3 in das Register c3. Zustand: (1,0,1,3,1).
  6. MULT 1: Multipliziere den Wert in c3 mit 1 und speichere das Ergebnis in c3. Zustand: (1,0,1,3,1).
  7. STORE 3: Speichere den Wert aus c3 im Register c3. Zustand: (1,0,1,3,1).
  8. LOAD 2: Lade den Wert 2 in das Register c2. Zustand: (1,0,1,2,1).
  9. CSUB 1: Subtrahiere den Wert in c1 von c2 und speichere das Ergebnis in c2. Zustand: (1,0,1,1,1).
  10. STORE 2: Speichere den Wert aus c2 im Register c2. Zustand: (1,0,1,1,1).
  11. GOTO 4: Gehe zu Schritt 4.
  12. END: Beende die Ausführung. Endzustand: (1,0,1,1,1).
Endzustand für Startzustand (1,0,2,3,0): (1,0,1,1,1).
Startzustand (1,0,2,5,0):
  1. CLOAD 1: Lade den Wert 1 in das Register c1. Zustand: (1,0,1,5,0).
  2. STORE 3: Speichere den Wert aus c1 im Register c3. Zustand: (1,0,1,5,1).
  3. LOAD 2: Lade den Wert 2 in das Register c2. Zustand: (1,0,1,2,1).
  4. IF c0 = 0 GOTO 12: Da c0 den Wert 0 hat, wird der Sprung nicht ausgeführt.
  5. LOAD 3: Lade den Wert aus c3 in das Register c3. Zustand: (1,0,1,5,1).
  6. MULT 1: Multipliziere den Wert in c3 mit 1 und speichere das Ergebnis in c3. Zustand: (1,0,1,5,1).
  7. STORE 3: Speichere den Wert aus c3 im Register c3. Zustand: (1,0,1,5,1).
  8. LOAD 2: Lade den Wert 2 in das Register c2. Zustand: (1,0,1,2,1).
  9. CSUB 1: Subtrahiere den Wert in c1 von c2 und speichere das Ergebnis in c2. Zustand: (1,0,1,4,1).
  10. STORE 2: Speichere den Wert aus c2 im Register c2. Zustand: (1,0,1,4,1).
  11. GOTO 4: Gehe zu Schritt 4.
  12. END: Beende die Ausführung. Endzustand: (1,0,1,4,1).
Endzustand für Startzustand (1,0,2,5,0): (1,0,1,4,1).
Die Endkonfigurationen der Maschine für die gegebenen Startzustände sind:
  1. (1,0,1,1,1)
  2. (1,0,1,1,1)
  3. (1,0,1,4,1)
 
B1=1 bedeutet nicht, dass der erste Befehl durchgeführt wurde, sondern, das dieser bearbeitet werden soll.
CLOAD 1 bedeutet vermutlich, dass der Wert aus C1 in den C0 geladen wird und dann der Rest so weiter... C0 wird nach C3 gespeichert....
 
Gyngo schrieb:
Ich weiß ist dämlich und ich hab keine ahung aber ChatGPT hat mir das hier generiert. Ob das richtig ist kein plan =)
Um die Endkonfiguration der Registermaschine zu berechnen, müssen wir die gegebenen Startzustände nacheinander durch das Programm ausführen. Die Register werden als (b, c0, c1, c2, c3) dargestellt. Hier sind die Schritte für jeden Startzustand:
Startzustand (1,0,2,1,0):
  1. CLOAD 1: Lade den Wert 1 in das Register c1. Zustand: (1,0,1,1,0).
  2. STORE 3: Speichere den Wert aus c1 im Register c3. Zustand: (1,0,1,1,1).
  3. LOAD 2: Lade den Wert 2 in das Register c2. Zustand: (1,0,1,2,1).
  4. IF c0 = 0 GOTO 12: Da c0 den Wert 0 hat, wird der Sprung nicht ausgeführt.
  5. LOAD 3: Lade den Wert aus c3 in das Register c3. Zustand: (1,0,1,2,1).
  6. MULT 1: Multipliziere den Wert in c3 mit 1 und speichere das Ergebnis in c3. Zustand: (1,0,1,2,1).
  7. STORE 3: Speichere den Wert aus c3 im Register c3. Zustand: (1,0,1,2,1).
  8. LOAD 2: Lade den Wert 2 in das Register c2. Zustand: (1,0,1,2,1).
  9. CSUB 1: Subtrahiere den Wert in c1 von c2 und speichere das Ergebnis in c2. Zustand: (1,0,1,1,1).
  10. STORE 2: Speichere den Wert aus c2 im Register c2. Zustand: (1,0,1,1,1).
  11. GOTO 4: Gehe zu Schritt 4.
  12. END: Beende die Ausführung. Endzustand: (1,0,1,1,1).
Endzustand für Startzustand (1,0,2,1,0): (1,0,1,1,1).
Startzustand (1,0,2,3,0):
  1. CLOAD 1: Lade den Wert 1 in das Register c1. Zustand: (1,0,1,3,0).
  2. STORE 3: Speichere den Wert aus c1 im Register c3. Zustand: (1,0,1,3,1).
  3. LOAD 2: Lade den Wert 2 in das Register c2. Zustand: (1,0,1,2,1).
  4. IF c0 = 0 GOTO 12: Da c0 den Wert 0 hat, wird der Sprung nicht ausgeführt.
  5. LOAD 3: Lade den Wert aus c3 in das Register c3. Zustand: (1,0,1,3,1).
  6. MULT 1: Multipliziere den Wert in c3 mit 1 und speichere das Ergebnis in c3. Zustand: (1,0,1,3,1).
  7. STORE 3: Speichere den Wert aus c3 im Register c3. Zustand: (1,0,1,3,1).
  8. LOAD 2: Lade den Wert 2 in das Register c2. Zustand: (1,0,1,2,1).
  9. CSUB 1: Subtrahiere den Wert in c1 von c2 und speichere das Ergebnis in c2. Zustand: (1,0,1,1,1).
  10. STORE 2: Speichere den Wert aus c2 im Register c2. Zustand: (1,0,1,1,1).
  11. GOTO 4: Gehe zu Schritt 4.
  12. END: Beende die Ausführung. Endzustand: (1,0,1,1,1).
Endzustand für Startzustand (1,0,2,3,0): (1,0,1,1,1).
Startzustand (1,0,2,5,0):
  1. CLOAD 1: Lade den Wert 1 in das Register c1. Zustand: (1,0,1,5,0).
  2. STORE 3: Speichere den Wert aus c1 im Register c3. Zustand: (1,0,1,5,1).
  3. LOAD 2: Lade den Wert 2 in das Register c2. Zustand: (1,0,1,2,1).
  4. IF c0 = 0 GOTO 12: Da c0 den Wert 0 hat, wird der Sprung nicht ausgeführt.
  5. LOAD 3: Lade den Wert aus c3 in das Register c3. Zustand: (1,0,1,5,1).
  6. MULT 1: Multipliziere den Wert in c3 mit 1 und speichere das Ergebnis in c3. Zustand: (1,0,1,5,1).
  7. STORE 3: Speichere den Wert aus c3 im Register c3. Zustand: (1,0,1,5,1).
  8. LOAD 2: Lade den Wert 2 in das Register c2. Zustand: (1,0,1,2,1).
  9. CSUB 1: Subtrahiere den Wert in c1 von c2 und speichere das Ergebnis in c2. Zustand: (1,0,1,4,1).
  10. STORE 2: Speichere den Wert aus c2 im Register c2. Zustand: (1,0,1,4,1).
  11. GOTO 4: Gehe zu Schritt 4.
  12. END: Beende die Ausführung. Endzustand: (1,0,1,4,1).
Endzustand für Startzustand (1,0,2,5,0): (1,0,1,4,1).
Die Endkonfigurationen der Maschine für die gegebenen Startzustände sind:
  1. (1,0,1,1,1)
  2. (1,0,1,1,1)
  3. (1,0,1,4,1)
lach besser als nichts danke. Ich betreibe noch bissen recherche und gucke ob ich eventuell auf eine Lösung komme und poste diese dann:)
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Jawad1231 und PERKELE
falkikowski schrieb:
B1=1 bedeutet nicht, dass der erste Befehl durchgeführt wurde, sondern, das dieser bearbeitet werden soll.
CLOAD 1 bedeutet vermutlich, dass der Wert aus C1 in den C0 geladen wird und dann der Rest so weiter... C0 wird nach C3 gespeichert....
Ich habe mal die Aufgaben fertig gerechnet, jedoch habe ich bei der Aufgabe 2 ein Problem. Ich bin da bei Goto4. Wenn ich bei"IF c0= 0 geh zu goto12" lande, ist die Bedingung nicht erfüllt und ich kann nicht zu 12 springen, um fertig zu werden. Muss ich also solange immwer bis zu 11 hoch und dann wieder zu 4 runter bis ich in c0 eine 0 stehen habe? Oder wie geht man da vor?


Aufgabe 1 (1,0,2,1,0)

1 CLOAD 1 = 2.1.2.1.0

2 STORE 3 = 3.1.2.1.1

3 LOAD 2 = 4.1.2.1.1

4 IF c0= 0 geh zu goto12 = 5.1.2.1.1

5 LOAD 3 = 6.1.2.1.1

6 MULT 1 = 7.2.2.1.1

7 STORE 3 = 8.2.2.1.2

8 LOAD 2 = 9.1.2.1.2

9 CSUB 1 = 10.0.2.1.2

10 STORE 2 = 11.0.2.0.2

11 GOTO 4 = 4.0.2.0.2 <Lösung

12 End

Aufgabe 2 (1,0,2,3,0)




1 CLOAD 1 = 2.1.2.3.0

2 STORE 3 = 3.1.2.3.1

3 LOAD 2 = 4.3.2.3.1

4 IF c0= 0 geh zu goto12 = 5.3.2.3.1

5 LOAD 3 = 6.1.2.3.1

6 MULT 1 = 7.2.2.3.1

7 STORE 3 = 8.2.2.3.2

8 LOAD 2 = 9.3.2.3.2

9 CSUB 1 = 10.2.2.3.2

10 STORE 2 = 11.2.2.2.2

11 GOTO 4 =????

12 End
 
Jawad1231 schrieb:
Wenn ich bei"IF c0= 0 geh zu goto12" lande, ist die Bedingung nicht erfüllt und ich kann nicht zu 12 springen, um fertig zu werden. Muss ich also solange immwer bis zu 11 hoch und dann wieder zu 4 runter bis ich in c0 eine 0 stehen habe?
Das wäre dann eine WHILE-Schleife, die die Schritte 5-10 solange wiederholt "solange" c0 ungleich 0 ist (bzw logisch umgedreht "bis" c0=0), und das kann durchaus gewollt sein. Spiel es einfach weiter durch und ohne mir das jetzt im Detail angeschaut zu haben gehe ich davon aus, dass die Bedingung irgendwann erfüllt sein wird, das IF springt zu 12 und das Programm endet.

Du würdest jetzt also bei der zweiten Runde aka Iteration der Schleife mit

4 IF c0= 0 geh zu goto12 = 11.2.2.2.2

starten und mit 5+ weitermachen bis du wieder beim GOTO 4 landest und wenn c0 dann 0 ist, bist du durch, und wenn nicht, drehst du noch eine Runde.
 
  • Gefällt mir
Reaktionen: Jawad1231
genau so war es danke, bin im 3durchgang auf 0 gelandet.
 
  • Gefällt mir
Reaktionen: Raijin
Zurück
Oben