Bits & Bytes

Bits

Nicht nur Bilder, Audiodateien, Videos und Dokumente bestehen aus einzelnen Bits. Nein, auch alle Programme sind aus Bits und Bytes gemacht.

Übrigens: Das Bild kannst Du vergrößern.



Bits, Bytes, BASIC

Man kann die Bits und die Bytes auch "verstehen".

Dazu gehen wir schrittweise von der höheren Programmiersprache BASIC zu den Bits (also zur "Maschinensprache").

Dieses folgende BASIC-Programm addiert zwei ganze Zahlen, und dann zeigt es das Endergebnis am Bildschirm an. Es ist nicht lang:

A = 8

B = 1

C = A + B : REM EINE ADDITION

PRINT C : REM ZEIGE C AN

Dieses kleine Programm tut dies: Der Wert 8 wird der Variablen A zugewiesen, ebenso der Wert 1 der Variablen B. Dann folgt die Addition und die Zuweisung an die Variable C. Der letzte Befehl bedeutet, dass der Inhalt von C am Bildschirm angezeigt wird.

Jetzt kommt eine "Übersetzung" in eine andere Programmiersprache, in "Assemblersprache".

Assemblersprache und Maschinensprache

Wir befassen uns jetzt mit der "Assemblersprache". Sie ist die Programmiersprache der ersten Stunde. Also: Bevor es die (alte) Programmiersprache "Fortran" gab, gab es schon Assemblersprache. Aber Assembler oder Assembly, wie die Assemblersprache auch heißt, hat  auch einige Nachteile: Die Assemblersprache ist immer auf den jeweiligen Prozessor zugeschnitten; sie ist also nicht portabel auf eine andere Rechnerarchitektur; so sagen die Informatiker. Und sie ist sehr schwer zu erlernen.

Nur zur Dekoration: Assembler-Code
Nur zur Dekoration
Assembler-Code
Auch nur zur Dekoration: Assembler-Code


Das hier ist ungefähr unser BASIC-Programm in Assemblersprache:

mov ax,   08        mov bx,   01       add ax, bx

Man kann diesen Code erklären, damit ihn jeder versteht: Das mov ax, 08 - mov bx, 01 - add ax, bx bedeutet so ungefähr das Gleiche wie:

A = 8

B = 1

C = A + B  in BASIC.

Dazu muss man wissen, dass jedes dieser "Dinge" wie ax oder bx so genannte Register sind. Diese Register sind in diesem Fall 16 Bits "breit". Sie dienen - genauer gesagt - dazu, um 16 Bits zu speichern. Jedenfalls für eine gewisse Zeit.

Und damit wir jetzt lesen können, wie die Bits und Bytes genau lauten, kommt hier die Übersetzung in Maschinensprache. (Maschinensprache ist die "Sprache", die der Computer versteht.)

mov ax, 08  mov bx, 01  add ax, bx

b8 08 00      bb 01 00        03 c3         (sieht so aus in Maschinensprache.)

Die Nullen und Einsen zu b8 08 00 usw.:

1011 1000 0000 1000 0000 0000

1011 1011 0000 0001 0000 0000

0000 0011 1100 0011

Aber das hier oben ist natürlich schon höhere Mathematik. Ganz genau genommen sind die Nullen und Einsen die Sprache, die der Computer begreift. Die Maschinensprache (b8 08 00 usw.) versteht der Computer, weil er einen Befehlssatz besitzt, welcher letztlich nur Bits und Bytes lesen kann. Wozu dann die vielen komplizierten Befehle in den höheren Programmiersprachen? Für das menschliche Verständnis natürlich!

Weil wir Menschen das auch verstehen müssen, was man dem Computer so sagen will, gibt es die höheren Programmiersprachen - und weil es für uns Menschen sonst sehr mühsam wäre. "Assembly" ist eine sehr, sehr schwierige Programmiersprache.

Speicherauszug = Hexdump

Die einzelnen Bytes kann man nun auch sichtbar machen. Man sagt auch "Speicherauszug" oder "Dump" dazu. Oder - weil es meistens in Hexadezimalzahlen geschieht, sagt man "Hexdump".

Maschinensprache:
    Die Maschinensprache besteht aus Zahlen, die als Bytes im Speicher abgelegt werden.
    Jeder Befehl in Maschinensprache hat einen numerischen Code, der seinen Operationscode (Opcode) darstellt.
    Maschinensprache ist die niedrigste Ebene der Programmierung und direkt vom Prozessor ausführbar.
Assemblersprache:
  Assemblersprache ist eine symbolische Darstellung der Maschinensprache.
     Assembler-Befehle bestehen aus Mnemonics (symbolischen Abkürzungen) und Operanden.
    Ein Assembler übersetzt diese Assembler-Befehle in die entsprechende Maschinensprache.
    Assemblersprache ist maschinenspezifisch, d.h. es gibt verschiedene Assembler-Dialekte für unterschiedliche Prozessorarchitekturen.
Hexdump:
    Ein Hexdump ist eine hexadezimale Darstellung des Inhalts eines Speichers oder einer Datei.
    Im Hexdump werden die Bytes in Hexadezimalzahlen (0-F) dargestellt.
    Hexdumps werden verwendet, um den Inhalt von Programmen oder Dateien auf Binär-/Maschinensprachebene zu untersuchen.
Zusammengefasst ist Maschinensprache die niedrigste Ebene der Programmierung, Assemblersprache eine symbolische Darstellung davon, und Hexdump eine hexadezimale Darstellung des Maschinensprachencodes.

Der Begriff "Hexdump" bei Wikipedia:


"Mebibyte"

Es gibt - zum Erstaunen mancher Leute - nicht nur Megabyte, sondern auch Mebibyte! Video dazu: