Enthält eine kompilierte Software binäre 0 und 1?

1

Ich weiß, dass nach dem Kompilieren einer Software oder Anwendung deren Code in die Maschinensprache konvertiert wird.

Enthält eine kompilierte Software eine binäre 0 und 1?

Was passiert nach dem Kompilieren einer Software? Wird der Code in binäre 0 und 1 umgewandelt? Was passiert eigentlich mit dem Quellcode? Wie ist so eine riesige Menge von 0 und 1 im Computer gespeichert?

Torpido
quelle
3
Alles auf Ihrem Computer ist am Ende alles Nullen und Einsen. Alles. Ich kann Ihnen im Moment keine angemessene Antwort geben, aber Siehe meine Antwort auf diese Frage um mehr Informationen zu erhalten. Kurz gesagt, wenn Sie ein Programm kompilieren, wird es zuerst in den entsprechenden Code auf niedriger Ebene (Assembly) umgewandelt.
Breakthrough
@ Durchbruch, wie Sie sagten "Kurz gesagt, wenn Sie ein Programm kompilieren, wird es zuerst in den entsprechenden Code auf niedriger Ebene (Assembly) umgewandelt." Danach wird es in Binary konvertiert.
Torpido
1
@Randolf Richardson, es variiert mit welcher Version von VB Sie verwenden - aber unabhängig davon, VB-Code ist zusammengestellt. Beachten Sie auch, dass VBA ( nicht VB) wird nicht einmal kompiliert, sondern on-the-fly interpretiert. Ebenfalls, Objektcode tut Enthält Maschinencode, aber nicht genug, um eine vollständige ausführbare Datei zu erstellen (genau das bewirkt das Verknüpfen).
Breakthrough
1
Es gibt wirklich keinen einfachen Weg, dies zu erklären. Ich vergesse oft, dass die Leute jahrelang zur Schule gehen, um sich an der Spitze des als Computerarchitektur bekannten Eisbergs zu kratzen. . .
surfasb
1
Es ist nicht so einfach "Kompilieren überspringt Assembly" . Kompilieren häufig Überspringt die Assembly, aber einige Compiler zielen auf die Assembly ab (normalerweise sind dies einfache kleine Compiler --- Spielzeug, wirklich --- aber dies ist nicht garantiert). Um ein riesiges Beispiel zu nennen: Der Kompilierungsprozess von gcc durchläuft die Assembly (oder zumindest früher). Normalerweise ist dies für den Benutzer nicht sichtbar, da Daten von einem Prozess zum nächsten weitergeleitet werden. Dies geschieht jedoch.
dmckee

Antworten:

7

Ja. Jede Information auf Ihrem Computer besteht aus Bits (auf PCs sind es normalerweise 8 Bits pro Byte, und einige Systeme definieren Bytes mit einer anderen Anzahl von Bits). Obwohl der Quellcode technisch in binärer Form gespeichert ist, können verschiedene Ansätze und Methoden verwendet werden, um ihn als "Text" zu kennzeichnen.

Binär ist die Notation, die zur Beschreibung der Basis-2-Darstellung der Daten (1 und 0) verwendet wird. In diesem Dokument wird diese Notation sehr detailliert erläutert und wird Sie wahrscheinlich interessieren:

Binärcode
http://en.wikipedia.org/wiki/Binary_code

Nach der Kompilierung stellen die resultierenden Binärdaten normalerweise eine Folge von Befehlen dar (a.k.a., Folgen von Bytecodes), die der Prozessor versteht und entsprechend bearbeitet. Es gibt eine große Anzahl von Anweisungen, die mathematische Operationen ausführen, Speicherinhalte ändern, mit Peripheriegeräten kommunizieren und sich mit einer Reihe anderer Dinge befassen.

Eine Hochsprache wie C, Pascal, Perl usw. kann in Binärcode kompiliert werden, der dann direkt von der CPU ausgeführt wird. Dieser Binärcode wird am häufigsten als "Maschinensprache" bezeichnet.

Assembler-Quellcode (der nicht als "Hochsprache" betrachtet wird) ist die Form des Quellcodes, die der Maschinensprache am nächsten kommt, muss jedoch auch als Binärcode kompiliert werden, damit die CPU ihn korrekt verarbeitet.

Wenn interpretierter Code ausgeführt wird (z. B. mit einem Skript), wird er von einem Interpreter im laufenden Betrieb kompiliert, wenn jede Zeile oder jeder Abschnitt angetroffen wird, und wird daher in der Regel viel langsamer als binärer Code ausgeführt. BASIC (wie GW-BASIC aus den DOS-Tagen der 1980er und frühen 1990er Jahre) wurde, obwohl es nicht als Skriptsprache bekannt ist, ebenfalls interpretiert (einschließlich der Schleifen - es gab kein Caching, jede Zeile wurde ständig neu interpretiert).

Randolf Richardson
quelle
1

Alles auf einem Computer ist eine Sammlung von Bytes. Da Bytes eine festgelegte Anzahl (normalerweise 8) von Einsen und Nullen sind, ist in der Tat alles in einem Computer Einsen und Nullen.

Ein Programm ist ein Strom von Anweisungen.

Die CPU ruft Bytes aus dem RAM ab und führt eine Aktion aus, die auf dem Wert dieses Bytes basiert. Ein Strom solcher Bytes bildet ein Programm. Bytes werden in diesem Zusammenhang Opcodes genannt und repräsentieren elementare Operationen.

Das Kompilieren ist ein mehrstufiger Prozess, der im Wesentlichen Quelltext in einen Strom von Opcodes "konvertiert" oder "übersetzt". Mit dem ursprünglichen Quellcode passiert nichts.

Compiler sind selbst Programme, deren Aufgabe es ist, den Quelltext zu lesen und die Konvertierung in die Maschinensprache vorzunehmen. Zentral für die Arbeitsweise eines Compilers ist ein Konzept namens a Parser das jedes Zeichen (Byte) jeder Textzeile abtastet, es in Wörter und Operatoren trennt (d. h. Token ) und ermittelt anhand des Vorhandenseins und der Reihenfolge bestimmter Wörter, welche Maschinensprachen-Opcodes generiert werden sollen.

Programme werden selten von Anfang bis Ende ausgeführt. Normalerweise Entscheidungen (d. H. bedingte Anweisungen ) werden auf der Grundlage der vom Programm gesammelten Daten erstellt, und das Programm kann überspringen (a.k.a. springen oder Ast ) zu verschiedenen Abschnitten von sich. Alternativ können Abschnitte der Programme als geschrieben werden Unterprogramme oder funktionen und könnte wiederverwendet werden oder namens während des Programms. Aus diesem Grund müssen die meisten Compiler zwei oder mehr Durchgänge durch den Quellcode durchführen, um herauszufinden, wohin alle "Sprünge" führen. Das nennt man Verlinkung .

Eine große Anzahl von Nullen und Einsen kann hauptsächlich aufgrund der Fortschritte in der Chipherstellungstechnologie und der Tatsache gespeichert werden, dass eine CPU auf eine RAM-Größe zugreifen kann, die 2 hoch 2 ist Adresszeilen es hat. Eine 32-Bit-CPU verfügt normalerweise über mindestens 32 Adressleitungen, dh 2 ^ 32 oder 4 GB RAM. Der Speicher war nicht immer so billig oder reichlich. Computerwerbung in den späten 70ern / frühen 80ern zeigt, dass der Arbeitsspeicher für 4 KB mindestens 500 USD betrug und umso teurer war, je früher Sie unterwegs waren.

LawrenceC
quelle
+1 speziell für diese Reise nach unten Erinnerung Spur mit RAM-Preisen.
Randolf Richardson
Nein, nein, nein, die Antwort auf die Frage, wie ich viel speichere 0s und 1s ist durch viel Speicher falsch. Ein Computer speichert 01010011 nicht als 8 Zeichen, sondern als 1 Byte. Nun, das hängt davon ab, dass er es in diesem Fall als 8 Zeichen gespeichert hat. Aber im Fall eines Zeichens, das als 8 "1s" und "1s" dargestellt wird 0swird nicht als Folge von 8 Zeichen gespeichert ( 1s und 0s ), die dann jeweils in to codiert werden 1s und 0sDies wäre eine unendliche Rekursion. Nein, es wird in einem Byte von 8 Bits gespeichert. Ein Bit kann als a dargestellt werden 1 oder 0 ist aber kein 1 oder 0 es ist eine elektrische Ladung.
ctrl-alt-delor
1

Wie andere Antworten bereits sagten, speichern und verarbeiten Computer Daten und Anweisungen BINARY, sodass sie oder besser gesagt, ihre grundlegendsten Elemente (Transistoren usw.) mit zwei Zuständen rechnen, On / Off, Low / High oder 0 und 1.

Aber es gibt (oder gab) andere Methoden! Es gibt analoge Computer, im Gegensatz zu DIGITAL-Computern, bei denen digital bedeutet, dass Sie auf DISCREET und bestimmte Werte (Ziffer & lt; - & gt; Finger) hinweisen können. In analogen Computern kann man nicht, es gibt keine Werte unterschiedlicher Natur, alles ist etwas dazwischen (wie in ganzen Zahlen und reellen Zahlen). Aber es gibt kein "Programm", das zu Maschinencode kompiliert wird. Es gibt mechanische / elektronische Elemente, die das "Programm" bestimmen

Interessanter: Es gibt DIGITAL-Computer, die sind nicht Betrieb binär aber TERNARY :

http://en.wikipedia.org/wiki/Setun

http://en.wikipedia.org/wiki/Ternary_computer

In diesen Computern gibt es DREI Zustände, -1/0/1. Und es gibt sogar Programme, die zu einem Maschinencode kompiliert werden. Fazit: Vielleicht. Kompilierte Software kann enthalten auch drei digitale Bezeichner, -1, 0 und 1;)

trurl
quelle
Eine Basis-3-Darstellung (höchstwahrscheinlich unter Verwendung der Ziffern 0, 1 und 2) müsste für ternäre verwendet werden, da -1 schwierig darzustellen wäre, wenn mehr als ein Bit betroffen wäre. Ich vermute auch, dass diese Tristate-Bits auch einige interessante Strategien für Kompressionsalgorithmen schaffen könnten.
Randolf Richardson
0

Während die Antwort ja richtig ist, ist die Antwort nein richtiger.

Die Informationen werden (wie bereits gesagt) in elektrischen Ladungen gespeichert: on und off oder vielleicht positive und negative oder high und low oder low und highund einige Systeme verwendeten Strom anstelle von Ladung. Zusammenfassend gibt es jedoch zwei elektrische Zustände.

Um die Sache einfacher zu machen, haben die Leute dies zu 0 und 1 abstrahiert, so dass sie nicht wissen mussten, wie die Hardware es tat und der Code portabler war.

Später wurden weitere Abstraktionsebenen hinzugefügt: Assembler, Zeichencodes (ASCII usw.), dann ...

so

if (a==b)
{
    …
}

kann werden

ld r1 a
ld r0 b
cmp r1,r0
br.z %endif1
…
%endif1

Jetzt können Sie das hören cmp r1,r2 wird konvertiert zu 0110110111001010, aber das ist nicht genau richtig. weil 0110110111001010 ist eine Folge von 16 Zeichen (mindestens 16 unkomprimierte Bytes), die 2 Datenbytes darstellt. Aber ist es falsch, das zu sagen? Nun, nur so, wie ich gesagt habe, ich hätte Spaghetti zum Abendessen, ist das falsch. Ich hatte keine Zeichenfolge s p a g h e t t i zum Abendessen. Ich kann dir nicht zeigen, was ich hatte. Ich kann ein Bild zeigen, aber ich habe kein Bild gegessen. Also erinnere dich an die 0 s und 1 s sind nur eine Darstellung dessen, was wirklich passiert. Und wenn ich sage, ich sehe 1 Mond am Himmel, das 1 repräsentiert etwas ganz anderes. Und wenn ich sage, hüte dich vor den Charakteren 1 und l und die Charaktere 0 und Okönnen diese verwechselt werden 1 s und 0 s sind wieder eine andere Sache.

ctrl-alt-delor
quelle