我在各种项目中看到过.S文件,例如Linux内核,FreeBSD内核或其他一些项目。这些文件做了什么以及为什么我们没有.C文件呢?
答案 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)
答案 4 :(得分:5)
他们是assembler code个文件:
汇编语言是一种低级编程语言 计算机,微处理器,微控制器和其他可编程的 每个语句对应一台机器的设备 语言教学。汇编语言特定于某个特定的 与大多数高级编程相比,计算机体系结构 语言,可能更便携。
所以这些文件与C代码文件不同。
答案 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