Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 这个文件不应该以汇编语言开头吗_C_Linux_Assembly_Boot - Fatal编程技术网

C 这个文件不应该以汇编语言开头吗

C 这个文件不应该以汇编语言开头吗,c,linux,assembly,boot,C,Linux,Assembly,Boot,这是CPU首先读取的第一个文件。所以这不应该从汇编语言开始。它以include开头,那么include是C中的一个方法吗 这是文件的源代码。在作为操作系统的一部分使用之前,它会被编译成机器语言。include是一条预处理器语句。编译器根本看不到它。include是预处理器的指令,而不是汇编程序的指令。预处理器与编译器无关。您正在查看源文件。它将被编译以产生汇编代码,然后在某些情况下,它将被链接器或编译器链接。链接器要做的是查看链接表和header.S文件中的节,并以正确的方式排列它们 这是预处理

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

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

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

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

您正在查看源文件。它将被编译以产生汇编代码,然后在某些情况下,它将被链接器或编译器链接。链接器要做的是查看链接表和header.S文件中的节,并以正确的方式排列它们

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


不管你用什么语言写什么代码,它在执行之前都会被转换成机器代码。所有C程序和所有其他程序都首先转换为机器代码,然后CPU将读取该代码,而不是C语言语法。

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

根据手册:

您可以使用GNUC编译器驱动程序通过给输入文件一个“.S”后缀来获得其他“CPP”样式的预处理

这意味着要通过GCC前端运行.S汇编文件来进行汇编,GCC前端对宏和include命令应用C预处理器,然后将结果传递给GNU binutils汇编程序。

这是一个.S文件,因此可以由C预处理器处理,其中include是有效的C预处理器指令。如果它只是一个.s文件,那么至少从gcc的角度来看,它通常被认为是一个纯gas语法汇编文件