i

Fachkonzept - Der Speicher als Programmspeicher

Wir haben gesehen: Maschinenprogramme aus Makrobefehlen lassen sich leichter verstehen und vor allem viel kompakter hinschreiben als eine Folge von Mikrobefehlen.

Programme im Arbeitsspeicher

Programme im Arbeitsspeicher[1]
Wenn wir wollen, dass ein Computer Programme selbstständig ausführt, müssen diese Programme auch irgendwo im Computer gespeichert sein. In den ersten Rechnern wie dem Zuse Z3 waren die Programme z.B. auf Lochstreifen gespeichert. John von Neumann hatte die Idee, nicht nur Zahlenwerte sondern auch Programme in ein und demselben Arbeitsspeicher abzulegen. Man spricht in diesem Zusammenhang von der von-Neumann-Architektur.

Wie aber lassen sich Makrobefehle inklusive Adresse im Speicher (RAM) ablegen, der doch eigentlich nur Zahlen speichern kann? Der Trick besteht darin, die verschiedenen Makrobefehle durchzunummerieren und nur noch die Nummern der Befehle sowie die zugehörigen Adressen und andere Zusätze zu speichern. Wie das im einzelnen geschieht, ist von Rechner zu Rechner verschieden.

Umsetzung in JOHNNY

In unserem Simulator JOHNNY z.B. kann jede Speicherstelle eine einzige Zahl zwischen 0 und 19999 speichern. Wie also kann man einen Befehl wie
TAKE 120 
im RAM von JOHNNY speichern?

Zunächst überlegt man sich hierfür, dass dieser Befehl eigentlich zweigeteilt ist.

  • Zum einen ist da die eigentliche Operation mit dem Namen „ADD“. Es wäre naheliegend, zusätzlich zum Namen einfach einen Zahlencode für jede solche Operation festzulegen, den "Operation Code" oder kurz "Op-Code". Wenn wir annehmen, dass wir wahrscheinlich nicht mehr als 15 Befehle brauchen, reichen zwei Dezimalstellen locker, um allen Befehlen eine eindeutige Nummer zu geben. Wir könnten also TAKE z.B. die Op-Code 01 geben (die führende Null, nur um klarzumachen, dass Op-Codes bei uns hier immer zwei Dezimalstellen haben).
  • Zum anderen ist da auch noch die Adresse, auf die sich der Befehl bezieht. Der Speicher unseres Simulationsrechners enthält 1000 Speicherstellen mit Adressen zwischen 0 und 999. Um die Adressen darzustellen brauchen wir also drei weitere Dezimalstellen.
Insgesamt brauchen wir also 5 Stellen, um einen ganzen Befehl wie "TAKE 120" zu speichern. Und -- welch ein Zufall: die Speicherstellen von JOHNNY haben 5 Dezimalstellen.
Programme im Arbeitsspeicher[2]
Wir vereinbaren folgendes:
  • Die 10000er- und die 1000er-Stelle sollen den Op-Code des Befehls beschreiben. Da die Zahlen im Speicher von JOHNNY Werte von 0 bis 19999, könnte man im Grunde 20 verschiedene Op-Codes definieren, wobei wir Op-Code 00 aus bestimmten Gründen zunächst weglassen, also 19 verschiedene OP-Codes. Mehr als genug für unsere weiteren Überlegungen.
  • Die restlichen drei Stellen (100er-, 10er- und 1er-Stelle) sollen die Adresse beschreiben, auf die sich der Befehl bezieht.
Damit wird aus dem Befehl „TAKE 120“ nun einfach die Zahl „01120“. Wir schreiben im folgenden den in der Geschäftswelt üblichen Dezimalpunkt hin, um die beiden Teile besser auseinanderhalten zu können: „01.120“.
Kodierung eines Befehls bei JOHNNY[3]

Erleichterungen für die Benutzer in JOHNNY

Damit man sich als Benutzer des Simulators die Zahlen für die einzelnen Operationen nicht merken muss, wurden im Simulationsprogramm zwei Erleichterungen eingeführt:

  • Bei der Darstellung des Arbeitsspeichers werden hinter den eigentlichen Speicherstellen als Kommentar die Makrobefehle angezeigt (falls die Zahl möglicherweise einem Makrobefehl entspricht).
  • Bei der Eingabe von Werten in den RAM kann man ein Auswahlmenü anklicken, das direkt die einzelnen Operationen mit ihren entsprechenden Zahlen zur Auswahl stellt.
  • Eigentlich ist es egal, an welcher Speicherstelle des RAM ein Programm beginnt. Praktisch ist es allerdings, wenn es an der Speicherstelle 000 beginnt, weil man dann mit der RESET-Taste in der Werkzeugleiste direkt zum ersten Befehl springen kann.

Quellen

Suche

v
12.4.3.3
inf-schule.de/rechner/johnny/mikromakro/fk_programmspeicher
inf-schule.de/12.4.3.3
inf-schule.de/@/page/I39XN8S03uw9hGvx

Rückmeldung geben