[gesichtete Version] | [gesichtete Version] |
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
Zeile 50: | Zeile 50: | ||
</loop_area> | </loop_area> | ||
<loop_area type="task">'''Aufgabe 4'''<br /> | <loop_area type="task">'''Aufgabe 4'''<br /> | ||
Erzeuge einen Vorschlag für ein | Erzeuge einen Vorschlag für ein äquivalentes Programm in einer Hochsprache wie Java, C, Pascal oder ähnlich. Diskutiere deinen Vorschlag in deiner Lerngruppe! | ||
(Man kann diese Aufgabe mit Hilfe einer FOR-Schleife lösen, aber es muss nicht zwingend eine FOR-Schleife sein.) | (Man kann diese Aufgabe mit Hilfe einer FOR-Schleife lösen, aber es muss nicht zwingend eine FOR-Schleife sein.) | ||
</loop_area> | </loop_area> |
Du kennst doch Quellcode, oder?
Quellcode in einer Hochsprache wie Java, C oder Pascal. Hier ist in diesen drei Sprachen mal ein ganz einfaches Programm codiert:
Quellcode in Java:
public class Addierer {
public static void main(String[] args) {
int x = 2;
int y = 5;
int z = x + y;
}
}
Quellcode in C:
void main(void) {
int x = 2;
int y = 5;
int z = x + y;
}
Quellcode in Pascal:
PROGRAM Addierer;
VAR
x, y, z: Integer
BEGIN
x := 2;
y := 5;
z := x + y;
END.
Dieses Programm ist sehr einfach zu verstehen:
In C oder Pascal wird nun der Compiler auf den Quellcode angesetzt und heraus kommt eine ausführbare Datei. Bei dem Java-Quelltext sieht es etwas anders aus, da hier der Compiler nicht direkt eine ausführbare Datei erzeugt, sondern zunächst nur eine Datei mit sogenannten Bytecode, der später interpretiert wird. Wir beschränken uns in der weiteren Betrachtung deshalb auf C und Pascal.
Nach dem Start der vom Compiler erzeugten ausführbaren Datei wird der sogenannte Programmtext in den Hauptspeicher (Speicherwerk) geladen. Der Programmtext enthält die tatsächlich von der CPU ausführbaren Befehle, es handelt sich um die sogenannte Maschinensprache.
C- oder Pascal-Quelltext übersetzt in Maschinensprache (Programmtext):
0000000011000010000000010000110100000000110001010000000100001110000000 0010001101000000011000111000000001000011110000001110000000
Und an genau dieser Stelle beginnen die Probleme für uns Menschen. Eine sehr lange Reihe von Einsen und Nullen. Das folgende Video bringt etwas Licht ins Dunkel und erläutert die Bedeutung dieser Reihe.
Wenn Sie dieses Element öffnen, werden Inhalte von externen Dienstleistern geladen und dadurch Ihre IP-Adresse an diese übertragen.
Die Reihe an Einsen und Nullen besteht in unserem Beispiel also aus insgesamt acht Befehlen, von denen jeder aus genau 16 Bit besteht.
8 Maschinensprachebefehle, bestehend aus je 16 Bit:
0000000011000010
0000000100001101
0000000011000101
0000000100001110
0000000010001101
0000000110001110
0000000100001111
0000001110000000
Diese Maschinensprachebefehle lassen sich für Menschen besser als Assemblercode darstellen:
Übersetzt in Assembler:
LOAD #2
STORE 13
LOAD #5
STORE 14
LOAD 13
ADD 14
STORE 15
HALT
Wie das Video gezeigt hat, ist anhand des Assemblercodes sehr leicht nachvollziehbar, dass der Programmtext auf der betrachteten Beispiel-CPU tatsächlich eine Übersetzung des oben auf dieser Seite gegebenen Quellcodes in einer der Hochsprachen ist.
Der Vollständigkeit halber folgt hier noch der Link aus dem Video, unter dem die erläuterte SWF-Animation zu finden ist:
http://courses.cs.vt.edu/csonline/MachineArchitecture/Lessons/CPU/sumprogram.html
Ein paar zusätzliche Aufgaben sollen das zuvor erläuterte Beispiel noch vertiefen. Betrachte dazu folgende Internet-Seite, auf der ganz unten das Count program mit SWF-Animation zu finden ist.
http://courses.cs.vt.edu/csonline/MachineArchitecture/Lessons/CPU/Lesson.html
Aufgabe 1
Starte die SWF-Animation und beobachte den Ablauf.
Aufgabe 2
Wie funktioniert der im Count program enthaltene EQUAL-Befehl?
Aufgabe 3
Wie funktioniert der im Count program enthaltene JUMP-Befehl?
Arbeitet JUMP auch auf dem Akkumulator?
Aufgabe 4
Erzeuge einen Vorschlag für ein äquivalentes Programm in einer Hochsprache wie Java, C, Pascal oder ähnlich. Diskutiere deinen Vorschlag in deiner Lerngruppe! (Man kann diese Aufgabe mit Hilfe einer FOR-Schleife lösen, aber es muss nicht zwingend eine FOR-Schleife sein.)
Diese Seite steht unter der Creative Commons Namensnennung 3.0 Unported Lizenz http://i.creativecommons.org/l/by/3.0/80x15.png