我.S
在各种项目中都看到过文件,例如Linux内核,FreeBSD内核或其他一些项目中。这些文件是做什么用的,为什么我们没有.c
文件呢?
Answers:
.S
文件是用汇编语言编写的源代码文件。汇编是一种非常底层的编程形式。这些文件包含按顺序发送给处理器的汇编指令,并且通常基于选定的体系结构进行编译。在Linux内核中通常会看到此类文件的示例,以用于特定的体系结构,例如x86,sparc,ARM等。
有关汇编语言的更多信息:
.s
。
那.S
就是汇编语言。通常那是
没有人提到的是为什么要大写S吗?
.S
(大写S)代表仍必须通过预处理程序的汇编代码。这意味着它可以具有#include
和#define
其他宏。它也可以看作是扩展.sx
.s
(lower s)是可以汇编为对象的纯汇编代码。
为什么不使用.c
?嗯,作为一个操作系统,不可能用C编写所有内容。实际上,这是理想的选择,并且C语言本身具有背景历史,可以帮助创建操作系统并减少对其进行编码所需的汇编数量。但是许多底层操作过于依赖机器。
这是一个使用以下代码的linux引导程序的内存复制例程的好示例
#include <linux/linkage.h>
它们是汇编代码文件:
汇编语言是用于计算机,微处理器,微控制器和其他可编程设备的低级编程语言,其中每个语句对应于一条机器语言指令。与大多数更高级的编程语言相比,汇编语言特定于特定的计算机体系结构。
因此这些文件与C代码文件不同。
请注意,C文件可以内联汇编指令。
.S文件是用汇编语言编写的代码,即低级编程。在Linux内核源代码中,.S通常是当Linux内核开始引导时内核运行的起始文件(例如:-head.S)。我们用.S而不是.C编写此文件,因为我们目前不准备运行.C编译的.O文件。我们需要使用与体系结构相关的寄存器,并启动内核。
.asm
?