详谈程序到可执行程序的转变过程

程序到可执行程序的转变过程

  在计算机中,计算机将8个连续的位分成一个小的组,这一个小的组就组成了一个字节,因为每一个位能够表示0和1两种状态,所以一个位也一共能表示2^8个状态,分别是0-255,之后也就有了ASCII的使用。
  而对于所有的语言中,我们所有接触的一个代码都是hello的打印,其中这里面的每一个字符都是可以在ASCLL中找到并表示出来。
  下面我们以hello为例,描述下编程到机器2进制的过程。如图:
在这里插入图片描述
  1.对于预处理阶段,计算机主要将人们常说的头文件进行展开,这里的头文件包括了引用别人的头文件和自己自定义的头文件,并且这里面的头文件并不能出现包含关系,但如果真的出现包含关系,也是可以解决的,但这里就不过多描述。这之后我们就会得到另一个通常后缀为.i的C语言程序。
  2.编译阶段主要就是对.i的文件翻译成.s文件,这里面包含了一种叫做汇编语言程序的东西,生活中汇编语言还是经常常用的,一个合格的程序员,不要求能写出汇编语言,但至少是能够看懂汇编的。
  3.汇编阶段,汇编器会将.s文件翻译成机器指令语句,它的字节编码是机器语言指令而不是字符,如果我们在文本编译器中打开hello.o文件,看到的是一堆乱码。
  4.链接阶段,在这个阶段中,计算机会将使用的函数进行调用,拿hello来说,这里面就会调用printf.o这个文件,因为这个文件也是被人写好的库文件,也是函数,在这个阶段,会把单独编译好的printf.o文件以某种方式整合到hello.o文件上,当所有需要整合的文件都整合在了hello.o文件上,hello.o文件就成为了一个可执行目标文件,这时就可以被加载到内存,由系统执行。

猜你喜欢

转载自blog.csdn.net/weixin_43580319/article/details/111308095