~~NOTOC~~ {{ :faecher:informatik:oberstufe:techinf:assembler:einfuehrung:prozessor.jpg?320|}} ====== Einführung Assembler ====== ===== Was und warum? ===== Das Hauptelement eines Computers ist der Mikroprozessor. Die Aufgabe des Mikroprozessors ist es, Daten zu manipulieren, also zu verändern. Über ein **Leitungssystem (Bus)** kann der Prozessor Daten mit Speicher- und Peripheriebausteinen austauschen. Für die Verarbeitung der Daten verfügt er über einige interne Speicherplätze, die sogenannten **Register** . {{ :faecher:informatik:oberstufe:techinf:assembler:einfuehrung:arch.png?320 |}} Jedes Programm, das auf einem Computer ausgeführt wird, wird in viele kleine Einzelschritte zerlegt, die der Prozessor dann ausführt, um Daten mit anderen Teilen des Rechners auszutauschen, zu manipulieren und wieder auszugeben. Wenn wir in einer "höheren" Prögrammiersprache wie Java, C++ oder PHP programmieren, übernehmen Compiler und Interpreter die Übersetzung unserer Programme in diese kleinen Einzelschritte die der Prozessor verstehen kann. Ein Prozessor verfügt über eine gegebene Menge an Aktionen, die er ausführen kann((welche das genau sind, hängt von der Prozessorarchitekur ab)), den **Befehlssatz**. Die Befehle des Befehlssatzes heißen **Maschinenbefehle**. Es gibt Maschinenbefehle für den Datenaustausch mit Speicherzellen, für das Ansprechen von Peripheriegeräten, für den Transport zwischen Registern, für Veränderung von Daten und für vieles mehr. Maschinenbefehle sind letztlich nur binäre Bitmuster aus Nullen und Einsen, z.B.: 00010101 00000000 00101010 10001011 11011000 ... Das kann man nun platzsparend Hexadezimal schreiben((Erinnere dich: 4 Bit sind eine Hexadezimalzahl)) A1 00 2A 8B D8 ... Das ändert jedoch nichts am Umstand, dass die Darstellung für uns Menschen wenig intuitiv ist. Es gibt jedoch Anwendungsfälle in denen man sehr nah an der Hardware programmieren möchte oder muss - wann immer man Kontrolle darüber erlangen möchte, was der Prozessor genau macht. Die **Assemblersprache** ist eine fast vollständige 1:1 Repräsentation der Maschinenbefehle des Prozessors, der **Assembler** kann Assemblerbefehle also direkt in Maschinensprache übersetzen - auf diese Weise ist es auch für uns Menschen möglich, dem Prozessor direkte Anweisungen zu geben. Assemblerbefehle bestehen meist aus 3 Buchstaben, den sogenannten **Mnemonics**. Die folgende Grafik veranschaulicht die Situation: {{ :faecher:informatik:oberstufe:techinf:assembler:einfuehrung:compile_assemble.png |}} ===== Anders denken... ===== Mit Hilfe von Assemblerbefehlen kann ein Ausdruck wie sum = a + b + c nicht direkt dargestellt werden, da sich die zur Verfügung stehenden Befehle daran orientieren, welche Register der Prozessor hat und welche Operationen er unterstützt. Das Vorgehen bei der Lösung von Problemen wird dadurch sehr kleinschrittig, die zur Verfügung stehenden Befehle sind sehr beschränkt: mov eax,[a] ;Schreibe den Inhalt der Speicherzelle a ins Register eax add eax,[b] ;Addiere den Inhalt der Speicherzelle b zum Inhalt des Registers eax (eax ist jetzt a+b) add eax,[c] ;Addiere den Inhalt der Speicherzelle c zum Inhalt des Registers eax (eax ist jetzt a+b+c) Um uns an eine solche Problemlösestrategie zu gewöhnen, kann man ein Spiel spielen: https://tomorrowcorporation.com/humanresourcemachine (Gibt es auch für iOS und Android, ca. 5-10EUR). {{ :faecher:informatik:oberstufe:techinf:assembler:einfuehrung:hrm.png?600 |}} ===== Dateien ===== {{simplefilelist>:faecher:informatik:oberstufe:techinf:assembler:einfuehrung:*}}