ZUM-Unterrichten - Logo.png
Viele Inhalte sind umgezogen ins neue ZUM-Unterrichten.

Von-Neumann-Rechner-Simulation

aus ZUM-Wiki, dem Wiki für Lehr- und Lerninhalte auf ZUM.de
Wechseln zu: Navigation, Suche

Von-Neumann-Rechner-Simulatoren gibt es sehr viele. Selten bekommt man jedoch Gelegenheit, selbst den Quellcode sehen zu können und zusätzliche Befehle einbauen zu können.

Die folgende Simulation ermöglicht es, in JavaScript kleine Maschinensprachenprogramme auf einem sehr einfachen Rechner zu simulieren.

  • Der Befehlssatz wurde - leicht variiert - von folgender Simulation übernommen: [1]

Hintergrundwissen

Übung

Hand.gif   Übung
  • Analysieren Sie das Programm
  • Ergänzen Sie die fehlenden Befehle
  • Schreiben Sie kleine Anwendungen in Maschinensprache und testen Sie sie mit Hilfe des Simulators.



<script language="JavaScript">
/*
0 -	COMPARE X Y	Vergleiche (X) und (Y)
		PS:=0 falls (X)=(Y)
		PS:=1 falls (X)>(Y)
		PS:=-1 falls (X)<(Y)
1 -	IF= X	Falls PS=0 springe an die Adresse X
2 -	IF> X	Falls PS>0 springe an die Adresse X
3 -	IF< X	Falls PS<0 springe an die Adresse X
4 -	SUB X Y	(X):=(X)-(Y)
5 -	JMP X	Springe an die Adresse X
6 -	OUT X	Ausgabe von (X)
7 -	END	Ende

8 -	INP X	Eingabe von (X)
9 -	ADD	(X):=(X)+(Y)
10 -	MUL	(X):=(X)*(Y)
11 -	DIV	(X):=(X)/(Y)
12 -	MOD	(X):=(X)MOD(Y)

zusätzlich
13 - dump - gibt die Werte aller Speicherplätze aus
*/

var a=new Array();
var ps=new Number();
var zaehler=new Number();
var nothalt=new Number();
zaehler=0; 
nothalt=0; // spätestens nach 1000 Schritten wird das Prg unterbrochen
a[ 0]="inp";
a[ 1]="10";
a[ 2]="out";
a[ 3]="10";
a[ 4]="add";
a[ 5]="10";
a[ 6]="9";
a[ 7]="jmp";
a[ 8]="2";
a[ 9]="1";
a[10]="0"; 

while (a[zaehler]!="end" && nothalt<1000){  
 document.write(a[zaehler]+"
"); // inp ZELLE - ermöglicht eine Benutzereingabe // der Wert wird in ZELLE gespeichert if (a[zaehler]=="inp") { zaehler++; a[a[zaehler]]=prompt("Bitte eine Zahl eingeben"); } // out ZELLE // gibt den Wert von ZELLE aus. if (a[zaehler]=="out") { zaehler++; document.write(a[a[zaehler]]+" --- "); } // add ZELLE1 ZELLE2 - addiert zum Wert der Zelle1 den Wert von ZELLE2 // speichert ihn in Zelle if (a[zaehler]=="add") { zaehler++; a[a[zaehler]]=Number(a[a[zaehler]])+Number(a[a[zaehler+1]]); zaehler++; } // jmp ZELLE // setzt den Zähler auf den Wert ZELLE (springt im Programm) if (a[zaehler]=="jmp") { zaehler++; zaehler=a[zaehler]-1; } // dump - gibt den Wert von allen Speicherzellen aus. if (a[zaehler]=="dump") { for (i=0;i<a.length;i++) { document.write(i+"-"+a[i]+" --- "); } } zaehler++; nothalt++; } if (nothalt==1000) { // nach spätestens 1000 Schritten stoppt das Programm alert("(Wahrscheinlich) Programmstopp durch Nothalt"); } </script>

Siehe auch