Grundlagen der Informatik, Lehrvideo; HW, CPU, Assembler, Maschinensprache - mit Übungsteil Ulrich Greveler https://www.youtube.com/watch?v=N1bxRNvaoIs Transkript (automatisch erstellt) 0:06 ja hallo liebe Zielgruppe ich begrüße Sie zu einem weiteren Video aus der Reihe Grundlagen Informatik heute mit den Themen Hardware CPU aber vor allem 0:15 Maschinensprache und Assembler zunächst ein kurzer Blick in die Geschichte die Zuse Z3 war der erste funktionsfähige Digitalrechner und wurde 0:26 1941 von Konrad zose und seinem Team gebaut sie arbeitete mit insgesamt 2000 elektromagnetischen Relais Relais sind elektromagnetische Schalter bestehend 0:37 aus Spule und Anker und sie haben meist zwei Schaltstellungen an aus 01 schon im 19 Jahrhundert wurden mechanische Rechenmaschinen entworfen und zum Teil 0:48 auch gebaut hier sieht man die analytical machine von charles Babbage aus den 18300er Jahren dies ist leider nie über 0:56 den Entwurf hinausgekommen aber es gab schon Programme zur hat adaer Lovelace 1843 ein Programm veröffentlicht zur Berechnung von benulli Zahlen mit dieser 1:06 Analytical Engine in den späten 1940er Jahren wurde der WG gebaut dieser enthielt bereits Neuerungen gegenüber der eniak die ein 1:16 paar Jahre vorher gebaut wurde finanziert hat beide sehr sehr teuren Rechner die US-Armee die brauchte einen Rechner zur Berechnung von ballistischen 1:25 Tabellen beide Rechner beruhen bereits auf der Röhrentechnologie die sehr viel schneller war als die Relais Technologie allerdings fielen 1:34 diese Röhren sehr häufig aus so dass der iniak fast ständig defekt war beim adweg sah das schon deutlich besser aus eine weitere Neuerung war beim weg dass 1:43 Programmdaten wie zu verarbeitende Daten behandelt wurden was eine sehr viel schnellere Konfiguration erlaubte das bezeichnen wir heute als von Neumann 1:52 Architektur beide Rechner blieben letztlich Einzelstücke die mit sehr großem auch personellen Aufwand betriebsbere it gehalten werden mussten 2:01 das Nixdorf 820 System wurde 1968 gebaut und bestand im wesentlichen aus einem 12 Bit parallelrechenwerk mit lochkartentechnik zur ein und Ausgabe es 2:14 hatte schon eine numerische funktionstastatur und auch einen integrierten Drucker zuudem zwei Roms für die Anwenderprogramme und für das 2:23 Betriebssystem dieses war auch kommerziell erfolgreich es wurden 40.000 Exemplare verkauft die sich auch klein ere Betriebe leisten konnten in den 70er 2:32 und 80er Jahren gab es dann ein paar Neuerungen zuerst gab es miniomputer die waren etwa so groß wie ein Kühlschrank und später auch Mikrocomputer oder 2:42 homecuter genannt die man sich sogar auf den Schreibtisch zu Hause stellen konnte der Altair 8800 war ein früher Vertreter er wurde 1975 als Bausatz verkauft und 2:54 kostete bei der Fertigstellung so ca 500 USDollar er war ein Basic programmierbar hielt ein 8bit Prozessor zur Ausgabe diente allerdings kein Monitor sondern 3:04 es wurden Leuchtdioden verwendet die die Ergebnisse den Benutzer anzeigten die frühen 80er wurden stark dominiert von diesen 8 Bit Mikrocomputern oder eben 3:14 Heimcomputern darunter auch der IBM PC der sein Siegeszug in den büromgebungen antrat und Rechner wie der Commodore 64 oder Apple 2 oder ZX Spektrum die als 3:26 Homecomputer für Privatleute oder auch als spieleecomputer für Jugendliche dienten ein wichtiger Vertreter dieser 8bit CPU Technologie war z.B z80a von 3:36 zilock wir möchten uns nur näher mit der Funktionsweise von Prozessoren beschäftigen zunächst geht es um den Speicher der Arbeitsspeicher eines 3:44 Computers wird in Speicherzellen eingeteilt jede Zelle verfügt über eine Adresse der Speicher ist also durchnummeriert und über die Adresse 3:53 kann ich auf eine Speicherzelle zugreifen lesen oder schreiben wir können uns einen Speicher fast immer als Folge von bites vorstellen hier sehen 4:01 Sie ein Beispiel die Speicheradressen haben eine Breite von 16 Bit damit kann ich 64 Kibi bite Hauptspeicher ansteuern wobei jede Adresse auf ein bite zeigt 4:12 das ist eine typische Architektur von Rechnern aus den 80er Jahren oder auch von Microcontrollern heute wir unterscheiden einige speicherarten die 4:22 Speicherzellen haben unterschiedliche Größen früher waren es oft 8 Bit heute aber auch 16 32 64 ja oder sogar 100 28 Bits trotzdem werden die Adressen 4:32 weiterhin im Beiz hochgezählt auch bei größeren Zellen der Arbeitsspeicher ist meist ein flüchtiger Speicher das heißt er muss regelmäßig mit Strom versorgt 4:40 werden damit die Daten nicht vergessen werden dort hat man einen wahlfreien Zugriff auf jede Speicherzelle also mit Angabe der Adresse kann ich lesen oder 4:49 schreibend auf irgendeine Zelle zugreifen und das auch recht schnell darüber hinaus gibt es feste Speicher also nicht flüchtige Speicher die z.B 4:58 beim Einschalten eines Computers zur Verfügung stehen diese brauchen keinen Strom um Ihre Daten zu halten wir unterscheiden also RAM und Rom das ROM 5:07 unterteilen wir oft noch in ein prom das ist einmalig zu überschreiben in ein EPROM das ist mit gewissem Aufwand mehrfach zu beschreiben und EEPROM was 5:18 mit geringem Auwand das heißt auch elektronisch neu beschrieben werden kann beim EPROM geschieht das nicht elektronisch z.B mit UVLicht spezielle 5:27 eeepromspeicher sind flashpeicher hier können massenhaft Daten gespeichert werden ohne dass wir eine ständige Stromversorgung brauchen diese 5:35 Flashspeicher werden daher auch als Ersatz für Festplatten mit rotierenden Scheiben verwendet diese werden dann SSDs für solid state Discs genannt die 5:45 heute verwendeten PCs bestehen aus typischen Komponenten für die sich in den letzten Jahren so eine Art Standard herausgebildet hat die Hauptplatine ist 5:53 meist senkrecht verbaut auch oft Motherboard genannt und auf dieser befindet sich auch der Hauptprozessor das das ist die wesentliche 6:00 rechenkomponente und auch der hauptenergieverbraucher eines Computers deseswegen ein besonders aufwendiger Kühler auf dem Prozessor angebracht wird 6:09 hier finden Sie auch den Arbeitsspeicher und teilweise noch gesonderte Grafikkarten für die grafische Ausgabe auf einem Display sie benötigen ein 6:17 Netzteil und ein Festplattenspeicher und die älteren von Ihnen kennen vielleicht auch noch optische Laufwerke z.B DVD Brenner oder cdraumlaufwerke für den 6:26 Menschen gibt es dann noch Monitor Tastatur und Maus damit der Computer bedient werden kann in der historischen Rücksicht gibt es zwei wesentliche 6:34 hauptarchitekturen die Harvard Architektur sieht vor dass Daten und Programme getrennt sind es sind also zwei verschiedene Speicher die können 6:42 auch eine unterschiedliche Architektur aufweisen und es ist ein gleichzeitiger Zugriff auf Programmbefehle und Daten möglich so werden z.B fehlerhafte 6:50 Programme auch davor geschützt sich selbst zu überschreiben mit Hilfe von Steuer und Rechenwerk werden die Befehle ausgeführt die meistens aus sehr 6:58 einfachen arithmetischen Operationen bestehen ebenfalls aus den 40er Jahren stammt die von neumannarchitektur hier gibt es nur einen speichertypus der 7:07 sowohl Daten als auch programmbefehler enthält das ist von der Grundidee her etwas langsamer als die harvardarchitektur weil der Rechner 7:15 zuerst den Befehl und dann die Daten liest dafür ist es aber viel einfacher neue Programme in den Speicher zu laden und diese zu modifizieren die Funktionen 7:24 von Steuerwerk und Rechenwerk werden in einer zentralen Einheit der CPU zusammen gefasst das Steuerwerk führt die Programmbefehle aus das Rechenwerk fürt 7:33 die Operationen durch es gibt einen adressbuss um die Speicheradressen zu übertragen und ein Datenbus für die eigentlichen gelesenen oder 7:41 geschriebenen Daten diese Architektur ergänzt um Eingabe und Ausgabe ist letztlich die Grundarchitektur der meisten heute verwendeten Computer die 7:51 zentrale Recheneinheit folgt dabei einem festen Rhythmus oder einem Takt der Befehlszähler zeigt in den Speicher zuerst wird ein Maschinenbefehl aus dem 7:59 Speicher geholt dann wird der Befehl decodiert und schließlich wird der Befehl ausgeführt wenn kein Sprung erfolgt wird der Befehlszähler 8:07 inkrementiert und wir beginnen von vorne nächsten Befehl holen nächsten Befehl dekodieren nächsten Befehl ausführen und so weiter die Maschinenbefehle stehen 8:15 hintereinander am Speicher wobei die CPU auch hin und her springen kann wenn bedingte oder unbedingte Sprungbefehle verwendet werden der Prozessor vereinigt 8:25 also Rechenwerk und Steuerwerk und er verfügt auch über einen kleinen Speicher mit den sogenannten Registern auf den er besonders schnell zugreifen kann zudem 8:33 enthält er meistens einen speichermanager um das RAM zu verwalten auch heutige Prozessoren führen im Wesentlichen nur diese Aufgabe aus 8:41 Maschinenbefehle aus dem Speicher holen und einfache arithmetische oder logische Operationen durchführen das allerdings in einer rasenden Geschwindigkeit pro 8:51 Sekunde können Milliarden von Maschinenbefehle ausgeführt werden typische Instruktionen der Maschinensprache sind diese bitweisen 8:58 logischen Operationen wie and or X or oder not deren Ergebnisse wir Wahrheitstabellen entnehmen können so gilt true and false = false oder false X 9:10 or true = true diese Operationen liegen als Befehle vor und können von der CPU direkt ausgeführt werden wie auch weitere Befehle zur Addition Subtraktion 9:21 inkrementieren dekrementieren Zugriff auf den Speicher und bedingte wie auch unbedingte Sprünge jeder Maschinenbefehl hat eine Nummer den sogenannten Opcode 9:29 der als Bitmuster im RAM vorliegt wenn die CPU den nächsten Befehl dort findet zusammen bilden alle diese Codes den Befehlssatz einer CPU um es den Menschen 9:39 zu erleichtern Maschinenprogramme zu erstellen wurden assempl Sprachen erfunden dann müssen wir keine Opcodes lernen sondern kurze Befehle die 9:47 sogenannten nanomix die man sich viel besser merken kann das ergibt dann eine assemers Sprache die vom Assembler in Maschinensprache übersetzt werden kann 9:57 sie sehen hier rechts den wichtigen Unterschied die CPU findet im Speicher die hier hexadezimal dargestellten obcodes vor z.B bedeutet 06 dass ein 10:06 Register ein neuen Wert bekommt 02 ist das Register mit der Nummer 2 und 2 ist der Wert 32 den das Register bekommen soll die CPU liest also nacheinander 10:17 diese drei Bytes und führt den Befehl aus das ist ein Beispiel für ein 8bit Prozessor der also bite für bite aus dem RAM liest der nächste Befehl schreibt 10:25 den Wert 232 in das Register mit der Nummer 3 hier dargestellt als Opcode 06 mit Parameter 03 und E8 danach folgt der 10:35 Opcode 32 der Befehl schiebt den Inhalt eines Registers auf den Stack das geschieht einmal für das Register mit der Nummer 0 und dann für das Register 10:43 mit der Nummer 1 es wäre grundsätzlich denkbar dass wir als Menschen auch so programmieren dass wir also die Opcodes einer großen Tabelle entnehmen und dann 10:52 nach und nach diese Werte aufschreiben die das Maschinenprogramm bilden das wäre aber wirklich sehr umständlich und sehr anfällig man findet sich hier nur 11:01 sehr schlecht zurecht in der Maschinensprache unten rechts sehen Sie die assempler Darstellung dieses maschinenprogramms wir können das viel 11:08 einfacher verstehen die Register bekommen hier Buchstaben a b c d und die obcodes entsprechende nenomix z.B move um 32 in das Register C zu schreiben 11:19 oder ink C und InCD um beide Register zu inkrementieren am Schluss des Programms finden Sie hier einen bedingten Sprungbefehl das Programm springt an die 11:28 Adresse Null also an den Anfang zurück wenn eine gewisse Bedingung gegeben ist so werden also Schleifen in Maschinensprache realisiert hier codiert 11:37 als assemlersprache in den weiteren Beispielen und auch meine Lehrveranstaltung verwenden wir ein 11:43 übungsassemler von Markus schweighauser das ist ein 8bit assempler Simulator der komplett im Browser läuft damit können Sie nicht nur Programme erstellen und 11:52 assemplieren und zur Ausführung bringen sie können auch jederzeit sehen was das Programm genau tut sie haben einen vollständigen Überblick über das gesamte 12:00 RAM und können erkennen welche Werte dort verändert werden das ist eine sehr komfortable Situation die sie als normaler assempler Programmierer nicht 12:08 haben zudem brauchen sie keine weiteren Werkzeuge um hier assempler Programmieren zu erlernen wenn Sie die assemler Programmierung mit diesem 12:16 übungsassemler einmal erlernt haben ist der Umstieg auf einen richtigen assemler aber nicht schwierig denn dort herrscht die gleiche Grundstruktur was den 12:24 Befehlssatz angeht und auch die nenomix sind sehr ähnlich zum üben und zu feh Suche ist der übungsassembller allerdings 12:31 unschlagbar das RAM besteht hier aus 256 Bytes die jederzeit dezimal oder hexadezimal visualisiert werden das kann man einstellen auch der aktuelle 12:43 Registerinhalt und der wer der Flex wird jederzeit dargestellt ich stelle nun die assempler Befehle vor es dauert nur wenige Minuten 12:52 und sie haben den kompletten Befehlssatz der assemlersprache kennengelernt und das ist übrigens typisch für assemlersprachen 12:59 es gibt nur sehr wenige unterschiedliche Operationen mit dem mvebefehl können wir auf den Speicher zugreifen und auch Registerwerte kopieren die Reihenfolge 13:09 ist immer Ziel Komma Quelle move a b kopiert also B nach A move a,1 kopiert den Wert 1 in das Register a move a c in eckigen Klammern bedeutet dass der Wert 13:22 aus dem Speicher an der Adresse C in das Register a kopiert wird wir lesen also aus dem RAM move D in eckigen Klammern Komma a ist das zurückschreiben ins RAM 13:32 der Wert von a wird in das RAM an die Adresse die im Register D gespeichert ist geschrieben die Register im Prozessor sind Variablen auf die sehr 13:41 schnell zugegriffen werden kann diese enthalten die Parameter und die Ergebnisse von arithmetischen und logischen Operationen die flagreister 13:49 speichern einzelne Bits die Werte nennen wir meistens true und fals einige der Maschinenbefehle ändern Werte von fleckregistern während der Operation 13:58 sodass der näch Befehl auf die Flex zugreifen kann dazu sehen sie noch Beispiele und nun lernen Sie auf einen Schlag alle Rechenoperationen und alle 14:06 logischen Operation kennen ganz allgemein können CPUs zwar extrem schnell rechnen dafür sind ihre Rechenfähigkeiten aber auf wenige 14:16 elementare Operationen beschränkt das gilt nicht nur für den übungsassempler sondern auch für reale CPUs wir können inkrementieren dekrementieren addieren 14:25 subtrahieren manche CPUs können auch multiplizieren und dividieren das ist aber bereits purer Luxus bei der Maschinensprache neben den bitweisen 14:33 logischen Operationen wie and or X or oder Not gibt es auch shift Operation da werden alle Bits nach links oder nach rechts geschoben alle diese Operationen 14:43 beeinflussen auch nebenbei die Flex hier nun wichtige Varianten add a b führt zur Addition von A und B wobei die Summe in a abgelegt wird auf die gleiche Weise 14:53 kann ich den konstantenwert 10 auf a aufadidieren ich kann B von abziehen oder ein konstant Wert 5 von B abziehen ich kann B inkrementieren oder C 15:03 dekrementieren mit dem Befehl mull5 wird der Wert von a verffacht sowohl der multiplikationsbefehl als auch der divisionsbefehl können nur mit dem 15:12 Register a operieren das sind typische Einschränkungen die das Design einer CPU erleichtern und für die schnelle Ausführung von Operationen dienlich sind 15:21 die bitweise Verknüpfung von A und B kann ich mit n a b ausdrücken und das Ergebnis wird dann wieder im Register a gespeichert eine 15:30 Verknüpfung mit dem hexadezimalenwerert 80 hier dargestellt als 0x 80 entspricht der Verknüpfung mit dem dezimalen Wert 128 und das bedeutet letztlich der Wert 15:41 des ersten Bits wird festgehalten und alle anderen sieben Bits werden auf Null gesetzt also quasi gelöscht genauso funktioniert auch der orbefehl z.B mit 15:49 zwei Registern oder einem Register und einer Konstante der notbefehl flippt alle Bits das heißt aus 0 wird 1 aus ein wird 0 und sie sehen hier noch ein 15:58 Beispiel für Sch Befehle der Link shift um z führt dazu dass alle Bits zwei Stellen nach links wandern wähend von rechts zwei Nullen eingeschoben werden 16:08 im konkreten Beispiel führt das dazu dass das Bitmuster was für die Zahl 42 steht danach den Wert 168 aufweist das ist der vierfache wert weil das Anhängen 16:19 von zwei Nullen letztlich der Multiplikation mit 4 entspricht solange Links keine einbits rausfallen was hier der Fall war zur Realisierung von 16:27 Schleifen brauchen wir bedingt oder unbedingte Sprünge und ein Befehl den sogenannten comparebefehl der comparebefehl vergleicht Werte und setzt 16:35 entsprechende Flag Register hier als z und C bezeichnet Zero und carry bedingte Sprünge werden nur ausgeführt wenn die Flex entsprechend gesetzt sind so können 16:44 wir A mit B vergleichen oder auch B mit 17 vergleichen und danach springen wenn beispielsweise a größer als B ist oder es gibt auch ein Sprungbefehl für wenn A 16:53 = B ist und so weiter der jumpbefehl ist ein unbedingter Sprung der also immer ausgef frt wird ansonsten gibt es eine lange Tabelle mit bedingten Sprüngen wo 17:02 ich mir den Befehl raussuchen kann der zu meinem letzten Vergleich oder zu meiner letzten Rechnung passt z.B jne wenn der compare eine Ungleichheit 17:10 ergeben hat hier nur gleich drei Beispielprogramme die aber alle dre dasselbe tun die drei Programme erfüllen eine Aufgabe es werden die Werte aus dem 17:19 Speicher von der Adresse 100 bis zur Adresse 108 ausgelesen und die Inhalte werden addiert und zum Schluss in a abgelegt das Programm ganz links ist die 17:29 direkte Implementierung zunächst wird der Wert 0 in a geschrieben damit wir danach aufsummieren können dann wird der Inhalt der Speicherzelle mit der Adresse 17:37 100 auf a auferdiert dann 101 102 und so weiter bis zum Schluss der Inhalt von der Speicherzelle mit Adresse 108 auf A aufadidiert wird dann ist die Summe im 17:48 Register a enthalten das kann man natürlich so implementieren aber je größer der Speicherbereich ist desto eher suchen wir eine Möglichkeit das mit 17:56 einer Schleife zu realisieren das Programm mit der in der Mitte merkt sich zunächst die Adresse 100 im Register B und dann den Wert 9 im Register C weil 18:05 wir insgesamt neun addition vornehmen möchten dann wird in der Schleife jeweils der Inhalt an der adressierten Speicherzelle auf a addiert und der Wert 18:14 von C dekrementiert sodass wir die Befehle in der Schleife immer wieder ausführen bis der Wert von c 0 erreicht der bedingte Sprung jnz da steht für 18:24 Jump non Zero wird also so lange ausgeführt wie die Operation davor Dekrement C nicht den Wert Null ergibt insgesamt wird die Schleife also neunm 18:35 durchlaufen und die Gesamtsumme steht schließlich im Register a auf der rechten Seite sehen Sie eine Alternative Implementierung Überschleifen hier wird 18:44 in C der Wert 109 gespeichert und in der Schleife wird überprüft ob dieser Wert erreicht wurde dann wird die Schleife verlassen das funktioniert genau so gut 18:53 aber viele würden vielleicht sagen der programmierstilel ist hier schlechter denn die Zahl 109 wird ja gar nicht benötigt für das reale Problem wo wir 19:01 einfach nur auf die Zellen 100 bis 108 hinweisen die 109 ist also der erste nicht erlaubte Wert der zum rechtzeitigen Verlassen der Schleife 19:10 führt das ist aber letztlich eine Geschmacksfrage ganz generell würden wahrscheinlich viele programmiererinnen und Programmierer sagen dass assemler 19:18 Programme nie elegant sind denn die üblichen Beispiele für gute Programmierstile werden mit Hochsprachen realisiert zum Schluss lernen wir noch 19:26 kennen wie wir Unterprogramme realisieren und den steck nutzen können der Stackpointer ist ein Register welches ins RAM zeigt und die Position 19:35 festlegt die der oberste Wert auf dem Stack einnimmt mit dem pushbefehl werden dann Werte auf dem Stack abgelegt und der Zeiger wird entsprechend 19:44 dekrementiert mit dem popbefehl werden diese Werte vom Stack zurückgeholt und der Zeiger wird inkrementiert man könnte sagen das Stck wächst von rechts nach 19:53 links und der Teil des RAMs zwischen Programm und zwischen Stack ist der freie Speicher W der Abarbeitung über den Stack können Sie auch Parameter an 20:02 Unterprogramme übergeben der Aufruf eines Unterprogramms wird nicht über den jumpbefeh vorgenommen sondern über den callbefehl dieser führt zwar ebenfalls 20:10 einen Sprung aus aber gleichzeitig merkt er sich den Wert des befehlszählers also die Adresse im RAM die auf eine Speicherzelle zeigt die den 20:19 nächsten auszuführenden Befehl enthält der Wert wird auf dem Stack abgelegt und wenn das Unterprogramm seine Arbeit beendet hat kann der returnbefehl aus 20:28 führt werden der den Wert vom Stack zurückliest und einen Sprung an die Adresse ausführt so kann ein Hauptprogramm ein Unterprogramm 20:36 ausführen und danach wird mit dem nächsten Befehl des Hauptprogramms fortgesetzt hier sehen Sie nur ein paar Beispiele zum Verständnis ist es 20:44 zunächst wichtig zu verstehen dass unser übungsassembler über ein virtuelles Display verfügt das sind 24 Bytes die mit askizeichen beschrieben werden 20:53 können und die im hinteren Teil des ramspeichers ab Adresse 232 zu finden sind sind im Register D wird also die Adresse dieser displayausgabe abgelegt 21:03 dann wird der Wert 2 im Register a abgelegt und der Wert wird zweimal ausgegeben a wird inkrementiert und der Wert wird noch dreimal ausgegeben und 21:10 zum Schluss für die Zahl 4 noch einmal ausgegeben das Unterprogramm wird hier mit einer Sprungmarke angesteuert der assempler berechnet also die 21:18 Speicheradresse die den Maschinencode des Unterprogramms enthält zunächst wird der alte Inhalt des Registers a auf dem Stack abgelegt weil wir das Register 21:27 gleich brauchen und den Wert nicht einfach überschreiben möchten dann wird der aski Wert der Ziffer Null aufadidiert um eine Ausgabe der Ziffer 21:34 vorzubereiten und das askzeichen wird an die Adresse die in D abgelegt ist geschrieben damit erscheint eine Ziffer auf dem Display der Wert von D wird 21:42 inkrementiert um ein Schreiben von links nach rechts zu ermöglichen a wird wiederhergestellt und wir springen zurück die beiden programmfragmente 21:50 rechts zeigen wie ein Unterprogramm ein weiteres Unterprogramm aufrufen kann so wird das Unterprogramm in der Mitte aufgerufen wenn ich ein Komma und ein B 21:58 ausgeben möchte und dieses Unterprogramm kann ich im neuen ausgabeunterprogramm auf der rechten Seite nutzen um nach jeder Ziffer entsprechend Komma und 22:08 space auszugeben und dann zurück ins Hauptprogramm zu springen auf diese Weise kann das Unterprogramm Ausgabe kommpace auch von anderen Programmteilen 22:16 verwendet werden ich muss es nur einmal implementieren das neue Unterprogramm verschachtelt also diese Aufrufe zum Abschluss noch ein paar 22:24 Übungen zum Thema assempler sie können das Video wieder anhalten um sel das Programm zu schreiben bzw zu analysieren dazu werden wieder die Zahlen 1 2 3 22:33 hochgezählt s dass sie rechtzeitig stoppen können bevor die Lösung erscheint in dieser Aufgabe sollen sie nun selbst analysieren was genau dieses 22:41 assempler Programm macht es berechnet eine Funktion aber welche im Programm wird die ganzzahlige Division und Multiplikation verwendet einige 22:50 Wertepaare sind angegeben so führt die Eingabe 47 zur Ausgabe 7 die Eingabe 146 Z 6 und so weiter die Eingabe 0 FT zur Ausgabe 0 aber welche Funktion ist das 23:03 überlegen Sie einmal selbst stoppen Sie nun das Video in wenigen Sekunden werden Sie hier die Lösung sehen und hier ist die Lösung das 23:13 Programm berechnet die Funktion f Vonn = n Modul 10 das heißt es wird der ganzzahlige Rest beim Teilen durch 10 bestimmt oder mit anderen Worten es wird 23:23 die letzte Ziffer einer dezimalen Zahl bestimmt dies geschieht hier über einen geschickten Umweg zuerst wird durch 10 geteilt und der Rest wird dabei fallen 23:31 gelassen danach wird wieder mit 10 multipliziert sodass die Zahlen nun ein werter hat der sich um den Rest unterscheidet von ihrem bisherigen Wert 23:40 mit der Bildung der Differenz erhalten wir schließlich diesen Rest und können ihn anschließend in a ablegen so wurde die Funktion 23:48 implementiert in dieser Aufgabe sollen sie nun selbst eine semplerprogramm schreiben und zwar eine Schleife implementieren diese Schleife soll die 23:56 Ausgabe löschen das heißt hier konkret das bite an der Adresse 232 und alle folgebites bis zur Adresse 255 sollen mit null überschrieben werden 24:07 einen passenden Sprungbefehl können Sie aus der Tabelle rechts auswählen sie können das Video jetzt anhalten und in aller Ruhe das assemplerprogramm 24:15 Aufschreiben sie sehen nun gleich die Lösung ja und das kurze Programm unten rechts löst diese Aufgabe der Startwert von 232 wird im Register D abgelegt in 24:27 der Schleife wird im RAM an dieser Position der Wert 0 abgelegt und D wird so lange inkrementiert bis der Wert 255 erreicht ist und letztmalig die Null 24:38 geschrieben wird die Schleife bricht also ab wenn der Wert von 255 noch einmal inkrementiert wird dabei geschieht hier ein Überlauf sod dass wir 24:46 den Vergleich mit dem Wert Null durchführen müssen das Programm hält also einfach an nachdem D den Wert n0 erreicht hat das war auch schon die 24:55 letzte Übungsaufgabe und das Ende des Lehrvideos ist der reich ich hoffe Sie konnten etwas dazu lernen über Hardware über CPUs und insbesondere über assemler 25:03 und Maschinensprache vielleicht schauen sie sich dann auch ein anderes Video aus der Reihe Grundlagen der Informatik an bis dahin verabschiede ich mich auf 25:11 wiederschauen [Musik]