从程序员开始编写代码,到屏幕显示输出hello world字符串,经历了编辑、编译和运行三个阶段。
编辑阶段完成源程序的编写和保存,源程序其实是由0和1构成的文本序列,所以使用任何一款文本编辑器都可以编写。
编译阶段使用GCC编译系统进行编译。
GCC编译系统的驱动程序负责解析输入的参数,并依次调用预处理器(cpp)、编译器(ccl)、汇编器(as)和链接器(ld),最终生成可执行文件。
在预处理子阶段,使用gcc -E 命令将头文件中的代码包含进源程序,并生成.i文件,命令中选项E代表让gcc在预处理阶段后停止编译。
编译子阶段,gcc首先要检查代码是否有语法错误,以确定代码的实际工作,检查无误后,通过 gcc -S命令把预编译后的.i文件翻译成汇编代码.s文件,命令中选项S表示只进行编译而不进行汇编。
汇编阶段是将编译后的.s文件转化成二进制文件.o的过程,使用命令是gcc -c,小c选项表示生成二进制.o文件。
链接是指将汇编生成的目标文件和库文件链接在一起,生成可执行文件hello。
在执行阶段,我们通过终端输入命令./hello,由命令解释程序shell将负责把该命令通过总线,经I/O桥送入CPU寄存器,然后又经I/O桥临时存储于内存中。
接下来,shell通过一系列指令,利用直接存储访问(DMA)技术,将可执行文件hello中的代码和数据从磁盘拷贝到内存。
此时,CPU便开始执行hello程序中的机器指令,这些指令将字符串“hello,world”中的字节从主存复制到寄存器,又从寄存器复制到显示设备,最终显示在屏幕上!