2.2.1 Vom Quellcode zum Prozessor

[gesichtete Version][gesichtete Version]
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 23: Zeile 23:
<p><loop_media type="audio" title="Vom Quellcode zum Prozessor (14:09)" description="" copyright="CC-BY" index=true show_copyright=true>{{#ev:youtube|cX5XLc9e_g4}}</loop_media></p>
<p><loop_media type="audio" title="Vom Quellcode zum Prozessor (14:09)" description="" copyright="CC-BY" index=true show_copyright=true>{{#ev:youtube|cX5XLc9e_g4}}</loop_media></p>
Am Ende des Videos wird auf eine SWF-Animation verweisen. Das Bearbeiten der Animation stellt eine sinnvolle Fortsetzung des Videos dar und sei deshalb empfohlen.
Am Ende des Videos wird auf eine SWF-Animation verweisen. Das Bearbeiten der Animation stellt eine sinnvolle Fortsetzung des Videos dar und sei deshalb empfohlen.
<loop_area type="task">'''Aufgabe 1'''<br />Bearbeite die SWF-Animation unter<br />
<loop_area type="task">'''Aufgabe 1'''<br />Bearbeite die SWF-Animation unter<br />http://courses.cs.vt.edu/csonline/MachineArchitecture/Lessons/CPU/sumprogram.html <br />und vertiefe damit das Verständnis für die Ausführung von Maschinensprache auf einer CPU. Die Animation kann sowohl für den Ablauf mit Maschinensprache, als auch mit Assembler konfiguriert werden. Bedenke, dass Assembler nur eine Vereinfachung für den Menschen darstellt. Auf der CPU werden binär codierte Befehle (--> Maschinensprache) ausgeführt.<br /> <br />Falls dein Gerät die SWF-Wiedergabe nicht unterstützt, findest du hier ein aufgenommenes Video der Animation:<br />Sum program (Assembler) --> http://youtu.be/_HwoiEkW8nI (03:33)<br />Sum program (Maschinensprache) --> http://youtu.be/i2sREE1aAOc (03:23)</loop_area>
http://courses.cs.vt.edu/csonline/MachineArchitecture/Lessons/CPU/sumprogram.html
<br />und vertiefe damit das Verständnis für die Ausführung von Maschinensprache auf einer CPU. Die Animation kann sowohl für den Ablauf mit Maschinensprache, als auch mit Assembler konfiguriert werden. Bedenke, dass Assembler nur eine Vereinfachung für den Menschen darstellt. Auf der CPU werden binär codierte Befehle (--> Maschinensprache) ausgeführt.<br />
Falls dein Gerät die SWF-Wiedergabe nicht unterstützt, findest du hier ein aufgenommenes Video der Animation:<br /><br />Sum program (Assembler) --> http://youtu.be/_HwoiEkW8nI (03:33)<br /><br />Sum program (Maschinensprache) --> http://youtu.be/i2sREE1aAOc (03:23)</loop_area>
 
<p><loop_media type="audio" title="Count program (09:36)" description="" copyright="CC-BY" index=true show_copyright=true>{{#ev:youtube|IwjR83896p0}}</loop_media></p>


Die oben gezeigte Reihe aus Einsen und Nullen besteht in diesem Beispiel also aus insgesamt acht Befehlen, von denen jeder aus genau 16 Bit besteht.
Die oben gezeigte Reihe aus Einsen und Nullen besteht in diesem Beispiel also aus insgesamt acht Befehlen, von denen jeder aus genau 16 Bit besteht.
Zeile 38: Zeile 33:
<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 zeigt, 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.
Wie die verschiedenen auf dieser Seite angegebenen Videos zeigen, 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:<br />
http://courses.cs.vt.edu/csonline/MachineArchitecture/Lessons/CPU/sumprogram.html<br />
<br />
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.<br />
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.<br />
http://courses.cs.vt.edu/csonline/MachineArchitecture/Lessons/CPU/Lesson.html
http://courses.cs.vt.edu/csonline/MachineArchitecture/Lessons/CPU/Lesson.html
<loop_area type="task">'''Aufgabe 1'''<br />
<loop_area type="task">'''Aufgabe 2'''<br />
Starte die SWF-Animation zum ''Count program'' und beobachte den Ablauf. Falls dein Gerät die SWF-Wiedergabe nicht unterstützt, findest du hier ein aufgenommenes Video der Animation:<br /><br />Count program (Assembler) --> http://youtu.be/IwjR83896p0 (09:37)<br /><br />Count program (Maschinensprache) --> http://youtu.be/zIDj4FlOV7U (09:32)
Starte die SWF-Animation zum ''Count program'' und beobachte den Ablauf. Falls dein Gerät die SWF-Wiedergabe nicht unterstützt, findest du hier ein aufgenommenes Video der Animation:<br /><br />Count program (Assembler) --> http://youtu.be/IwjR83896p0 (09:37)<br /><br />Count program (Maschinensprache) --> http://youtu.be/zIDj4FlOV7U (09:32)
</loop_area>
</loop_area>
<loop_area type="task">'''Aufgabe 2'''<br />
<loop_area type="task">'''Aufgabe 3'''<br />
Wie funktioniert der im ''Count program'' enthaltene EQUAL-Befehl?
Wie funktioniert der im ''Count program'' enthaltene EQUAL-Befehl?
</loop_area>
</loop_area>
<loop_area type="task">'''Aufgabe 3'''<br />
<loop_area type="task">'''Aufgabe 4'''<br />
Wie funktioniert der im ''Count program'' enthaltene JUMP-Befehl?<br />Arbeitet JUMP auch auf dem Akkumulator?
Wie funktioniert der im ''Count program'' enthaltene JUMP-Befehl?<br />Arbeitet JUMP auch auf dem Akkumulator?
</loop_area>
</loop_area>
<loop_area type="task">'''Aufgabe 4'''<br />
<loop_area type="task">'''Aufgabe 5'''<br />
Der Assemblercode des ''Count program'' sieht wie folgt aus:<br />LOAD #5<br />
Der Assemblercode des ''Count program'' sieht wie folgt aus:<br />LOAD #5<br />
STORE 15<br />LOAD #0<br />EQUAL 15<br />JUMP #6<br />HALT<br />ADD #1<br />JUMP #3<br />
STORE 15<br />LOAD #0<br />EQUAL 15<br />JUMP #6<br />HALT<br />ADD #1<br />JUMP #3<br />

Version vom 23. August 2013, 13:22 Uhr

Hier sieht man den Quellcode eines ganz einfachen Programms, jeweils in den Hochsprachen Java, C und Pascal:

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 auf die direkt vom Compiler erzeugte ausführbare Datei.

Nach dem Start der 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):

0000000011000010000000010000110100000000110001010000000100001110000000 0010001101000000011000111000000001000011110000001110000000

Und an genau dieser Stelle beginnen die Probleme für den Menschen. Eine sehr lange Reihe von Einsen und Nullen ist nicht wirklich dafür geeignet, dass der Mensch sie problemlos versteht. Das folgende Video bringt etwas Licht ins Dunkel und erläutert die Bedeutung dieser Reihe.

Am Ende des Videos wird auf eine SWF-Animation verweisen. Das Bearbeiten der Animation stellt eine sinnvolle Fortsetzung des Videos dar und sei deshalb empfohlen.

Aufgabe

Aufgabe 1
Bearbeite die SWF-Animation unter
http://courses.cs.vt.edu/csonline/MachineArchitecture/Lessons/CPU/sumprogram.html
und vertiefe damit das Verständnis für die Ausführung von Maschinensprache auf einer CPU. Die Animation kann sowohl für den Ablauf mit Maschinensprache, als auch mit Assembler konfiguriert werden. Bedenke, dass Assembler nur eine Vereinfachung für den Menschen darstellt. Auf der CPU werden binär codierte Befehle (--> Maschinensprache) ausgeführt.

Falls dein Gerät die SWF-Wiedergabe nicht unterstützt, findest du hier ein aufgenommenes Video der Animation:
Sum program (Assembler) --> http://youtu.be/_HwoiEkW8nI (03:33)
Sum program (Maschinensprache) --> http://youtu.be/i2sREE1aAOc (03:23)

Die oben gezeigte Reihe aus Einsen und Nullen besteht in diesem Beispiel also aus insgesamt acht Befehlen, von denen jeder aus genau 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 die verschiedenen auf dieser Seite angegebenen Videos zeigen, 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.

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

Aufgabe 2

Starte die SWF-Animation zum Count program und beobachte den Ablauf. Falls dein Gerät die SWF-Wiedergabe nicht unterstützt, findest du hier ein aufgenommenes Video der Animation:

Count program (Assembler) --> http://youtu.be/IwjR83896p0 (09:37)

Count program (Maschinensprache) --> http://youtu.be/zIDj4FlOV7U (09:32)

Aufgabe

Aufgabe 3

Wie funktioniert der im Count program enthaltene EQUAL-Befehl?

Aufgabe

Aufgabe 4

Wie funktioniert der im Count program enthaltene JUMP-Befehl?
Arbeitet JUMP auch auf dem Akkumulator?

Aufgabe

Aufgabe 5

Der Assemblercode des Count program sieht wie folgt aus:
LOAD #5
STORE 15
LOAD #0
EQUAL 15
JUMP #6
HALT
ADD #1
JUMP #3

Erarbeite 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