Was sind .S-Dateien?

75

Ich habe .SDateien 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 .cstattdessen keine Dateien haben ?

Ostmönch
quelle

Antworten:

79

.SDateien 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:

Lukecampbell
quelle
3
Warum heißt es nicht .asm?
Liga
Weil jemand es vorgezogen hat .s.
user14387228
40

Das .Sist 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 #includeund #defineunter 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>

DrBeco
quelle
2
Diese Antwort ist sehr wichtig. In der Tat ist der Erweiterungsfall kritisch. Dies kann unter einigen Betriebssystemen (z. B. Windows) ein Albtraum sein, der sich nicht um den Erweiterungsfall kümmert!
SiZiOUS
13

* .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.

user1457958
quelle
8

Die .SErweiterung 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.

Matt Ball
quelle
Link ist unterbrochen.
Danijel
5

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 .


quelle
4

.S-Dateien sind Assemblersprachendateien. Sie sind eine Form von Maschinencode. Es ist auf einem niedrigen Programmierniveau. Der gesamte maschinenabhängige Code wird in Assemblersprache geschrieben. Die Assemblersprache ist für verschiedene Prozessoren unterschiedlich.

Raunak
quelle
2

.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.

Srikant-Capitolia
quelle