hello world的生命周期
源程序 hello.c
- 定义:程序员通过编译器创建并保存的文本文件(只由ASCII字符构成的文件)。
- 文件名是hello.c。
- 实际上是一个由0和1组成的位序列,8个位被组织成一组,称为字节。
=======================================
预处理器(cpp)
- 作用:根据以字符#开头的命令,修改原始的C程序。
=======================================
修改了的源程序:hello.i
========================================
编译器(ccl)
- 作用:将文本文件hello.i翻译成文本文件hello.s,它包含一个汇编语言程序。
- 汇编语言为不同高级语言的不同编译器提供了通用的输出语言。
========================================
文本文件:hello.s
========================================
汇编器(as)
- 作用:将hello.s翻译成机器语言指令,把这些指令打包成一种叫做可重定位目标程序的格式,并将结果保存在hello.o中。
=======================================
二进制文件:hello.o
========================================
链接器(ld)
- 若存在printf函数,printf函数存在于一个名为prinf.io的单独预编译好了的目标文件中,而这个文件必须以某种方式合并到我们的hello.o程序中。连接器就负责处理这种合并,结果就得到一个可执行目标文件hello,可以被加载到内存中,由系统执行。
========================================
二进制的可执行目标程序:hello
- 被存放在磁盘上
========================================
Shell应用程序
- 定义:命令行解释器,它输出一个提示符,等待输入一个命令行,然后执行这个命令。
- 我们需要做的:将可执行文件的文件名输入到该程序中
具体内部过程:
linux> ./hello
- 此时shell程序将字符逐一读入寄存器,再把它存放在内存中。
hello.world
linux>
========================================
=======================================
内存
- hello中的代码和数据被加载到主存,处理器就开始执行hello程序中的main程序中的机器语言指令。这些指令将“hello,world\n”字符串中的字节从主存复制到寄存器文件,再从寄存器文件中复制到显示设备,最终显示在屏幕上。
========================================