Ich habe .S
Dateien in verschiedenen Projekten gesehen, beispielsweise im Linux-Kernel, im FreeBSD-Kernel oder in einigen anderen Projekten. Was machen diese Dateien und warum können wir .c
stattdessen keine Dateien haben ?
Antworten:
.S
Dateien sind Quellcodedateien, die in Assembly geschrieben wurden. Die Montage ist eine extrem einfache Form der Programmierung. Die Dateien enthalten Montageanweisungen für den Prozessor in sequentieller Reihenfolge und werden normalerweise basierend auf einer ausgewählten Architektur kompiliert. Beispiele für solche Dateien finden sich häufig im Linux-Kernel für bestimmte Architekturen, z. B. x86, sparc, ARM usw.
Weitere Informationen zur Assemblersprache:
.s
.
Das .S
ist Assemblersprache. Normalerweise ist das so
Etwas, das niemand erwähnt hat, ist warum Kapital S?
.S
(Großbuchstabe S) steht für Assemblycode , der noch einen Vorprozessor durchlaufen muss. Das heißt, es kann #include
und #define
unter anderem Makros haben. Es kann auch als Erweiterung angesehen werden.sx
.s
(unteres s) ist reiner Assembler-Code, der zu einem Objekt kompiliert werden kann.
Warum nicht benutzen .c
? Nun, als Betriebssystem ist es unmöglich, alles in C zu schreiben . Eigentlich wäre das ideal, und die C-Sprache selbst verfügt über einen Hintergrundverlauf, der zum Erstellen von Betriebssystemen und zum Verringern des zum Codieren erforderlichen Assemblys erforderlich ist. Viele Operationen auf niedriger Ebene sind jedoch zu abhängig von der Maschine.
Hier ist ein schönes Beispiel für einen Speicher kopiert Routine für das Linux - Boot , dass Anwendungen
#include <linux/linkage.h>
* .S-Dateien sind Assembly-Dateien.
Warum .S & warum nicht .c Dateien?
Dies liegt daran, dass maschinenabhängige Dinge / frühe Initialisierung wie das Einrichten von Cache und Speicher nur Anweisungen auf Baugruppenebene wie E / A-Anweisungen ausführen können.
Der Kernel verfügt nicht über den Luxus einer libc-Bibliothek, um die anfängliche Einrichtung verschiedener Ressourcen zu übernehmen. Und Hardwareressourcen rufen zu jedem Zeitpunkt auch während der Anwendungsausführung Systemaufrufe auf, die in Assemblersprache codierte E / A-Routinen aufrufen.
Die .S
Erweiterung gibt eine Assemblersprachendatei an .
Warum können wir nicht stattdessen .C-Dateien haben?
Weil der rohe Quellcode - sei es vom Menschen eingegeben oder vom Compiler generiert - Assembly ist, nicht C.
Sie sind Assembler- Codedateien:
Eine Assemblersprache ist eine einfache Programmiersprache für Computer, Mikroprozessoren, Mikrocontroller und andere programmierbare Geräte, bei denen jede Anweisung einer einzelnen Maschinensprachenanweisung entspricht. Eine Assemblersprache ist spezifisch für eine bestimmte Computerarchitektur, im Gegensatz zu den meisten höheren Programmiersprachen, die möglicherweise portabler sind.
Daher sind diese Dateien nicht mit C-Code-Dateien identisch.
Beachten Sie, dass C-Dateien mit Montageanweisungen eingefügt werden können .
.S-Dateien sind Code, der in Assemblersprache geschrieben ist, dh auf einem niedrigen Programmierniveau. Im Linux-Kernel-Quellcode sind .S im Allgemeinen die Startdateien, die der Kernel ausführt, wenn der Linux-Kernel mit dem Booten beginnt (z. B. :- head.S). Wir schreiben dies in .S und nicht in .C, da wir derzeit nicht bereit sind, die .C-kompilierte .O-Datei auszuführen. Wir müssen mit architekturabhängigen Registern arbeiten und den Kernel starten.
.asm
?