Random Access Machine (RAM)

Eine Random Access Machine, häufig auch als Registermaschine bezeichnet, ist ein mathematisches Rechnermodell, welches einem realen Rechner ähnlich ist. Im Gegensatz zu Turingmaschinene wird nicht nur sequentieller, sondern willkürlicher Zugriff auf den Speicher gewährleistet. Aus diesem Grund können manche Funktionen schneller berechnet werden als mit Turingmaschinen.

Komponenten einer RAM

RAMs können sich lediglich in ihrem Programm (P), Bandalphabet (A) und der Nummerierung der Alphabetszeichen (Nr) unterschreiden.
Sei R = (P, A, Nr) eine RAM, so kann R als 6-Tupel definiert werden:
PC bezeichnet den Program Counter. Dieser gibt den aktuellen Inhalt des Befehlszählers an
ACC ist der Inhalt des Akkumulators
S bezeichnet den Inhalt des Datenspeichers
w ist das Eingabewort
x ist die Position des Lesekopfes auf dem Eingabealphabet
v  Ausgaben, die bereits auf das Ausgabeband geschrieben wurden

Informale Beschreibung

Eine RAM besteht aus einem endlichen Bandalphabet A = {0, 1, #, ☒}, einem Eingabeband, von dem die Eingaben gelesen werden und einem Ausgabeband, auf das die Ausgaben geschrieben werden. Die Felder der Bänder können mit jedem beliebigen Zeichen aus einem endlichen Alphabet A beschriftet werden. Der Kopf des Eingabe- und Ausgabebandes kann sich nur nach rechts bewegen.

Des Weiteren besitzen RAMs einen Speicher mit unendlich vielen Zellen, diese wiederum sind durchnummeriert (0, 1, 2...). Beim Start der RAM sind alle Zellen mit 0 initialisiert. Außerdem gibt es ein Programm (P) mit einer endlich numerierten Folge von Befehlen und eine zentrale Recheneinheit (CPU), die aus einem Akkumulator und einem Befehlszähler besteht.

Befehle der Registermaschine

Arithmetische Befehle

add iWert aus Speicherzelle i wird zum Wert im Akkumulator addiert
addi iZahl i wird zum Wert im Akkumulator addiert
sub iWert aus Speicherzelle i wird mit dem Wert im Akkumulator subtrahiert
subi iZahl i wird mit dem Wert im Akkumulator subtrahiert
mul iWert aus Speicherzelle i wird mit dem Wert im Akkumulator multipliziert
muli iZahl i wird mit dem Wert im Akkumulator multipliziert
div iWert aus Speicherzelle i wird mit dem Wert im Akkumulator dividiert
divi iZahl i wird mit dem Wert im Akkumulator dividiert
incInkrementiert Akkumulator

Transportbefehle

decDekrementiert Akkumulator
load iDer Wert aus Speicherzelle i wird in den Akkumulator geladen
loadi iZahl i wird in den Akkumulator geladen
store iDer Inhalt des Akkumulators wird in die Speicherzelle mit der Adresse i geschrieben

Sprungbefehle

jump iUnbedingter Sprung: Führt den i-ten Befehl aus. Programmzähler wird mit i initialisiert
jump iBedingter Sprung: Je nach Inhalt des Akkumulators wird mit dem i-ten Befehl weitergearbeitet
endBeendet das Programm

Werbung

Maconline
Maconline