2.2.1 Vom Quellcode zum Prozessor

[gesichtete Version][gesichtete Version]
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 2: Zeile 2:
Quellcode in einer Hochsprache wie Java, C oder Pascal. Hier ist in diesen drei Sprachen mal ein ganz einfaches Programm codiert:
Quellcode in einer Hochsprache wie Java, C oder Pascal. Hier ist in diesen drei Sprachen mal ein ganz einfaches Programm codiert:
<loop_area type="sourcecode">'''Quellcode in Java:'''<br />
<loop_area type="sourcecode">'''Quellcode in Java:'''<br />
<br />public class Addierer {<br />&nbsp;&nbsp;&nbsp;&nbsp;public static void main(String[] args) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int a = 2;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int b = 5;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int c = a + b;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />
<br />public class Addierer {<br />&nbsp;&nbsp;&nbsp;&nbsp;public static void main(String[] args) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int x = 2;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int y = 5;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int z = x + y;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />
</loop_area>
</loop_area>
<loop_area type="sourcecode">'''Quellcode in C:'''<br />
<loop_area type="sourcecode">'''Quellcode in C:'''<br />
<br />void main(void) {<br />&nbsp;&nbsp;&nbsp;&nbsp;int a = 2;<br />&nbsp;&nbsp;&nbsp;&nbsp;int b = 5;<br />&nbsp;&nbsp;&nbsp;&nbsp;int c = a + b;<br />}<br />
<br />void main(void) {<br />&nbsp;&nbsp;&nbsp;&nbsp;int x = 2;<br />&nbsp;&nbsp;&nbsp;&nbsp;int y = 5;<br />&nbsp;&nbsp;&nbsp;&nbsp;int z = x + y;<br />}<br />
</loop_area>
</loop_area>
<loop_area type="sourcecode">'''Quellcode in Pascal:'''<br />
<loop_area type="sourcecode">'''Quellcode in Pascal:'''<br />
<br />PROGRAM Addierer;<br />VAR<br />&nbsp;&nbsp;&nbsp;&nbsp;a, b, c: Integer<br />BEGIN<br />&nbsp;&nbsp;&nbsp;&nbsp;a := 2;<br />&nbsp;&nbsp;&nbsp;&nbsp;b := 5;<br />&nbsp;&nbsp;&nbsp;&nbsp;c := a + b;<br />END.<br />
<br />PROGRAM Addierer;<br />VAR<br />&nbsp;&nbsp;&nbsp;&nbsp;x, y, z: Integer<br />BEGIN<br />&nbsp;&nbsp;&nbsp;&nbsp;x := 2;<br />&nbsp;&nbsp;&nbsp;&nbsp;y := 5;<br />&nbsp;&nbsp;&nbsp;&nbsp;z := x + y;<br />END.<br />
</loop_area>
</loop_area>
Dieses Programm ist sehr einfach zu verstehen:
Dieses Programm ist sehr einfach zu verstehen:
* Es werden drei Variablen deklariert.
* Es werden drei Variablen deklariert.
* Der ersten Variablen a wird der Wert 2 zugewiesen.
* Der ersten Variablen x wird der Wert 2 zugewiesen.
* Der zweiten Variablen b wird der Wert 5 zugewiesen.
* Der zweiten Variablen y wird der Wert 5 zugewiesen.
* Die dritte Variable bekommt ihren Wert zugewiesen als Ergebnis der Addition der Varaiablen a und b.
* Die dritte Variable z bekommt ihren Wert zugewiesen als Ergebnis der Addition der Werte der Varaiablen x und y.
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.
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.
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.
<loop_area type="sourcecode">'''C- oder Pascal-Quelltext übersetzt in Maschinensprache (Programmtext):'''<br />
<loop_area type="sourcecode">'''C- oder Pascal-Quelltext übersetzt in Maschinensprache (Programmtext):'''<br />
<br />00110000100100001101001100010101000011100010001101011000111001000011111110000000
<br />00000000110000100000000100001101000000001100010100000001000011100000000010001101000000011000111000000001000011110000001110000000
</loop_area>
</loop_area>
<loop_area type="sourcecode">'''C- oder Pascal-Quelltext übersetzt in Maschinensprache (Programmtext):'''<br />
Und an genau dieser Stelle beginnen die Probleme für uns Menschen. Eine scheinbar endlose Reihe von Einsen und Nullen. Das folgende Video bringt etwas Licht ins Dunkel und erläutert die Bedeutung dieser Reihe.
<br />00110000100000000100001101000000001100010100000001000011100000000010001101000000011000111000000001000011110000001110000000000000
<p><loop_media type="audio" title="Platzhalter-Video" description="Bald erscheint hier der geplante Inhalt..." copyright="" index=true show_copyright=false>{{#ev:youtube|kSQJPIWzd5U}}</loop_media></p>
</loop_area>
Die Reihe an Einsen und Nullen besteht in unserem Beispiel also aus insgesamt acht Befehlen, von denen jeder aus insgesamt 16 Bit besteht.
<loop_area type="sourcecode">'''C- oder Pascal-Quelltext übersetzt in Maschinensprache (Programmtext):'''<br />
<loop_area type="sourcecode">'''8 Maschinensprachebefehle, bestehend aus je 16 Bit:'''<br />
<br />0011000010000000<br />0100001101000000<br />0011000101000000<br />0100001110000000<br />0010001101000000<br />0110001110000000<br />0100001111000000<br />1110000000000000
<br />0000000011000010<br />0000000100001101<br />0000000011000101<br />0000000100001110<br />0000000010001101<br />0000000110001110<br />0000000100001111<br />0000001110000000
</loop_area>
</loop_area>
<loop_area type="sourcecode">'''C- oder Pascal-Quelltext übersetzt in Maschinensprache (Programmtext):'''<br />
Diese Maschinensprachebefehle lassen sich für Menschen besser als Assemblercode darstellen:
<br />0011000010<br />0100001101<br />0011000101<br />0100001110<br />0010001101<br />0110001110<br />0100001111<br />1110000000
</loop_area>
 
<loop_area type="sourcecode">'''Übersetzt in Assembler:'''<br />
<loop_area type="sourcecode">'''Übersetzt in Assembler:'''<br />
<br />LOAD #2<br />STORE 13<br />LOAD #5<br />STORE 14<br />LOAD 13<br />ADD 14<br />STORE 15<br />HALT<br />
<br />LOAD #2<br />STORE 13<br />LOAD #5<br />STORE 14<br />LOAD 13<br />ADD 14<br />STORE 15<br />HALT<br />
</loop_area>
</loop_area>
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
<br />
<br />
<br />
<br />

Version vom 21. August 2013, 19:50 Uhr

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:

Code

Quellcode in Java:


public class Addierer {
    public static void main(String[] args) {
        int x = 2;
        int y = 5;
        int z = x + y;
    }
}

Code

Quellcode in C:


void main(void) {
    int x = 2;
    int y = 5;
    int z = x + y;
}

Code

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:

  • Es werden drei Variablen deklariert.
  • Der ersten Variablen x wird der Wert 2 zugewiesen.
  • Der zweiten Variablen y wird der Wert 5 zugewiesen.
  • Die dritte Variable z bekommt ihren Wert zugewiesen als Ergebnis der Addition der Werte der Varaiablen x und y.

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.

Code

C- oder Pascal-Quelltext übersetzt in Maschinensprache (Programmtext):


00000000110000100000000100001101000000001100010100000001000011100000000010001101000000011000111000000001000011110000001110000000

Und an genau dieser Stelle beginnen die Probleme für uns Menschen. Eine scheinbar endlose Reihe von Einsen und Nullen. Das folgende Video bringt etwas Licht ins Dunkel und erläutert die Bedeutung dieser Reihe.

Die Reihe an Einsen und Nullen besteht in unserem Beispiel also aus insgesamt acht Befehlen, von denen jeder aus insgesamt 16 Bit besteht.

Code

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:

Code

Ü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


Diese Seite steht unter der Creative Commons Namensnennung 3.0 Unported Lizenz http://i.creativecommons.org/l/by/3.0/80x15.png