http://lxr.linux.no/#linux+v3.0.3/arch/x86/boot/header.S
这是CPU首先读取的第一个文件。所以不应该从汇编语言开始。它以#include开头,所以include是C中的一个方法?
答案 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语言语法。