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?
Antworten:
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).
quelle
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.
quelle
0s
und1s
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 wird0s
wird nicht als Folge von 8 Zeichen gespeichert (1s
und0s
), die dann jeweils in to codiert werden1s
und0s
Dies wäre eine unendliche Rekursion. Nein, es wird in einem Byte von 8 Bits gespeichert. Ein Bit kann als a dargestellt werden1
oder0
ist aber kein1
oder0
es ist eine elektrische Ladung.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;)
quelle
Während die Antwort ja richtig ist, ist die Antwort nein richtiger.
Die Informationen werden (wie bereits gesagt) in elektrischen Ladungen gespeichert:
on
undoff
oder vielleichtpositive
undnegative
oderhigh
undlow
oderlow
undhigh
und 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
kann werden
Jetzt können Sie das hören
cmp r1,r2
wird konvertiert zu0110110111001010
, aber das ist nicht genau richtig. weil0110110111001010
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 Zeichenfolges
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 die0
s und1
s sind nur eine Darstellung dessen, was wirklich passiert. Und wenn ich sage, ich sehe 1 Mond am Himmel, das1
repräsentiert etwas ganz anderes. Und wenn ich sage, hüte dich vor den Charakteren1
undl
und die Charaktere0
undO
können diese verwechselt werden1
s und0
s sind wieder eine andere Sache.quelle