Es ist allgemein bekannt, dass Code von einem Entwickler geschrieben wird und wie Menschen mit Computern kommunizieren. Haben Sie jedoch jemals darüber nachgedacht, wie Software wie Code mit Computerhardware wie einer CPU (Central Processing Unit) interagiert? Wenn die Antwort ja ist, dann sind Sie bei uns richtig.

Um zu verstehen, wie Code auf einem Computer ausgeführt wird, müssen Sie verstehen, wie ein Computer tickt und wie er manipuliert werden kann. Lassen Sie uns zunächst über die grundlegenden Ideen der Computerhardware sprechen, bevor wir zur Softwareseite übergehen.

Was ist Binär?

Binär ist ein Zahlensystem zur Basis 2, das Prozessoren und Speicher zum Ausführen von Code verwenden. Binärzahlen können nur 1 oder 0 sein, daher der Name. Wenn Sie acht Binärzahlen (00000000) gruppieren, erhalten Sie ein sogenanntes Byte, während eine einzelne Binärzahl (0) ein Bit genannt wird.

Wie ein einfacher Schalter binäre Signale erzeugt

Alles Logische beim Rechnen mit Maschinen beginnt mit dem einfachen Wechsel. Ein einfacher Schalter hat zwei Leiter und einen Verbindungs- und Trennmechanismus. Durch das Anschließen beider Leiter kann Strom fließen, der ein Signal an das andere Ende des Leiters erzeugt. Werden die Leiter hingegen getrennt, fließt kein Strom, d. h. es wird kein Signal erzeugt.

Bildquelle: 991joseph/Wikimedia Commons

Da ein Schalter nur jeweils ein- oder ausgeschaltet werden kann, bieten sie den idealen Mechanismus, um die hohen und niedrigen Signale zur Erzeugung von Rechtecksignalen zu verwenden.

Wenn Sie einen Schalter umlegen, wird ein Signal oder ein Datenbit erzeugt. Ein normales Foto, das von einem Smartphone aufgenommen wird, würde etwa fünf Megabyte an Daten enthalten, was 40.000.000 Bit entspricht. Das würde bedeuten, dass Sie den Schalter zig Millionen Mal umlegen müssen, nur um genügend Daten für ein Foto von Ihrem Smartphone zu produzieren.

Angesichts der mechanischen Einschränkungen eines Schalters benötigten die Ingenieure etwas, das keine beweglichen Teile hatte und schnellere Schaltgeschwindigkeiten ermöglichte.

Transistoren als Schalter verwendet

Transistor Bildquelle: Evan-Amos/Wikimedia und Rechteckwelle Bildquelle: Sponk/Wikimedia

Dank der Entdeckung der Dotierung (Manipulation der elektrischen Leitfähigkeit von Halbleitern wie Silizium) konnten Ingenieure elektrisch gesteuerte Schalter, sogenannte Transistoren, herstellen. Diese neue Erfindung ermöglichte schnellere Verarbeitungsgeschwindigkeiten, die wenig Spannung für die Stromversorgung benötigten, was es letztendlich ermöglichte, über eine Milliarde dieser Transistoren auf einer einzigen modernen CPU zu stapeln.

Was ist CPU-Architektur?

Die Transistoren werden dann geschickt angeordnet, um Logikgatter, Halbaddierer, Addierer, Flip-Flops, Multiplexer, Register und verschiedene Komponenten herzustellen, die die CPU funktionsfähig machen. Die Art und Weise, wie diese Komponenten gestapelt wurden, definiert eine sogenannte CPU-Architektur.

Die CPU-Architektur diktiert auch die ISA (Instruction Set Architecture) eines Prozessors. Ein ISA enthält eine eingebaute Liste von Anweisungen, die eine CPU nativ ausführen kann. Diese Befehle werden dann durch eine Programmiersprache sequentiell zusammengemischt, um ein sogenanntes Programm zu erstellen. Normalerweise sind Hunderte von Befehlen auf einer CPU leicht verfügbar, einschließlich Addition, Subtraktion, Verschieben, Speichern und Laden.

Hier ist ein Beispiel für einen Befehlssatz:

Anleitungssatz-Beispiel

Jeder Befehl in einem Befehlssatz hat seine eigene binäre Adresse, die als Opcode bekannt ist. Der Opcode besteht aus den ersten paar binären Bits, die angeben, welche Operation aus dem Befehlssatz verwendet werden soll.

Montageanleitung-Syntax

Auf den Opcode folgt der Operand. Der Operand enthält Werte und Adressen, an denen der Opcode verwendet wird.

Das Diagramm zeigt einen 8-Bit-Befehl. Wenn eine CPU über eine 64-Bit-Architektur verfügt, können die Befehle eine Befehlsbreite von bis zu 64 Bit umfassen, was sie zu einem leistungsfähigeren Prozessor macht.

Verwandt: Wie unterscheiden sich RISC- und CISC-CPUs?

Der Monteur

Da Sie nun binäre Signale verstehen, können Sie lernen, wie Ihr Computer solche Signale interpretiert. Wie Maschinencode interpretiert werden soll, hängt von der Art der Logik ab, die in einem Assembler verwendet wird (ein Programm auf niedriger Ebene, das verwendet wird, um Code zu decodieren und in die richtige Binärdatei zu assemblieren).

Wenn unser Assembler beispielsweise den ASCII-Standard (American Standard Code for Information Interchange) verwendet, unser Assembler würde den angegebenen Maschinencode nehmen und genauso interpretieren wie aus dem ASCII in der Tabelle unter.

00101001 EIN 00101111 g 00110101 m 00111011 S 01000001 Ja
00101010 B 00110000 h 00110110 n 00111100 T 01000010 Z
00101011 C 00110001 ich 00110111 0 00111101 U
00101100 D 00110010 J 00111000 P 00111110 V
00101101 E 00110011 K 00111001 Q 00111111 W
00101110 F 00110100 L 00111010 R 0100000 x

Da unser Assembler ASCII (8-Bit-Version) verwendet, werden alle acht Binärzahlen in der Binärdatei als ein Zeichen interpretiert. Der Assembler würde dieses Byte nehmen und es gemäß den angegebenen Standards interpretieren. Zum Beispiel würde 01000001 01101001 01010100 in das Wort "Bit" übersetzt.

Die Assemblersprache verstehen

Assembly Language ist eine von Menschen lesbare Low-Level-Programmiersprache, die die Opcodes und Operanden einer CPU-Architektur direkt manipuliert.

Hier ist ein Beispiel für einen einfachen Assemblercode, der den zuvor gezeigten Befehlssatz verwendet:

1. LODA #5 
2. LODB #7
3. R3 HINZUFÜGEN
4. STRE M12

Dieser Codeblock wird im RAM gespeichert, bis die CPU jede Codezeile einzeln abruft.

Der CPU-Abruf-, Decodier- und Ausführungszyklus

Die CPU führt Code durch einen Zyklus aus, der als Abrufen, Decodieren und Ausführen bekannt ist. Diese Sequenz zeigt, wie eine CPU jede Codezeile verarbeitet.

Bringen: Der Befehlszähler innerhalb der CPU nimmt eine Befehlszeile aus dem RAM, um der CPU mitzuteilen, welcher Befehl als nächstes auszuführen ist.

Dekodieren: Der Assembler dekodiert den für Menschen lesbaren Codeblock und baut ihn als richtig formatierte Binärdateien zusammen, damit der Computer sie verstehen kann.

1. 00010101 
2. 00100111
3. 00110011
4. 01011100

Ausführen: Die CPU führt dann die Binärdateien aus, indem sie die vom Opcode angezeigten Anweisungen auf die bereitgestellten Operanden anwendet.

Der Computer wird ausführen es wie folgt:

  1. Laden Sie das erste Register mit 5
  2. Laden Sie das zweite Register mit 7
  3. 5 + 7 = 12, 12 im dritten Register speichern
  4. Speichern Sie den Wert des dritten Registers auf der RAM-Adresse M12

Der Computer hat erfolgreich zwei Zahlen addiert und den Wert an der angegebenen RAM-Adresse gespeichert.

Toll! Jetzt wissen Sie, wie ein Computer Code ausführt. Allerdings hört es hier nicht auf.

Weitergehen

Mit der richtigen Hardware, einem Assembler und einer Assemblersprache könnten die Leute Code mit einigermaßen Leichtigkeit ausführen. Da jedoch sowohl Programme als auch Computerhardware immer komplexer wurden, mussten Ingenieure und Programmierer Denken Sie an eine Möglichkeit, die Programmierung weniger mühsam zu machen und die Kompatibilität mit verschiedenen CPU-Typen sicherzustellen die Architektur. Also die Erstellung von Compilern und Interpretern.

Was ist ein Compiler und ein Interpreter?

Der Compiler und der Interpreter sind Übersetzungsprogramme, die Quellcode verwenden (Programme aus höhere Programmiersprachen) und übersetzen sie in die Assemblersprache, die der Assembler dann dekodiert zu binär.

Ein Dolmetscher nimmt eine Codezeile und führt sie sofort aus. Dies wird normalerweise auf Terminals wie dem Linux Bash Shell-Terminal und dem Windows PowerShell-Terminal verwendet. Ideal für die Durchführung einfacher einmaliger Aufgaben.

Bildquelle: Rlistmedia/Wikimedia Common

Im Gegensatz dazu a Compiler nimmt mehrere Codezeilen und kompiliert sie, um ein Programm zu erstellen. Beispiele für diese Programme sind Microsoft Word, Photoshop, Google Chrome, Safari und Steam.

Mit der Entwicklung von Compilern und Interpretern wurden höhere Programmiersprachen geschaffen.

Hochrangige Programmiersprachen

High-Level-Programmiersprachen sind jede Sprache nach dem Assemblercode. Einige dieser Sprachen, mit denen Sie möglicherweise vertraut sind, sind C, Python, Java und Swift. Diese Programmiersprachen machten die Programmierung für den Menschen lesbarer und einfacher als die Assemblersprache.

Hier ist ein Vergleich nebeneinander, um zu veranschaulichen, wie schwieriger es ist, in Assembler zu programmieren als mit einer höheren Programmiersprache wie Python:

Beide Codes drucken "Hello World".

Mit diesen Programmiersprachen können Entwickler Spiele, Websites, Anwendungen und Treiber mit vertretbarem Zeitaufwand programmieren.

Verwandt: Python vs. Java: Die beste Sprache für 2022

Computer können alle Arten von Code ausführen

Ein Computer ist ein Gerät, das nur Binärdateien lesen kann. Diese Binärdateien werden von über einer Milliarde mikroskopisch kleinen Transistoren erzeugt, die in einer CPU gepackt sind. Die Transistoranordnung diktiert die ISA (Befehlssatzarchitektur) einer CPU, die Hunderte von Befehlen bereitstellt, die eine CPU leicht ausführen kann, sobald ihr Opcode durch Code aufgerufen wird. Entwickler mischen diese Anweisungen sequentiell und passen sie an, wodurch ein ganzes Programm wie Spiel-Engines, Webbrowser, Anwendungen und Treiber erstellt wird.

Eine CPU führt Code durch eine Sequenz aus, die als Abruf-, Decodier-, Ausführungszyklus bekannt ist. Sobald ein Codestück in den RAM geladen ist, holt die CPU seinen Inhalt nacheinander, decodiert den Inhalt durch den Assembler in Binärdateien und führt dann den Code aus.

Da der Assembler nur Code übersetzen kann, der explizit für die CPU-Architektur erstellt wurde, müssen Compiler und Interpreter wurden auf dem Assembler aufgebaut (ähnlich wie ein Adapter), um mit verschiedenen CPU-Typen zu arbeiten die Architektur. Ein Interpreter nimmt einen Befehl und führt ihn sofort aus. Im Gegensatz dazu nimmt ein Compiler alle Ihre Befehle und kompiliert sie in ein wiederverwendbares Programm.

High-Level-Programmiersprachen wie Python, C und Java wurden entwickelt, um das Programmieren einfacher, schneller und bequemer zu machen. Die große Mehrheit der Programmierer muss nicht mehr in Assembler codieren, da ihre einfach zu verwendenden höheren Programmiersprachen durch einen Compiler in die Assembly übersetzt werden können.

Hoffentlich haben Sie jetzt ein besseres Verständnis der Grundlagen von Computern und wie sie Code ausführen.

Wie funktioniert ein Computer und was ist drin?

Es ist eine einfache Frage, über die sich aber jeder von Zeit zu Zeit Gedanken macht: Wie funktioniert der Computer vor Ihnen eigentlich?

Weiter lesen

TeilenTweetEmail
Verwandte Themen
  • Technologie erklärt
  • Programmierung
  • Computerprozessor
  • wird bearbeitet
Über den Autor
Jayric Maning (5 Artikel veröffentlicht)

Jayric Maning wollte wissen, wie die Dinge funktionieren, und begann in seinen frühen Teenagerjahren, an allen Arten von elektronischen und analogen Geräten herumzubasteln. Er studierte Forensik an der Universität Baguio, wo er sich mit Computerforensik und Cybersicherheit vertraut machte. Er macht derzeit viel Selbststudium und bastelt an Technik, um herauszufinden, wie sie funktionieren und wie wir sie nutzen können, um das Leben einfacher (oder zumindest cooler!) zu machen.

Mehr von Jayric Maning

Abonniere unseren Newsletter

Abonnieren Sie unseren Newsletter für technische Tipps, Rezensionen, kostenlose E-Books und exklusive Angebote!

Klicken Sie hier, um zu abonnieren