Counting like a Booliot

Die Sonne scheint, es ist Feiertag, ich bin zu Besuch bei meinen Eltern, sitze in ihrem Garten, bald gibt es Abendessen und ein großartiger Sommer kündigt sich an.
Menschen gehen raus zum Tanzen, umarmen sich, ob Freund ob Feind,  selbst Hund und Postbote, Lantzschi und Erlehmann, Julis und Anti-Deutsche, egal, alles lacht und singt!

Auch: (Bzw. Denn): Wir haben Assembler durch.

Das letzte Kapitel, das wir uns vornahmen handelte vom „Counting like a Computer“. Also von Binärcode, Hexadezimalcode und dem andern da.
Das Vergnügen, Binärcode nicht zu lernen hatte ich ja bereits am Anfang des Kurses. Nach den letzten zwei Programmiersessions verstehe ich alle drei Zählweisen nicht wirklich, aber immerhin besser als gar nicht zu wissen, was los ist, wenn zwei generische Hacker sich gegenübersitzen und hochkonzentriert mit ihren Fingern zählen.

Spannender (und damit meine ich lediglich eine Stufe über „ziemlich langweilig“)  war das mit der Booleschen Logik. Oder besser gesagt die Boolesche Algebra, die mit den Operationen And, Or, Not und Xor funktioniert. Dabei spielen nur zwei Aussagen eine Rolle, nämlich „1 und 0“ bzw. „wahr und falsch“ oder  „An und Aus“.

Jetzt kann man z.B. mit zwei Bytes, die 8 Bits haben so eine Operation ausführen. Bit für Bit wird z.B. „Geandet“. Wenn z.B. die ersten Bits jeweils eine 1 sind, ist das Ergebnis 1. Wenn aber eines der beiden Bits eine 0 ist, ist das Ergebnis 0. Und wenn beide eine 0 sind ist das Ergebnis wiederum 1. Bei Not, Xor und Or sieht das dann natürlich anders aus.

Es gibt aber auch Operationen, die definitiv z.B. aus allen Bits eine Null machen. Wenn ich z.B. das Register %eax mit sich selber XORe, wird aus allen Bits eine Null, da bei XOR alle Bitpaare mit denselben Werten eine Null ausgeben. Und klar. Wenn ich die Bits von %eax mit den Bits von %eax XORe, treffen auf eine Null immer eine Null und auf eine Eins immer Einsen. Uns das Geniale ist, dass ich damit

xorl %eax

quasi das hier gemacht habe:

movl $0, %eax

Nur halt viel schneller🙂
Und wenn hier jetzt alles falsch ist, weist mich bitte drauf hin, ich hatte nämlich erhebliche Schwierigkeiten damit, das zu verstehen.

Als nächstes sprachen wir über ein Anwendungsgebiet von Oktalcode. Wenn die erhabenen Linuxuser dieser Erde ein ls -l in ihre Konsole tippen kann man die Zugangsberechtigungen zu Dateien, Ordnern etc. sehen.
Ich erinnerte mich auch dunkel an den Open-Syscall zurück der ebenfalls so einen permission Code verlante. Diese Permission Codes sind in den Syscalls in Oktalcode geschrieben, in meiner Konsole sehe ich sie mit dieser Struktur:

-rwxr-xr-x

Die ersten drei Zeichen rwx bedeuten, dass der Owner (meistens root) alles darf. ALLES. Da kennt er nix. Er darf die Datei als Programm ausführen (x), er darf die Datei lesen (r) und er darf die Datei – Fuck Yeah‘ – editieren(w).  Das dürfen die zwei anderen zwei Parteien (group & others) offensichtlich nicht. Da steht nämlich jeweils nur r-x und das w fehlt.

Das kann man aber auch anders ausdrücken!

Zum Beispiel mit einer Zahl. Sagen wir mit der 1337. Okok geht nicht. Dann mit der 0751.

0: Die Null ist ein Indikator dafür, dass jetzt ACHTUNG! eine Oktalzahl kommt.

7: Die 7 ist im Binärcode eine 00000111. Die letzten drei Ziffern sind entscheidend. Eine Eins bedeutet hier „Jajaja, ich stehe für den Buchstaben der hier hin soll!“ Wir haben dreimal eine Eins, was bedeutet dass dreimal ein Buchstabe eingesetzt werden kann, nämlich  „rwx“ . Also bedeutet die 7 am Anfang, dass der Owner alle Rechte hat.

5: Die 5 ist im Binärcode eine 00000101, also ein  astreines r-x, denn für das w fehlt die Eins. Und das bedeutet naaaaaa? Was bedeutet das für die zweite Gruppe?

1: Die 1 ist lediglich eine 00000001 im Binärcode, ein –x also nur. Kann man nix machen.

Und das war’s!
Wir schauten uns dann noch gemeinsam den Code für das Programm in dem Kapitel an, bzw. die gekürzte Version von Plom. Ich hab vergessen was das Programm tut und der Originalcode ist so schlecht, dass ich daraus nichts schließen kann. Aber das macht nix. Es konvertiert halt von einem Zahlensystem ins Andere.
Erst erklärte er mir das Programm und irgendwann übernahm ich und erklärte es mir selbst. Und das war toll. Auch wenn ich mich nie ernsthaft Assemblerprogrammiererin nennen würde (außer zu Trollierungszwecken) kann ich mittlerweile zumindest mit meinem Grundwissen den Zweck eines Programms erknobeln, wenn natürlich auch nur bis zu einem gewissen Punkt. Aber ich habe so etwas wie eine Schwelle überwunden ab der ich mit meinen Kenntnissen selbstständig Neues aneignen kann.
Ich bin schon froh, dass es vorbei ist, aber in einem Gespräch wurde ich letztens darauf aufmerksam gemacht, dass ich vermutlich erst im Laufe der nächsten Lerneinheit, in der wir C lernen, verstehen werde, warum es eine verflucht gute Idee war, mit Assembler anzufangen. Mit derselben Person unterhielt ich mich tatsächlich dann noch ein bisschen über Prozessorarchitektur und Assembler.Aber die Hälfte von dem Ganzen hab ich mit dem ausgenüchterten Alkohol wohl verabschiedet und vergessen. Hm. Hab ich mich überhaupt mit Jemandem darüber unterhalten? Egal. Ah, doch, es gibt Beweise🙂

———————————————————————————————————————

 

Also dann. Ciao Assembler. Ich denke, die Distanz wird uns gut tun. Und mit meiner neuen, der C-Sprache, glaube ich, werde ich mich selbst und dich in einem neuen Licht sehen. Ich bin stolz darauf, dich zu kennen und bin sehr an unserer gemeinsamen Zeit gewachsen. Dafür danke ich dir.

With U2665

P.S. Aber das Assemblerlehrbuch muss ich zugeben, war ne ziemliche gequirlte Scheiße. Hoffentlich setzt Plom seinen Plan bald in die Tat um und schreibt ein Besseres. Basierend auf meinen Memoiren: „Assembler and I“

Getaggt mit
%d Bloggern gefällt das: