系统执行hello程序时,发生了什么

C语言HelloWorld程序解析
本文深入解析了C语言中的经典HelloWorld程序,从源代码的创建到编译、执行的全过程,详细介绍了程序的生命周期,包括源程序的位表示、预处理、编译、汇编、链接以及程序的执行流程。

hello 程序

#include <stdio.h>
int mian ()
{
	printf("hello world \n")
}

程序的生命周期

它被程序员创建,到系统上运行,输出简单的消息,然后终止。

信息就是位(标记)+上下文
1.源程序开始
程序员利用文本编辑器创建并保存的文本文件,文件名hello.c。源程序实际上是由值0和1组成位序列,8位一字节,每个字节表示文本中的一个字符(ASCII实际就是用唯一单字节大小的整数值来表示每个字符)
hello.c就是以字节序列的方式存储在文件中,每个字节都有一个整数值,这种字符构成的称为文本文件,其他文件都成为二进制文件。
系统中所有的信息都是由一串位表示的,区分数据对象的唯一方法就是我们读到这些数据时的上下文。不同上下文中,同样的字节序列可能表示一个整数、浮点数、字符串和机器指令。(数字的机器表示)

2.程序被翻译
开始是一个高级c语言程序(这种形式能被人读懂),然而为了在系统上运行,每条c语句必须转化成一系列低级机器语言指令。然后这些指令按照 ‘可执行目标程序(目标程序)’ 的格式打包好,以二进制磁盘文件存储起来。
源文件到目标文件的转化是由编译器完成的。这个过程可以分为四个阶段:(源程序)预处理(被修改的源程序(把头文件内容插入源程序))、编译器(汇编程序)、汇编器(可重定位目标文件(它的字节编码是机器语言指令))和链接器(把标准c库中的printf函数合并到hello中,得到目标文件,这个文件是可执行的)
3.程序被执行
我们将文件名输入称为外壳的应用程序中,系统运行该可执行文件,输出hello,world(外壳是一个命令行解释器,该命令行第一个单词不是一个内置命令,外壳就会假设是一个可执行文件,加载并运行它)
初始 时,外壳程序执行它的指令,等待我们输入一条指令,我们输入“./hello”后外壳程序将字符逐一读入寄存器,再把它放到存储器中
当我们敲下回车时,外壳程序就知道我们结束命令输入,然后外壳程序执行一系列指令来加载可执行hello文件,将hello从磁盘复制到主存(数据中包括最终输入的字符串“hello world \n”)
直接存储器存取(DMA),数据不经过处理器直接从磁盘到达主存
目标文件hello 被加载到主存,处理器就开始执行hello程序的main程序中的机器指令,这些指令将“hello world \n”字符串从主存复制到寄存器文件 ,再从寄存器文件复制到显示设备,最终显示在屏幕上。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值