2012-04-23 9 views
38

私は、Linuxカーネル、FreeBSDカーネル、または他のいくつかのプロジェクトのようなさまざまなプロジェクトの.Sファイルを見てきました。これらのファイルは何をしますか、代わりに.Cファイルを持っていないのはなぜですか?.Sファイルとは何ですか?

答えて

41

ファイルは、アセンブリで書かれたソースコードファイルです。アセンブリーは非常に低レベルのプログラミングです。ファイルには、プロセッサへのアセンブリ命令が順番に格納され、通常、選択されたアーキテクチャに基づいてコンパイルされます。このようなファイルの例は、Linuxカーネルで特定のアーキテクチャーでよく見られます。アセンブリ言語の詳細についてなどのx86、SPARC、ARM、

5

彼らはassembler codeファイルです:アセンブリ言語は コンピュータ、マイクロプロセッサ、マイクロコントローラ、および各ステートメントは単一のマシン 語命令に対応した他のプログラマブル デバイス用の低水準言語である

。アセンブリ言語は、多くのハイレベルプログラミング 言語とは対照的に、特定の コンピュータアーキテクチャに固有のものであり、移植性が高い場合があります。

これらのファイルはCコードファイルと同じではありません。

C files can be inlined with assembly instructionsに注意してください。

4

.Sは、assembly language fileを示します。

代わりに.Cファイルを使用できないのはなぜですか?

生ソースコードので - それは、人間が入力またはアセンブラで生成することは、 - アセンブリではなく、C.

.S
2

.Sファイルはアセンブリ言語で書かれたコード、つまり低レベルのoですfプログラミング。 Linuxカーネルのソースコードでは、.Sは一般に、Linuxカーネルの起動時にカーネルが実行する開始ファイルです(例:--head.Sのように)。このとき、.Cファイルをコンパイルする準備が整っていないので、これを.Cではなく.Sで記述します。アーキテクチャに依存するレジスタで作業し、カーネルを起動する必要があります。

9

* .Sファイルはアセンブリファイルです。 .s &なぜ.cファイルではないのですか? キャッシュは、I/O命令などのアセンブラレベルの命令でしか実行できません。 カーネルは、さまざまなリソースの初期設定を処理するためのlibcライブラリの贅沢を持っていません。 アプリケーション実行中でもハードウェアリソースは、アセンブリ言語でコーディングされたI/Oルーチンを呼び出すシステムコールを呼び出します。

+0

このリンクを確認してください...そのARM BOOTシーケンス... – user1457958

+0

http://www.linux-arm.org/LinuxBootLoader/MONItor! – user1457958

4

.Sファイルはアセンブリ言語ファイルです。それらは機械コードの一種です。それはプログラミングのレベルが低いです。 すべてのマシン依存コードはアセンブリ言語で書かれています。アセンブリ言語はプロセッサによって異なります。

関連する問題