什么是.S文件?

时间:2012-04-23 17:37:36

标签: assembly

我在各种项目中看到过.S文件,例如Linux内核,FreeBSD内核或其他一些项目。这些文件做了什么以及为什么我们没有.C文件呢?

8 个答案:

答案 0 :(得分:57)

.S文件是用汇编语言编写的源代码文件。汇编是一种极低级别的编程形式。这些文件按顺序包含处理器的汇编指令,通常根据所选的体系结构进行编译。这些文件的例子经常出现在Linux内核中,用于特定的体系结构,例如x86,sparc,ARM等。

有关汇编语言的更多信息:

答案 1 :(得分:13)

.S是汇编语言。通常是

没有人提及的是为什么大写S?

  • .S(大写S)代表必须仍然通过预处理程序的 assembly 代码。这意味着它可以在其他宏中同时包含#include#define。它也可以看作是扩展名.sx

  • .s(小写s)是纯汇编代码,可以编译成一个对象。

为什么不使用.c?嗯,作为一个操作系统,不可能用 C 编写所有内容。实际上,这将是理想的选择,并且C语言本身具有背景历史,可以帮助创建操作系统并减少对其进行编码所需的汇编数量。但是许多底层操作都过于依赖计算机。

这是一个使用memory copy routine for the linux boot的好例子

#include <linux/linkage.h>

答案 2 :(得分:11)

* .S文件是汇编文件。

  

为什么.S&amp;为什么不.c文件?

因为机器相关的东西/早期初始化,比如设置缓存和放大器内存只能执行汇编级指令,如I / O指令。

内核并没有奢侈的libc库来处理各种资源的初始设置。 而且,即使在应用程序执行期间,任何时候硬件资源依次调用系统调用,调用以汇编语言编写的I / O例程。

答案 3 :(得分:6)

.S扩展名表示assembly language file

  

为什么我们不能使用.C文件?

因为原始源代码 - 无论是人类输入还是编译器生成 - 是汇编,而不是C。

答案 4 :(得分:5)

他们是assembler code个文件:

  

汇编语言是一种低级编程语言   计算机,微处理器,微控制器和其他可编程的   每个语句对应一台机器的设备   语言教学。汇编语言特定于某个特定的   与大多数高级编程相比,计算机体系结构   语言,可能更便携。

所以这些文件与C代码文件不同。

请注意C files can be inlined with assembly instructions

答案 5 :(得分:4)

.S文件是汇编语言文件。它们是机器代码的一种形式。它的编程水平很低。 所有依赖于机器的代码都是用汇编语言编写的。汇编语言对于不同的处理器是不同的。

答案 6 :(得分:2)

.S文件是用汇编语言编写的代码,即低级编程。在linux内核源代码中,.S通常是内核在linux内核启动时运行的起始文件(例如: - head.S)。我们用.S而不是.C写这个。因为我们还没准备好运行.C编译的.O文件。我们需要使用体系结构相关的寄存器并启动内核。

答案 7 :(得分:0)

为了完整起见:还有另一个“.s”文件,它不是汇编文件,而是用于对微控制器进行编程的“SREC”二进制文件(以 ASCII 编码)。

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

打开这样的文件后,您会看到如下所示的文本行:

S315000000500C9413110C94D510189518950C949710B0
S31500000060189518950C941010189518950C946A10FC
S31500000070189518950C9403131895189518951895B6
S315000000800C940B1218951895189518950C944912FE
S315000000900C943D101895189518951895189518955F