1 00:00:03,640 --> 00:00:06,360 Das war's für heute. 2 00:00:07,220 --> 00:00:08,500 Bis zum nächsten Mal. 3 00:00:09,978 --> 00:00:17,398 So, schönen guten Tag. Assembler-Programmierung, Assembler und Rechner -Architektur-Grundlagen. 4 00:00:19,698 --> 00:00:28,198 Was ist die Ausgangssituation für unsere Betrachtung? In der Pionierzeit hatte man die 5 00:00:28,198 --> 00:00:34,698 wesentlichen Komponenten der Hardware bereits als solche identifiziert. Die haben sich im 6 00:00:35,038 --> 00:00:36,958 bis heute nicht geändert. 7 00:00:37,376 --> 00:00:47,696 Wusste also ziemlich früh in der Genese der Informatik, welche Komponenten wie zusammenwirken müssen, um eine universelle programmierbare Maschine konstruieren zu können. 8 00:00:48,276 --> 00:00:52,336 Genau darüber werden wir im weiteren Verlauf des Vortrags reflektieren. 9 00:00:53,396 --> 00:01:03,976 Und wir erinnern uns, dass die Hardware als solche die Plattform bietet, die unverändert zur Verfügung steht und 10 00:01:04,144 --> 00:01:09,644 ihre Flexibilität dadurch gewinnt, dass Programme auf ihr laufen können. 11 00:01:10,984 --> 00:01:20,824 Die Programme machen die Hardware flexibel einsetzbar, weil die Hardware so konstruiert ist, dass sie diese Flexibilität eben besitzt. 12 00:01:20,824 --> 00:01:28,964 Man muss sich fragen, welche Hardware Bestandteile, welche Komponenten zu einer Architektur zusammengefügt. 13 00:01:29,600 --> 00:01:39,380 Leisten diese Flexibilität und wie können Programme so abgearbeitet werden, dass das ganze Programm unabhängig passiert. 14 00:01:39,720 --> 00:01:41,380 Also der Befehlszyklus. 15 00:01:42,640 --> 00:01:51,580 In den Anfangsjahren waren die Hardware-Architekten immer auch Programmierer. 16 00:01:51,900 --> 00:01:58,780 Und andersrum, denn man musste intime Kenntnisse der zugrunde liegenden Hardware besitzen, um die Rechner überhaupt nutzen zu können. 17 00:01:59,168 --> 00:02:12,468 Woran lag das? Die Hardware war sehr teuer, es gab nur ganz wenig davon und man musste die Daten auf Assemblerebene von Register zu Register transferieren. 18 00:02:13,208 --> 00:02:17,788 Dazu musste man ganz genau wissen, wie die Hardware eigentlich intern arbeitet. 19 00:02:17,788 --> 00:02:23,848 Und mit der Zeit und der Verbreitung von Rechnern 20 00:02:24,128 --> 00:02:42,128 kam auch die Software hinterher, was das Design angeht. Es ist Software Engineering entstand und das Übergreifziel von höheren Programmiersprachen ist es gerade, die Details der zugrunde liegenden Maschine zu verbergen. 21 00:02:43,588 --> 00:02:53,948 Sprich, man soll nicht mehr wissen, wie viele Register es gibt, was die genau für eine Aufgabe haben und wie die ganzen architekturellen Merkmale hardwareseitig zusammenwirken. 22 00:02:54,400 --> 00:03:03,500 Weil das dem menschlichen Denken hinsichtlich einer Programmieraufgabe nun mal recht weit entrückt ist. 23 00:03:05,860 --> 00:03:17,300 Wenn man sich jetzt mit Mikrocontrollern als ein ganz weites Feld der Praxis beschäftigt, dann hat man so einen Hybridfall vorliegen. 24 00:03:17,300 --> 00:03:24,400 Man muss nicht zwangsweise jedes Detail des Mikrocontrollers, der zugrunde liegenden Funktionen, 25 00:03:24,432 --> 00:03:31,192 Hardware-Plattformen, beispielsweise den ATmega-Prozessor in der Arduino -Mikrocontroller-Familie kennen. 26 00:03:31,872 --> 00:03:40,372 Aber man braucht schon mehr Kenntnisse, als das jetzt ein Software-Ingenieur benötigt, 27 00:03:40,752 --> 00:03:45,772 der Anwendungsprogramme in einer höheren Programmiersprache wie Java oder ähnliches schreibt. 28 00:03:46,772 --> 00:03:48,792 Das heißt, so eine kleine Renaissance, 29 00:03:48,792 --> 00:03:50,892 der 30 00:03:51,312 --> 00:04:14,912 Hardware näheren Betrachtungsweise kommt über den Mikrocontroller in die Informatik, was die Lehre angeht an Schulen und Hochschulen, da ist momentan das Physical Computing so die Flagge unter dem der Mikrocontroller segelt, aber in welcher Form das dann auch jeweils weitergetragen wird. 31 00:04:14,912 --> 00:04:18,572 Und Mikrocontroller sind auch in der industriellen Praxis die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die, die 32 00:04:18,592 --> 00:04:25,292 die häufigste Plattform von Rechnern überhaupt. Ja, das ist nicht der Desktop -Rechner, sondern 33 00:04:25,292 --> 00:04:32,412 Mikrocontroller, weil das in Form von eingebetteten Systemen an allen möglichen Stellen verbaut 34 00:04:32,412 --> 00:04:36,932 ist, die man oftmals nicht sieht. Das ist ja gerade der Sinn der Sache. Aber wenn 35 00:04:36,932 --> 00:04:41,012 Sie sich mit Mikrocontrollern beschäftigen, beispielsweise mit der Arduino -Plattform, 36 00:04:41,012 --> 00:04:46,892 haben Sie die Schnittstelle zwischen dem, was 37 00:04:47,376 --> 00:04:52,936 heutzutage eher als Informatik bezeichnet wird, Datenbanken, Programmierung, 38 00:04:53,856 --> 00:04:59,216 vielleicht künstliche Intelligenz und solche Dinge und der den Bereich, der 39 00:04:59,216 --> 00:05:03,576 früher heute teilweise noch so als technische Informatik betrachtet wird 40 00:05:03,576 --> 00:05:10,396 wozu auch die Elektronik gehört. Das ist ein sehr spannendes Anwendungsfeld und 41 00:05:10,396 --> 00:05:13,896 da kann es nicht schaden, sich auch 42 00:05:14,624 --> 00:05:20,584 in gewissem Maße mit der Assembler-Programmierung zu beschäftigen, also der einzigen Sprache, 43 00:05:20,664 --> 00:05:26,164 die ein Prozessor wirklich versteht. Bedenken Sie immer, egal in welcher höheren Programmiersprache 44 00:05:26,164 --> 00:05:31,884 Sie programmieren, Ihr Rechner kann genau eine Sprache verstehen, nämlich seine Maschinensprache 45 00:05:31,884 --> 00:05:41,564 und keine andere. Wie sieht es jetzt aus? Welche Komponenten braucht man, um diese Universalität 46 00:05:41,564 --> 00:05:42,464 der Rechner? 47 00:05:44,376 --> 00:05:59,816 Sicherzustellen, wie sieht die Architektur aus? Das heißt, wie wirken diese Komponenten zusammen und wie wird Software abgearbeitet, sodass die universelle Maschine zur universell programmierbaren Maschine wird? 48 00:06:00,416 --> 00:06:03,556 Diesen zentralen Fragen werden wir nachgehen. 49 00:06:08,154 --> 00:06:20,354 In der Pionierzeit gab es im Wesentlichen zwei architekturelle Ansätze, sind einmal die Harvard und die von Neumann Architektur. 50 00:06:21,214 --> 00:06:29,514 Die unterscheiden sich darin, dass in der Harvard Architektur Programme und Daten in getrennten Speichern vorgehalten werden, 51 00:06:30,134 --> 00:06:34,574 während die von Neumann Architektur beides in einem gemeinsamen Speicher verwaltet. 52 00:06:35,264 --> 00:06:41,264 Die von Neumann Architektur hat sich in Anführungsstrichen durchgesetzt, die ist zumindest am weitesten verbreitet. 53 00:06:42,104 --> 00:06:50,464 Allerdings werden sie gerade im Mikrocontrollerbereich noch viele Architekturen nach dem Harvard-Prinzip finden. 54 00:06:52,344 --> 00:07:02,344 Der ATmega-Prozessor, der beispielsweise auf der Arduino-Plattform verbaut ist, erfolgt der Harvard-Architektur wie andere Mikrocontroller auch. 55 00:07:05,146 --> 00:07:09,306 Jetzt wird der Informatik oft nachgesagt, dass sie sich schnell ändert. 56 00:07:10,566 --> 00:07:14,986 Das ist so halb wahr, es gibt Bereiche, die sich in der Tat sehr schnell ändern, aber 57 00:07:14,986 --> 00:07:19,506 die Grundlagen der Informatik, auch der technischen Informatik und ganz besonders 58 00:07:19,506 --> 00:07:23,086 der Rechnerarchitektur, die sind seit Jahrzehnten stabil. 59 00:07:24,146 --> 00:07:28,346 Zwar gibt es natürlich Spezial-Hardware für Bildverarbeitung im medizinischen Bereich 60 00:07:28,346 --> 00:07:33,886 beispielsweise oder Grafikprozessoren, die nach anderen Prinzipien arbeiten. 61 00:07:34,528 --> 00:07:47,708 Aber der universalen Rechner, der ist heute genauso wie zu Gründerzeit auch. Nur halt sind die Bestandteile viel schneller geworden. 62 00:07:50,968 --> 00:08:00,528 Wenn dem also so ist, wenn man einen universell einsetzbaren, programmierbaren Rechner konstruieren kann, welche Komponenten braucht man? 63 00:08:00,528 --> 00:08:04,128 Was muss man können und wie lässt sich das auf die Komponenten runter bräuche? 64 00:08:07,054 --> 00:08:12,554 Reflektiert man darüber, dann wird man feststellen, so ein Rechner muss natürlich rechnen können. 65 00:08:12,834 --> 00:08:16,174 Das heißt, das ist eine Recheneinheit, die in irgendeiner Form besitzt. 66 00:08:16,274 --> 00:08:20,174 Der muss Ergebnisse und Zwischenergebnisse speichern können. 67 00:08:20,274 --> 00:08:23,334 Das heißt, er muss eine Speichermöglichkeit besitzen. 68 00:08:23,494 --> 00:08:27,174 Es muss einen Chef geben, der das Ganze koordiniert, eine Steuerzentrale. 69 00:08:27,694 --> 00:08:31,934 Und es muss eine Kommunikation mit der Außenwelt stattfinden können. 70 00:08:31,934 --> 00:08:34,354 Spricht Daten, Sensorwerte. 71 00:08:34,928 --> 00:08:46,368 Die müssen in das System gelangen, die werden dann verarbeitet und das System muss aufgrund der Verarbeitung dann irgendwelche Ausgaben tätigen, damit über Aktoren Reaktionen erfolgen können. 72 00:08:46,928 --> 00:08:50,868 Da haben sie wieder das EFA-Prinzip. Eingabe, Verarbeitung, Ausgabe. 73 00:08:51,488 --> 00:08:55,708 Und mit diesen vier prinzipiellen Komponenten können sie praktisch alles machen. 74 00:08:58,848 --> 00:08:59,748 Wer macht denn jetzt was? 75 00:09:00,828 --> 00:09:03,208 Naja, die Recheneinheit ist der Prozessor. 76 00:09:05,212 --> 00:09:10,392 Wir werden gleich noch Details kennenlernen, welche Komponenten auf dem Prozessor das Ding 77 00:09:10,392 --> 00:09:10,952 jetzt leisten. 78 00:09:12,332 --> 00:09:13,672 Speichermöglichkeit, Hauptspeicher. 79 00:09:14,552 --> 00:09:19,912 Es gibt auch andere Speicher, Register beispielsweise, aber die großen Datenmengen während der 80 00:09:19,912 --> 00:09:21,792 Abarbeitung, die landen im Hauptspeicher. 81 00:09:22,512 --> 00:09:28,612 Die Steuerzentrale wird durch die Steuerzentrale, das Steuerwerk umgesetzt und die Kommunikation 82 00:09:28,612 --> 00:09:31,032 mit der Außenwelt ist die Ein- und Ausgabeeinheit. 83 00:09:31,032 --> 00:09:33,492 So. 84 00:09:33,920 --> 00:09:42,900 Das heißt also, wir können uns diese vier Blöcke mal aufzeichnen und so passiert natürlich noch nichts, weil die im luftleeren Raum jeder für sich schwebt. 85 00:09:42,940 --> 00:09:44,780 Wir müssen die irgendwie verbinden. 86 00:09:46,220 --> 00:09:58,320 Wenn man das macht, dann erinnert man sich, dass die Leitungen "Bussystem" heißen und dass es davon drei Stück gibt. 87 00:09:59,440 --> 00:10:01,660 Datenbus, Adressbus und Steuerbus. 88 00:10:02,064 --> 00:10:08,284 Und wie die Namen schon verraten, laufen die Daten über einen separaten Bus. Das ist der Datenbus. 89 00:10:08,904 --> 00:10:12,624 Die Adressen über den Adressbus und die Steuersignale über den Steuerbus. 90 00:10:13,604 --> 00:10:20,944 Kann man nicht nur ein Leitungs-Konglomerat sozusagen bilden? Ja, kann man. 91 00:10:22,264 --> 00:10:30,524 Nur bedenken Sie bei allem, was man so lernt, dass unterschiedliche Kriterien 92 00:10:30,524 --> 00:10:31,724 Designentscheidungen sind. 93 00:10:32,016 --> 00:10:38,016 Wenn es nur einen Bus gibt, also nur eine Straße, dann ist da ganz schnell Stau. 94 00:10:40,096 --> 00:10:46,216 Die Parallelisierbarkeit, der gleichzeitig Abarbeitbarkeit von Dingen sind an Grenzen gesetzt. 95 00:10:47,056 --> 00:10:51,016 Haben Sie Daten, Adressen und Steuersignale getrennt? 96 00:10:52,356 --> 00:10:55,236 Können Sie gegebenenfalls Dinge parallel erledigen? 97 00:10:55,236 --> 00:10:59,436 Und daher trennt man diese. 98 00:10:59,648 --> 00:11:18,328 Verbindungsleitung auf in die drei untereinheiten. Der Prozessor selbst, der besteht im Wesentlichen aus der Einheit, die tatsächlich rechnet im Rechenwerk, der alu, arithmetisch logische Einheit, und dem Chef, der koordinativen Einheit im Leit- oder Steuerwerk. 99 00:11:20,448 --> 00:11:27,468 Bedenken Sie, wenn Sie Schaltbilder lesen, dass das Bussystem in der Regel, je nachdem was im Schaltbild gerade hervorgehoben werden soll, 100 00:11:27,920 --> 00:11:34,100 durch einen Strich einfach gekennzeichnet wird, da sind dann aber sehr viele Leitungen hinter. 101 00:11:34,240 --> 00:11:39,080 Wenn Sie bei 8-Bit-Systemen zum Beispiel den Datenbus betreiben oder betrachten, 102 00:11:39,460 --> 00:11:42,920 dann sind da 8 Leitungen hinter dem Strich verborgen. 103 00:11:43,700 --> 00:11:46,700 Da verliert man völlig den Überblick, wenn man das jedes Mal aufzeichnet. 104 00:11:49,900 --> 00:11:56,140 Das sieht da eigentlich recht übersichtlich aus und ist es auch vom Strukturbild her. 105 00:11:56,704 --> 00:12:04,224 Diese vier Komponenten samt Verbindungsleitung und dem Bussystem ermöglichen es tatsächlich 106 00:12:04,224 --> 00:12:06,884 eine universelle Maschine zu konstruieren. 107 00:12:07,984 --> 00:12:10,464 Nur macht die noch nichts, sie muss erst mal programmiert werden. 108 00:12:11,244 --> 00:12:17,024 Es ist die Frage, naja, also wir brauchen genauso wie für eine universelle Hardware auch 109 00:12:17,024 --> 00:12:26,624 ein universelles Verfahren, nachdem diese universelle Hardware die Programme abarbeitet. 110 00:12:27,184 --> 00:12:30,604 Und das muss Programm unabhängig funktionieren. 111 00:12:31,024 --> 00:12:35,364 Das Abarbeitungsprinzip ist Programm unabhängig. Es wird zwar durch das Programm beeinflusst, 112 00:12:35,404 --> 00:12:41,004 aber das Prinzip der Abarbeitung von Programmen ist natürlich vom Programm selbst unabhängig. 113 00:12:42,664 --> 00:12:45,424 Wie sieht so ein Befehlzyklus dann also aus? 114 00:12:49,064 --> 00:12:50,544 Einfacher könnte er kaum sein. 115 00:12:51,724 --> 00:12:56,804 Man holt sich den nächsten Befehl, schaut nach welcher Befehl es denn ist, 116 00:12:56,804 --> 00:12:56,844 und dann kann man es sich ansehen. 117 00:12:56,844 --> 00:12:56,904 Und dann kann man es ansehen. 118 00:12:57,024 --> 00:12:57,084 Und dann kann man es ansehen. 119 00:12:57,120 --> 00:13:05,320 Führt ihn aus und wiederholt das bis der Strom weg ist. Fertig, das war's. Das ist der Befehlszyklus. 120 00:13:06,500 --> 00:13:10,880 Das heißt, egal was sie programmieren, egal in welcher Programmiersprache, 121 00:13:13,560 --> 00:13:16,520 es funktioniert immer in diesen drei Schritten. 122 00:13:18,160 --> 00:13:21,400 Die Hochsprache wird über den Compiler in Assembler-Sprache 123 00:13:22,400 --> 00:13:25,400 umgewandelt. Nur diese Sprache versteht der Prozessor. 124 00:13:25,904 --> 00:13:33,924 Und dann wird Schritt für Schritt, Befehl für Befehl, nach genau diesem Schema abgearbeitet. 125 00:13:34,204 --> 00:13:38,944 Wir holen den nächsten Befehl, schauen nach, um welchen Befehl es sich handelt, 126 00:13:39,284 --> 00:13:46,564 führen die Aktion, die der Befehl verlangt, aus, holen den nächsten Befehl und das Ganze geht so lange weiter, bis der Strom weg ist. 127 00:13:51,354 --> 00:13:56,034 Jetzt ist das noch mal etwas detaillierter aufgeführt. 128 00:13:56,874 --> 00:14:01,754 Wir fangen an Befehl holen, wird im Englischen als Fetch bezeichnet. 129 00:14:01,954 --> 00:14:08,394 Dann schauen wir nach welcher Befehl denn vorliegt, Decode und führen den Befehl aus 130 00:14:08,394 --> 00:14:09,354 Execute. 131 00:14:11,074 --> 00:14:14,354 Jetzt sollen wir ja den nächsten Befehl holen. 132 00:14:14,354 --> 00:14:16,234 Und da gibt es zwei Befehl. 133 00:14:16,272 --> 00:14:26,612 Verschiedene Verfahren. Wenn es sich nicht um einen Sprung handelt, dann wird der Befehlszähler um eins erhöht. Dieses um eins erhöhen müssen Sie im übertragenen Sinne verstehen. 134 00:14:26,692 --> 00:14:41,412 Was heißt denn jetzt hier um eins? Immer um eine Wortgröße. Befehle haben eine gewisse Breite und sie müssen um auf den nächsten Befehl zu kommen, so und so viel Bit weiter springen. 135 00:14:41,412 --> 00:14:46,092 Das ist das um eins erhöht. Das verbirgt sich dahinter. 136 00:14:46,336 --> 00:15:05,996 Zum nächsten Befehl könnte man auch sagen. Wenn ein Sprung vorliegt, dann setzen wir den Befehlszähler nicht auf den nächsten Befehl, sondern auf die Adresse des Befehls, wohin gesprungen werden soll. 137 00:15:06,516 --> 00:15:07,816 Auf die Sprungadresse. 138 00:15:11,506 --> 00:15:18,126 Das heißt, wir brauchen so ein ganzes zentrales Register, den befehlt Sailor, den Instruction Pointer. 139 00:15:22,234 --> 00:15:33,114 Und da sind wir auf Basis der letzten Fragen, die man sich klar machen muss und das sind auch gleichzeitig die Antworten, die man kennen muss, wenn man programmiert. 140 00:15:33,234 --> 00:15:43,514 Das ist im Wesentlichen der zentrale Teil des Programmiermodells, also der Dinge, die der Programmierer vom System hardwarenah wissen muss. 141 00:15:45,014 --> 00:15:51,134 Wo landet der nächste Befehl? Wo steht die Adresse des nächsten Befehls? Und wo stehen Statusmeldungen? 142 00:15:52,730 --> 00:16:01,690 Die Antworten sind eigentlich recht gut zu merken. Wo landet der Befehl? Im Befehlsregister. 143 00:16:01,850 --> 00:16:08,870 Man hat also einen kleinen, sehr schnellen, auf dem Prozessor liegenden Speicher vorgesehen. 144 00:16:09,190 --> 00:16:14,730 Ein Register und das Register, wo der aktuelle Befehl landet, 145 00:16:15,110 --> 00:16:17,290 damit die ... 146 00:16:17,328 --> 00:16:24,408 der Prozessor ihn abarbeiten kann, ist das Befehlsregister im englischen IAR Instruction Register genannt. 147 00:16:25,168 --> 00:16:31,388 Okay. Dann brauchen wir ja noch den Folgebefehl bzw. die Adresse des Folgebefehls. 148 00:16:31,428 --> 00:16:35,148 Wo steht denn die? Im Befehls-Zähl-Register. 149 00:16:36,268 --> 00:16:41,108 Und da gibt es zwei Namen für Instruction Pointer oder Program Counter. 150 00:16:42,714 --> 00:16:51,414 Und Statusmeldungen, die stehen in den Status- oder Zustandsregistern, oftmals auf Flag-Registern genannt. 151 00:16:52,334 --> 00:17:02,154 Machen sie sich klar, wenn sie je Hardware näher sie programmieren, desto mehr Automatismen stehen ihnen nicht zur Verfügung. 152 00:17:03,354 --> 00:17:10,354 Wenn sie beispielsweise Rechenoperationen durchführen, auf Assembler-Ebene. 153 00:17:12,804 --> 00:17:18,184 Dann müssen sie als Programmierer sicherstellen, dass da kein Bereichsüberlauf stattfindet. 154 00:17:18,384 --> 00:17:28,404 Sie haben ja zum Beispiel 8 Bit pro Operant und wenn sie dann die addieren, könnte ja sein, dass das Ergebnis größer ist, als in 8 Bit reinpassen. 155 00:17:28,724 --> 00:17:36,364 Sie erreichen einen Überlauf. Das Programm interessiert sich dafür nicht. Das müssen sie dann als Programmierer überprüfen. 156 00:17:37,204 --> 00:17:39,544 Und wo kriegen sie aber die Informationen her? 157 00:17:39,544 --> 00:17:39,584 Vielen Dank für's Zuschauen. 158 00:17:39,888 --> 00:17:45,168 Ob ein Überlauf stattgefunden hat oder nicht, dafür sind diese Flag-Register vorgesehen. 159 00:17:45,348 --> 00:17:50,228 Die müssen sie sich also anschauen, welche bietet ihr Prozessor und wie können sie die ansprechen? 160 00:17:51,808 --> 00:17:57,968 Also, der aktuelle Befehl steht im Befehlsregister, die Adresse des Folgebefehls im Befehls-Zählregister 161 00:17:57,968 --> 00:18:00,888 und die Statusmeldung in den Flag-Registern. 162 00:18:03,108 --> 00:18:08,988 Entsprechend haben sie im Programmiermodell auch diese ganz zentralen 163 00:18:09,024 --> 00:18:20,184 Register vorrätig. Sie sehen hier in der Abbildung genau das, das Befehlsregister, den Befehlszähler und Zustandsregister 164 00:18:21,024 --> 00:18:28,884 und dann haben sie im Rechenwerk neben der arithmetisch-logischen Einheit, die dann die Logikoperation und Rechenoperation tatsächlich durchführt, 165 00:18:28,884 --> 00:18:37,724 auch Arbeits- und Statusregister. Arbeitsregister dafür, dass sie mal Werte aus dem 166 00:18:38,064 --> 00:18:47,364 Speicher laden können und vorhalten können und Zwischenergebnisse können sie dann manchmal auch drin speichern. Statusregister entsprechend, um Status abzufragen. 167 00:18:50,504 --> 00:19:03,524 Wenn sie dann ein Modellsystem hernehmen, was dringend empfohlen werden kann. Sie können natürlich auch mit den echten Prozessoren arbeiten, aber da werden sie ganz schneller schlagen von der Komplexität, die diese Geräte haben. 168 00:19:03,524 --> 00:19:06,464 Sie können natürlich beispielsweise den ATmega hernehmen. 169 00:19:06,848 --> 00:19:11,428 Der auf dem Arduino verbaut ist und den in den Assembler programmieren. Da könnt ihr ja machen. 170 00:19:13,008 --> 00:19:15,968 Nur ist der Prozessor 171 00:19:16,748 --> 00:19:19,668 sehr mächtig und hat ja den 172 00:19:19,668 --> 00:19:25,188 den Nachteil, dass man da ganze Zeit unter Wasser ist, bevor man irgendwie produktiv sein kann. 173 00:19:26,928 --> 00:19:28,188 Und ob das fürs 174 00:19:28,188 --> 00:19:34,668 Lernen so gut ist, sei mal dahingestellt, weil sie sich mit vielen Dingen beschäftigen müssen, die sie eigentlich gar nicht 175 00:19:34,668 --> 00:19:35,508 unbedingt wissen. 176 00:19:36,224 --> 00:19:54,864 Wollen, wenn sie nicht professioneller Programmierer auf diesem Gebiet werden wollen oder müssen, wenn man nur unterrichtet, dann der reichen der Grundkenntnisse und die kann man sich am besten anhand von didaktischen Werkzeugen, die für diesen Zweck entwickelt wurden, erarbeiten. 177 00:19:54,864 --> 00:20:05,924 Ein bewährter auch an Schulen bewährter Modellrechner ist der CSI. Und wenn sie die gerade reflektierte Theorie. 178 00:20:06,256 --> 00:20:14,076 Nochmal hier im kleinen Bild anschauen. Dann haben wir ja diese zentralen Register. 179 00:20:15,456 --> 00:20:20,556 Wir wissen das ist Steuerwerk, Rechenwerk als Teil des Prozessors und das finden Sie genau hier wieder. 180 00:20:21,696 --> 00:20:29,076 Der Befehlszähler, den haben Sie hier. Das Befehlsregister haben Sie hier. Dann haben Sie hier ein Rechenwerk. 181 00:20:29,216 --> 00:20:32,096 Was XR und AK ist, das müssen Sie 182 00:20:33,508 --> 00:20:36,828 vermuten. Das müssen Sie dann natürlich in der Dokumentation des Modellrechners 183 00:20:36,828 --> 00:20:40,608 nochmal nachschlagen, so wie Sie das bei realen Rechnern auch machen müssen. 184 00:20:42,068 --> 00:20:46,548 Und dann haben wir hier Arbeitsregister und Statusregister. Die sind hier nicht 185 00:20:46,548 --> 00:20:53,308 vorgesehen, aber ein großer Hauptspeicher. Und da haben Sie natürlich einen 186 00:20:53,308 --> 00:20:57,348 gewissen Befehlzeits, den müssen Sie sich auch anlesen. Und hier haben Sie die 187 00:20:57,348 --> 00:21:00,828 Möglichkeit, die Geschwindigkeit zu regulieren. 188 00:21:01,072 --> 00:21:14,312 Sodass Sie tatsächlich dann sehen können, wenn jetzt hier irgendwas passiert, wie die Daten über den Bus in die CPU wandern und dann da irgendwas passiert und dann wandern die wieder zurück und landen irgendwo im Speicher. 189 00:21:14,712 --> 00:21:20,592 Das heißt, das, was die Befehle machen, kann man tatsächlich visualisiert nachverfolgen. 190 00:21:20,872 --> 00:21:29,132 Schritt für Schritt da durchgehen. Das ist ja nicht dafür gedacht, dass Sie da lange Programme schreiben. Das macht man in Assembler ja sowieso möglichst nicht. Dafür gibt es ja Hochsprachen. 191 00:21:29,600 --> 00:21:34,920 Aber fürs Lernen, fürs Verständnis ist das äußerst hilfreich. 192 00:21:41,526 --> 00:21:55,046 Was sind jetzt Assemblerbefehle? Bedenken Sie, Assemblerbefehle sind immer noch für Menschen halbwegs lesbar, da steht zumindest "add", wenn sie addieren wollen. Das ist aber eine Abkürzung für eine Binärsequenz, die dahinter steht. 193 00:21:56,626 --> 00:22:10,406 Das ist also schon streng genommen, müssen sie mit Nullen und Einsen programmieren, aber die werden 1 zu 1 umgesetzt in entsprechenden Namen, halbwegs sprechend zumindest, sodass der Mensch da überhaupt noch irgendwie programmieren kann. 194 00:22:10,406 --> 00:22:10,426 Vielen Dank für's Zuschauen! 195 00:22:10,752 --> 00:22:37,552 Es gibt nicht die Assembler-Sprache, sondern jede Prozessorfamilie hat eine eigene, ist also Prozessorfamilien abhängig und wenn sie da durchgehen, sagen wir mal, vielleicht ATMEGA mäßig, wollen sie sich auch auf Assembler-Ebene ein bisschen intensiver mit beschäftigen, dann können sie sich oder müssen sie sich natürlich den Befehlsumfang erarbeiten und da unterteilt man 196 00:22:38,032 --> 00:22:51,532 nach Befehlsarten und nach Befehlsumfang. Der Befehlsumfang folgt dem RISC- oder KISC-Modell "Reduced" oder "Complex Instruction Set Computer". 197 00:22:51,532 --> 00:22:59,932 Die Namen sind mehr Schall und Rauch als alles andere, also auch bei "Reduced Instruction Set Computer" können sie nicht von 5 Befehlen ausgehen. 198 00:22:59,932 --> 00:23:05,172 Der ATMEGA beispielsweise, der auf dem Arduino verbaut ist, der folgt ... 199 00:23:05,664 --> 00:23:13,784 dem RISC-Modell, also dem "Reduced Instruction Set" und hat irgendwie 140 plus Befehle. 200 00:23:16,644 --> 00:23:23,404 Also, das ist mehr historisch verankert und vielleicht hat es tiefere Gründe im 201 00:23:23,404 --> 00:23:34,624 Prozessordesign, das mag sein, aber für den Anwender, auch für den Assembler- 202 00:23:34,656 --> 00:23:38,416 irgendwie durchdringen muss. Natürlich lernt man am meisten durchmachen, wie 203 00:23:38,416 --> 00:23:43,416 immer beim Programmieren, aber da kommen dann die Befehlsartend ins Rennen. 204 00:23:43,756 --> 00:23:47,776 Es gibt halt, wie sie auch von den Hochsprachen wissen, es gibt Sprungbefehle, 205 00:23:47,916 --> 00:23:52,156 es gibt logische Befehle, arithmetische Transportbefehle und Prozessor- 206 00:23:52,156 --> 00:23:56,896 Kontrollbefehle. Ja, was weniger bekannt ist in den Hochsprachen, was sie 207 00:23:56,896 --> 00:24:01,596 darauf weder achten sollen noch achten müssen, sind halt Transportbefehle 208 00:24:01,596 --> 00:24:03,136 und Prozessor-Kontrollbefehle. 209 00:24:03,392 --> 00:24:10,752 Es gibt ja gerade Hochsprachen um die möglichst gänzlich ignorieren zu können. Das können sie in der Assembler natürlich nicht. 210 00:24:11,692 --> 00:24:18,492 Sie müssen da jedes Bit höchst persönlich von A nach B schicken und kontrollieren, ob das auch angekommen ist. 211 00:24:21,912 --> 00:24:31,552 Was man wissen muss und auch bei der Einarbeitung in neue Technologien, dann Prozessor-Familien, 212 00:24:31,712 --> 00:24:36,992 die man immer mal im Hinterkopf behalten muss, sind die verschiedenen Adressierungsarten. 213 00:24:38,292 --> 00:24:41,872 Da haben sie in der Hochsprache so gut wie gar nichts mit zu tun. 214 00:24:43,632 --> 00:24:47,172 Auf hardware-nahe Arbeit natürlich umso intensiver. 215 00:24:48,052 --> 00:24:50,092 Welche Adressierungsarten gab es da? 216 00:24:50,632 --> 00:24:53,512 Noch mal, es ist einmal die unmittelbare Adressierung. 217 00:24:53,632 --> 00:24:57,872 Das heißt, es gibt die Möglichkeit, die Operanten, 218 00:24:57,872 --> 00:25:00,912 oder den Operant, je nachdem, den Befehl direkt mitzugeben. 219 00:25:01,120 --> 00:25:14,620 Ja, wenn Sie eine Konstante haben bei einer Rechenoperation, da brauchen Sie gar keinen Speicherzugriff, das ist das springende Punkt, sondern Sie können den Wert, den Sie da verarbeiten wollen, einfach an den Befehl anhängen, fertig, unmittelbarer Adressierung. 220 00:25:15,360 --> 00:25:19,940 Zu unterscheiden von der absoluten Adressierung, da gibt es nämlich einen Speicherzugriff. 221 00:25:20,240 --> 00:25:30,060 Sie haben den Befehl und da rangetackert ist die Adresse, die direkte Speicheradresse, wo der Operant im Speicher zu finden ist. 222 00:25:30,336 --> 00:25:32,936 Meistens hexadezimal codiert. 223 00:25:33,596 --> 00:25:37,176 Absolut, weil sie tatsächlich dahinspringen. 224 00:25:40,016 --> 00:25:44,776 Nicht absolut, sondern relativ ist die relative Adressierung. Wie funktioniert die? 225 00:25:45,456 --> 00:25:47,176 Die Adresse, die 226 00:25:47,176 --> 00:25:49,516 an dem Befehl angehangen wird 227 00:25:49,516 --> 00:25:53,576 oder ist, wird noch um ein Offset 228 00:25:53,576 --> 00:25:55,176 verändert, um 229 00:25:55,176 --> 00:25:57,396 tatsächlich an den Operanten 230 00:25:57,396 --> 00:25:59,176 im Speicher zu kommen. 231 00:25:59,328 --> 00:26:18,608 Sagen wir mal, die Adresse ist hexadezimal 5, ja und der Offset ist 10, dann addieren Sie noch den Offset zu der Adresse und kommen dann bei der Speicheradresse sowieso, da finden Sie dann den tatsächlichen Operanten im Speicher. 232 00:26:19,188 --> 00:26:21,348 Relative Adressierungen, sehr häufig. 233 00:26:21,348 --> 00:26:26,288 Bei der indirekten Adressierung haben Sie praktisch 234 00:26:28,774 --> 00:26:44,294 Doppelte Indirektheit, denn die Adresse, die sie dem Befehl mitgeben, ist nicht die wirkliche Adresse des Operanten, sondern das ist die Adresse im Speicher, wo die Adresse gefunden wird, unter dem der Operant zu finden ist. 235 00:26:48,274 --> 00:26:49,474 Ja, also... 236 00:26:49,504 --> 00:26:56,464 Wenn jetzt hier zum Beispiel beim Befehl "Adresse 15" steht, dann gucken Sie im Speicher an der Stelle 15 nach. 237 00:26:56,524 --> 00:27:02,004 Was da drin steht, interpretieren Sie als Adresse, sagen wir mal, da steht "45" drin 238 00:27:02,004 --> 00:27:07,764 und dann gucken Sie an der Speicherstelle "45" nach, da steht dann der Operanten, wie Sie eigentlich wollen. 239 00:27:10,044 --> 00:27:15,444 Das sind so gewöhnungsbedürftige Mechanismen, 240 00:27:15,444 --> 00:27:19,284 die natürlich in der Hochsprache verborgen werden sollen. 241 00:27:19,568 --> 00:27:24,248 Und auch verborgen werden, die aber letzten Endes auf Maschinen-Ebene genauso umgesetzt werden müssen. 242 00:27:24,368 --> 00:27:31,848 Denn wie sollen sie sonst universelle Programmierbarkeit und die damit einhergehende Flexibilität garantieren? 243 00:27:33,448 --> 00:27:39,768 Ja, das geht nur mit diesen Mechanismen, die natürlich sehr fehleranfällig sind. 244 00:27:40,068 --> 00:27:43,168 Da ist langsames Programmieren dann wieder die schnelle Variante. 245 00:27:43,808 --> 00:27:49,308 Und die schon auch gewöhnungsbedürftig sind, wenn es ums Anwenden geht. 246 00:27:49,600 --> 00:27:55,600 Und um die Denkweise, die dahintersteht, da muss man erstmal eine ganze Weile sich reindenken. 247 00:27:58,260 --> 00:28:03,780 Gut, viel Erfolg auf Ihrer Reise in die hardwarenahe Programmierung.