JavaScript/Von-Neumann-Rechner-Simulation: Unterschied zwischen den Versionen
Aus ZUM-Unterrichten
(N - importiert) |
(l korr) |
||
Zeile 96: | Zeile 96: | ||
== Siehe auch== | == Siehe auch== | ||
* [[JavaScript]] | * [[JavaScript]] | ||
* [[ | * [[Programmieraufgabe]] | ||
== Hintergrundwissen == | == Hintergrundwissen == |
Aktuelle Version vom 26. Oktober 2019, 04:40 Uhr
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]
Ü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>
/*
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]+"<br>");
// 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>
}}