Welche Register werden zur Parameterübergabe verwendet? In welcher Reihenfolge werden die Parameter auf dem Stack bzw. in den Registern abgelegt?

Größe: px
Ab Seite anzeigen:

Download "Welche Register werden zur Parameterübergabe verwendet? In welcher Reihenfolge werden die Parameter auf dem Stack bzw. in den Registern abgelegt?"

Transkript

1 6.5 MMIX Befehle 291 Aufrufkonventionen Eine Aufrufkonvention (engl. calling convention) legt fest, wie einer Funktion Parameter übergeben werden und wie der Rückgabewert zurückgegeben wird. Damit spezifiziert eine Aufrufkonvention u.a. Antworten auf Fragen wie: Werden alle Parameter auf dem Stack übergeben oder werden die ersten n Parameter in Registern übergeben und die restlichen auf dem Stack? Welche Register werden zur Parameterübergabe verwendet? In welcher Reihenfolge werden die Parameter auf dem Stack bzw. in den Registern abgelegt? Werden Gleitkommazahlen in anderen Registern übergeben als Festkommazahlen? In welchen? Wer bereinigt den Stack: Der Funktionsaufrufer oder die Funktion? Wie wird der Rückgabewert zurückgegeben: Auf dem Stack oder in einem Register? In welchem? Da unterschiedliche Prozessorarchitekturen unterschiedliche Register haben (Anzahl, Funktion,...) und sich auch bezüglich der Verwendung des Stacks unterscheiden können, sind Aufrufkonventionen architekturabhängig. Funktionen können auf einer Prozessorarchitektur in vielfältiger Art und Weise aufgerufen werden. Somit gibt es für jede Prozessorarchitektur in der Regel auch mehrere mögliche Aufrufkonventionen. Bei der Programmierung in Hochsprache ist das Einhalten der gewünschten Aufrufkonvention Aufgabe des Compilers. Parameterübergabe auf dem Stack beim MMIX Der Stack ist ein Bereich im Speicher des Prozessors, in dem Funktionsparameter, Rücksprungadressen und lokale Variable nacheinander aufgerufender Funktionen aufeinandergestapelt (engl. stack = Stapel) werden. Beim MMIX kann der Stack am Ende des Datensegments aufgebaut werden, beginnend an Adresse 0x3FF...F8 in Richtung niedrigerer Adressen wachsend. Der Stack wird immer über den sog. Stackpointer angesprochen. Der Stackpointer wird realisiert durch ein Register, in dem die Adresse der auf dem Stack ganz oben liegenden Daten abgelegt ist. Viele Prozessoren verwenden ein spezielles Stackpointer-Register. Beim MMIX verwenden wir ein globales Allzweckregister als Stackpointer.

2 292 6 MMIX-Prozessor Beim MMIX kann die Verwendung eines Stacks wie folgt umgesetzt werden: Beim Start eines Programmes wird mit der Anweisung SP GREG # ein globales Register angelegt, mit 0x initialisiert und über die Marke SP angsprechbar gemacht. Über diese Marke wird der Stackpointer dann zukünftig angesprochen. 8 Byte 0x3FFFFFFFFFFFFFF8 SP 0x Der Stackpointer zeigt jetzt auf den Beginn des Pool-Segments. Beim Aufruf einer Funktion mit n Parametern wird vom aktuellen Wert des Stackpointers n 8 subtrahiert. Der Stackpointer zeigt dann auf eine niedrigere Adresse, d.h. er wandert nach oben. Im Falle n =3wird 3 8 subtrahiert. SUB :SP,:SP,3*8 Der Stackpointer zeigt dann auf Adresse 0x3FFFFFFFFFFFFFE8. SP 0x3FFFFFFFFFFFFFE8 0x3FFFFFFFFFFFFFF0 0x3FFFFFFFFFFFFFF8 0x

3 6.5 MMIX Befehle 293 Anschließend werden die Parameter mittels Stackpointer auf den Stack kopiert. a,:sp,0 b,:sp,1*8 c,:sp,2*8 SP 0x3FFFFFFFFFFFFFE8 0x3FFFFFFFFFFFFFF0 0x3FFFFFFFFFFFFFF8 0x Parameter für Fkt 2. Parameter für Fkt 3. Parameter für Fkt Nachdem die Parameter auf den Stack kopiert sind, wird mit dem GO-Befehl in die Funktion gesprungen. Dazu wird die Einsprungs-Marke der Funktion angegeben, z.b. Fkt. Als Register zur Speicherung der Rücksprungadresse sollte ein Register angegeben werden, das keine Daten enthält, die noch benötigt werden. Es bietet sich an, die Rücksprungadresse immer in demselben Register abzulegen, beispielsweise in Register 0. GO $0,:Fkt

4 294 6 MMIX-Prozessor Als Aufrufkonvention legen wir fest, dass die aufgerufene Funktion sicherstellen muss, dass sie keine vom Funktionsaufrufer in Registern gespeicherten Daten überschreibt. Da die Funktion die vom Funktionsaufrufer verwendeten Register nicht zwingend kennt (z.b. Bibliotheksfunktion), sichert sie alle von ihr selbst verwendeten Register auf den Stack. Die Funktion kann die Register dann verwenden, muss aber unmittelbar vor dem Rücksprung zum Funktionsaufrufer die alten Werte wieder vom Stack in die entsprechenden Register zurück kopieren. Verwendet die Funktion beispielsweise die Register 1 und 2, so sichert sie diese auf den Stack. SUB :SP,:SP,2*8 $1,:SP,0 $2,:SP,1*8 SP 0x3FFFFFFFFFFFFFD8 0x3FFFFFFFFFFFFFE0 0x3FFFFFFFFFFFFFE8 0x3FFFFFFFFFFFFFF0 0x3FFFFFFFFFFFFFF8 0x Sicherung $1 Fkt Sicherung $2 Fkt 1. Parameter für Fkt 2. Parameter für Fkt 3. Parameter für Fkt Sind die Register auf den Stack gesichert, lädt die Funktion die für sie bestimmten Parameter vom Stack und verarbeitet sie. LDO $1,:SP,2*8 Parameter 1 LDO $2,:SP,3*8 Parameter LDO $2,:SP,4*8 Parameter

5 6.5 MMIX Befehle 295 Ruft die Funktion Fkt selbst eine andere Funktion Fkt2 auf, so sichert sie zunächst die Rücksprungadresse auf den Stack, kopiert die der Funktion Fkt2 zu übergebenden Parameter auf den Stack und ruft dann Funktion Fkt2 auf. SUB :SP,:SP,2*8 $0,:SP,1*8 Rücksprungadresse $1,:SP,0 Parameter für Fkt2 GO $0,:Fkt2 SP 0x3FFFFFFFFFFFFFC8 0x3FFFFFFFFFFFFFD0 0x3FFFFFFFFFFFFFD8 0x3FFFFFFFFFFFFFE0 0x3FFFFFFFFFFFFFE8 0x3FFFFFFFFFFFFFF0 0x3FFFFFFFFFFFFFF8 0x Parameter für Fkt2 Sicherung $0 Fkt Sicherung $1 Fkt Sicherung $2 Fkt 1. Parameter für Fkt 2. Parameter für Fkt 3. Parameter für Fkt

6 296 6 MMIX-Prozessor Die Funktion Fkt2 sichert nun ihrerseits die von ihr verwendeten Register auf den Stack, lädt den ihr übergebenen Parameter vom Stack und führt damit Berechnungen durch. SUB :SP,:SP,2*8 $1,:SP,0 Sicherung $1 $2,:SP,1*8 Sicherung $2 LDO $2,SP,2*8 Parameter laden SP 0x3FFFFFFFFFFFFFB8 0x3FFFFFFFFFFFFFC0 0x3FFFFFFFFFFFFFC8 0x3FFFFFFFFFFFFFD0 0x3FFFFFFFFFFFFFD8 0x3FFFFFFFFFFFFFE0 0x3FFFFFFFFFFFFFE8 0x3FFFFFFFFFFFFFF0 0x3FFFFFFFFFFFFFF8 0x Sicherung $1 Fkt 2 Sicherung $2 Fkt 2 Parameter für Fkt2 Sicherung $0 Fkt Sicherung $1 Fkt Sicherung $2 Fkt 1. Parameter für Fkt 2. Parameter für Fkt 3. Parameter für Fkt

7 6.5 MMIX Befehle 297 Hat Fkt2 ihre Berechnungen abgeschlossen, legt Sie den Rückgabewert an der Stelle auf dem Stack ab, an der ihr der Parameter übergeben wurde. Sind mehrere Parameter übergeben worden, wird der Rückgabewert an die Stelle desjenigen Parameters mit der höchsten Adresse geschrieben. Wurde kein Parameter übergeben, so muss vor der Sicherung der Register auf dem Stack Platz freigehalten werden. $2,:SP,2*8 Rückgabewert SP 0x3FFFFFFFFFFFFFB8 0x3FFFFFFFFFFFFFC0 0x3FFFFFFFFFFFFFC8 0x3FFFFFFFFFFFFFD0 0x3FFFFFFFFFFFFFD8 0x3FFFFFFFFFFFFFE0 0x3FFFFFFFFFFFFFE8 0x3FFFFFFFFFFFFFF0 0x3FFFFFFFFFFFFFF8 0x Sicherung $1 Fkt 2 Sicherung $2 Fkt 2 Rückgabewert von Fkt2 Sicherung $0 Fkt Sicherung $1 Fkt Sicherung $2 Fkt 1. Parameter für Fkt 2. Parameter für Fkt 3. Parameter für Fkt

8 298 6 MMIX-Prozessor Nach dem Ablegen des Rückgabewerts auf dem Stack muss die Funktion Fkt2 die auf den Stack gesicherten Register wieder herstellen. Anschließend muss der Stackpointer so angepasst werden, dass er auf den Rückgabewert zeigt, so dass er vom Funktionsaufrufer ausgelesen werden kann, ohne die Anzahl der von Fkt2 auf den Stack gesicherten Register zu kennen. Anschließend springt die Funktion Fkt2 zurück zum Funktionsaufrufer. Als Rücksprungadresse dient Register 0 mit dem Offset 0. Für den GO-Befehl muss wieder ein Register zur Speicherung der Rücksprungadresse angegeben werden, auch wenn nicht an das Ende der Funktion Fkt2 zurückgesprungen wird. Da der in Register 0 enthaltene Wert nach dem Rücksprung nicht mehr benötigt wird, kann Register 0 auch wieder zur Abspeicherung dieser Rücksprungadresse verwendet werden (1. Parameter des GO-Befehls). LDO $1,:SP,0 LDO $2,:SP,1*8 ADD :SP,:SP,2*8 GO $0,$0,0 SP 0x3FFFFFFFFFFFFFB8 0x3FFFFFFFFFFFFFC0 0x3FFFFFFFFFFFFFC8 0x3FFFFFFFFFFFFFD0 0x3FFFFFFFFFFFFFD8 0x3FFFFFFFFFFFFFE0 0x3FFFFFFFFFFFFFE8 0x3FFFFFFFFFFFFFF0 0x3FFFFFFFFFFFFFF8 0x Sicherung $1 Fkt 2 Sicherung $2 Fkt 2 Rückgabewert von Fkt2 Sicherung $0 Fkt Sicherung $1 Fkt Sicherung $2 Fkt 1. Parameter für Fkt 2. Parameter für Fkt 3. Parameter für Fkt Auf die Werte oberhalb des Stackpointers wird nicht mehr zugegriffen. Sie werden aber nicht explizit gelöscht/überschrieben.

9 6.5 MMIX Befehle 299 Die Funktion Fkt kann nun das ihr von Fkt2 übergebene Ergebnis vom Stack auslesen und mit ihren Berechnungen fortfahren. Nach dem Auslesen des Rückgabewerts von Fkt2 addiert die Funktion Fkt noch den Wert 8 zum Stackpointer. Damit zeigt der Stackpointer auf dieselbe Stelle wie vor dem Aufruf von Fkt2. Der Aufruf von Fkt2 ist damit offiziell abgeschlossen. LDO ADD $1,:SP,0 :SP,:SP,8 SP 0x3FFFFFFFFFFFFFB8 0x3FFFFFFFFFFFFFC0 0x3FFFFFFFFFFFFFC8 0x3FFFFFFFFFFFFFD0 0x3FFFFFFFFFFFFFD8 0x3FFFFFFFFFFFFFE0 0x3FFFFFFFFFFFFFE8 0x3FFFFFFFFFFFFFF0 0x3FFFFFFFFFFFFFF8 0x Sicherung $1 Fkt 2 Sicherung $2 Fkt 2 Rückgabewert von Fkt2 Sicherung $0 Fkt Sicherung $1 Fkt Sicherung $2 Fkt 1. Parameter für Fkt 2. Parameter für Fkt 3. Parameter für Fkt

10 300 6 MMIX-Prozessor Die Funktion Fkt kann nun das Ergebnis von Fkt2 für ihre weiteren Berechnungen verwenden. Hat die Funktion Fkt ihre Berechnungen abgeschlossen, kopiert sie ihren Rückgabewert auf den Stack, stellt die von ihr gesicherten Register wieder her, passt den Stackpointer so an, dass er auf den Rückgabewert zeigt und kehrt schließlich zum Funktionsaufrufer zurück $1,:SP,5*8 LDO $0,:SP,0 LDO $1,:SP,1*8 LDO $2,:SP,2*8 ADD :SP,:SP,5*8 GO $0,:$0,0 SP 0x3FFFFFFFFFFFFFB8 0x3FFFFFFFFFFFFFC0 0x3FFFFFFFFFFFFFC8 0x3FFFFFFFFFFFFFD0 0x3FFFFFFFFFFFFFD8 0x3FFFFFFFFFFFFFE0 0x3FFFFFFFFFFFFFE8 0x3FFFFFFFFFFFFFF0 0x3FFFFFFFFFFFFFF8 0x Sicherung $1 Fkt 2 Sicherung $2 Fkt 2 Rückgabewert von Fkt2 Sicherung $0 Fkt Sicherung $1 Fkt Sicherung $2 Fkt 1. Parameter für Fkt 2. Parameter für Fkt Rückgabewert von Fkt

11 6.5 MMIX Befehle 301 Der Funktionsaufrufer kann nun das Ergebnis der Funktion Fkt über den Stackpointer auslesen und danach den Stackpointer wieder anpassen, so dass er auf die selbe Stelle zeigt wie vor dem Aufruf der Funktion Fkt. LDO ADD $1,:SP,0 :SP,:SP,8 SP 0x3FFFFFFFFFFFFFB8 0x3FFFFFFFFFFFFFC0 0x3FFFFFFFFFFFFFC8 0x3FFFFFFFFFFFFFD0 0x3FFFFFFFFFFFFFD8 0x3FFFFFFFFFFFFFE0 0x3FFFFFFFFFFFFFE8 0x3FFFFFFFFFFFFFF0 0x3FFFFFFFFFFFFFF8 0x Sicherung $1 Fkt 2 Sicherung $2 Fkt 2 Rückgabewert von Fkt2 Sicherung $0 Fkt Sicherung $1 Fkt Sicherung $2 Fkt 1. Parameter für Fkt 2. Parameter für Fkt Rückgabewert von Fkt

12 302 6 MMIX-Prozessor Aufgaben a) Geben Sie den Befehl an, mit dem Sie den Stackpointer als globales Register anlegen, mit 0x initialisieren und über die Marke SP ansprechbar machen. SP GREG # b) Geben Sie die Befehle an, mit denen der Funktionsaufrufer aus dem Namensraum Main: heraus Register 3 und 4 als Parameter auf dem Stack ablegt und danach die global definierte Funktion Str aufruft. Die Rücksprungadresse soll in Register 0 abgelegt werden. SUB GO :SP,:SP,2*8 $3,:SP,0*8 $4,:SP,1*8 $0,:Str c) Geben Sie die Befehle an, mit denen Sie den Namensraum Str: anlegen, dann die Funktion Str beginnen und die Register 0, 1 und 2 auf den Stack sichern. PREFIX Str: :Str SUB :SP,:SP,3*8 $0,:SP,0 $1,:SP,1*8 $2,:SP,2*8

13 6.5 MMIX Befehle 303 d) Tragen Sie in nachfolgende Abbildung die auf dem Stack gespeicherten Werte ein und geben Sie die Position des Stackpointers an. 0x3FFFFFFFFFFFFFD0 SP 0x3FFFFFFFFFFFFFD8 0x3FFFFFFFFFFFFFE0 0x3FFFFFFFFFFFFFE8 0x3FFFFFFFFFFFFFF0 0x3FFFFFFFFFFFFFF8 0x Sicherung $0 Sicherung $1 Sicherung $2 2. Parameter 1. Parameter e) Geben Sie die Befehle an, mit denen Sie die übergebenen Parameter in die Register 1 und 2 einlesen. LDO LDO $1,:SP,3*8 $2,:SP,4*8 f) Geben Sie die Befehle an, mit denen Sie den Wert aus Register 1 als Ergebnis auf dem Stack ablegen, die auf den Stack gesicherten Register wieder herstellen, den Stackpointer anpassen und zurück zum Funktionsaufrufer springen. Die Rücksprungadresse steht in Register 0 und soll auch wieder dort abgelegt werden. $1,:SP,4*8 LDO $0,:SP,0 LDO $1,:SP,1*8 LDO $2,:SP,2*8 ADD :SP,:SP,4*8 GO $0,$0,0

14 304 6 MMIX-Prozessor g) Geben Sie die Befehle an, mit denen Sie den Namensraum Str: wieder beenden. PREFIX : h) Geben Sie die Befehle an, mit denen der Funktionaufrufer das Ergebnis vom Stack in das Register 1 einliest und den Stackpointer anpasst. LDO ADD $1,:SP,0 :SP,:SP,8

15 6.5 MMIX Befehle 305 T i) Was ist der Stack? Der Stack ist ein Bereich im Arbeitsspeicher der lokale Programmdaten wie lokale Variable, in den Arbeitsspeicher gesicherte Register und Rücksprungadressen enthält. Der englische Begriff Stack bedeutet Stapel und rührt daher, dass die Daten dort gestapelt werden. T j) Wo beginnt der Stack und in welche Richtung wächst er? Der Stack beginnt am Ende des Datensegments und wächst in Richtung kleinerer Adressen. T k) Was ist der Stack-Pointer? Der Stack-Pointer ist ein Register das die Adresse des zuletzt auf dem Stack abgelegten Elements enthält. T l) Wie werden Daten adressiert, die auf dem Stack liegen? Daten auf dem Stack werden immer über den Stack-Pointer adressiert. Der Stack- Pointer dient dabei als Basis-Adresse, auf die ein Offset addiert wird um andere Elemente als das oberste Element des Stacks zu adressieren.

16 306 6 MMIX-Prozessor T m) Welche Operationen muss man ausführen um die Werte zweier Register (acht Byte breite Datenworte) auf dem Stack abzulegen? Den Wert des Stack-Pointers um 2 8 = 16 verringern Die beiden Datenworte an die Adresse Stack-Pointer und Stack-Pointer +8speichern T n) Wie wird der Stack bei Funktionsaufrufen verwendet? Beim Aufruf der Funktion die Parameter auf dem Stack ablegen. In der Funktion die Rücksprungadresse auf den Stack sichern (push), diejenigen Register, die von der Funktion geändert werden, auf den Stack sichern (push), Parameter vom Stack in die Register einlesen, Parameter verarbeiten um ein Ergebnis zu berechnen, das Ergebnis auf dem Stack ablegen, damit der Funktionsaufrufer es auslesen kann, die zuvor auf den Stack gesicherten Register wiederherstellen (pop), die zuvor auf den Stack gesicherte Rücksprungadresse wieder vom Stack auslesen (pop), den Stackpointer so anpassen, dass er aufs Ergebnis zeigt, zum Funktionsaufrufer zurückspingen. Nach Rückkehr zum Funktionsaufrufer das berechnete Ergebnis vom Stack auslesen (pop).

17 6.5 MMIX Befehle 307 T o) Geben Sie den Befehl an mit dem Sie für den Stack-Pointer ein globales Register reservieren und dieses mit 0x initialisieren. SP GREG # T p) Warum initialisieren wir den Stack-Pointer mit 0x , d.h. mit dem Beginn des Poolsegments, und nicht mit dem Ende des Datensegments? Bevor Daten auf den Stack gesschrieben werden (push), wird der Wert des Stack- Pointers um die Anzahl der zu schreibenden Byte verringert. Wird bspw. ein Octa (64 Bit ) 8 Byte) auf den Stack geschrieben, so wird der Stack-Pointer um 1 8 verringert und zeigt dann auf die Adresse #3FFF FFFF FFFF FFF8. Das ist genau das letzte Octa-Datenwort im Datensegment. T q) Geben Sie die MMIX-Befehle an, mit denen Sie Register $1 und $2 auf den Stack schreiben und dann die Funktion fkt aufrufen. Nehmen Sie an, dass Ihr Code im Namensraum Main: steht und fkt im Namensraum Fkt: unter dem Namen :fkt angelegt wurde. Sichern Sie die Rücksprungadresse in Register 0. SUB GO :SP,:SP,2*8 $1,:SP,0 $2,:SP,1*8 $0,:fkt

18 308 6 MMIX-Prozessor Nehmen Sie an, dass Sie eine Funktion im Namensraum Fkt: implementieren. T r) Geben Sie die MMIX-Befehle an, mit denen Sie die Register 0, 1, 2 und 3 auf den Stack sichern und anschließend zwei acht Byte breite Parameter vom Stack in die Register 1 und 2 einlesen. SUB LDO LDO :SP,:SP,4*8 $0,:SP,0 $1,:SP,1*8 $2,:SP,2*8 $3,:SP,3*8 $1,:SP,4*8 $2,:SP,5*8 T s) Zeichnen Sie, wie der Stack nach diesen Operationen aussieht. SP! 0x3FFF FFFF FFFF FFD0 $0 0x3FFF FFFF FFFF FFD8 $1 0x3FFF FFFF FFFF FFE0 $2 0x3FFF FFFF FFFF FFE8 $3 0x3FFF FFFF FFFF FFF0 $1 0x3FFF FFFF FFFF FFF8 $2

19 6.5 MMIX Befehle 309 T t) Im Hauptprogramm wurden die Parameter in die Register 1 und 2 geschrieben. Im Unterprogramm wurden Register 1 und 2 dann auf den Stack gesichert und dann dieselben Werte wieder vom Stack in Register 1 und 2 geladen, obwohl sich die Werte von Register 1 und 2 in der Zwischenzeit nicht geändert hatten. Warum haben wir und diesen Schritt nicht gespart sondern dieselben Werte, die in Registern 1 und 2 waren, nochmal reingeschrieben? Das Unterprogramm hat in der Regel keine Informationen darüber, in welchen Registern der Funktionsaufrufer die Parameter abgelegt hatte, da beispielsweise Funktionsaufrufer und Unterprogramm von unterschiedlichen Personen entwickelt wurden. Wenn man aber die Anzahl und Reihenfolge der Parameter kennt, weiß man, wie man diese vom Stack auslesen muss und kann diese auch ohne Kenntnis der verwendeten Register auslesen. T u) Warum speichert man die Rücksprungadresse auf dem Stack? Falls die aufgerufene Funktion ihrerseits wieder eine Funktion aufruft und dabei das Register, in dem die Rücksprungadresse gespeichert ist, überschreibt, dann würde die Rücksprungadresse verloren gehen. T v) Was würde passieren, wenn der Stack so groß wird, dass er mit den Daten zusammenstößt, die am Beginn des Datensegments liegen? Das Programm würde wahrscheinlich abstürzen, da möglicherweise die Rücksprungadressen überschrieben werden würden und dann zu völlig falschen Speicheradressen verzweigt werden würde.

20 310 6 MMIX-Prozessor T w) Geben Sie die MMIX-Befehle an, mit denen Sie den Inhalt von Register 3 als Ergebnis auf dem Stack ablegen, dann die Register 0, 1, 2 und 3 wiederherstellen und anschließend zurück zum Funktionsaufrufer springen. $3,:SP,5*8 LDO $0,:SP,0 LDO $1,:SP,1*8 LDO $2,:SP,2*8 LDO $3,:SP,3*8 ADD :SP,:SP,5*8 GO $0,$0,0 T x) Nehmen Sie an, Sie sind wieder im Hauptprogramm. Geben Sie die Befehle an mit denen Sie das Ergebnis der Funktion vom Stack in das Register 1 einlesen. LDO ADD $1,:SP,0 :SP,:SP,8 T y) Warum muss der Stack-Pointer angepasst werden nachdem das Ergebnis vom Stack geladen wurde? Würde man das nicht machen, würde der Stack-Pointer nicht auf die selbe Stelle zeigen wie vor dem Funktionsaufruf. Dadurch hätte man beim Zugriff auf Stack- Inhalte, die vom Stack-Pointer aus gesehen an höheren Adressen liegen, immer einen Versatz, in unserem Beispiel um acht Byte.

21 6.5 MMIX Befehle 311 Beispielprogramm: Quadratische Gleichung In dieser Übung schreiben Sie ein MMIX Programm zur Lösung der Quadratischen Gleichung a x 2 + b x + c =0mit der Formel x 1,2 = b±p b 2 4 a c 2 a zu lösen. Die Variable a, b und c sind als Festkommazahlen gegeben; das Ergebnis soll als Gleitkommazahl angegeben werden. a) Geben Sie den MMIX Befehl an, mit dem Sie den Stack-Pointer anlegen und über die Marke SP ansprechbar machen. SP GREG # Zunächst soll das Hauptprogramm implementiert werden. b) Geben Sie den MMIX-Befehl an, mit dem Sie den Namensraum Main: eröffnen. PREFIX Main: c) Reservieren Sie an Adresse 0x die 64 Bit breiten Speicherworte A, B, C, X1 und X2 und initialisieren Sie A mit 2, B mit 4 und C mit 8. LOC # A OCTA 2 B OCTA 4 C OCTA 8 X1 OCTA X2 OCTA d) Geben Sie den Befehl an, mit dem Sie Register 1 durch buf ansprechbar machen. buf IS $1

22 312 6 MMIX-Prozessor e) Beginnen Sie das Hauptprogramm, legen Sie A, B und C auf dem Stack ab und rufen Sie dann die global definierte Funktion QuadGleich auf. Speichern Sie dabei die Rücksprungadresse in Register $0. :Main SUB :SP,:SP,3*8 LDO buf,a buf,:sp,0 LDO buf,b buf,:sp,8 LDO buf,c buf,:sp,2*8 GO $0,:QuadGleich f) Geben Sie den MMIX Code an, mit dem Sie die Ergebnisse x 1 und x 2 der Funktion vom Stack auslesen und im Arbeitsspeicher an den Marken X1 bzw. X2 ablegen. LDO LDO ADD buf,:sp,0 buf,x1 buf,:sp,8 buf,x2 :SP,:SP,2*8 g) Geben Sie die Anweisungen an, mit denen Sie das Programm und den Namensraum Main: beenden. TRAP PREFIX : 0,:Halt,0

23 6.5 MMIX Befehle 313 Im Folgenden soll die Funktion QuadGleich implementiert werden, von der folgender Programm-Code bereits gegeben ist: PREFIX QuadGleich: a IS $1 b IS $2 c IS $3 x1 IS $4 x2 IS $5 disk IS $6 buf1 IS $7 buf2 IS $8 Der Funktion QuadGleich werden die Parameter a, b und c wie folgt auf dem Stack übergeben: SP! a b c h) Geben Sie an der Marke :QuadGleich die Befehle an, mit denen Sie die verwendeten Register auf den Stack sichern und die Parameter a, b und c dann vom Stack in die Register a, b und c einlesen. :QuadGleich SUB :SP,:SP,8*8 a,:sp,0 LDO LDO LDO b,:sp,8 c,:sp,2*8 x1,:sp,3*8 x2,:sp,4*8 disk,:sp,5*8 buf1,:sp,6*8 buf2,:sp,7*8 a,:sp,8*8 b,:sp,9*8 c,:sp,10*8

24 314 6 MMIX-Prozessor i) Geben Sie den MMIX-Befehlscode an, der im Fall a =0das Ergebnis x = c/b berechnet, dieses dann sowohl in x1 und x2 speichert und dann an die Marke Speichern springt, und im Fall a 6= 0an die Marke Anicht0 springt. BNZ FLOT NEG FLOT FDIV SET JMP a,anicht0 b,b c,0,c c,c x1,c,b x2,x1 Speichern j) Geben Sie an Marke Anicht0 den MMIX Code an, mit dem Sie die Diskriminante b 2 4 a c mittels Festkomma-Arithmetik berechnen und das Ergebnis in Register disk ablegen. Anicht0 MUL buf1,a,c SLU MUL SUB buf1,buf1,2 buf2,b,b disk,buf2,buf1

25 6.5 MMIX Befehle 315 k) Geben Sie den MMIX Code an mit dem Sie im Fall disk < 0 an die Marke Dneg verzweigen, im Fall disk =0an die Marke D0 verzweigen und im Fall disk > 0 an die Marke Dpos verzweigen. BN BZ JMP disk,dneg disk,d0 Dpos l) Geben Sie an Marke Dneg den MMIX Code an, mit dem Sie x1 und x2 auf NaN setzen; verzweigen Sie dann an die Marke Speichern. Dneg SET x1,0 SUB x1,x1,1 SET x2,x1 JMP Speichern NaN: Exponent alle Bits gesetzt und f > 0 m) Geben Sie an Marke D0 den MMIX Code an, mit dem Sie b/2a berechnen und das Ergebnis sowohl in x1 als auch in x2 ablegen. Verzweigen Sie danach an die Marke Speichern. D0 NEG buf1,0,b FLOT buf1,buf1 SL buf2,a,1 FLOT buf2,buf2 FDIV x1,buf1,buf2 SET x1,x2 JMP Speichern

26 316 6 MMIX-Prozessor n) Geben Sie an Marke Dpos die MMIX Befehle an, mit denen Sie x 1 und x 2 gemäß x 1,2 = b±p b 2 4 a c 2 a berechnen und das Ergebnis in x1 und x2 ablegen. Springen Sie dann an die Marke Speichern. Beachten Sie, dass die Diskriminante bereits berechnet wurde und als Festkommazahl in Register disk abgelegt ist. Dpos SL buf2,a,1 FLOT buf2,buf2 NEG buf1,0,b FLOT buf1,buf1 FLOT disk,disk FSQRT disk,disk FADD x1,buf1,disk x1 berechnen FDIV x1,x1,buf2 FSUB x2,buf1,disk x2 berechnen FDIV x2,x2,buf2 JMP Speichern o) Geben Sie an Marke Speichern die MMIX Befehle an, mit denen Sie x1 und x2 auf den Stack sichern, zum Funktionsaufrufer zurückspringen und den Namensraum QuadGleich: beenden. Speichern U x1,:sp,9*8 8 Variable gesichert + U x2,:sp,10*8 3 Param. = 11 => ADD :SP,:SP,9*8 die letzten beiden GO $0,$0,0 sind offset 9 und 10 PREFIX :

B1 Stapelspeicher (stack)

B1 Stapelspeicher (stack) B1 Stapelspeicher (stack) Arbeitsweise des LIFO-Stapelspeichers Im Kapitel "Unterprogramme" wurde schon erwähnt, dass Unterprogramme einen so genannten Stapelspeicher (Kellerspeicher, Stapel, stack) benötigen

Mehr

TI II. Sommersemester 2009 Prof. Dr. Mesut Güneş 7. Aufgabenblatt mit Lösungen

TI II. Sommersemester 2009 Prof. Dr. Mesut Güneş 7. Aufgabenblatt mit Lösungen 7. Aufgabenblatt mit Lösungen Problem 1: IEEE-Gleitkommazahlen (2+2+4=8) a) Welchen Bereich der positiven Zahlen kann man mit normalisierten Gleitkommazahlen im IEEE-754-Format mit 64 Bit darstellen? b)

Mehr

x86 Assembler Praktische Einführung Sebastian Lackner Michael Müller 3. Juni 2013

x86 Assembler Praktische Einführung Sebastian Lackner Michael Müller 3. Juni 2013 x86 Assembler Praktische Einführung Sebastian Lackner Michael Müller 3. Juni 2013 1 / 53 Inhaltsverzeichnis 1 Einführung 2 Assembler Syntax, Register und Flags 3 Hauptspeicher 4 Stack 5 Assemblerbefehle

Mehr

Karlsruher Institut für Technologie

Karlsruher Institut für Technologie Karlsruher Institut für Technologie Lehrstuhl für Programmierparadigmen Sprachtechnologie und Compiler WS 2010/2011 Dozent: Prof. Dr.-Ing. G. Snelting Übungsleiter: Matthias Braun Lösung zu Übungsblatt

Mehr

Technische Informatik 1 Übung 2 Assembler (Rechenübung) Georgia Giannopoulou (ggeorgia@tik.ee.ethz.ch) 22./23. Oktober 2015

Technische Informatik 1 Übung 2 Assembler (Rechenübung) Georgia Giannopoulou (ggeorgia@tik.ee.ethz.ch) 22./23. Oktober 2015 Technische Informatik 1 Übung 2 Assembler (Rechenübung) Georgia Giannopoulou (ggeorgia@tik.ee.ethz.ch) 22./23. Oktober 2015 Ziele der Übung Aufgabe 1 Aufbau und Aufruf von Funktionen in Assembler Codeanalyse

Mehr

Betriebssystembau. 7. Übung. Michael Engel Arbeitsgruppe Eingebettete Systemsoftware. Lehrstuhl für Informatik 12 TU Dortmund

Betriebssystembau. 7. Übung. Michael Engel Arbeitsgruppe Eingebettete Systemsoftware. Lehrstuhl für Informatik 12 TU Dortmund Betriebssystembau 7. Übung Michael Engel Arbeitsgruppe Eingebettete Systemsoftware Lehrstuhl für Informatik 12 TU Dortmund michael.engel@tu-dortmund.de http://ess.cs.uni-dortmund.de/~me/ 1 Agenda Coroutinen

Mehr

2. Aufgabenblatt mit Lösungen

2. Aufgabenblatt mit Lösungen Problem 1: (6*1 = 6) TI II 2. Aufgabenblatt mit Lösungen Geben Sie für jede der folgenden Zahlen deren Ziffernschreibweisen im Dezimal-, Dual-, Oktal- und Hexadezimal-System an. a) (2748) 10 b) (1010011011)

Mehr

Nachfolgende Abbildung zeigt das Spezialregister ra, das Arithmetische Status Register. Interrupt Enable (Freischalten)

Nachfolgende Abbildung zeigt das Spezialregister ra, das Arithmetische Status Register. Interrupt Enable (Freischalten) 6.2 Register 205 Spezialregister Spezialregister (engl. special purpose registers) haben im Gegensatz zu Allzweckregistern einen bestimmten Zweck, d.h. jedes Spezialregister hat seine ganz eigene Aufgabe.

Mehr

Übungen für die Einführung in die Assemblerprogrammierung mit dem Prozessor c515c

Übungen für die Einführung in die Assemblerprogrammierung mit dem Prozessor c515c Übungen für die Einführung in die Assemblerprogrammierung mit dem Prozessor c515c 1 Transportbefehle 1.1 Verwendung nur Akku und Register (R0, R1,... R7) 1.1.1 Kopieren Sie den Wert aus Register1 nach

Mehr

Stephan Brumme, SST, 2.FS, Matrikelnr. 70 25 44

Stephan Brumme, SST, 2.FS, Matrikelnr. 70 25 44 Aufgabe 33 a) Der Pseudobefehl move $rd,$rs wird als addu $rd,$0,$rs übersetzt. Dabei macht sich SPIM zunutze, dass das Register $0 immer Null ist. Somit wird das Register $rd ersetzt durch $rd=0+$rs=$rs,

Mehr

4.2 Universalrechner: Schaltung unabhängig vom Problem 185

4.2 Universalrechner: Schaltung unabhängig vom Problem 185 4.2 Universalrechner: Schaltung unabhängig vom Problem 85 a) Geben Sie binär die Befehlsworte an, mit denen Sie die Eingänge a, b und c in die Register R, R2 und R übernehmen. K D M4 M M2 M Kommentar XXXXXXXXXXX

Mehr

Übungscomputer mit Prozessor 8085 - Bedienungsanleitung

Übungscomputer mit Prozessor 8085 - Bedienungsanleitung Seite 1 von 9 Pinbelegung der Steckerleisten im Übungsgerät Seite 2 von 9 Inbetriebnahme: Schalter S1, S2, und S3 in Stellung 1 (oben) schalten. Spannung 5 V anlegen. ACHTUNG auf Polarität achten. Taste

Mehr

Objektorientiertes Programmieren für Ingenieure

Objektorientiertes Programmieren für Ingenieure Uwe Probst Objektorientiertes Programmieren für Ingenieure Anwendungen und Beispiele in C++ 18 2 Von C zu C++ 2.2.2 Referenzen und Funktionen Referenzen als Funktionsparameter Liefert eine Funktion einen

Mehr

Funktionen in PHP 1/7

Funktionen in PHP 1/7 Funktionen in PHP 1/7 Vordefinierte Funktionen in PHP oder vom Entwickler geschriebene Funktionen bringen folgende Vorteile: gleiche Vorgänge müssen nur einmal beschrieben und können beliebig oft ausgeführt

Mehr

Mikrocomputertechnik - Programmierung

Mikrocomputertechnik - Programmierung 3 Programmierung Assembler Aufgaben: Übersetzt mnemotechnische Abkürzungen (z.b. move, add...) in die Maschinenbefehle des Prozessors Ermöglicht die Vergabe von Namen für Speicheradressen (Label) Berechnet

Mehr

Grundlagen der Programmiersprache C++

Grundlagen der Programmiersprache C++ / TU Braunschweig Grundlagen der Programmiersprache C++ Um den Studierenden den Einstieg in die FE-Programmierung zu erleichtern werden die wesentlichen Elemente eines C-Programmes beschrieben, soweit

Mehr

Rechnerarchitektur Atmega 32. 1 Vortrag Atmega 32. Von Urs Müller und Marion Knoth. Urs Müller Seite 1 von 7

Rechnerarchitektur Atmega 32. 1 Vortrag Atmega 32. Von Urs Müller und Marion Knoth. Urs Müller Seite 1 von 7 1 Vortrag Atmega 32 Von Urs Müller und Marion Knoth Urs Müller Seite 1 von 7 Inhaltsverzeichnis 1 Vortrag Atmega 32 1 1.1 Einleitung 3 1.1.1 Hersteller ATMEL 3 1.1.2 AVR - Mikrocontroller Familie 3 2 Übersicht

Mehr

Technische Informatik 2 Maschinenprogrammierungskonzepte

Technische Informatik 2 Maschinenprogrammierungskonzepte Technische Informatik 2 Maschinenprogrammierungskonzepte Prof Dr Miroslaw Malek Sommersemester 2005 wwwinformatikhu-berlinde/rok/ca Thema heute Ausführung von Befehlen Ein-/Ausgabeprogrammierung Architekturen

Mehr

IT- Handbuch für Fachinformatiker, 7. Auflage: Text- Lösungen Sascha Kersken

IT- Handbuch für Fachinformatiker, 7. Auflage: Text- Lösungen Sascha Kersken IT- Handbuch für Fachinformatiker, 7. Auflage: Text- Lösungen Sascha Kersken Im Folgenden finden Sie jeweils die korrekte Antwort zu den im Buch abgedruckten Prüfungsfragen, soweit die Antworten in Textform

Mehr

3.0 8051 Assembler und Hochsprachen

3.0 8051 Assembler und Hochsprachen 3.0 8051 Assembler und Hochsprachen Eine kurze Übersicht zum Ablauf einer Programmierung eines 8051 Mikrocontrollers. 3.1 Der 8051 Maschinencode Grundsätzlich akzeptiert ein 8051 Mikrocontroller als Befehle

Mehr

Technische Informatik 2 Adressierungsarten

Technische Informatik 2 Adressierungsarten Technische Informatik 2 Adressierungsarten Prof. Dr. Miroslaw Malek Sommersemester 2009 www.informatik.hu-berlin.de/rok/ca Thema heute X-Adressmaschine 0-Adressmaschine 1-Adressmaschine 2-Adressmaschine

Mehr

Die Mikroprogrammebene eines Rechners

Die Mikroprogrammebene eines Rechners Die Mikroprogrammebene eines Rechners Das Abarbeiten eines Arbeitszyklus eines einzelnen Befehls besteht selbst wieder aus verschiedenen Schritten, z.b. Befehl holen Befehl dekodieren Operanden holen etc.

Mehr

Übungspaket 19 Programmieren eigener Funktionen

Übungspaket 19 Programmieren eigener Funktionen Übungspaket 19 Programmieren eigener Funktionen Übungsziele: Skript: 1. Implementierung und Kodierung eigener Funktionen 2. Rekapitulation des Stack-Frames 3. Parameterübergabe mittels Stack und Stack-Frame

Mehr

Übungspaket 31 Entwicklung eines einfachen Kellerspeiches (Stacks)

Übungspaket 31 Entwicklung eines einfachen Kellerspeiches (Stacks) Übungspaket 31 Entwicklung eines einfachen Kellerspeiches (Stacks) Übungsziele: Skript: 1. Definieren einer dynamischen Datenstruktur 2. Dynamische Speicher Speicherallokation 3. Implementierung eines

Mehr

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2012 / 2013. Vorlesung 9, Dienstag 18.

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2012 / 2013. Vorlesung 9, Dienstag 18. Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2012 / 2013 Vorlesung 9, Dienstag 18. Dezember 2012 (Performance Tuning, Profiling, Maschinencode) Prof. Dr.

Mehr

Wie arbeiten Computer?

Wie arbeiten Computer? Autor: Ortmann, Jürgen. Titel: Wie arbeiten Computer? Quelle: Einführung in die PC-Grundlagen. München, 8. Auflage, 2003. S. 29-41. Verlag: Addison-Wesley Verlag. Die Veröffentlichung erfolgt mit freunlicher

Mehr

Objektorientierte Programmierung mit C++ Zusammenfassung der wichtigsten Topics rund um die objektorientierte Programmierung mit C++11

Objektorientierte Programmierung mit C++ Zusammenfassung der wichtigsten Topics rund um die objektorientierte Programmierung mit C++11 Objektorientierte Programmierung mit C++ Zusammenfassung der wichtigsten Topics rund um die objektorientierte Programmierung mit C++11 Wozu objektorientiertes Programmieren? Die Welt besteht für den Menschen

Mehr

Systemsicherheit (SS 2015) 30. April 2015. Übungsblatt 2. Buffer-Overflow-Angriffe

Systemsicherheit (SS 2015) 30. April 2015. Übungsblatt 2. Buffer-Overflow-Angriffe Peter Amthor, Winfried E. Kühnhauser [email] Department of Computer Science and Automation Distributed Systems and Operating Systems Group Ilmenau University of Technology Systemsicherheit (SS 2015) 30.

Mehr

Wer in der Grundschule ein wenig aufgepasst hat, sollte in der Lage sein schriftlich eine Zahl durch eine zweite zu teilen.

Wer in der Grundschule ein wenig aufgepasst hat, sollte in der Lage sein schriftlich eine Zahl durch eine zweite zu teilen. Teilen binär Teil 1 - Vorzeichenlose Ganzzahlen ============ Irgendwann steht jeder Programmieren vor diesem Problem. Wie teile ich eine Binärzahl durch eine zweite? Wer in der Grundschule ein wenig aufgepasst

Mehr

3 Rechnen und Schaltnetze

3 Rechnen und Schaltnetze 3 Rechnen und Schaltnetze Arithmetik, Logik, Register Taschenrechner rste Prozessoren (z.b. Intel 4004) waren für reine Rechenaufgaben ausgelegt 4 4-Bit Register 4-Bit Datenbus 4 Kbyte Speicher 60000 Befehle/s

Mehr

COMPILER & CODE ANALYSE. Eine Einführung in die Code Analyse auf Grundlage von Compilern und deren Optimierung. 1

COMPILER & CODE ANALYSE. Eine Einführung in die Code Analyse auf Grundlage von Compilern und deren Optimierung. 1 1 COMPILER & CODE ANALYSE Eine Einführung in die Code Analyse auf Grundlage von Compilern und deren Optimierung. 1 INHALT Einleitung Werkzeuge Compiler Aufbau Optimierung Beispiel Code Analyse Einführung

Mehr

HC680 PROGRAMMER'S REFERENCE MANUAL

HC680 PROGRAMMER'S REFERENCE MANUAL HC680 PROGRAMMER'S REFERENCE MANUAL Programmieranleitung Mnemonic Assembler Maschinenbefehl Wirkung /Bedeutung Register (0 bis 3 allg. Reg.) Ope- Opcode/Binärcode - Adressierungsart - Nr Bez. xx Bin Art

Mehr

2. Rechnerarchitektur 2.1 einfache Computer

2. Rechnerarchitektur 2.1 einfache Computer Fakultät Informatik Institut Systemarchitektur Professur Rechnernetze WS 2012 LV Informatik-I für Verkehrsingenieure 2. Rechnerarchitektur 2.1 einfache Computer Dr. rer.nat. D. Gütter Mail: WWW: Dietbert.Guetter@tu-dresden.de

Mehr

Die Programmiersprache C

Die Programmiersprache C Die Programmiersprache C höhere Programmiersprache (mit einigen Assembler-ähnlichen Konstrukten) gut verständliche Kommandos muss von Compiler in maschinenlesbaren Code (Binärdatei) übersetzt werden universell,

Mehr

Fehlerkorrektur Bild 3.190 Demoprozessor

Fehlerkorrektur Bild 3.190 Demoprozessor 7 Prozessor 3 0 Flags C V N Z A IP 0 SP AB 8 MS W/R DB 4 00h..6Fh Daten Speicher 70h..70h PA 71h..71h PB 72h..73h PC 74h..76h PD 80h..FFh Programm Speicher Fehlerkorrektur Bild 3.190 Demoprozessor Die

Mehr

Die Befehle mit dem Ziel IP sind nichts anderes als Sprungbefehle, sie sind unten noch mal aufgeführt.

Die Befehle mit dem Ziel IP sind nichts anderes als Sprungbefehle, sie sind unten noch mal aufgeführt. Die Befehle des Modellrechners in übersichtlichen Tabellen: Alle Opcodes sind Hexadezimal angegeben (s.u.). 1.) Die Ladebefehle zwischen den einzelnen Registern. In der oberen Zeile steht jeweils die Quelle

Mehr

Technische Informatik 2: Addressierung und Befehle

Technische Informatik 2: Addressierung und Befehle Technische Informatik 2: Addressierung und Befehle Memory Map Programm Speicher: Adresse $000-$FFF max. 4096 Byte für kompiliertes Programm Data Memory: Adresse $0000-$FFFF 32 8Bit Register 64 I/O Register

Mehr

Zuschauer beim Berlin-Marathon

Zuschauer beim Berlin-Marathon Zuschauer beim Berlin-Marathon Stefan Hougardy, Stefan Kirchner und Mariano Zelke Jedes Computerprogramm, sei es ein Betriebssystem, eine Textverarbeitung oder ein Computerspiel, ist aus einer Vielzahl

Mehr

Computerarithmetik ( )

Computerarithmetik ( ) Anhang A Computerarithmetik ( ) A.1 Zahlendarstellung im Rechner und Computerarithmetik Prinzipiell ist die Menge der im Computer darstellbaren Zahlen endlich. Wie groß diese Menge ist, hängt von der Rechnerarchitektur

Mehr

Debuggen mit GDB (Gnu DeBugger) unter Eclipse

Debuggen mit GDB (Gnu DeBugger) unter Eclipse Debuggen mit GDB (Gnu DeBugger) unter Eclipse Boris Budweg, 16.11.2009 Version 0.4 Abstract: Kleine Einführung in die Bedienung des GDB über Eclipse und die Möglichkeiten eines Debuggers. Viele Screenshots

Mehr

Besprechung des 3. Übungsblattes MIMA-Interpreter MIMA-Aufgabe: Primzahltest Weitere MIMA-Aufgaben online

Besprechung des 3. Übungsblattes MIMA-Interpreter MIMA-Aufgabe: Primzahltest Weitere MIMA-Aufgaben online Themen heute Besprechung des 3. Übungsblattes MIMA-Interpreter MIMA-Aufgabe: Primzahltest Weitere MIMA-Aufgaben online Besprechung des 3. Übungsblattes Aufgabe 3 Speicherplätze für Mikrocode-Anweisungen

Mehr

Interrupts. Funktionsprinzip. Funktionsprinzip. Beispiel in C

Interrupts. Funktionsprinzip. Funktionsprinzip. Beispiel in C Interrupts Funktionsprinzip Interrupts bei ATmega128 Beispiel in C Funktionsprinzip 1 Was ist ein Interrupt? C muss auf Ereignisse reagieren können, z.b.: - jemand drückt eine Taste - USART hat Daten empfangen

Mehr

Kapitel VI. Speicherverwaltung. Speicherverwaltung

Kapitel VI. Speicherverwaltung. Speicherverwaltung Kapitel VI Speicherverwaltung 1 Speicherverwaltung Computer exekutiert Programme (mit Daten) im Hauptspeicher. Hauptspeicher: Großes Array von Wörtern (1 oder mehrere Bytes) Jedes Wort hat eine eigene

Mehr

b) Gegeben sei folgende Enumeration: enum SPRACHE {Deutsch, Englisch, Russisch};

b) Gegeben sei folgende Enumeration: enum SPRACHE {Deutsch, Englisch, Russisch}; Aufgabe 1: (15 Punkte) Bei den Multiple-Choice-Fragen ist jeweils nur eine richtige Antwort eindeutig anzukreuzen. Auf die richtige Antwort gibt es die angegebene Punktzahl. Wollen Sie eine Multiple-Choice-Antwort

Mehr

Assembler-Programmierung

Assembler-Programmierung Assembler-Programmierung Dr.-Ing. Volkmar Sieh Institut für Informatik 3: Rechnerarchitektur Friedrich-Alexander-Universität Erlangen-Nürnberg SS 2011 Assembler-Programmierung 1/48 2012-02-29 Assembler-Programmierung

Mehr

Midterm-Klausur Technische Grundlagen der Informatik

Midterm-Klausur Technische Grundlagen der Informatik Midterm-Klausur Technische Grundlagen der Informatik Prof. Dr. Arndt Bode Wintersemester 2002/2003 7. Dezember 2002 Name: Vorname: Matrikelnummer: Hörsaal: Platz: Unterschrift: Ergebnis: Aufgabe Punkte

Mehr

Erwin Grüner 15.12.2005

Erwin Grüner 15.12.2005 FB Psychologie Uni Marburg 15.12.2005 Themenübersicht Mit Hilfe der Funktionen runif(), rnorm() usw. kann man (Pseudo-) erzeugen. Darüber hinaus gibt es in R noch zwei weitere interessante Zufallsfunktionen:

Mehr

Unterprogramme, Pointer und die Übergabe von Arrays

Unterprogramme, Pointer und die Übergabe von Arrays Unterprogramme, Pointer und die Übergabe von Arrays Unterprogramme Wie schon im Abschnitt über Funktionen erwähnt, versteht man unter einem Unterprogramm im engeren Sinn eine Prozedur, welche die Werte

Mehr

0 C (Carry) Überlauf des 8ten Bits. 1 DC (Digit Carry) Überlauf des 4ten Bits. Mnemonic Parameter Beschreibung Status-Flags.

0 C (Carry) Überlauf des 8ten Bits. 1 DC (Digit Carry) Überlauf des 4ten Bits. Mnemonic Parameter Beschreibung Status-Flags. 3. Assembler-Programmierung Der PIC 16F84A Microcontroller kennt 35 verschiedene Befehle. Für eine ausführliche Beschreibung aller Befehle siehe PIC16F84A-Datenblatt Kapitel 7.1. 3.1 Wichtige Flaggen im

Mehr

lldeckblatt Migration von AWL-Programmen nach S7-1500 STEP 7 (TIA Portal) V12 FAQ Januar 2013 Service & Support Answers for industry.

lldeckblatt Migration von AWL-Programmen nach S7-1500 STEP 7 (TIA Portal) V12 FAQ Januar 2013 Service & Support Answers for industry. lldeckblatt Migration von -Programmen nach S7-1500 STEP 7 (TIA Portal) V12 FAQ Januar 2013 Service & Support Answers for industry. Migration von -Programmen nach S7-1500 Dieser Beitrag stammt aus dem Siemens

Mehr

Kap 4. 4 Die Mikroprogrammebene eines Rechners

Kap 4. 4 Die Mikroprogrammebene eines Rechners 4 Die Mikroprogrammebene eines Rechners Das Abarbeiten eines Arbeitszyklus eines einzelnen Befehls besteht selbst wieder aus verschiedenen Schritten (Befehl holen, Befehl dekodieren, Operanden holen etc.).

Mehr

3 Arithmetische Schaltungen

3 Arithmetische Schaltungen . Schaltungselemente Arithmetische Schaltungen. Schaltungselemente Logikgatter Treiber; gibt am Ausgang denselben Logikpegel aus, der auch am Eingang anliegt Inverter; gibt am Ausgang den Logikpegel des

Mehr

4D Server v12 64-bit Version BETA VERSION

4D Server v12 64-bit Version BETA VERSION 4D Server v12 64-bit Version BETA VERSION 4D Server v12 unterstützt jetzt das Windows 64-bit Betriebssystem. Hauptvorteil der 64-bit Technologie ist die rundum verbesserte Performance der Anwendungen und

Mehr

5. Unterprogrammtechnik/Module

5. Unterprogrammtechnik/Module 5. Unterprogrammtechnik/Module Unterprogramm/Modul: separate Programmeinheit, mit Anweisungen, die eine bestimmte Aufgabe erfüllen bekommt i.a. Argumente (Werte, Informationen) vom aufrufenden Programm

Mehr

Informatik. Studiengang Chemische Technologie. Michael Roth WS 2012/2013. michael.roth@h-da.de. Hochschule Darmstadt -Fachbereich Informatik-

Informatik. Studiengang Chemische Technologie. Michael Roth WS 2012/2013. michael.roth@h-da.de. Hochschule Darmstadt -Fachbereich Informatik- Informatik Studiengang Chemische Technologie Michael Roth michael.roth@h-da.de Hochschule Darmstadt -Fachbereich Informatik- WS 2012/2013 Inhalt Teil VII Einstieg in Java I Michael Roth (h_da) Informatik

Mehr

Virtueller Speicher. SS 2012 Grundlagen der Rechnerarchitektur Speicher 44

Virtueller Speicher. SS 2012 Grundlagen der Rechnerarchitektur Speicher 44 Virtueller Speicher SS 2012 Grundlagen der Rechnerarchitektur Speicher 44 Die Idee Virtuelle Adressen Prozess 1 Speicherblock 0 Speicherblock 1 Speicherblock 2 Speicherblock 3 Speicherblock 4 Speicherblock

Mehr

CA Übung 30.01.2006. Christian kann heute nicht kommen => ich bin heute da, Christian das nächste Mal wieder

CA Übung 30.01.2006. Christian kann heute nicht kommen => ich bin heute da, Christian das nächste Mal wieder CA Übung 30.01.2006 Hallo zusammen! Christian kann heute nicht kommen => ich bin heute da, Christian das nächste Mal wieder Adrian Schüpbach: scadrian@student.ethz.ch Christian Fischlin: cfischli@student.ethz.ch

Mehr

1.7 Assembler Programmierung

1.7 Assembler Programmierung 1.7 Assembler Programmierung Die nach außen sichtbare Programmierschnittstelle eines Prozessors ist der Befehlscode. Dies ist eine binäre Dateninformation, die vom Prozessor Byte für Byte abgearbeitet

Mehr

Compiler: Vom Code zum Maschinen-Code. C Programmierung - Vorlesung 2 Hochschule Regensburg 19.03.2012 Universitätsstraße 31, 93053 Regensburg

Compiler: Vom Code zum Maschinen-Code. C Programmierung - Vorlesung 2 Hochschule Regensburg 19.03.2012 Universitätsstraße 31, 93053 Regensburg Compiler: Vom Code zum Maschinen-Code C Programmierung - Vorlesung 2 Hochschule Regensburg 19.03.2012 Universitätsstraße 31, 93053 Regensburg Prof. Dr. Jan Dünnweber Zusammenhänge: C und Assembler Hochsprachen

Mehr

1. Aktionen-Palette durch "Fenster /Aktionen ALT+F9" öffnen. 2. Anlegen eines neuen Set über "Neues Set..." (über das kleine Dreieck zu erreichen)

1. Aktionen-Palette durch Fenster /Aktionen ALT+F9 öffnen. 2. Anlegen eines neuen Set über Neues Set... (über das kleine Dreieck zu erreichen) Tipp: Aktionen (c) 2005 Thomas Stölting, Stand: 25.4. 2005 In Photoshop werden häufig immer wieder die gleichen Befehlssequenzen benötigt. Um sie nicht jedesmal manuell neu eingeben zu müssen, können diese

Mehr

2. Darstellung von Information im Computer

2. Darstellung von Information im Computer Informationsbestände analysieren Darstellung von Information im Computer 2. Darstellung von Information im Computer Übung 2.1. Formatierung eines Datenträgers Ziel Sie haben ein Idee, wie in einem Computersystem

Mehr

2.2 Rechnerorganisation: Aufbau und Funktionsweise

2.2 Rechnerorganisation: Aufbau und Funktionsweise 2.2 Rechnerorganisation: Aufbau und Funktionsweise é Hardware, Software und Firmware é grober Aufbau eines von-neumann-rechners é Arbeitsspeicher, Speicherzelle, Bit, Byte é Prozessor é grobe Arbeitsweise

Mehr

Der MS-DOS Standardmonitor und Debugger DEBUG

Der MS-DOS Standardmonitor und Debugger DEBUG Einfache Assemblerprogrammierung mit DOS-DEBUG 1/7 Auf Personalcomputern kann in der Regel leicht eine einfache Umgebung zur Software-Entwicklung für die Intel Rechnerfamilie 80x86 eingerichtet werden.

Mehr

Eine Einführung in C-Funktionen

Eine Einführung in C-Funktionen Eine Einführung in C-Funktionen CGK-Proseminar 2014 Philip Gawehn 04.07.2014, Hamburg Inhaltsverzeichnis 1 Einleitung 2 2 Grundlagen 2 2.1 Der Aufbau einer Funktion....................... 2 2.2 Schlüsselwörter.............................

Mehr

q) Geben Sie Befehle an, die ein neues globales Register anlegen und dieses mit Speicheradresse 0x2000000000000000 initialisieren,

q) Geben Sie Befehle an, die ein neues globales Register anlegen und dieses mit Speicheradresse 0x2000000000000000 initialisieren, At AZOCTA 6.4 MMIX-Programme 235 q) Geben Sie Befehle an, die ein neues globales Register anlegen und dieses mit Speicheradresse 0x2000000000000000 initialisieren, an dieser Speicheradresse ein Bit breites

Mehr

Technische Informatik 1

Technische Informatik 1 Technische Informatik 1 2 Instruktionssatz Lothar Thiele Computer Engineering and Networks Laboratory Instruktionsverarbeitung 2 2 Übersetzung Das Kapitel 2 der Vorlesung setzt sich mit der Maschinensprache

Mehr

PIWIN 1 Übung Blatt 5

PIWIN 1 Übung Blatt 5 Fakultät für Informatik Wintersemester 2008 André Gronemeier, LS 2, OH 14 Raum 307, andre.gronemeier@cs.uni-dortmund.de PIWIN 1 Übung Blatt 5 Ausgabedatum: 19.12.2008 Übungen: 12.1.2009-22.1.2009 Abgabe:

Mehr

Name: ES2 Klausur Thema: ARM 25.6.07. Name: Punkte: Note:

Name: ES2 Klausur Thema: ARM 25.6.07. Name: Punkte: Note: Name: Punkte: Note: Hinweise für das Lösen der Aufgaben: Zeit: 95 min. Name nicht vergessen! Geben Sie alle Blätter ab. Die Reihenfolge der Aufgaben ist unabhängig vom Schwierigkeitsgrad. Erlaubte Hilfsmittel

Mehr

Sage 200 BI Installationsanleitung Cubes & Datawarehouses Manuelle Installation ohne SRSS/Sage Cockpit. Version 2014.0 11.11.2014

Sage 200 BI Installationsanleitung Cubes & Datawarehouses Manuelle Installation ohne SRSS/Sage Cockpit. Version 2014.0 11.11.2014 Sage 200 BI Installationsanleitung Cubes & Datawarehouses Manuelle Installation ohne SRSS/Sage Cockpit Version 2014.0 11.11.2014 Inhaltsverzeichnis Installationsanleitung Cubes & Datawarehouse Inhaltsverzeichnis

Mehr

DATEN UND BEFEHLSFORMATE, ADDRESSIERUNGSARTEN UND MASCHINEN- PROGRAMMIERUNGSKONZEPTE

DATEN UND BEFEHLSFORMATE, ADDRESSIERUNGSARTEN UND MASCHINEN- PROGRAMMIERUNGSKONZEPTE D - CA - IV - AA - 1 HUMBOLDT-UNIVERSITÄT ZU BERLIN INSTITUT FÜR INFORMATIK Vorlesung 4 DATEN UND BEFEHLSFORMATE, ADDRESSIERUNGSARTEN UND MASCHINEN- PROGRAMMIERUNGSKONZEPTE Sommersemester 2003 Leitung:

Mehr

Mikroprozessoren Grundlagen AVR-Controller Input / Output (I/O) Interrupt Mathematische Operationen

Mikroprozessoren Grundlagen AVR-Controller Input / Output (I/O) Interrupt Mathematische Operationen Mikroprozessoren Grundlagen Aufbau, Blockschaltbild Grundlegende Datentypen AVR-Controller Anatomie Befehlssatz Assembler Speicherzugriff Adressierungsarten Kontrollstrukturen Stack Input / Output (I/O)

Mehr

Speicher Virtuelle Speicherverwaltung. Speicherverwaltung

Speicher Virtuelle Speicherverwaltung. Speicherverwaltung Speicherverwaltung Die Speicherverwaltung ist derjenige Teil eines Betriebssystems, der einen effizienten und komfortablen Zugriff auf den physikalischen Arbeitsspeicher eines Computer ermöglicht. Je nach

Mehr

Programmierung 2. Übersetzer: Code-Erzeugung. Sebastian Hack. Klaas Boesche. Sommersemester 2012. hack@cs.uni-saarland.de. boesche@cs.uni-saarland.

Programmierung 2. Übersetzer: Code-Erzeugung. Sebastian Hack. Klaas Boesche. Sommersemester 2012. hack@cs.uni-saarland.de. boesche@cs.uni-saarland. 1 Programmierung 2 Übersetzer: Code-Erzeugung Sebastian Hack hack@cs.uni-saarland.de Klaas Boesche boesche@cs.uni-saarland.de Sommersemester 2012 Bytecodes Der Java Übersetzer erzeugt keine Maschinensprache

Mehr

DOKUMENTATION VOGELZUCHT 2015 PLUS

DOKUMENTATION VOGELZUCHT 2015 PLUS DOKUMENTATION VOGELZUCHT 2015 PLUS Vogelzucht2015 App für Geräte mit Android Betriebssystemen Läuft nur in Zusammenhang mit einer Vollversion vogelzucht2015 auf einem PC. Zusammenfassung: a. Mit der APP

Mehr

Instruktionssatz-Architektur

Instruktionssatz-Architektur Institut für Informatik 3: Rechnerarchitektur Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2005/2006 Übersicht 1 Einleitung 2 Bestandteile der ISA 3 CISC / RISC Übersicht 1 Einleitung 2 Bestandteile

Mehr

Dokumentation. juris Autologon-Tool. Version 3.1

Dokumentation. juris Autologon-Tool. Version 3.1 Dokumentation juris Autologon-Tool Version 3.1 Inhaltsverzeichnis: 1. Allgemeines... 3 2. Installation Einzelplatz... 3 3. Installation Netzwerk... 3 4. Konfiguration Netzwerk... 3 4.1 Die Autologon.ini...

Mehr

Migration anhand von Wordpress

Migration anhand von Wordpress Migration anhand von Wordpress 1. Legen Sie eine Datenbank an... 2 1.1. Unterkonto anlegen... 2 2. Übertragen Sie die Dateien mittels FTP... 3 3. Anpassung der Variablen... 4 4. Verbindung zum neuen Server

Mehr

Javakurs für Anfänger

Javakurs für Anfänger Javakurs für Anfänger Einheit 02: Klassen & Objekte Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil: Klassen Grundstruktur einer Java-Klasse Eigenschaften (Attribute) Variablen

Mehr

Einführung in die technische Informatik

Einführung in die technische Informatik Einführung in die technische Informatik Christopher Kruegel chris@auto.tuwien.ac.at http://www.auto.tuwien.ac.at/~chris Betriebssysteme Aufgaben Management von Ressourcen Präsentation einer einheitlichen

Mehr

Mikroprozessor als universeller digitaler Baustein

Mikroprozessor als universeller digitaler Baustein 2. Mikroprozessor 2.1 Allgemeines Mikroprozessor als universeller digitaler Baustein Die zunehmende Integrationsdichte von elektronischen Schaltkreisen führt zwangsläufige zur Entwicklung eines universellen

Mehr

1 Einleitung zum RISC Prozessor

1 Einleitung zum RISC Prozessor 1 Einleitung zum RISC Prozessor Wesentliche Entwicklungsschritte der Computer-Architekturen [2, 3]: Familienkonzept von IBM mit System/360 (1964) und DEC mit PDP-8 (1965) eingeführt: Gleiche Hardware-Architekturen

Mehr

Vorkurs C++ Programmierung

Vorkurs C++ Programmierung Vorkurs C++ Programmierung Klassen Letzte Stunde Speicherverwaltung automatische Speicherverwaltung auf dem Stack dynamische Speicherverwaltung auf dem Heap new/new[] und delete/delete[] Speicherklassen:

Mehr

Sucosoft S40 KOP/FBS KOP FBS

Sucosoft S40 KOP/FBS KOP FBS Sucosoft S40 KOP/FBS KOP FBS Grafische Elemente Netzwerke erstellen Netzwerke erstellen Programme werden in KOP durch grafische Elemente dargestellt. Abfrage einer Variable auf den Zustand 1 Abfrage einer

Mehr

JMPCN Sprungbefehl nur ausführen, wenn VKE 0 ist. JMPC Sprungbefehl nur ausführen, wenn VKE 1 ist. JMP Ohne Bedingung zur Sprungmarke wechseln.

JMPCN Sprungbefehl nur ausführen, wenn VKE 0 ist. JMPC Sprungbefehl nur ausführen, wenn VKE 1 ist. JMP Ohne Bedingung zur Sprungmarke wechseln. Grafische Elemente Netzwerke erstellen Netzwerke erstellen Programme werden in KOP durch grafische Elemente dargestellt. Abfrage einer Variable auf den Zustand 1 Abfrage einer Variable auf den Zustand

Mehr

Die Bedeutung abstrakter Datentypen in der objektorientierten Programmierung. Klaus Kusche, September 2014

Die Bedeutung abstrakter Datentypen in der objektorientierten Programmierung. Klaus Kusche, September 2014 Die Bedeutung abstrakter Datentypen in der objektorientierten Programmierung Klaus Kusche, September 2014 Inhalt Ziel & Voraussetzungen Was sind abstrakte Datentypen? Was kann man damit grundsätzlich?

Mehr

Grundpraktikum Netz- und Datensicherheit. Thema: Buffer Overflow Angriffe, Teil 2

Grundpraktikum Netz- und Datensicherheit. Thema: Buffer Overflow Angriffe, Teil 2 Grundpraktikum Netz- und Datensicherheit Thema: Buffer Overflow Angriffe, Teil 2 Lehrstuhl für Netz- und Datensicherheit Ruhr-Universität Bochum Versuchdurchführung: Raum ID 2/168 Betreuung: Florian Feldmann

Mehr

L3. Datenmanipulation

L3. Datenmanipulation L Datenmanipulation Aufbau eines Computers Prozessor, Arbeitsspeicher und system Maschinensprachen und Maschinenbefehle Beispiel einer vereinfachten Maschinensprache Ausführung des Programms und Befehlszyklus

Mehr

Einheit Variablen in der Programmiersprache C Variablen-Modell, Variablen-Vereinbarungen

Einheit Variablen in der Programmiersprache C Variablen-Modell, Variablen-Vereinbarungen Einheit Variablen in der Programmiersprache C Variablen-Modell, Variablen-Vereinbarungen Kurs C/C++ Programmierung, WS 2008/2009 Dipl.Inform. R. Spurk Arbeitsgruppe Programmierung FR 6.2 Informatik R.

Mehr

VB.net Programmierung und Beispielprogramm für GSV

VB.net Programmierung und Beispielprogramm für GSV VB.net Programmierung und Beispielprogramm für GSV Dokumentation Stand vom 26.05.2011 Tel +49 (0)3302 78620 60, Fax +49 (0)3302 78620 69, info@me-systeme.de, www.me-systeme.de 1 Inhaltsverzeichnis Vorwort...2

Mehr

1 Aufgaben zu Wie funktioniert ein Computer?

1 Aufgaben zu Wie funktioniert ein Computer? 71 1 Aufgaben zu Wie funktioniert ein Computer? Netzteil a) Welche Spannungen werden von PC-Netzteilen bereitgestellt? 3.3 V, 5 V, 12 V, -5 V, -12 V. b) Warum können PC-Netzteile hohe Leistungen liefern,

Mehr

Aufgabenkatalog. Computersysteme 1 Dr. Michael Zwick. Technische Universität München

Aufgabenkatalog. Computersysteme 1 Dr. Michael Zwick. Technische Universität München Aufgabenkatalog Computersysteme 1 Dr. Michael Zwick Technische Universität München Inhalt 1 Komponenten eines Computer-Systems 5 Netzteil.................................... 5 Grafikkarten.................................

Mehr

Java Einführung Methoden in Klassen

Java Einführung Methoden in Klassen Java Einführung Methoden in Klassen Lehrziel der Einheit Methoden Signatur (=Deklaration) einer Methode Zugriff/Sichtbarkeit Rückgabewerte Parameter Aufruf von Methoden (Nachrichten) Information Hiding

Mehr

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny Grundlagen der Informatik Prof. Dr. Stefan Enderle NTA Isny 2 Datenstrukturen 2.1 Einführung Syntax: Definition einer formalen Grammatik, um Regeln einer formalen Sprache (Programmiersprache) festzulegen.

Mehr

Betriebssysteme Kap B: Hardwaremechanismen

Betriebssysteme Kap B: Hardwaremechanismen 1 Betriebssysteme Kap B: Hardwaremechanismen 2 Beispielprozessor Ein- / Ausgabe p[ ] ir Leitwerk pc Register a f sp Rechenwerk Speicher m[ ] Spezielle Register Flagregister f f.i: Interrupt-Enable-Flag

Mehr

GCM 100 GRAF-SYTECO H019A00. SYsteme TEchnischer COmmunication anzeigen, bedienen, melden, steuern, visualisieren und zählen

GCM 100 GRAF-SYTECO H019A00. SYsteme TEchnischer COmmunication anzeigen, bedienen, melden, steuern, visualisieren und zählen GRAF-SYTECO Kaiserstr. 18 * D-78609 Tuningen * Tel.07464-98660- Fax.2550 SYsteme TEchnischer COmmunication anzeigen, bedienen, melden, steuern, visualisieren und zählen GCM 100 H019A00 Ausgabe 15.7.96

Mehr

Programmierung in C. Grundlagen. Stefan Kallerhoff

Programmierung in C. Grundlagen. Stefan Kallerhoff Programmierung in C Grundlagen Stefan Kallerhoff Vorstellungsrunde Name Hobby/Beruf Schon mal was programmiert? Erwartungen an den Kurs Lieblingstier Für zu Hause C-Buch online: http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/

Mehr

C++ Grundlagen. ++ bedeutet Erweiterung zum Ansi C Standard. Hier wird eine Funktion eingeleitet

C++ Grundlagen. ++ bedeutet Erweiterung zum Ansi C Standard. Hier wird eine Funktion eingeleitet C++ Grundlagen ++ bedeutet Erweiterung zum Ansi C Standard Hier wird eine Funktion eingeleitet Aufbau: In dieser Datei stehen die Befehle, die gestartet werden, wenn das Programm gestartet wird Int main()

Mehr

Kode-Erzeugung, Abstrakte Maschinen, Rechnerarchitekturen

Kode-Erzeugung, Abstrakte Maschinen, Rechnerarchitekturen Kode-Erzeugung, Abstrakte Maschinen, Rechnerarchitekturen Kode-Erzeugung: Syntaxbaum Ausgabeprogramm Starte mit Syntaxbaum: Darstellung des eingegebenen Programms Wähle Zielarchitektur Wähle abstrakte

Mehr

Send/Receive PCU/MCU. Protokoll

Send/Receive PCU/MCU. Protokoll Protokoll Protokoll Protokoll Protokoll Protokoll Protokoll Protokoll Pro tokoll Protokoll Protokoll Protokoll Protokoll Protokoll Protokoll Protokoll Protokoll Protokoll Protokoll Protokoll Protokoll

Mehr

Einführung in VisualBasic for Applications. Stefan Mahlitz

Einführung in VisualBasic for Applications. Stefan Mahlitz Einführung in VisualBasic for Applications Stefan Mahlitz Stefan Mahlitz Einführung in VBA 27.08.00 Inhaltsverzeichnis 1. Grundlagen der VisualBasic for Applications (VBA) Programmierung...2 1.1 Variablen,

Mehr