⬅️ Seite zurück⬆️ Inhaltsverzeichnis➡️ Nächste Seite

🤪 Kapitel 1.03 - Begriffe - Alles Compiler oder was?

Gefunden auf X - User: @levanthanh
Gefunden auf X - User: @levanthanh

Zum Anfang eine kleine Erklärung einiger Begriffe:
  • Maschinensprache / Assembler:
    Die einzige Sprache, die der Computer direkt versteht ist ↗ Maschinensprache, diese besteht nur aus sehr rudimentären Befehlen ohne direkte Verwaltung der Ressourcen wie Speicherbelegung oder Zugriffe auf Massenspeicher. Die nächste abstraktionsebene ist ↗ Assembler - Damit wird der Binärcode (Maschinensprache) in eine für den Menschen lesbare Form gebracht die verändert werden kann und dann wieder in Maschinensprache umgewandelt werden muss. Dies wird mit einen Programm erledigt, welches Assembler heisst.

    Also der Quellcode in Assembler wird durch einen Assembler in Maschinensprache übersetzt.

    Beispiel für die ↗ 6502 ↗ CPU:
    Adresse: Binärcode:  Menschlich lesbarer Befehl:
    $c1aa    20 FD AE    JSR $AEFD
    $c1ad    20 EB B7    JSR $B7EB
    $c1b0    8A          TXA
    $c1b1    A8          TAY
    $c1b2    A6 15       LDX $15
    $c1b4    C0 C8       CPY #$C8
    $c1b6    B0 EF       BCS $C1A7
    $c1b8    A5 14       LDA $14
    $c1ba    E0 01       CPX #$01
    $c1bc    90 06       BCC $C1C4
    $c1be    D0 E7       BNE $C1A7
    $c1c0    C9 40       CMP #$40
    $c1c2    B0 E3       BCS $C1A7
    $c1c4    8C 19 C0    STY $C019
    $c1c7    8D 17 C0    STA $C017
    $c1ca    8E 18 C0    STX $C018



    Das Problem ist aber, jede ↗ CPU hat ihren eigenen “Dialekt” - Also der Maschinencode für die ↗ CPU 6502 (Von ↗ MOS) ist für die ↗ CPU MC68000 (Von ↗ Motorola) unbrauchbar und umgekehrt.

    Für jede CPU muss ein eigenes, angepasstes Programm erstellt werden, was es praktisch Zeitlich Unmöglich macht, grössere Programme für mehrere Systeme zur Verfügung zu stellen.

    Deshalb wurden schon sehr früh sogenannte ↗ Hochsprachen entwickelt, welche zum einen für den Menschen lesbar und besser verständlich sind. Der eigentliche Vorteil ist aber der, das Hochsprachen portable sind. Also zwischen Computers ausgetauscht werden können, die über unterschiedliche Architekturen verfügen.

  • Interpreter:
    Eine ↗ interpretierte Programmiersprache wird nicht direkt in Maschinensprache umgewandelt. Der geschriebenen Quellcode wird Befehl für Befehl zur ↗ Laufzeit des Programms ausgewertet und dann ausgeführt. Das ist natürlich sehr Zeitaufwendig, hat aber den Vorteil daß das Programm sehr schnell geändert oder korrigiert werden kann.

    Bekannte Beispiele sind ↗ BASIC, ↗ Python und ↗ Skriptsprachen.

    Beispiel für BASIC:
    (Für 80 Zeichen, ↗ ASCII Terminal)
    READY.

    10 FOR Y=-12 TO 12
    20 FOR X=-39 TO 39
    30 CA=X*0.0458
    40 CB=Y*0.08333
    50 A=CA
    60 B=CB
    70 FOR I=0 TO 15
    80 T=A*A-B*B+CA
    90 B=2*A*B+CB
    100 A=T
    110 IF (A*A+B*B) >4 THEN GOTO 200
    120 NEXT I
    130 PRINT" ";
    140 GOTO 210
    200 IF I>9 THEN I=I+7
    205 PRINT CHR$ (48+I);
    210 NEXT X
    220 PRINT
    230 NEXT Y

    RUN



  • Kompilierte Sprachen:
    Ein ↗ Compiler übersetzt einen von einem Menschen geschrieben Quelltext in Maschinensprache und der Compiler muss für jedes ↗ Computersystem angepasst werden. Somit ist es möglich, ein einmal geschriebenen Quelltext in einer ↗ Hochsprache, auf verschiedenen Computersystemen zu nutzen, ohne diesen zu ändern. Diese Aussage stimmt aber nicht zu 100%, sobald sehr Systemnahe Funktionen wie zum Beispiel die direkte Kommunikation mit der Hardware genutzt werden, müssen diese ebenfalls speziell für das genutzte System angepasst werden.

    Ein Compiler ist kein eigenes Programm, sondern ein Zusammenschluss von mehreren Programmen, die Hand-in-Hand zusammenarbeiten. Als Beispiel ist der C/C++ Compiler genannt, welche Programme, in welcher Reihenfolge aufgerufen werden.
    • Präprozessor:
      Der ↗ Präprozessor analysiert eine Quellcode Datei und löst so genannte Metakommandos zum Beispiel wie #include oder #define auf. Genauso kann auch die Abarbeitung durch den Compiler gesteuert werden, die sogenannte Bedingte Kompilierung durch beispielsweise #if oder #ifdef.
    • Compiler:
      Der Compiler erstellt jetzt aus dem "Mundfertigen" Quellcode den speziell für das angegebene System angepasste Maschinencode - Aber immer noch als ↗ Assembler-Quelltext.
    • Assembler:
      Der ↗ Assembler übersetzt dann schliesslich den Assembler-Quellcode in echte Maschinensprache und speichert diesen als so genannten ↗ Objektcode. Dieser ist noch nicht direkt lauffähig.
    • Linker:
      Der ↗ Linker ist das letzte Programm in der Kette, er verbindet alle Objektdateien zu einer einzigen Ausführbare Datei.
    • In moderen ↗ Entwicklungsumgebungen (IDE) ist dieser Prozess meist "unter der Haube" versteckt. Es ist trotzdem sinnvoll zu verstehen, "wie" genau dieser Prozess der Compilierung abläuft.


  • Zwischensprachen (Bytecode):

    Bei einer Zwischensprache in ↗ Bytecode - Bekannte Beispiele sind ↗ Java und ↗ C# - wird der Quellcode für eine “Virtuelle” ↗ CPU compiliert. Erst wenn das Programm auf dem Zielsystem gestartet wird, wird von einem ↗ AOT-Compiler (Ahead of time) der echte Maschinencode, angepasst für die aktuell genutzte ↗ CPU erstellt. Dadurch ist es ebenfalls möglich, Programme auf unterschiedlichen Systemen auszuführen. Auch hier ist das Problem, das eine Interaktion mit hardwarenahen Komponenten schwierig ist und für diese speziellen Zwecke wieder ein nativ geschriebener Programmteil nötig ist.

Erstellt durch: MuseumsWelt V6.04.01 Edition 'In memoriam 😢 Röhrensammlung' / EU Datenschutz-Grundverordnung (DSGVO)
Erstellt am: 10.07.2026 00:30