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”字符串中的字节从主存复制到寄存器文件,再从寄存器文件中复制到显示设备,最终显示在屏幕上。

========================================

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值