Wat zijn .S-bestanden?

Ik heb .S-bestanden in verschillende projecten gezien, zoals in de Linux Kernel, FreeBSD-kernel of in sommige andere projecten. Wat doen deze bestanden en waarom kunnen we in plaats daarvan geen .c bestanden hebben?


Antwoord 1, autoriteit 100%

.S-bestanden zijn broncodebestanden die in assembly zijn geschreven. Assembleren is een vorm van programmeren op extreem laag niveau. De bestanden bevatten montage-instructies voor de processor in sequentiële volgorde en worden meestal gecompileerd op basis van een geselecteerde architectuur. Voorbeelden van dergelijke bestanden worden vaak gezien in de linux-kernel voor specifieke architecturen, b.v. x86, sparc, ARM, enz.

Voor meer informatie over assembler:


Antwoord 2, autoriteit 61%

Die .S is assembler. Meestal is dat

Iets wat niemand noemde is waarom hoofdletter S?

  • .S (hoofdletter S) staat voor assembly code die nog door een pre-processor moet. Dat betekent dat het naast andere macro’s #include en #define kan hebben. Het kan ook worden gezien als extensie .sx

  • .S (lagere s) is pure assembly-code die kan worden gecompileerd tot een object.

Waarom gebruikt u .c niet? Omdat het een besturingssysteem is, is het onmogelijk om alles in C te schrijven. Eigenlijk zou dat ideaal zijn, en C-taal zelf heeft een achtergrondgeschiedenis die is gekoppeld aan het helpen bij het maken van besturingssystemen en het verminderen van de hoeveelheid assemblage die nodig is om het te coderen. Maar veel bewerkingen op laag niveau zijn te afhankelijk van de machine.

Hier een mooi voorbeeld van een geheugenkopieerroutine voor de linux-boot die gebruikmaakt van

#include <linux/linkage.h>


Antwoord 3, autoriteit 15%

*.S-bestanden zijn assembly-bestanden.

Waarom .S & waarom geen .c-bestanden?

Het is omdat machine-afhankelijke dingen/vroege initialisatie zoals het instellen van cache & geheugen kan alleen op montageniveau worden uitgevoerd, zoals I/O-instructies.

De kernel heeft niet de luxe van een libc-bibliotheek om voor de initiële instelling van verschillende bronnen te zorgen.
En hardwarebronnen roepen op elk moment, zelfs tijdens de uitvoering van de applicatie, systeemaanroepen op die I/O-routines oproepen die zijn gecodeerd in assembler.


Antwoord 4, autoriteit 9%

De extensie .S geeft een taalbestand voor montage.

Waarom kunnen we in plaats daarvan geen .C-bestanden hebben?

Omdat de onbewerkte broncode – of deze nu door een mens is ingevoerd of door een compiler is gegenereerd – assemblage is, niet C.


Antwoord 5, autoriteit 5%

Het zijn assembler code bestanden:

Een assembleertaal is een programmeertaal op laag niveau voor
computers, microprocessors, microcontrollers en andere programmeerbare
apparaten waarin elke instructie overeenkomt met een enkele machine
taal instructie. Een assembler is specifiek voor een bepaalde
computerarchitectuur, in tegenstelling tot de meeste programma’s op hoog niveau
talen, die mogelijk draagbaarder zijn.

en dus zijn deze bestanden niet hetzelfde als C-codebestanden.

Houd er rekening mee dat C-bestanden kunnen worden ingevoegd met montage-instructies.


Antwoord 6, autoriteit 4%

.S-bestanden zijn assembleertaalbestanden. Ze zijn een vorm van machinecode. Het is op een laag programmeerniveau.
Alle machine-afhankelijke code is geschreven in assembler. De assembleertaal is verschillend voor verschillende processors.


Antwoord 7, autoriteit 2%

.S-bestanden zijn code geschreven in assembler, d.w.z. een laag programmeerniveau. In de broncode van de linux-kernel zijn .S over het algemeen de startbestanden die de kernel uitvoert wanneer de linux-kernel begint op te starten (voor bijv.:-head.S) . We schrijven dit in .S en niet in .C omdat we op dit moment nog niet klaar zijn om een ​​.C gecompileerd .O-bestand uit te voeren. We moeten werken met architectuurafhankelijke registers en de kernel starten.


Antwoord 8

Voor de volledigheid: er is NOG EEN “.s”-bestand, dat is geen assembly, maar eerder een “SREC” binair bestand (gecodeerd in ASCII) dat wordt gebruikt om microcontrollers te programmeren.

https://en.wikipedia.org/wiki/SREC_(file_format)

Als u zo’n bestand opent, ziet u tekstregels die er als volgt uitzien:

S315000000500C9413110C94D510189518950C949710B0
S31500000060189518950C941010189518950C946A10FC
S31500000070189518950C9403131895189518951895B6
S315000000800C940B1218951895189518950C944912FE
S315000000900C943D101895189518951895189518955F

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes