什么是.S文件?

Eas*_*onk 61 assembly

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

luk*_*ell 66

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

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

  • 为什么不叫````.asm````? (7认同)
  • @Liga:我不知道为什么 Unix 汇编程序最初选择了`.s`/`.S`,但现在在现代 x86 上,对 NASM/YASM/FASM/MASM/JWASM/etc 源文件使用 `.asm` 是正常的(对 GAS/clang asm 源文件使用“dd”和“.S”等指令(使用“.long”等指令,并默认为 AT&T 语法)。我认为有些人*确实*使用“.asm”作为 GAS 源文件不过,特别是对于像 ARM 这样的其他架构,也许特别是对于嵌入式开发。(当然对于像 Keil 这样使用不同语法的非 GAS ARM 汇编器来说。) (3认同)
  • 因为有人更喜欢“.s”。 (2认同)

Dr *_*eco 19

.S就是汇编语言.通常就是这样

没有人提到的是为什么资本S?

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

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

为什么不用.c?好吧,作为一个操作系统,用C编写所有内容是不可能的.实际上,这将是理想的,并且C语言本身具有链接的背景历史,以帮助创建操作系统并减少编码所需的汇编量.但是许多低级操作过于依赖机器.

一个在这里一个很好的例子Linux引导内存拷贝日常使用

#include <linux/linkage.h>

  • 这个答案非常重要。事实上,扩展案例至关重要。对于某些不关心扩展大小写的操作系统(即Windows)来说,这可能是一场噩梦! (4认同)
  • 大写s和小写字母的大量附加信息。 (2认同)
  • 是的,这个答案非常重要。我最近刚刚遇到“.s”问题。该代码是从其他项目复制的,我只是将“.S”更改为“.s”。我必须将“#define SOME_CONST 1”更改为“SOME_CONST = 1”并将其放入“.s”文件中。这让我很困惑。我检查了编译标志,没有任何线索......然后我猜测后缀可能很重要?然后搜索点击此链接并回答:) (2认同)

use*_*958 13

*.S文件是汇编文件.

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

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

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


Mat*_*all 7

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

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

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


小智 5

它们是汇编代码文件:

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

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

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