/ / Wer konvertiert High Level Language in Assembly Sprache - Assembly

Wer konvertiert Hochsprachen in Assembler - Assembly

Nun geht es durch grundlegende Funktionsweise vonIch habe gelernt, dass wir Quellcode in High Level Language schreiben. Compiler konvertieren es in Low-Level-Sprache (Maschinencode / Objektcode). Ich lernte auch, dass Assembler Assemblersprache in Maschinencode / Objektcode konvertiert.
Dann habe ich folgende Zweifel:

  1. Von wo diese Assembler-Sprache generiert wird, wenn Compiler direkt hohe Ebene in niedrige Ebene konvertieren.

  2. wenn der Umwandlungsprozess die Assemblersprache durchlaufen muss, d.h.

High Level Sprache ====> Assemblersprache ====> Objektcode / Maschinencode,
Wer konvertiert dann diese Hochsprache in die Assemblersprache und was nutzt sie?

Antworten:

2 für die Antwort № 1

Dies ist eine sehr allgemeine Frage (und auch ein bisschen schwierig zu verstehen, um ehrlich zu sein).

Ein Compiler für eine höhere Sprache könnteKonvertieren von High-Level-Code in Assembler und ein sekundäres Dienstprogramm könnte Assembler in das konvertieren, was Sie als Maschinencode bezeichnen. Ein Compiler könnte auch Maschinencode direkt erzeugen. Beide Optionen sind gültig, und es liegt an den Konstrukteuren des Compilers, zu entscheiden, welches System am besten geeignet ist.

Das heißt, die Montage ist einen Schritt vom Sein entfernt"Maschinencode", so ist es oft nützlich, in der Lage zu sein, es zu lesen, um festzustellen, was der Compiler getan hat. Manchmal führt dies zu Einsichten, die es ermöglichen, den High-Level-Code zu optimieren. In anderen Fällen könnte ein 1337-Programmierer die Baugruppe manuell bearbeiten. Selbst wenn ein Compiler Maschinencode direkt zu produzieren scheint, kann es aus diesem Grund oft vorkommen, dass er Assemblercode produzieren kann.

Sehen diese SO Antwort für weitere Details.


2 für die Antwort № 2

Es ist nur ein Problem der ungenauen Terminologie und spezifischen Implementierungen.

Im "klassischen" Modell wird der Compiler konvertiertHigh-Level-Code zu assemblieren, assembliert der Assembler es, um Code zu programmieren, der in Objektdateien gespeichert wird, die dann verknüpft werden, um eine ausführbare Datei zu erzeugen.

Normalerweise sind alle diese Schritte meist verborgen(besonders der Assembly-Teil), weil Sie den Compiler normalerweise über einen "Compiler-Treiber" aufrufen, der automatisch alle Teile dieser Toolchain aufruft, obwohl es im Allgemeinen Möglichkeiten gibt, den Fluss auf einer bestimmten Ebene zu stoppen, um zu sehen, was gerade passiert Auf der Assembly-Ebene ist es interessant genug, die Arbeit des Compilers zu inspizieren, die es sogar gibt mehrere Seiten, die genau darauf ausgerichtet sind).

Dennoch ist dies sowohl eine ziemlich hohe Ansicht als auchAbhängig von der Sprache und der Implementierung können einige Schritte fehlen oder anders behandelt werden - zum Beispiel kann der Compiler reinen Maschinencode generieren oder der Linker Assembler- / Maschinencode generieren anstatt nur zu verlinken (dies geschieht immer, wenn Sie den Link aktivieren Timecode-Generierung). Das obige Schema ist also genau das - ein nützliches Schema, um den grundlegenden Fluss zu verstehen, es ist keineswegs erschöpfend für die Möglichkeiten, die getan werden können. Solange eine höhere Sprache eintritt, wird irgendein ausführbarer Code ausgeführt, alles geht .