此文件不应以汇编语言开头

时间:2011-08-22 15:55:07

标签: c linux assembly boot

http://lxr.linux.no/#linux+v3.0.3/arch/x86/boot/header.S

这是CPU首先读取的第一个文件。所以不应该从汇编语言开始。它以#include开头,所以include是C中的一个方法?

7 个答案:

答案 0 :(得分:2)

#include是预处理程序的指令,而不是汇编程序。预处理器与编译器无关。

答案 1 :(得分:1)

这是该文件的源代码。它在被用作操作系统的一部分之前被编译成机器语言。

答案 2 :(得分:1)

鉴于它是AT& T语法,你应该做的第一件事是查看GAS手册,它是GNU binutils集合的一部分:

http://sourceware.org/binutils/docs-2.21/as/Preprocessing.html#Preprocessing

根据手册:

  

“您可以使用gnu C编译器驱动程序通过为输入文件提供”.S“后缀来获得其他”CPP“样式预处理。”

这意味着.S程序集文件是通过在GCC前端运行它们来组装的,GCC前端为宏和#include命令应用C预处理器,然后将结果传递给GNU binutils汇编程序。

答案 3 :(得分:1)

这是一个.S文件,因此它可以由C预处理器处理,其中#include是一个有效的C预处理器指令。如果它只是.s文件,那么通常会将其视为“纯”gas语法程序集文件,至少从gcc的角度来看。

答案 4 :(得分:0)

#include是一个预处理器语句。编译器根本看不到它。

答案 5 :(得分:0)

您正在查看源文件。它将被编译为生成汇编代码,然后它将通过链接器(或某些情况下的编译器)链接。链接器将做什么,它将查看链接表和header.S文件中的部分,并以正确的方式排列它们。

答案 6 :(得分:0)

这是预处理器,它将在预处理状态之后被其他一些代码替换,其中包括文件在其定义位置的内容。之后,编译器将编译代码,汇编器将汇编它的输出,由CPU读取并解码。

无论您使用何种语言编写任何代码,都可以在执行之前将其转换为机器代码。所有C程序都是,所有其他程序首先转换为机器代码,然后CPU将读取该代码,并且 C语言语法。