Vraag Wat zijn .S-bestanden?


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


40
2018-04-23 17:37


oorsprong


antwoorden:


.S bestanden zijn broncodebestanden die in de assembly zijn geschreven. Assemblage is een extreem laag niveau van programmeren. De bestanden bevatten assemblage-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, etc.

Voor meer informatie over assembleertaal:


44
2018-04-23 17:40



* .S-bestanden zijn assembly-bestanden.

Waarom .S & waarom niet .c-bestanden?

Het is omdat machine-afhankelijke spullen / vroege initialisatie zoals het instellen van cache en geheugen alleen assemblagelijninstructies zoals I / O-instructies kunnen uitvoeren.

De kernel heeft niet de luxe van LibB-bibliotheek om te zorgen voor de eerste set-up van verschillende bronnen. En hardwarebronnen op elk moment, zelfs tijdens de uitvoering van toepassingen, draaien op hun beurt systeemoproepen die I / O-routines in gecodeerde taal coderen.


9
2018-01-04 23:20



Zij zijn assembler code bestanden:

Een assembleertaal is een low-level programmeertaal voor   computers, microprocessors, microcontrollers en andere programmeerbare   apparaten waarin elke instructie overeenkomt met een enkele machine   taalonderwijs. Een assembleertaal is specifiek voor een bepaald taalgebruik   computerarchitectuur, in tegenstelling tot de meeste programmering op hoog niveau   talen, die mogelijk draagbaarder zijn.

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

Let daar op C-bestanden kunnen worden ingelijst met montage-instructies.


5
2018-04-23 17:40



De .S extensie geeft een aan assembly taalbestand.

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

Omdat de onbewerkte broncode - of deze nu door mensen is ingevoerd of door een compilator is gegenereerd - assemblage is, niet C.


5
2018-04-23 17:40



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


4
2018-01-12 18:06



.S-bestanden zijn geschreven in assembleertaal, dat wil zeggen een laag programmeerniveau. In linux kernel broncode zijn .S over het algemeen de startbestanden die de kernel uitvoert wanneer de linux kernel begint met booten (voor bijvoorbeeld: -hoofd.S). We schrijven dit in .S en niet in .C omdat we niet klaar zijn om .C-gecompileerd .O-bestand op dit moment uit te voeren. We moeten werken met architectuur-afhankelijke registers en de kernel starten.


2
2017-08-22 18:27



Dat .S is assembleertaal. Meestal is dat zo

Iets dat niemand heeft genoemd, is waarom hoofdstad S?

  • .S (hoofdletter S) staat voor bijeenkomst code die nog steeds door een pre-processor moet gaan. Dat betekent dat het kan hebben #includeen #define onder andere macro's. Het kan ook als extensie worden gezien .sx

  • .s (lagere s) is pure assemblagecode die in een object kan worden gecompileerd.

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

Hier een mooi voorbeeld van een routine voor het kopiëren van geheugen voor de Linux-boot dat gebruikt

#include <linux/linkage.h>


1
2018-06-30 00:18