Keine Panik, ist nur Technik. Kenza Ait Si Abbou
Чтение книги онлайн.

Читать онлайн книгу Keine Panik, ist nur Technik - Kenza Ait Si Abbou страница 8

Название: Keine Panik, ist nur Technik

Автор: Kenza Ait Si Abbou

Издательство: Readbox publishing GmbH

Жанр: Программы

Серия:

isbn: 9783833876349

isbn:

СКАЧАТЬ ist also so ähnlich wie Kochen oder Umziehen. Ich befehle einer Maschine mit dem Code, den ich schreibe, etwas zu tun, aber ich muss auch wissen, wo sie etwas rechnen, speichern, zwischenspeichern und ausgeben kann. Je einfacher die Programmiersprache, desto detaillierter meine Anweisungen an die Maschine. Bei hohen Sprachen ist das etwas anders, aber den Unterschied sehen wir uns gleich noch anhand eines konkreten Beispiels an.

      Um mit Programmiersprachen klarzukommen, sollte man etwas Englisch verstehen, denn alle Befehle sind in English. Wenn man mit Englisch noch nichts am Hut hatte, steht man vor der zusätzlichen Herausforderung, alle Befehle aus dem Deutschen beziehungsweise ins Deutsche übersetzen zu müssen. Aber auch das kriegt man schnell hin.

      Assembler: Maschinensprech für Anfänger

      Assemblersprachen werden verwendet, um Betriebssysteme zu programmieren und sind daher systemspezifisch. Sie hängen also von dem speziellen Betriebssystem und dessen Komponenten ab. Wie bereits erwähnt, kommen Assemblersprachen eher aus der Perspektive der Maschinen, das heißt, ihr kommt damit dem Kern des Systems sehr nah und solltet ihn deshalb auch möglichst gut kennen. Vor dem Programmieren solltet ihr also wissen, welche Hauptkomponenten euer System hat und, vor allem, welche konkrete CPU. Denn je nach CPU, kommen andere Befehle ins Spiel. Eine der erfolgreichsten CPU-Architekturen und der damit verbundenen Befehlssätze ist die x86-Befehlsatzarchitektur, kurz x86-Architektur. Sie wurde für die erste x86-Prozessoren in den Achtzigerjahren entwickelt und kommt bis heute zum Einsatz.

      Und jetzt machen wir eine erste Sprachübung: Im Assembler ist der Befehl »mov« – vom englischen »move«, also bewegen – einer der am häufigsten verwendeten Befehle. Anders als bei einem Umzug bewegt die Maschine in Wirklichkeit nichts, sie kopiert nur Werte hin und her, bewegt die Umzugskisten also nur virtuell. Dazu gehört folgende Syntax:

       mov op1, op2

      Damit befehlen wir dem Prozessor, den Wert von op2 (zweiter Operand oder Quelloperand) in op1 (erster Operand oder Zieloperand) zu kopieren. Operand ist hier nur ein anderes Wort für Variable, in unserem Beispiel könnte das die Schublade für die Sommerklamotten sein, die geöffnet werden muss. Damit das auch klappt, müssen wir sicherstellen, dass beide Operanden dieselbe Größe an Bytes haben. Außerdem müssen wir der Maschine sagen, »wo« sie die Befehle ausführen soll, »wohin« sie das Ergebnis speichern soll und »woher« sie die Werte bekommt. Es gibt also Speicherplätze, Datensegmente und Register. Diese unterschiedlichen »Orte« haben eine bestimmte Reihenfolge, die ich kennen muss, und jeder Ort lässt sich nur mit bestimmten Befehlen ansteuern. Wie gesagt: Ordnung muss sein!

      Wenn ich mit meiner Mutter spreche, benutze ich andere Wörter, als wenn ich mit meinem Chef sprechen würde. Ich muss also immer wissen, mit wem ich es zu tun habe. Das ist in vielen Sprachen so, aber von allen Sprachen, die ich kenne, ist das am krassesten im Japanischen. Dort würde ich als Frau nicht nur andere Ausdrücke wählen als ein männlicher Kollege, wenn es sich um den Chef als Ansprechpartner handelt – es sind komplett andere Wörter, Verben und Satzbauten. Und ein bisschen ist das auch so bei Assemblersprachen!

      Es gibt eine schöne Tradition beim Coden: Das erste Programm, das man in einer neuen Programmiersprache schreibt, beginnt mit der Begrüßung »Hello World!« – und so sieht dieses Stück Code zum Beispiel in einer Assemblersprache aus:

IMG

      Abbildung 5: Beispielcode im Assembler

      Als ich Maria dieses Beispiel zeigte, hat sich mich »wie ein Auto« angeguckt. (Redewendungen wie diese lerne ich nicht nur in Assemblersprachen schnell, auch wenn ich sie im Deutschen manchmal durcheinanderbringe.) Ich konnte Marias Aufmerksamkeit aber schnell wiedergewinnen, indem ich ihr einen Gesetzestext zeigte, den sie mir »übersetzen« sollte. Alles ist nur so lange schwierig, wie es fremd ist.

      Lasst uns also mal kurz anschauen, was jede Zeile des »Hello World!«-Codes bedeutet. Keine Panik, ihr müsst euch das alles nicht merken. Aber es ist gut, alles einmal Stück für Stück durchzugehen.

IMG

      Abbildung 6: Umrechnungstabelle Dezimal, Hexadezimal und Binär

       section .data: In Assembler muss ich Sektionen definieren, die ich in meinem Programm nutze. Das schafft nicht nur Ordnung in meinem Code, sondern unterteilt diesen in Abschnitte, die die Maschine anders behandelt. In die Sektion .data schreibe ich meine statischen Daten, in diesem Fall meine Nachricht: »Hello World!«message db »Hello World!«, 0x0a: »Schreibe den Text ›Hello World!‹ in die Schublade message, und füge einen Zeilenumbruch am Ende ein (0x0a).« Damit das klappt, muss ich die Größe meiner Nachricht in Bytes ermitteln, das tue ich mit db (define bytes). 1 Byte = 8 Bits, wobei 1 Bit entweder 1 (EINS) oder 0 (NULL) ist. Der Zeilenumbruch hat das Hexadezimalzeichen 0x0a. Das Hexadezimalsystem wird für die Verwaltung des Binärsystems verwendet, um sich etwas Platz zu sparen. Statt achtstellige Binärzahlen zu schreiben, schreibe ich 0x und dann die zweistellige Hexadezimalzahl. Assembler ist nun mal sehr »maschinig«, es wird so wenig Text wie möglich geschrieben, umso mehr in Zahlen und Hexadezimalzahlen, deren Übersetzung in Tabellen zum Nachschlagen gespeichert ist. Hier wird die Arbeit der Maschine einfach gemacht und nicht dem Menschen.message_length equ $-message: »Reserviere genug Platz für meinen Text.« Dieser Schritt ist notwendig, damit der notwendige Speicherplatz für meinen Text reserviert wird. Denkt an meine Sommerklamotten und an die linke Schublade im neuen Kleiderschrank!

       section .text: In der Sektion .text wird mein Programm geschrieben, damit sage ich der Maschine: »Hier kommt mein Code!«

       global start und start: Diese Befehle nutze ich, um der Maschine zu sagen: »Ab hier beginnt die Ausführung des Programms.«mov eax, 4: Damit sage ich der Maschine: »Hole dir die Aktion 4 und kopiere sie in eax.«— Die Aktion mit dem Wert 4 steht für den System Call »write«, also »schreiben«. Die System Calls sind die Aktionen, die mein System ausführen soll, meistens Lesen, Schreiben, Beenden, Öffnen, Erstellen etc. In Assembler hat jeder System Call einfach eine Nummer, ich schreibe die gewünschte Aktion also nicht in Textform, sondern als Nummer. Dafür gibt es eine Tabelle, in der steht, welche Aktion welche Nummer hat.— Das Register eax ist das erste in der Reihenfolge der Register (die Bezeichnungen der Register sind ebenfalls festgelegt), und dahin soll mein »write« zwischengelagert werden. Damit die Aktion richtig ausgeführt werden kann, muss ich noch ein paar Parameter definieren. Ich muss angeben, was mein System wohin schreiben soll und wie groß dieser Text ist. Das mache ich in den nächsten Zeilen.mov ebx, 1: »Hole dir Aktion 1 (das ist die Standard-Anzeige, kurz: stdout), und kopiere sie in ebx (das ist das zweite Register).«mov ecx, message: »Hole dir den Inhalt aus der Schublade message und kopiere ihn in ecx (das dritte Register).«mov edx, message_length: »Lese die Größe der Nachricht aus der Schublade message_length und trage sie in edx (das vierte Register).« Damit reserviere ich genug Platz im Speicher, damit der Text richtig und vollständig angezeigt werden kann.int 0x80: »Hiermit ist die Kopieraufgabe erledigt, gehe zurück zum Hauptcode.«Mit den letzten drei Befehlen (mov eax, 1 / mov ebx, 0 / int 0x80) sage ich der Maschine: »Beende das Programm.«

      Wie ihr seht, wird in diesem Assemblerprogramm der Befehl MOV häufig verwendet. MOV ist tatsächlich einer der Grundbefehle in Assembler, mit dem Inhalte von Schublade zu Schublade bewegt werden. Der Befehl selbst verweist auf einen binären Code. Wenn ich also MOV schreibe, sucht die Maschine aus der MOV-Schublade den binären Code raus und setzt diesen um. Text kann sie nicht verstehen, nur Einsen und Nullen. Alles, absolut alles, was ich eintippe, hat eine entsprechende Übersetzung in Nullen und Einsen. Denn am Ende des Tages beziehungsweise Codes geht es um »Strom an«, »Strom aus« – СКАЧАТЬ