什么是.S文件?

我在各种项目中见过.S文件,例如在Linux Kernel,FreeBSD内核或其他项目中。 这些文件是做什么的,为什么不能.C文件呢?

.S文件是汇编编写的源代码文件。 汇编是一种极其低级的编程forms。 这些文件按顺序包含处理器的汇编指令,并且通常基于选定的架构进行编译。 这些文件的例子经常在linux内核中看到,用于特定的体系结构,例如x86,sparc,ARM等。

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

  • X86 Assembly / GAS语法
  • x86指令列表
  • TLDP Linux大会如何
  • Linux内核中的示例: arch / x86 / net / bpf_jit.S

* .S文件是汇编文件。 为什么.s和为什么不.c文件? 因为机器相关的东西/早期的初始化就像设置caching和内存一样,只能进行I / O指令等汇编级指令。 内核并没有奢侈的libc库来照顾各种资源的初始设置。 即使在应用程序执行期间,任何时候的硬件资源都会调用调用以汇编语言编码的I / O例程的系统调用。

他们是汇编代码文件:

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

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

请注意, C文件可以使用汇编指令进行内联 。

.S扩展名表示汇编语言文件 。

为什么不能有.C文件呢?

由于原始源代码(无论是人工input还是汇编程序生成的)都是汇编语言,而不是C语言。

.S文件是汇编语言文件。 它们是机器代码的一种forms。 这是一个低水平的编程。 所有与机器有关的代码都是用汇编语言编写的。

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