程序转变成可执行文件的过程,hello程序为例

#include<stdio.h>

int main()
{
    printf("hello, world\n");
    return 0;
}

hello.c源程序(文本)----预处理器(cpp)---->hello.i修改了的源程序(文本)-----编译器(ccl)---->hello.s汇编程序(文本)

------汇编器(as)------>hello.o可重定位目标程序(二进制)-------链接器(ld)(这里也有别的.o程序)------>hello可执行目标程序(二进制)

 

预处理阶段:预处理器根据以字符#开头的命令,修改原始的C程序。

编译阶段:编译器将文本文件hello.i翻译成文本文件hello.s,它包含了一个汇编语言程序。

汇编阶段:汇编器将hello.s翻译成机器语言指令,把这些指令打包成一种叫可重定位目标程序的格式,并将结果保存在目标文件hello.o中。 

链接阶段:printf函数存在于printf.o的单独的与编译好了的目标文件中,而这个文件必须以某种方式合并到hello.o中,链接器就是负责这种合并。

 

运行hello程序

shell等待我们输入命令,输入 ./hello  后,shell程序将字符逐一读入寄存器,再放到内存中。

敲击回车后,结束命令输入,shell执行一系列指令加载可执行的hello文件,它放在磁盘里的,代码数据复制到主存。

然后处理器执行hello程序的main程序中的机器语言指令,这些指令将“hello, world\n”字符串中的字节从主存复制到寄存器文件,再复制到显示设备,显示在屏幕上。

 

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值