![](https://pic002.cnblogs.com/images/2012/152332/2012062218092443.png)
源程序(或者源文件):是程序员通过文本编辑器创建并保存的文本文件。源程序实际就是由0和1组成的位序列,这些位8个一组,成为字节,每个字节通过ASCII字符集(大部分是)对应一个文本字符。
![](https://pic002.cnblogs.com/images/2012/152332/2012052511415738.png)
在终端输入man ascii看看ascii表
操作步骤:
查看16进制格式
回复到文本格式
![](https://pic002.cnblogs.com/images/2012/152332/2012052511415738.png)
![](https://pic002.cnblogs.com/images/2012/152332/2012062313521061.png)
查看main.i的部分源码
总结:预处理器(cpp)根据以字符#开头的命令,修改原始C程序,结果得到了另一个C程序(还是C程序),通常以i做为文件扩展名。
查看main.s的源码
总结:将C语言文本文件翻译成汇编语言文本文件。——汇编语言是非常有用的,因为它为不同高级语言的不同编译器提供了通用的输出语言。
打开源代码,注意此时为二进制磁盘文件,还有注意操作步骤
此时为乱码,需要进行:%!xxd操作
查看指令
总结:汇编器(as)将main.s翻译成机器语言指令,把这些指令打包成为一种“可重定位目标程序“的格式,并将结果保存到main.o文件中,main.o是二进制文件,它的字节编码是机器语言指令而不是字符(所以用文本编译器看会出现乱码)。
按照汇编阶段操作,查看部分指令码
总结:程序中调用了printf函数,它是C标准库的一个函数,printf函数存在于一个名为printf.o的单独的预编译目标文件中。连接器(ld)负责把printf.o的预编译目标文件进行并入,结果就得到a.out文件。
NOTE:a.out是可执行的目标文件,而main.o是可重定位目标程序文件。——可执行目标文件加载到系统存储器后,由系统负责执行。而可重定位目标程序文件是提供给链接器使用,执行并入操作。
![](https://pic002.cnblogs.com/images/2012/152332/2012052511415738.png)
![](https://pic002.cnblogs.com/images/2012/152332/2012052511415738.png)
科普普及:
1、主存用来存放指令和指令处理的数据。
2、处理器(CPU的简称)是解释(或执行)存储在主存中指令的引擎。在任何一个时间点上,CPU中的PC(程序计数器)都指向主存中的某条机器语言指令。
3、有一种DMA(直接存储器存取)技术,数据可以不通过处理器而直接从磁盘到达主存储器。
![](https://pic002.cnblogs.com/images/2012/152332/2012052511415738.png)
![](https://pic002.cnblogs.com/images/2012/152332/2012050707292019.png)