什么是.S文件?


79

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

Answers:


84

.S文件是用汇编语言编写的源代码文件。汇编是一种非常底层的编程形式。这些文件包含按顺序发送给处理器的汇编指令,并且通常基于选定的体系结构进行编译。在Linux内核中通常会看到此类文件的示例,以用于特定的体系结构,例如x86,sparc,ARM等。

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


4
为什么不叫它.asm
西甲

因为有人偏爱.s
user14387228 20-10-24

46

.S就是汇编语言。通常那是

没有人提到的是为什么要大写S吗?

  • .S(大写S)代表仍必须通过预处理程序的汇编代码。这意味着它可以具有#include#define其他宏。它也可以看作是扩展.sx

  • .s (lower s)是可以汇编为对象的纯汇编代码。

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

这是一个使用以下代码的linux引导程序内存复制例程的好示例

#include <linux/linkage.h>


2
这个答案很重要。确实,扩展案例至关重要。在某些不关心扩展名情况的操作系统(例如Windows)上,这可能是一场噩梦!
SiZiOUS

13

* .S文件是汇编文件。

为什么使用.S和为什么不使用.c文件?

这是因为只能依赖汇编程序级指令(例如I / O指令)来完成与机器相关的填充/早期初始化,例如设置缓存和内存。

内核没有libc库的功能来处理各种资源的初始设置。甚至在应用程序执行期间的任何时候,硬件资源都将依次调用系统调用,这些系统调用将调用以汇编语言编码的I / O例程。


8

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

为什么我们不能拥有.C文件?

因为原始源代码(无论是人工输入还是编译器生成的)都是汇编语言,而不是C语言。


链接断开。
Danijel

5

它们是汇编代码文件:

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

因此这些文件与C代码文件不同。

请注意,C文件可以内联汇编指令


4

.S文件是汇编语言文件。它们是机器代码的一种形式。它处于较低的编程水平。所有与机器相关的代码均以汇编语言编写。不同处理器的汇编语言有所不同。


2

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.