Mein Stack, mein Stack, mein Stack

Geplanter Beginn: 20 Uhr
Tatsächlicher Beginn: 22 Uhr
Delay: 2 Stunden

Die letzten Wochen waren sehr hart. Nicht etwa weil ich jeden Tag von Morgens bis Abends für die Uni lernte und am Ende doch die Prüfung versemmelte, sondern weil die Option, das Studium zu schmeißen, Expertenprogrammierin zu werden und ein Buch zu schreiben so viel naheliegender war. So wie alle meine Freunde. Aber ich will ja gar nicht Programmieren, sondern Programmieren lernen. Und meine Freunde sind sie eigentlich auch nicht.
Jedenfalls sei damit die lange Programmierpause erklärt um Spekulationen über Fersagen, Gender und Assembler vorzubeugen.

Es gab wie immer ein recht langes Vorher, während dessen ich Spaghetti für erlehmann kochte die Plom  nichteinmal angucken wollte (wahrscheinlich mischen sich zuviele verschiedenfarbige Bestandteile!). Zwischendurch erzählte Plom uns von seiner Rejection Therapy und wie er jemanden darum bat, 27*111 auszurechnen. Ich tat das zwar unheimlich schnell aber auch unheimlich falsch. Ich sollte mich mehr auf Maschinen verlassen. Und wir versuchten, Spiele auf meinem Linux zu installieren. Dank Wine muss ich nicht mehr Spiele wie OpenTTD spielen, die einen an Kotze erinnern, wenn man die Augen etwas zusammenkneift. Stattdessen hab ich jetzt eine Demoversion von AOE2, die mich bereits in eine mittlere Sinnkrise stürzte, weil ich zum einen nach vier Wochen non-stop-lernen zwei Tage lang das Unproduktivste der Welt tat: AOE spielen- und weil ich die Demo-Kampagne nicht mal mit Level „Medium“ schaffte. Erlehmann war schon vor dem Programmieren aus irgendeinem Grund in meiner Wohnung und versuchte mir OpenTTD zu erklären. Er ließ mehrmals das Wort „Autistenspiel“ fallen und ich sagte irgendwann, er solle ruhig sein, ging ins Bett und schlief auf den Schreck, dass Erlehmann in meiner Küche sitzt erstmal ein paar Stunden.
Jedenfalls wird Wine hoffentlich mein Leben zerstören und jedes einzelne Buch auf meinem Stapel für die Semesterferien mit einem Spiel aus meiner Jugend ersetzen.

Speaking of Stapel – in Kapitel 4 wird ziemlich lange erklärt was es mit dem Stack und der Subtraktion und Addition von Bytes auf den Stapel auf sich hat. Denn wenn der Stapel wächst, schrumpft der Speicher aufgrund der spezifischen Architektur. Irgendwie so halt. Das muss man verstehen um ein Assemblerprogramm zu schreiben, das Parameter einer Gleichung bspw. „auf“ den Stack schiebt. Das fand ich ausnahmsweise sehr leicht verständlich und das liegt vielleicht daran, dass man dieses Denken auch für bestimmte Photoshopoperationen braucht. Allerdings werde ich ja Photoshop nie wieder sehen und mich stattdessen mit der hässlichen kleinen Schwester mit Brille und Zahnspange – Gimp- rumärgern.

Wir beschäftigten uns danach mit dem Aquaplaning des Assemblerprogrammierens: Stack Overflow und Segmentation Fault. Der Stack ist ein Bereich auf meinem Speicher mit dem ich während des Ausführens des Programms arbeite. Ich lege darauf bspw. die Parameter von 111*27 ab. Also 111 und 27. Um diese zu adressieren muss ich dann von der Basis des Stacks so und so viele Bytes herumwandern bis ich bei den Parametern angekommen bin. Wenn ich allerdings zu viele Parameter auf dem Stack ablege kann es sein, dass ich auf den Programmcode stoße, der dann überschrieben wird. Oder ich stoße auf den flüssigen Kern aus Eisen und Nickel. Oder auf einen alten Mann in einer gläsernen Sänfte. Oder auf nen Haufen Socken. Trotzdessen führt das zu einem Abstürzen des Programms und ich werde es bestimmt nie ausprobieren, auch wenn ich noch nicht weiß wie ich das verhindere.

Der Segmentation Fault tritt auf, wenn ich außerhalb des Stacks operiere oder Parameter dort ablege. Folgendes Szenario erklärt das vielleicht ein bisschen besser:
Programm: Wow, ich leg mal ein paar Parameter hier ab.
Kernel: Wir können hier keine Parameter ablegen, das ist Fledermausland!

Das inspirierte uns dazu das schlechteste Programm der Welt zu schreiben. Es heißt
schlecht.s und wir sind sehr stolz darauf. Das Ausführen wirft ein
„Segmentation Fault“ ins Terminal und das wars dann.
Danach schrieben wir aber viel kompliziertere Programme mit
Funktionen und sowas.

Als erstes schrieben wir power.s aus dem Buch ab. Damit kann ich bspw. „(2 to the power of 3) + (4 to the power of 2)“ berechnen. Das sieht erstmal so aus:
Das ist genauso langweilig wie es aussieht, interessant ist die 5. Zeile „call power“ mit welcher die Funktion „power“ weiter unten im Text aufgerufen wird :

Die Funktion arbeitet mit den Argumenten, die vorher mit „pushl“ auf den Stack geschoben worden sind. Der letzte Befehl „ret“ lässt das Programm dann dort weiter machen, wo vorher zur Funktion gesprungen wurde.
So weit so unnötig kompliziert geschrieben. Die nächsten Stunden verbrachten wir damit, power.s zu kürzen. Das Ergebnis kann sich sehen lassen:

So einfach ist das! Anstatt sich schlechten Code anzuschauen, schreiben wir ihn lieber um. Und jetzt muss ich nie wieder selber rechnen.
Übrigens hab ich bei der letzten Session erfahren, dass Plom richtig schlecht in Mathe war und dieselben schwammigen Leistungskurse (Deutsch und Englisch) hatte wie ich. Und später genauso schwammige Wissenschaften studierte. Das fand ich irgendwie gut.  Demnach müsste ich nämlich nur noch 3 Semester studieren, bis ich ebenfalls aussteige und ein Buch schreiben kann. Über das Programmieren oder so.

Getaggt mit
%d Bloggern gefällt das: