Shouldn't This File Start With Assembly Language [closed]
http://lxr.linux.no/#linux+v3.0.3/arch/x86/boot/header.S
This is the first file that is first read by the CPU. So shouldn't this start in Assembly Language. It starts with #include so include is a method in C?
#include
is a directive to the preprocessor, not the assembler. The preprocessor has nothing to do with the compiler.
That's the source code to the file. It gets compiled into machine language before it's used as part of the OS.
Given that it's AT&T syntax, the first thing you should do is check out the manual for GAS, which is part of the GNU binutils collection:
http://sourceware.org/binutils/docs-2.21/as/Preprocessing.html#Preprocessing
According to the manual:
"You can use the gnu C compiler driver to get other “CPP” style preprocessing by giving the input file a `.S' suffix."
That means the .S assembly files are meant to be assembled by running them through the GCC frontend, which applies the C preprocessor for macros and #include commands, and then passes the result to the GNU binutils assembler.
This is a .S
file, therefore it can be processed by the C-preprocessor, of which #include
is a valid C-preprocessor directive. If it was only a .s
file, then that would typically be considered a "pure" gas
syntax assembly file, at least from the standpoint of gcc
.
#include
is a preprocessor statement. The compiler won't see it at all.
You are looking at a source file. It will be compiled to produce assembler code and then it will be linked by linker (or compiler in some cases). What linker will do is it will look at linking table and the sections in header.S file and arrange them in correct manner.
That's the pre-processor it will be replaced by some other code after the pre-processing state, which will include the contents of the file at the place where it was defined. After that the compiler will compile the code, and the output from it will be assembled by the assembler, which will them read by the CPU and decoded.
Whatever code you write in whatever language, it is converted into machine code before it can execute. All the C programs are and all others are converted into machine code first and then that code will be read by the CPU, and not the C language syntax.
精彩评论