Transskript zur Lektion 8.3 Code Riffs

Größe: px
Ab Seite anzeigen:

Download "Transskript zur Lektion 8.3 Code Riffs"

Transkript

1 1 Transskript zur Lektion 8.3 Code Riffs Karl C. Posch, 2. März 2011 Vorbemerkung Dieser Text ist aus einem Transskript der Video Lektion 8.3 zur Lehrveranstaltung Rechnerorganisation bzw. zur Lehrveranstaltung Rechnernetze und Organisation an der Technischen Universität Graz entstanden. Der Text ist deshalb in großen Teilen ohne die visuelle Unterstützung durch diese Video Lektionen nur schwer verständlich. Ich rate deshalb dringend an, als primären Lese Stoff die Lektion selbst zu sehen. Ich mache diesen Text Studierenden zugänglich, damit diese beim Durcharbeiten der Lektion und bei Gesprächen über den Lernstoff Bezugspunkte besitzen, welche auch in ausdruckbarer Form vorliegen. Nicht unerwähnt sollen als zusätzliche Wissensbasis die Dateien mit den Quell Codes bleiben, auf welche in den Lektionen immer wieder verwiesen wird. Dabei sind vor allem die C Quell Codes interessant. Karl C. Posch Graz, 2. März 2011 Materialien am Web: 1

2 2 8.3 Code Riffs In der dritten Lektion dieses Teils möchte ich mit dir über Code Riffs sprechen. Werfen wir zunächst einen Blick auf unseren TOY Computer. Wir haben in der vorigen Lektion begonnen, ein Programm zu entwickeln, welches Daten vom Eingang liest, diese dann sortiert, und danach am Ausgang out ausgibt. Wir sind dabei soweit gekommen, dass die Daten nach dem Einlesen nun im Hauptspeicher ab Adresse 0x40 zu finden sind. Einen Pointer auf diese Adresse 0x40, also auf die Adresse des nullten Elements unseres Array, haben wir im CPU Register RE. Die Länge des Array befindet sich im Register RF. Das gesamte Programm besteht aus folgenden Schritten. Einlesen der Anzahl der zu sortierenden Elemente. Einlesen der Elemente Sortieren der Elemente Und schließlich Ausgabe der sortierten Liste Wie gesagt: Die ersten beiden Schritte haben wir bereits in der vorigen Lektion studiert. Bevor wir jetzt den Sortieralgorithmus genauer ansehen, möchte ich mit dir über sogenannte Code Riffs sprechen. Ich bezeichne damit immer wiederkehrende Programm Sequenzen in C. Deren Umsetzung 2

3 3 in Assemblersprache solltest du verstehen. Im Prinzip handelt es sich hier um eine Art Wiederholung der Essenz der vorigen Lektion. Dort haben wir zum Beispiel folgenden Riff kennen gelernt: Die Übersetzung einer For Schleife in eine While Schleife. Eine For Schleife besteht aus der Initialisierung einer Laufvariablen hier trägt diese den Namen i. Wir setzen also z.b. i gleich 0. Dann folgt die Überprüfung der Schleifen Bedingung. Diese heißt hier i < length. Und schließlich wird nach dem Durchlauf des Body der For Schleife diesen habe ich hier nicht dargestellt die Laufvariable verändert; hier also etwa i++. Eine For Schleife ist also lediglich eine komfortable Darstellung der etwas längeren Beschreibung mit einer While Schleife. Man spricht auch von syntactic sugar. Gehen wir mit dieser Idee noch ein Stück weiter. Eine While Schleife ist identisch mit einer If Anweisung mit abschließender Goto Anweisung zum Start der If Anweisung. Hier habe ich den Start der If Anweisung mit dem Label L0 bezeichnet. Auch dieser Code ist gültiger C Code, wenngleich es verpönt ist, in C Programmen Goto Anweisungen zu verwenden. Ich möchte dich hier jedoch von der relativ hohen Abstraktionsebene der Sprache C auf niedrigere Betrachtungsebenen bringen. Am Ende dieses Weges werden wir TOY Assemblerbefehle vorfinden und zwar mit Hilfe von C dargestellt. 3

4 4 Sehen wir uns die Bedingung der If Anweisung mal genauer an. Es steht hier i kleiner length. Solche Bedingungen lassen sich immer so umformen, dass eine Abfrage gleich 0 oder größer 0 vorkommt. Die Bedingung i kleiner length ist ja identisch mit der Bedingung length i > 0. Und noch ein Stück weiter: Wir könnten ja auch eine Hilfsvariable x einführen. Diese kriegt zuerst die Differenz von length und i. Und sodann wird die If Bedingung noch einfacher: if x > 0. Solche einfachen If Anweisungen sind in TOY Assemblersprache verfügbar. Der Befehl Branch on Zero stellt einen bedingten Sprung dar. Damit können wir die C Anweisung if (R4==0) goto Label0 direkt in den rechts stehenden Assemblerbefehl übersetzen. Manches Mal will man bedingungslos springen. In der Sprache C würden wir sagen goto Label1; Der dazu passende Assemblerbefehl ist BZ R0, Label1; Mit diesem Wissen sind wir in der Lage, jede For Schleife, jede While Schleife und jede If Bedingung in Assemblersprache zu formulieren. Sehen wir uns weitere Code Riffs an. Betrachten wir Datenfelder, also Arrays. 4

5 5 In C kann man ein Datenfeld z.b. so deklarieren: int array[5]. int drückt den Datentyp aus, array stellt einen symbolischen Namen dar, und mit 5 bezeichnen wir die Anzahl der Array Elemente. Im Speicher sollen also 5 Datenwörter reserviert werden. Ich gehe dabei von der einfachen Annahme aus, dass der Datentyp int in einem Speicherwort darstellbar ist. Also aufpassen: TOY hat Speicherwörter zu je 16 Bit. Mein Datentyp int hier hat also eine Größe von 16 Bit. Auf deinem PC ist dies wohl anders da hat der Datentyp int wohl eher 32 Bit. Der symbolische Name des reservierten Speicherplatzes heißt hier array. Im Speicher wollen wir die Startadresse als array bezeichnen. Wenn ich also in C schreibe: &array[0] oder anders gelesen Adresse des nullten Elements von array, dann könnte ich auch einfach nur array sagen. Denn das ist ja die Adresse des nullten Elements. Auf gleiche Art und Weise kann ich die Adresse des ersten Elements des Array mit array + 1 bezeichnen. Und die Adresse des 2. Elements mit array + 2 und so weiter. Aufpassen: man kann auch array + 7 sagen. Auch diese Speicherstelle existiert vermutlich. Doch der Zugriff auf diese Speicherstelle ist nicht geplant. Doch was dann, wenn er trotzdem stattfindet? Geplant oder ungeplant. Vermutlich 5

6 6 stößt du dabei auf jede Menge Überraschungen. Doch bleiben wir vorerst auf dem tugendhaften Pfad. Wir verwenden jetzt drei weitere Speicherwörter: R2, R3 und R4. Du kannst dir darunter TOY CPU Register vorstellen, aber nicht notwendigerweise. Wenn wir über diese drei Speicherwörter sprechen wollen, dann können wir in C vielleicht so schreiben: int R; Also R2 ist der symbolische Name für das Datenwort in R2. int *R3; Damit sagt man in der Sprache C, dass der Wert der symbolischen Variablen R3 eine Adresse darstellt. Oder mit anderen Worten: R3 ist ein Pointer auf ein Speicherwort. Dort befindet sich ein Datum vom Datentyp int. In unserer einfachen TOY Welt hat der Datentyp int ja eh genau 16 Bit; er kann also in einem einzigen Speicherwort dargestellt werden. Und dann int R4; R4 ist also der symbolische Name für das dritte Speicherwort. Sehen wir uns folgende C Zuweisung an: Das erste Element des Array soll den Wert 4 kriegen. Wir könnten dies unter Zuhilfenahme der Variablen R2 auch so formulieren: Zuerst kriegt die symbolische Variable R2 den Wert 4. Und dann wird der Wert von R2 dem ersten Element des Array zugewiesen. Bildlich sieht das so aus: Der Wert des Speicherworts mit dem symbolischen Namen R2 wird 4. Und danach wird dieser Wert auf die symbolische Adresse array + 1 kopiert. 6

7 7 Wir können diesen Sachverhalt auch so darstellen: R1 kriegt den Wert 1. R2 kriegt den Wert 4. R3 kriegt den Wert der symbolischen Variablen array. Hier haben wir also in R3 die Adresse des nullte Array Elements. R3 wird sodann um 1 erhöht. Jetzt zeigt R3 also auf das erste Array Element. Und schließlich soll das Datum, auf welches die Pointer Variable R3 zeigt, den Wert von R2 kriegen. Damit haben wir ebenfalls das erste Array Element mit der Zahl 4 beschrieben. Sehen wir uns als Nächstes die Übersetzung der 5 C Anweisungen in TOY Assemblercode an. Die ersten 4 davon sind einfach: Lade die Variable mit dem symbolischen Namen R1 mit dem Datum 1. Oder wir sollten jetzt wohl genauer werden: Lade das Register R1 mit dem Datum 1. Dann: Lade R2 mit dem Wert 4. Lade R3 mit dem Wert der symbolischen Variablen namens array. Und schließlich: Addiere zum Wert im Register R3 den Wert vom Register R1. Der letzte Befehl ist vielleicht der am schwierigsten zu verstehende: Es ist ein indirekter Store Befehl: Store, also speichere den Wert des Registers R2 auf die Speicherstelle mit der Adresse, welche sich in R3 befindet. 7

8 8 Hier nochmals in einer anderen Schreibeweise. Damit haben wir das Beschreiben eines Array Elements im Detail untersucht. Wie sieht dies mit dem Lesen eines Array Elements aus? Betrachten wir dieses wiederum in der Sprache C formulierte Beispiel: R4 kriegt den Wert des ersten Array Elements. Das kann man etwas umständlicher, jedoch mit einfacheren Schritten formuliert, so sehen: 8

9 9 R1 kriegt den Wert 1. R3 kriegt den Wert der symbolischen Variablen namens array. Sodann wird R3 um 1 erhöht. Und schließlich wird das durch R3 adressierte Speicherwort nach R4 kopiert. Also R4 ist gleich Stern R3. Damit sind wir wieder in der Lage, jede C Codezeile direkt in einen TOY Assemblerbefehl zu übersetzen. Der letzte dieser 4 Befehle ist dabei wiederum der interessanteste: Es ist ein indirekter Ladebefehl. In Register Transfer Sprache soll das Datum im Speicher, auf welches der Wert von R3 zeigt, in das Register R4 kopiert werden. Damit haben wir recht detailliert den Zusammenhang zwischen Array, Array Elementen, Pointer und Adressen untersucht. Wenden wir uns unserem Beispielprogramm zu. Wir wollten ja ein Array einlesen, die Werte dieses Array dann sortieren und schließlich die sortierten Werte ausgeben. Einen Teil dieses Beispielprogramms haben wir bereits in der vorigen Lektion erledigt. 9

10 10 Kommen wir also zum Sortieren. Wir wollen den Sortieralgorithmus Bubblesort verwenden. Ich habe hier das Modell unseres Programms als C Quellcode formuliert. Du findest diesen Code in der Datei in_sort_out1.c". Dieser besteht aus der Eingabe der Daten. Diesen Teil haben wir bereits in der vorigen Lektion besprochen. Und dann aus dem Sortieralgorithmus selbst. Es handelt sich um 2 verschachtelte For Schleifen. Im Kern der inneren For Schleife befindet sich eine If Anweisung. Sehen wir uns den Kern des Sortieralgorithmus einmal genau an: 10

11 11 Es werden zwei benachbarte Array Elemente verglichen und falls das mit dem kleineren Index größer ist als dasjenige mit dem größeren Index, dann werden die beiden Array Elemente vertauscht. Genauer gesagt: Es werden die beiden Werte im Speicher vertauscht. Sehen wir uns dieses Vertauschen mal genauer an. Wir könnten dies ja so formulieren: Zuerst kopieren wir das Array Element mit dem Index j 1 in die Variable R6. Dann kopieren wir das Array Element mit dem Index j in die Variable R7. Wir lesen also zwei Array Elemente. Als Nächstes bilden wir die Differenz, also R7 minus R6, und speichern diese Differenz in der Variablen R8. Wenn R8 größer 0 ist, also wenn der Wert in R7 größer war als der Wert in R6, dann vertauschen wir die beiden Werte sonst nicht. Das Vertauschen geht so: Wir schreiben auf das Array Element mit dem Index j 1 den Wert von R7 und auf das Array Element mit dem Index j den Wert von R6. 11

12 12 Doch kommen wir zurück zum gesamten Bubblesort Algorithmus. Es sind ja 2 verschachtelte For Schleifen. Die innere For Schleife hat die Laufvariable j. j läuft von 1 bis i 1 und wird in jedem Schleifendurchlauf inkrementiert. Wir vereinfachen diese Schleifenbedingung. Statt j < i schreiben wir i j > 0. Diese Bedingung ist identisch. Und da wir den C Code ja exekutieren können, können wir uns dessen auch vergewissern. Einfach kompilieren und ausprobieren. Die beiden Dateien heißen in_sort_out1.c und in_sort_out2.c und befinden sich im Unterverzeichnis Version8.5. OK. Massieren wir den C Code weiter. 12

13 13 Die äußere For Schleife hat die Laufvariable i. i läuft von length bis 2 und wird in jedem Durchlauf um 1 erniedrigt. Wir ersetzen diese For Schleife mit einer äquivalenten While Schleife. Dies kennst du ja schon: Wir setzen zuerst i gleich length. Dann kommt die While Schleife, in deren Kern wir am Ende immer die Laufvariable i entsprechend verändern müssen. In diesem Fall also dekrementieren müssen. OK. 13

14 14 Wir machen das Gleiche mit der inneren While Schleife: j kriegt zuerst den Wert 1. Dann die While Schleife. Und im Kern der While Schleife dürfen wir auf das Inkrementieren der Laufvariablen j nicht vergessen. OK. 14

15 15 Kommen wir zu While i größer 1. i wird in jedem Schleifendurchlauf dekrementiert. Wenn i also den Wert 1 kriegt, dann fliegen wir aus der While Schleife hinaus. Dies können wir so formulieren: if (i 1 == 0) goto L1. Und am Ende dürfen wir das goto L0 nicht vergessen. Das Label L1 befindet sich am Ende unseres Codes. Wir haben jedoch noch ein paar weitere Veränderungen vorzunehmen. 15

16 16 Sehen wir uns die zweite While Schleife an. Die Bedingung lautet hier: i j > 0. Auch diese Schleife können wir in eine If Anweisung mit Goto Anweisungen umbauen. Die Laufvariable dieser Schleife ist j. Diese wird in jedem Durchlauf inkrementiert. i j wird demnach in jedem Schleifendurchlauf um 1 kleiner. Solange i j > 0 ist, wird der Kern der Schleife ausgeführt. Wenn jedoch und jetzt spreche ich über die Bedingung der If Anweisung wenn jedoch i j == 0 wird, dann springen wir zum Ende der Schleife, also zum Label L3. Wenn jedoch die Schleife ausgeführt wird, dann wollen wir am Ende der Schleife wieder zurück zu Label L2 gehen. Also: goto L2. Diese Quellcode Variante findest du in Datei in_sort_out6.c. Am besten selbst ausprobieren und sicher stellen, dass alles so ist, wie ich es erläutere. Als Nächstes wollen wir uns diese If Bedingung ansehen: Es werden zwei benachbarte Array Elemente der Größe nach verglichen. Je nach Ergebnis dieses Vergleichs werden die Array Elemente vertauscht oder eben nicht vertauscht. 16

17 17 Hier eine identische Umformung dieses Sachverhalts. Zuerst lesen wir beide Array Elemente in die beiden Variablen R6 und R7. Dann führen wir die Subtraktion R7 minus R6 aus und speichern das Ergebnis in R8. Sodann können wir eine einfache If Bedingung formulieren: Wenn R8 größer als Null ist, dann vertauschen wir nicht also dann springen wir zum Label L4. Wenn die Goto Anweisung nicht ausgeführt wird, dann kopieren wir die Werte von R6 und R7 in umgekehrter Reihenfolge zurück auf die Array Elemente. Du kannst dir wohl vorstellen, dass wir mit den Variablen R6, R7 und R8 CPU Register meinen. Wir haben also vor, die Array Elemente vom Hauptspeicher in zwei CPU Register zu kopieren, diese dann dort mittels Subtraktion zu vergleichen, und dann bei entsprechendem Resultat des Vergleichs die Werte in vertauschter Reihenfolge zurück in den Hauptspeicher zu kopieren. 17

18 18 Diese Version des Quellcodes findest du in Datei in_sort_out7.c. Jetzt wollen wir statt der Variablen i, j und length die CPU Register R2, R9 und RF verwenden. Von der Variablen length wissen wir ja schon aus der vorigen Lektion, dass wir diese im CPU Register RF abgelegt haben. Für i hatten wir dort ja auch schon R2 verwendet. j ist neu. R9 wird noch nicht verwendet, also nehmen wir dieses Register eben. OK. Ein paar Umformungen fehlen noch: 18

19 19 if (R2 1 == 0) goto Lout Diese If Anweisung zerlegen wir in die beiden Anweisungen, welche du rechts oben in Grün eingerahmt siehst: Zuerst ziehen wir von R2 die Konstante 1 ab. Und dann haben wir eine einfache If Bedingung, welche sich direkt in einen TOY Maschinenbefehl übersetzen lässt. Oder hier: if (R2 R9 == 0) goto Lsort3 Wir berechnen zuerst R2 minus R9 und speichern die Differenz in RA. Dann entsteht eine einfache If Bedingung, nämlich if (RA == 0) Diese lässt sich wiederum in einen TOY Maschinenbefehl übersetzen. Jetzt sehen wir uns den Zugriff auf ein Array Element genauer an: Wie können wir das Array Element mit dem Index R9 1 finden? Und dieses dann der Variablen R6 zuweisen? Siehe rechts oben wiederum grün eingerahmt: 19

20 20 In RE steht die Anfangsadresse des Array. RE zeigt also auf das nullte Array Element. In R9 steht ja die Laufvariable, welche ursprünglich j geheißen hat. Wir addieren also zu RE den Wert von R9. Damit erhalten wir in R5 die Adresse des R9 ten Elements, also des j ten Elements von Array. Jetzt müssen wir noch 1 subtrahieren, dann steht in R5 die Adresse des Array Elements mit dem Index R9 1. Wir dereferenzieren so heißt das in der Sprache C ja R5 und erhalten damit den Wert der Speicherstelle, auf welche R5 zeigt. *R5 ist also der Wert des gesuchten Array Elements. Diesen Wert kopieren wir nach R6. Jetzt sollte es ein Einfaches sein, zu verstehen, wie wir das Array Element mit dem Index R9 kriegen. R5 wird RE plus R9. Und dann dereferenzieren und nach R7 kopieren. Das Interessante ist, dass sich alle diese Anweisungen jetzt zeilenweise direkt in TOY Maschinensprache übersetzen lassen. Dazu kommen wir gleich. Jetzt geht es in die andere Richtung. Wir wollen hier den in R7 gespeicherten Wert auf das Array Element mit dem Index R9 1 kopieren. Das geht so wie rechts in grün dargestellt: 20

21 21 Zuerst berechnen wir die Adresse des richtigen Array Elements: Der Wert von RE ist die Adresse des nullten Array Elements. R9 dazu gezählt ergibt die Adresse des Array Elements mit dem Index R9. Eins davon abgezogen und wir zeigen mit R5 auf die Adresse des gewünschten Array Elements. Jetzt nehmen wir den Wert von R7 und kopieren diesen auf die Speicherstelle, auf welche R5 zeigt. Fertig. Hier noch eine zweite solche Operation. Wir berechnen den Pointer in R5 und dann kopieren wir den Wert. So. Das war alles. Ich betrachte diesen C Code jetzt als eine Art Pseudo Code für unser TOY Maschinenprogramm. Ich habe alle Anweisungen des ursprünglichen C Programms so lange vereinfacht, bis wir zu so einfachen Anweisungen gelangt sind, sodass wir diese jetzt Zeile für Zeile in TOY Assemblersprache ausdrücken können. Sehen wir uns das an. Beginnen wir mit einer Umsetzung in die Register Transfer Sprache. 21

22 22 Es beginnt mit R2 wird der Wert von RF zugewiesen. Rechts wird dies mit dem Pfeil ausgedrückt. Oder hier: RB wird der Wert von R2 minus 1 zugewiesen. Auch hier ist die Umsetzung trivial. Sehen wir uns ein Beispiel mit der Dereferenzierung eines Pointer an. R6 kriegt den Wert von *R5. Also den Wert der Speicherstelle an der Adresse R5. In Register Transfer Sprache ist dies sehr explizit gemacht und einfach lesbar. 22

23 23 Vielleicht noch ein letztes Beispiel: Hier geht es in die umgekehrte Richtung. R5 zeigt auf eine Speicherstelle; deren Wert soll den Wert des Registers R7 kriegen. 23

24 24 Also: mem von R5 wird R7. Die Anweisungen der Register Transfer Sprache können wir jetzt in Assemblersprache umschreiben. Zeile für Zeile. Das sieht dann so aus: 24

25 25 Sehen wir uns die Pointer Beispiele von zuletzt an. Mit dem indirekten Ladebefehl also LDI können wir das Datum der Speicherstelle, auf welche R5 zeigt, nach R7 kopieren. Hier nochmals sicherheitshalber der gleiche Sachverhalt in C dargestellt. So einfach geht das eigentlich mit dem Pointer. Hier in die umgekehrte Richtung. Mit einem indirekten Store Befehl können wir den Wert des Registers R6 auf die Speicherstelle mit der Adresse R5 kopieren. OK. Das war also die Version des Sortieralgorithmus in Assemblersprache. Wie können wie sicherstellen, dass dieses Assemblerprogramm auch funktioniert? 25

26 26 Wir müssen es assemblieren, also die Maschinensprache erzeugen, und diese dann auf TOY laufen lassen. Ich habe mit Hilfe des Assemblers toyasm du kannst es auch mit Papier und Bleistift machen Zeile für Zeile in Maschinencode übersetzt. Sehe dir einige der Zeilen an. Du solltest keine Schwierigkeiten haben, die Übersetzung auch zu machen. Wie geht es weiter? Was wollten wir eigentlich machen? Sehen wir uns das Ganze nochmals an. Eingabe Sortieren und Ausgabe. 26

27 27 Zuletzt haben wir im Detail über den Sortiervorgang gesprochen und das Maschinenprogramm daraus entwickelt. Zuvor haben wir in der vorigen Lektion also über die Eingabe von Daten gesprochen. Das war also dieser Teil hier. Fehlt noch die Ausgabe. Was haben wir hier? Eine For Schleife mit einer printf Anweisung in unserem C Modell. Doch wie man eine For Schleife so lange massiert, bis daraus ein C Programm entsteht, welches direkt Zeile für Zeile in Maschinencode übersetzbar ist, weißt du jetzt. Ich mache es also schnell. Hier das ausgewalzte C Programm mit der gleichen Funktionalität. 27

28 28 Und jetzt noch zeilenweises Übersetzen. Hier die Version in Register Transfer Sprache. Und hier in Assemblersprache. 28

29 29 Und hier das Maschinenprogramm. Dieses Maschinenprogramm musst du dann noch samt allen anderen Teilen des Programms, also Input, Sortieren und Output, in Verilog Manier hinschreiben. Ist schon etwas lang und deshalb auf diesem Schirm hier etwas zu klein geraten. Siehe dir deshalb selbst die Datei mit dem Namen in_sort_out10.v an. Jetzt musst du nur noch das TOY Modell mit der Version 8.5 einlegen und dann simulieren. Also die Datei ro_kap8_toy_5.v simulieren. Dieses TOY Modell exekutiert das vorhin breit besprochene Sortier Programm in_sort_out10.toy. 29

30 30 Das Programm liest Daten von der Datei liste_von_daten.dat ein; sortiert diese Daten und gibt die Daten sortiert in aufsteigender Reihenfolge aus. Diese Daten werden in der Datei mit dem Namen std_out5.dat gespeichert. Probiere das unbedingt aus. Damit sind wir am Ende dieser Lektion angelangt. 30

Rechnerorganisation 2 TOY. Karl C. Posch. co1.ro_2003. Karl.Posch@iaik.tugraz.at 16.03.2011

Rechnerorganisation 2 TOY. Karl C. Posch. co1.ro_2003. Karl.Posch@iaik.tugraz.at 16.03.2011 Technische Universität Graz Institut tfür Angewandte Informationsverarbeitung und Kommunikationstechnologie Rechnerorganisation 2 TOY Karl C. Posch Karl.Posch@iaik.tugraz.at co1.ro_2003. 1 Ausblick. Erste

Mehr

Kommentiertes Beispiel für das Gaußsche Eliminationsverfahren

Kommentiertes Beispiel für das Gaußsche Eliminationsverfahren Kommentiertes Beispiel für das Gaußsche Eliminationsverfahren oder: Wie rechnet eigentlich der TI 84, wenn lineare Gleichungssysteme gelöst werden? Hier wird an einem Beispiel das Gaußsche Verfahren zum

Mehr

Programmiersprachen Einführung in C

Programmiersprachen Einführung in C Programmiersprachen Einführung in C Teil 1: Von der Maschinensprache zu C Prof. Dr. Maschinensprache: MIPS R2000 Was bewirkt folgendes Programm: 00100111101111011111111111100000 10101111101111110000000000010100

Mehr

Folge 13 - Quicksort

Folge 13 - Quicksort Für Abiturienten Folge 13 - Quicksort 13.1 Grundprinzip des Quicksort Schritt 1 Gegeben ist ein unsortierter Array von ganzen Zahlen. Ein Element des Arrays wird nun besonders behandelt, es wird nämlich

Mehr

Bei for-schleifen muss man nur immer bedenken, dass die letzte Anweisung immer erst nach der Ausführung der restlichen Anweisungen der Schleife

Bei for-schleifen muss man nur immer bedenken, dass die letzte Anweisung immer erst nach der Ausführung der restlichen Anweisungen der Schleife 303 Bei for-schleifen muss man nur immer bedenken, dass die letzte Anweisung immer erst nach der Ausführung der restlichen Anweisungen der Schleife durchgeführt wird. 304 305 for-schleifen sind in Aktivitätsdiagrammen

Mehr

Programmierung mit C Zeiger

Programmierung mit C Zeiger Programmierung mit C Zeiger Zeiger (Pointer)... ist eine Variable, die die Adresse eines Speicherbereichs enthält. Der Speicherbereich kann... kann den Wert einer Variablen enthalten oder... dynamisch

Mehr

Übungen zur Vorlesung Computergrundlagen WS 2008/09 Fakultät Physik, Universität Stuttgart Jens Harting, Martin Hecht, Bibhu Biswal Blatt 14

Übungen zur Vorlesung Computergrundlagen WS 2008/09 Fakultät Physik, Universität Stuttgart Jens Harting, Martin Hecht, Bibhu Biswal Blatt 14 Übungen zur Vorlesung Computergrundlagen WS 2008/09 Fakultät Physik, Universität Stuttgart Jens Harting, Martin Hecht, Bibhu Biswal Blatt 14 Aufgabe 33: Felder Felder (oder auch Arrays ) werden dazu benutzt,

Mehr

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 2

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 2 Fakultät Verkehrswissenschaften Friedrich List, Professur für Verkehrsbetriebslehre und Logistik Modul Entscheidungsunterstützung in der Logistik Einführung in die Programmierung mit C++ Übung 2 SS 2016

Mehr

RO-Tutorien 3 / 6 / 12

RO-Tutorien 3 / 6 / 12 RO-Tutorien 3 / 6 / 12 Tutorien zur Vorlesung Rechnerorganisation Christian A. Mandery WOCHE 2 AM 06./07.05.2013 KIT Universität des Landes Baden-Württemberg und nationales Forschungszentrum in der Helmholtz-Gemeinschaft

Mehr

Wirtschaftsinformatik I

Wirtschaftsinformatik I Wirtschaftsinformatik I - Tutorium 6/ 7 (April 2010) Zusatzinformationen - Lösungsvorschläge Wirtschaftsinformatik I Tutorium Jochen Daum (4.Semester BWL) Universität Mannheim Rechtshinweis: Diese Präsentation

Mehr

Beim Programmieren mit MMIX habt ihr vielleicht schon öfter eine der folgenden Fehlermeldungen von MMIXAL bekommen:

Beim Programmieren mit MMIX habt ihr vielleicht schon öfter eine der folgenden Fehlermeldungen von MMIXAL bekommen: 1 ADRESSIERUNG IN MMIX Beim Programmieren mit MMIX habt ihr vielleicht schon öfter eine der folgenden Fehlermeldungen von MMIXAL bekommen: no base address is close enough to the address A! relative address

Mehr

M. Graefenhan 2000-12-07. Übungen zu C. Blatt 3. Musterlösung

M. Graefenhan 2000-12-07. Übungen zu C. Blatt 3. Musterlösung M. Graefenhan 2000-12-07 Aufgabe Lösungsweg Übungen zu C Blatt 3 Musterlösung Schreiben Sie ein Programm, das die Häufigkeit von Zeichen in einem eingelesenen String feststellt. Benutzen Sie dazu ein zweidimensionales

Mehr

Dr. Monika Meiler. Inhalt

Dr. Monika Meiler. Inhalt Inhalt 5 Referenzdatentypen - Felder... 5-2 5.1 Eindimensionale Felder - Vektoren... 5-3 5.1.1 Vereinbarung... 5-3 5.1.2 Referenzen sind keine Felder... 5-4 5.1.3 Kopieren eindimensionaler Felder... 5-6

Mehr

3 Die Grundrechenarten

3 Die Grundrechenarten 3 Die Grundrechenarten In diesem Kapitel wollen wir uns unter anderem mit folgenden Themen beschäftigen: Operatoren für die Addition, Subtraktion, Multiplikation und Division Modulooperator, auch Restoperator

Mehr

Der Toy Rechner Ein einfacher Mikrorechner

Der Toy Rechner Ein einfacher Mikrorechner Der Toy Rechner Ein einfacher Mikrorechner Dr. Gerald Heim Haid-und-Neu-Str. 10-14 76131 Karlsruhe 16. Mai 1995 Allgemeine Informationen 2 Quelle: Phil Kopmann, Microcoded versus Hard-Wired Logic, Byte

Mehr

Hochschule Niederrhein Einführung in die Programmierung Prof. Dr. Nitsche. Bachelor Informatik WS 2015/16 Blatt 3 Beispiellösung.

Hochschule Niederrhein Einführung in die Programmierung Prof. Dr. Nitsche. Bachelor Informatik WS 2015/16 Blatt 3 Beispiellösung. Zahldarstellung Lernziele: Vertiefen der Kenntnisse über Zahldarstellungen. Aufgabe 1: Werte/Konstanten Ergänzen Sie die Tabelle ganzzahliger Konstanten auf einem 16- Bit- System. Die Konstanten in einer

Mehr

Schleifenanweisungen

Schleifenanweisungen Schleifenanweisungen Bisher: sequentielle Abarbeitung von Befehlen (von oben nach unten) Nun: Befehle mehrfach ausführen (= Programmschleife): for-anweisung - wenn feststeht, wie oft z.b.: eine Berechnung

Mehr

Grundlagen der Informatik I (Studiengang Medieninformatik)

Grundlagen der Informatik I (Studiengang Medieninformatik) Grundlagen der Informatik I (Studiengang Medieninformatik) Thema: 3. Datentypen, Datenstrukturen und imperative Programme Prof. Dr. S. Kühn Fachbereich Informatik/Mathematik Email: skuehn@informatik.htw-dresden.de

Mehr

C- Kurs 04 Anweisungen

C- Kurs 04 Anweisungen C- Kurs 04 Anweisungen Dipl.- Inf. Jörn Hoffmann jhoffmann@informa@k.uni- leipzig.de Universität Leipzig Ins@tut für Informa@k Technische Informa@k Ausdrücke Institut für Informatik Anweisungen C-Programm

Mehr

Im Original veränderbare Word-Dateien

Im Original veränderbare Word-Dateien Das Von-Neumann-Prinzip Prinzipien der Datenverarbeitung Fast alle modernen Computer funktionieren nach dem Von- Neumann-Prinzip. Der Erfinder dieses Konzeptes John von Neumann (1903-1957) war ein in den

Mehr

Entwurf von Algorithmen - Kontrollstrukturen

Entwurf von Algorithmen - Kontrollstrukturen Entwurf von Algorithmen - Kontrollstrukturen Eine wichtige Phase in der Entwicklung von Computerprogrammen ist der Entwurf von Algorithmen. Dieser Arbeitsschritt vor dem Schreiben des Programmes in einer

Mehr

Aufgabenblatt 1: - Präsenzübung für die Übungen Do Mi Ausgabe Mi

Aufgabenblatt 1: - Präsenzübung für die Übungen Do Mi Ausgabe Mi Grundlagen der Programmierung 1 WS 2012/2013 Prof. Dr. Stefan Böttcher Aufgabenblatt 1: - Präsenzübung für die Übungen Do. 11.10.- Mi. 17.10.2012 Ausgabe Mi. 10.10.2012 1.1. Zahlen vertauschen mit wenigen

Mehr

Einführung in Automation Studio

Einführung in Automation Studio Einführung in Automation Studio Übungsziel: Der links abgebildete Stromlaufplan soll mit einer SPS realisiert werden und mit Automation Studio programmiert werden. Es soll ein Softwareobjekt Logik_1 in

Mehr

3AA. Prof. Dr. Wolfgang P. Kowalk. Universität Oldenburg WS 2005/2006

3AA. Prof. Dr. Wolfgang P. Kowalk. Universität Oldenburg WS 2005/2006 3AA Prof. Dr. Wolfgang P. Kowalk Universität Oldenburg WS 2005/2006 Version vom 24.10.2005 Übersicht Einführung in maschinennahe Programmierung Verständnis für grundlegende Vorgänge im Computer Jedes Programm

Mehr

Mikroprozessor bzw. CPU (Central Processing. - Steuerwerk (Control Unit) - Rechenwerk bzw. ALU (Arithmetic Logic Unit)

Mikroprozessor bzw. CPU (Central Processing. - Steuerwerk (Control Unit) - Rechenwerk bzw. ALU (Arithmetic Logic Unit) Der Demo-Computer besitzt einen 4Bit-Mikroprozessor. Er kann entsprechend Wörter mit einer Breite von 4 Bits in einem Schritt verarbeiten. Die einzelnen Schritte der Abarbeitung werden durch Lampen visualisiert.

Mehr

Informatik B von Adrian Neumann

Informatik B von Adrian Neumann Musterlösung zum 7. Aufgabenblatt vom Montag, den 25. Mai 2009 zur Vorlesung Informatik B von Adrian Neumann 1. Java I Schreiben Sie ein Java Programm, das alle positiven ganzen Zahlen 0 < a < b < 1000

Mehr

Mikrocomputertechnik. Adressierungsarten

Mikrocomputertechnik. Adressierungsarten Adressierungsarten Ein Mikroprozessor bietet meist eine Reihe von Möglichkeiten, die Operanden für eine Rechenoperation zu bestimmen. Diese Möglichkeiten bezeichnet man als Adressierungsarten. unmittelbare

Mehr

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen.

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen. Ziele sind das Arbeiten mit Funktionen und dem Aufzählungstyp (enum), sowie - einfache Verzweigung (if else) - Alternativen switch case - einfache Schleifen (while oder do while) Aufgabe 3: Diese Aufgabe

Mehr

1. Musterlösung. Problem 1: Average-case-Laufzeit vs. Worst-case-Laufzeit

1. Musterlösung. Problem 1: Average-case-Laufzeit vs. Worst-case-Laufzeit Universität Karlsruhe Algorithmentechnik Fakultät für Informatik WS 06/07 ITI Wagner Musterlösung Problem : Average-case-Laufzeit vs Worst-case-Laufzeit pt (a) Folgender Algorithmus löst das Problem der

Mehr

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 10

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 10 Gudrun Fischer Sascha Kriewel programmierung@is.informatik.uni-duisburg.de Übungsblatt Nr. 10 Aufgabe 20: Code Verständnis Löse diese Aufgabe selbständig als Vorbereitung zur Übung auf dem Papier. a) Gib

Mehr

BKTM - Programmieren leicht gemacht.

BKTM - Programmieren leicht gemacht. BKTM Programmieren leicht gemacht. + Struktogramm Das Struktogramme ist eine Entwurfsmethode für die strukturierte Programmierung. Es ist nach der DIN 66261 genormt. Es ist 1972/73 von Dr. Isaac Nassi

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

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme Bisher Datentypen: einfach Zahlen, Wahrheitswerte, Zeichenketten zusammengesetzt Arrays (Felder) zur Verwaltung mehrerer zusammengehörender Daten desselben Datentypes eindimensional, mehrdimensional, Array-Grenzen

Mehr

einfache PIC-Übungsprogramme

einfache PIC-Übungsprogramme einfache PIC-Übungsprogramme Schreibe in MPLAB für das PIC-Übungsboard 01 mit dem PIC16F88 folgendes Programm, assembliere und dokumentiere dieses, schreibe es anschließend mittels dem Programmiergerät

Mehr

Dr. Monika Meiler. Inhalt

Dr. Monika Meiler. Inhalt Inhalt 3 C-Ausdrücke...3-2 3.1 Arithmetische Ausdrücke...3-3 3.2 Wertzuweisungen...3-5 3.3 Inkrementieren und Dekrementieren...3-6 3.4 Logische Ausdrücke (Bedingungen)...3-7 3.5 Bedingte Ausdrücke...3-8

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

Demo für

Demo für SUMMENZEICHEN Regeln und Anwendungen Gebrauchs des Summenzeichens mit Aufgaben aus vielen Bereichen für Angela Datei Nr. 4 Stand:. Oktober INTERNETBIBLIOTHEK FÜR SCHULMATHEMATIK Demo für 4 Summenzeichen

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

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML. JavaScript JavaScript wird direkt in HTML-Dokumente eingebunden. Gib folgende Zeilen mit einem Texteditor (Notepad) ein: (Falls der Editor nicht gefunden wird, öffne im Browser eine Datei mit der Endung

Mehr

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen Kapitel 9 Komplexität von Algorithmen und Sortieralgorithmen Arrays 1 Ziele Komplexität von Algorithmen bestimmen können (in Bezug auf Laufzeit und auf Speicherplatzbedarf) Sortieralgorithmen kennenlernen:

Mehr

Grundbegriffe der Informatik

Grundbegriffe der Informatik Grundbegriffe der Informatik Übung Simon Wacker Karlsruher Institut für Technologie Wintersemester 2015/2016 GBI Grundbegriffe der Informatik Karlsruher Institut für Technologie 1 / 13 Programmiersprachen

Mehr

Softwareentwicklung Allgemeines und prozedurale Konstrukte

Softwareentwicklung Allgemeines und prozedurale Konstrukte Mag. iur. Dr. techn. Michael Sonntag Softwareentwicklung Allgemeines und prozedurale Konstrukte E-Mail: sonntag@fim.uni-linz.ac.at http://www.fim.uni-linz.ac.at/staff/sonntag.htm Institut für Informationsverarbeitung

Mehr

Sortieren. Eine Testmenge erstellen

Sortieren. Eine Testmenge erstellen Sortieren Eine der wohl häufigsten Aufgaben für Computer ist das Sortieren, mit dem wir uns in diesem Abschnitt eingeher beschäftigen wollen. Unser Ziel ist die Entwicklung eines möglichst effizienten

Mehr

Felder (1) Allgemeines

Felder (1) Allgemeines Felder (1) Allgemeines Gleichartige Daten, wie Tabelle von Zahlen, Datumswerten, Namen etc. Felder (engl. Array) stellen einen Verbundtyp dar, in dem mehrere Daten desselben Typs gespeichert werden Oft

Mehr

BUBBLE SORT. Können wir die gefundenen Algorithmen auch auf Listen mit mehr als drei Elementen ausdehnen?

BUBBLE SORT. Können wir die gefundenen Algorithmen auch auf Listen mit mehr als drei Elementen ausdehnen? BUBBLE SORT Voraussetzungen der Schüler: Die Schüler besuchen bereits das zweite Jahr den Informatikunterricht und sollten den Umgang mit Feldern und Unterprogrammen mittlerweile beherrschen. Im ersten

Mehr

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java: Technische Informatik für Ingenieure (TIfI) WS 2005/2006, Vorlesung 9 II. Grundlagen der Programmierung Ekkart Kindler Funktionen und Prozeduren Datenstrukturen 9. Datenstrukturen Daten zusammenfassen

Mehr

Kapitel 7. Zusammengesetzte Datentypen, Vektoren, Zeichenketten

Kapitel 7. Zusammengesetzte Datentypen, Vektoren, Zeichenketten Kapitel 7 Zusammengesetzte Datentypen, Vektoren, Zeichenketten 1 Gliederung Kapitel 7 Zusammengesetzte Datentypen 7.1 Vektoren 7.2 Sortieren eines Vektors 7.3 Mehrdimensionale Felder 7.4 Umgang mit ein-/zweidimensionalen

Mehr

Programmiersprachen Einführung in C. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm

Programmiersprachen Einführung in C. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm Programmiersprachen Einführung in C Teil 2: Prof. Dr. int main (int argc, char *argv[]) int sum = 0; for (i = 0; i

Mehr

Kapitel 3: Variablen

Kapitel 3: Variablen Kapitel 3: Variablen Thema: Programmieren Seite: 1 Kapitel 3: Variablen Im letzten Kapitel haben wir gelernt, bestimmte Ereignisse zu wiederholen solange eine Bedingung erfüllt ist. Nun möchten wir aber

Mehr

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

Static-Single-Assignment-Form

Static-Single-Assignment-Form Static-Single-Assignment-Form Compilerbau Static-Single-Assignment-Form 195 Static-Single-Assignment-Form besondere Darstellungsform des Programms (Zwischensprache) vereinfacht Datenflussanalyse und damit

Mehr

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8 Java 8 Elmar Fuchs Grundlagen Programmierung 1. Ausgabe, Oktober 2014 JAV8 5 Java 8 - Grundlagen Programmierung 5 Kontrollstrukturen In diesem Kapitel erfahren Sie wie Sie die Ausführung von von Bedingungen

Mehr

Programmierung von ATMEL AVR Mikroprozessoren am Beispiel des ATtiny13. Teil IV: Programmieren an Beispielen

Programmierung von ATMEL AVR Mikroprozessoren am Beispiel des ATtiny13. Teil IV: Programmieren an Beispielen Programmierung von ATMEL AVR Mikroprozessoren am Beispiel des ATtiny13 Eine Einführung in Aufbau, Funktionsweise, Programmierung und Nutzen von Mikroprozessoren Teil IV: Programmieren an Beispielen Die

Mehr

2. Computer (Hardware) K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

2. Computer (Hardware) K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 2. Computer (Hardware) K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 Version: 14. Okt. 2015 Computeraufbau: nur ein Überblick Genauer: Modul Digitale Systeme (2. Semester) Jetzt: Grundverständnis

Mehr

Kapitel 4: Zeiger. Inhalt. Zeiger Zeigerarithmetik

Kapitel 4: Zeiger. Inhalt. Zeiger Zeigerarithmetik Wintersemester 2005/06 Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich Informatik Lehrstuhl

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

Klausur C-Programmierung / 15.02.2014 / Klingebiel / 60 Minuten / 60 Punkte

Klausur C-Programmierung / 15.02.2014 / Klingebiel / 60 Minuten / 60 Punkte Klausur C-Programmierung / 15.02.2014 / Klingebiel / 60 Minuten / 60 Punkte Musterlösung 1. Aufgabe (5 Punkte) Im folgenden Programmcode sind einige Fehler enthalten. Finden und markieren Sie mindestens

Mehr

Übungen zu Architektur Eingebetteter Systeme. Teil 1: Grundlagen. Blatt : Grundlagen des Cyclic redundancy code (CRC)

Übungen zu Architektur Eingebetteter Systeme. Teil 1: Grundlagen. Blatt : Grundlagen des Cyclic redundancy code (CRC) Übungen zu Architektur Eingebetteter Systeme Blatt 4 22.05.2009 Teil 1: Grundlagen 1.1: Grundlagen des Cyclic redundancy code (CRC) Im Gegensatz zum Parity-Check, der nur einfache Bit-Fehler erkennen kann,

Mehr

Rechnerarchitektur Teil 2

Rechnerarchitektur Teil 2 Rechnerarchitektur Teil 2 Fähigkeiten der Registermaschine und Sprachübersetzung Dipl.-Inform. Meiko Lösch 2006-05-12 Inhalt 1 Rechenfähigkeit Zuweisungen Rechnen Relationen 2 Programmierfähigkeit Schleifen

Mehr

Random Access Machine (RAM) Berechenbarkeit und Komplexität Random Access Machines

Random Access Machine (RAM) Berechenbarkeit und Komplexität Random Access Machines Random Access Machine (RAM) Berechenbarkeit und Komplexität Random Access Machines Wolfgang Schreiner Wolfgang.Schreiner@risc.jku.at Research Institute for Symbolic Computation (RISC) Johannes Kepler University,

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

Übungsaufgaben: 1. Objektorientierte Programmierung - Teil 1

Übungsaufgaben: 1. Objektorientierte Programmierung - Teil 1 Übungsaufgaben: 1. Objektorientierte Programmierung - Teil 1 1. Das Objekt Bruch mit einem Standardkonstruktor (initialisieren mit 0), einem allgemeinen Konstruktor (Zähler und Nenner können beliebig vorgegeben

Mehr

Einführung in PHP. (mit Aufgaben)

Einführung in PHP. (mit Aufgaben) Einführung in PHP (mit Aufgaben) Dynamische Inhalte mit PHP? 2 Aus der Wikipedia (verkürzt): PHP wird auf etwa 244 Millionen Websites eingesetzt (Stand: Januar 2013) und wird auf etwa 80 % aller Websites

Mehr

Teil 1: Prozessorstrukturen

Teil 1: Prozessorstrukturen Teil 1: Prozessorstrukturen Inhalt: Mikroprogrammierung Assemblerprogrammierung Motorola 6809: ein einfacher 8-Bit Mikroprozessor Mikrocontroller Koprozessoren CISC- und RISC-Prozessoren Intel Pentium

Mehr

Teil III: Evaluationstest

Teil III: Evaluationstest Teil III: Evaluationstest Inhalt 1 Evaluationstest Teil 1: Fachwissen (inkl. Musterlösung)... 2 1.1 Rahmenbedingungen und Aufgaben... 2 1.2 Lösungsvorschläge zu den Aufgaben... 3 1.3 Verteilung der Punkte...

Mehr

Proseminar C-Programmierung. Strukturen. Von Marcel Lebek

Proseminar C-Programmierung. Strukturen. Von Marcel Lebek Proseminar C-Programmierung Strukturen Von Marcel Lebek Index 1. Was sind Strukturen?...3 2. Padding 5 3. Vor- und Nachteile von Padding..8 4. Padding gering halten 9 5. Anwendungsgebiete von Strukturen.11

Mehr

PHP 5.4 ISBN 978-3-86249-327-2. Stephan Heller, Andreas Dittfurth 1. Ausgabe, September 2012. Grundlagen zur Erstellung dynamischer Webseiten GPHP54

PHP 5.4 ISBN 978-3-86249-327-2. Stephan Heller, Andreas Dittfurth 1. Ausgabe, September 2012. Grundlagen zur Erstellung dynamischer Webseiten GPHP54 PHP 5.4 Stephan Heller, Andreas Dittfurth 1. Ausgabe, September 2012 Grundlagen zur Erstellung dynamischer Webseiten ISBN 978-3-86249-327-2 GPHP54 5 PHP 5.4 - Grundlagen zur Erstellung dynamischer Webseiten

Mehr

TECHNISCHE HOCHSCHULE NÜRNBERG GEORG SIMON OHM Die Mikroprogrammebene eines Rechners Das Abarbeiten eines Arbeitszyklus eines einzelnen Befehls besteht selbst wieder aus verschiedenen Schritten, z.b. Befehl

Mehr

JAVA - Suchen - Sortieren

JAVA - Suchen - Sortieren Übungen Informatik I JAVA - Suchen - Sortieren http://www.fbi-lkt.fh-karlsruhe.de/lab/info01/tutorial Übungen Informatik 1 Folie 1 Inhalt Suchen/Sortieren binary search mergesort bubblesort Übungen Informatik

Mehr

Schleifen in C/C++/Java

Schleifen in C/C++/Java Schleifen in C/C++/Java Alle 3 Sprachen stellen mindestens die folgenden 3 Schleifenkonstruktionen zur Verfügung. In C gibt es auch keine weiteren, C++, Java und C# haben noch weitere nützliche Varianten.

Mehr

Dynamisches Huffman-Verfahren

Dynamisches Huffman-Verfahren Dynamisches Huffman-Verfahren - Adaptive Huffman Coding - von Michael Brückner 1. Einleitung 2. Der Huffman-Algorithmus 3. Übergang zu einem dynamischen Verfahren 4. Der FGK-Algorithmus 5. Überblick über

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

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

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden. Grundwissen Informatik Objekt Attribut Methoden Als Objekte bezeichnet man alle Gegenstände, Dinge, Lebewesen, Begriffe oder Strukturen unserer Welt ( Autos, Räume, Bakterien, Lehrer, Schüler, Kunden,

Mehr

Access [basics] Programmieren mit Arrays. Beispieldatenbank. Arrays. Eindimensionale Arrays. VBA-Grundlagen Programmieren mit Arrays

Access [basics] Programmieren mit Arrays. Beispieldatenbank. Arrays. Eindimensionale Arrays. VBA-Grundlagen Programmieren mit Arrays Dass Sie unter Access Daten in Tabellen speichern und gezielt darauf zugreifen können, wissen Sie als Access [basics]-leser schon längst. Aber was, wenn Sie nur ein paar gleichartige Daten zwischenspeichern

Mehr

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen 1 Kapitel 9 Komplexität von Algorithmen und Sortieralgorithmen Ziele 2 Komplexität von Algorithmen bestimmen können (in Bezug auf Laufzeit und auf Speicherplatzbedarf) Sortieralgorithmen kennenlernen:

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

2 Einfache Rechnungen

2 Einfache Rechnungen 2 Einfache Rechnungen 2.1 Zahlen Computer, auch bekannt als Rechner, sind sinnvoller eingesetzt, wenn sie nicht nur feste Texte ausgeben, sondern eben auch rechnen. Um das Rechnen mit Zahlen zu verstehen,

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

Lehrstuhl Informatik VI Grundzüge der Informatik * WS 2008/2009 Prof. Dr. Joachim Biskup

Lehrstuhl Informatik VI Grundzüge der Informatik * WS 2008/2009 Prof. Dr. Joachim Biskup Universität Dortmund Lehrstuhl Informatik VI Grundzüge der Informatik * WS 28/29 Prof. Dr. Joachim Biskup Leitung der Übungen: Arno Pasternak Lösungs-Ideen Übungsblatt 6 A: Grammatiken, Syntaxdiagramme

Mehr

Datenstrukturen und Algorithmen

Datenstrukturen und Algorithmen Joost-Pieter Katoen Datenstrukturen und Algorithmen 1/32 Datenstrukturen und Algorithmen Vorlesung 7: Sortieren (K2) Joost-Pieter Katoen Lehrstuhl für Informatik 2 Software Modeling and Verification Group

Mehr

Wie funktioniert das Sortieren einer Reihe von Zufallszahlen mit Quicksort?

Wie funktioniert das Sortieren einer Reihe von Zufallszahlen mit Quicksort? Wie funktioniert das Sortieren einer Reihe von Zufallszahlen mit Quicksort? Seite 1 Sehen wir uns zunächst einmal die grundsätzliche Vorgehensweise des Programmes an, ohne auf Einzelheiten oder Fachtermini

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

AplusixEditor : Editor für Aplusix 3 Benutzerhandbuch

AplusixEditor : Editor für Aplusix 3 Benutzerhandbuch 1. Einleitung AplusixEditor : Editor für Aplusix 3 Benutzerhandbuch Mai 2011 Deutsche Übersetzung von Marion Göbel verfaßt mit epsilonwriter Der Übungs-Editor ermöglicht das Erstellen und Bearbeiten der

Mehr

Kleine Anekdote. Schleifen in C

Kleine Anekdote. Schleifen in C Kleine Anekdote 1786 kam ein Junge mit 9 Jahren in die Volksschule. Um die Schüler zu beschäbigen, gab der Lehrer die Aufgabe alle Zahlen von 1 bis 100 zusammenzuzählen. Dieser neunjährige Junge lieferte

Mehr

Einführung in den Einsatz von Objekt-Orientierung mit C++ I

Einführung in den Einsatz von Objekt-Orientierung mit C++ I Einführung in den Einsatz von Objekt-Orientierung mit C++ I ADV-Seminar Leiter: Mag. Michael Hahsler Syntax von C++ Grundlagen Übersetzung Formale Syntaxüberprüfung Ausgabe/Eingabe Funktion main() Variablen

Mehr

Programmieren in C. -- ALLE Programmiersprachen sind HÄSSLICH -- Deklaration: erst der Datentyp, dann der Variablenname. Semikolon am Ende.

Programmieren in C. -- ALLE Programmiersprachen sind HÄSSLICH -- Deklaration: erst der Datentyp, dann der Variablenname. Semikolon am Ende. PROGRAMMIEREN IN C - EIN KURZÜBERBLICK 1 Programmieren in C -- ALLE Programmiersprachen sind HÄSSLICH -- Die einfachste Programmstruktur: main () -- was zu tun ist --- Vorgeordnete Definitionen: # include

Mehr

FH München, FB 03 FA WS 06/07. Ingenieurinformatik. Name Vorname Matrikelnummer Sem.Gr.: Hörsaal Platz

FH München, FB 03 FA WS 06/07. Ingenieurinformatik. Name Vorname Matrikelnummer Sem.Gr.: Hörsaal Platz FH München, FB 03 FA WS 06/07 Ingenieurinformatik Name Vorname Matrikelnummer Sem.Gr.: Hörsaal Platz Zulassung geprüft vom Aufgabensteller: Teil I Aufg. 2 Aufg. 3 Aufg. 4 Aufg. 5 Summe Note Aufgabensteller:

Mehr

Modellierung und Programmierung 1

Modellierung und Programmierung 1 Modellierung und Programmierung 1 Prof. Dr. Sonja Prohaska Computational EvoDevo Group Institut für Informatik Universität Leipzig 19. November 2015 Gültigkeitsbereich (Scope) von Variablen { int m; {

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

4 Schleifen und Dateien

4 Schleifen und Dateien 4 Schleifen und Dateien 4.1 Übungsaufgabe 4.1.1 Aufgabe 1 Schreiben Sie drei C++ Programme: pword_for.cxx, pword_while.cxx, pword_do.cxx. Die Programme sollen den Benutzer höchstens 5 Mal nach einem Passwort

Mehr

Microcontroller Praktikum SS2010 Dipl. Ing. R. Reisch

Microcontroller Praktikum SS2010 Dipl. Ing. R. Reisch Microcontroller Praktikum SS2010 Dipl. Ing. R. Reisch Die wichtigsten Unterlagen/Tools Für das Praktikum Unterlagen/Kenntnisse/Tools wichtig: Datenblatt des AT80USB1287 µc Schaltplan des im Praktikum verwendeten

Mehr

Vom Leichtesten zum Schwersten Sortieralgorithmen

Vom Leichtesten zum Schwersten Sortieralgorithmen Aktivität 7 Vom Leichtesten zum Schwersten Sortieralgorithmen Zusammenfassung Häufig verwendet man Computer dazu Listen von Elementen in eine bestimmte Ordnung zu bringen. So kann man beispielsweise Namen

Mehr

Daniel Betz Wintersemester 2011/12

Daniel Betz Wintersemester 2011/12 Daniel Betz Wintersemester 2011/12 Digitally signed by daniel.betz@daniel-betz.com Date: 2011.12.04 17:24:40 +01'00' Insgesamt 16 Register von je 16 Bit (=WORD) Breite Untere 8 Register auch als 2 Register

Mehr

CARL HANSER VERLAG. Christopher Allen. Oracle PL/SQL für Einsteiger Der Einsatz von SQL und PL/SQL in der Oracle-Datenbank 3-446-21801-7

CARL HANSER VERLAG. Christopher Allen. Oracle PL/SQL für Einsteiger Der Einsatz von SQL und PL/SQL in der Oracle-Datenbank 3-446-21801-7 CARL HANSER VERLAG Christopher Allen Oracle PL/SQL für Einsteiger Der Einsatz von SQL und PL/SQL in der Oracle-Datenbank 3-446-21801-7 www.hanser.de Inhaltsverzeichnis Danksagung...XI Einleitung...XIII

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 32 Einstieg in die Informatik mit Java Effizienz Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 32 1 Überblick: was ist Effizienz? 2 Landau-Symbole 3 Eier im Korb 4

Mehr

Sortierverfahren für Felder (Listen)

Sortierverfahren für Felder (Listen) Sortierverfahren für Felder (Listen) Generell geht es um die Sortierung von Daten nach einem bestimmten Sortierschlüssel. Es ist auch möglich, daß verschiedene Daten denselben Sortierschlüssel haben. Es

Mehr

6 3 1 7 5 9 2 4 8 Geben Sie dazu jedes Mal, wenn sie die Zeile 15 passieren, die aktuelle Feldbelegung an. Der Anfang wurde bereits gemacht.

6 3 1 7 5 9 2 4 8 Geben Sie dazu jedes Mal, wenn sie die Zeile 15 passieren, die aktuelle Feldbelegung an. Der Anfang wurde bereits gemacht. Aufgabe 2: ALI von der Hochsprache zur Maschinenebene a) Schreiben Sie ein Pascal- sowie das zugehörige RePascal-PROGRAM Quadratsumme, welches nach Eingabe einer natürlichen Zahl n die Summe der ersten

Mehr

Abschnitt: Algorithmendesign und Laufzeitanalyse

Abschnitt: Algorithmendesign und Laufzeitanalyse Abschnitt: Algorithmendesign und Laufzeitanalyse Definition Divide-and-Conquer Paradigma Divide-and-Conquer Algorithmen verwenden die Strategien 1 Divide: Teile das Problem rekursiv in Subproblem gleicher

Mehr

Kontrollstrukturen, Pseudocode und Modulo-Rechnung

Kontrollstrukturen, Pseudocode und Modulo-Rechnung Kontrollstrukturen, Pseudocode und Modulo-Rechnung CoMa-Übung III TU Berlin 29.10.2012 CoMa-Übung III (TU Berlin) Kontrollstrukturen, Pseudocode und Modulo-Rechnung 29.10.2012 1 / 1 Themen der Übung 1

Mehr