【计算机基础】结合编程发展历史,聊聊C程序如何生成可执行程序

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨
📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852
📢:文章若有幸对你有帮助,可点赞 👍 收藏 ⭐不迷路🙉
📢:内容若有错误,敬请留言 📝指正!原创文,转载请注明出处


一、编程发展史

总的来说,编程语言的发展历程:机器语言---->汇编语言----->编程语言(高级语言)

1.1第一次革命:从二进制机器码到汇编语言

第一次革命:发明了汇编语言,其本质是用一个符号来代替一串二进制。例如:
MOV 10101010101010
SUB 01010101010101
有了汇编语言之后,程序员就不用再去记忆二进制序列了。编程时只需要用汇编指令来编程即可,汇编指令就是一个符号(符号就是由文字构成的,如MOV)。因为人类大脑天生对文字符号更加友好,因此用符号编程更简单。

用汇编语言编写的源程序不能直接给CPU运行,必须通过一个翻译过程,把源代码翻译成二进制序列才能给CPU。这个翻译的过程就叫汇编,执行翻译动作的就是汇编器。

所谓机器码(机器语言),记忆和理解的方式就是只能机器才能读懂的代码,其本质就是一串二进制数,为了便于人们编程和记忆,因此发明了汇编指令集来代替难以记忆的机器码,但是最终还是要转换为机器码,这个过程称为汇编,汇编器。

1.2第二次革命:从汇编语言到C语言

当然,汇编语言也有一些不尽如人意的地方,譬如:没有可移植性。在这个CPU上写的汇编程序无法直接在另一个CPU上运行,因此汇编语言是和CPU一一对应的。

为了可移植性于是发明了高级语言。第一个高级语言就是C语言。C语言进一步靠近人的思维,为人的思维发明了很多CPU没有的东西,譬如数组。最终的目的就是降低编程难度,让高级语言更接近人的思维,然后通过编译器、汇编器等的翻译将这些源代码变成二进制然后给CPU运行。

1.3第三次革命:从C语言到更高级语言

革命无穷尽、层次变更多:在C语言之上还有更高级语言,譬如:C++、Java、C#、bash等。越往上越靠近人的思维,越往上语言本身提供的封装越多,越往上编程难度越低、语言的掌握越容易。

高级语言与低级语言的差别:
(1)越高级的语言越靠近人类思维;越低级的语言越靠近机器的需要。
(2)人与机器总劳动量(总复杂度)守恒。人要是复杂一点机器就可以简单一点;人简单一点机器就需要复杂一点。这个规律描述的就是:编程语言越简单,人使用起来越简单,编译器设计起来就更复杂;编程语言越复杂、程序员使用起来越麻烦,则编译器设计越简单,CPU执行效率越高。

二、C 程序翻译成机器语言程序的四个经典步骤

在这里插入图片描述

步骤1、预处理

主要是处理一些#号定义的命令或语句(如宏、#include、预编译指令#ifdef等),生成*.i文件

步骤2、编译

C语言编写的源代码通过编译器生成汇编程序。所谓的汇编程序就是汇编语言编写的代码

重点聊聊编译器
编译器:编程语言到机器语言,这个过程称为编译,执行这个过程的工具称为编译器
语法是什么?语法就是编译器的习性
编译器反应在编程中就是语法,因此我们应该要向编译器一样思考吧,对理解编程有很大帮助。

连接人(程序员)与机器(CPU)的桥梁:编译器
(1)编译器降低了编程难度。编译器的代表就是编程语言,每一种编程语言都有对应的编译器,这个编译器的作用就是把这种语言的源文件编译成可执行程序。
(2)关键是:有了编译器(高级语言)之后,我们程序员就不再盯着CPU(二进制),而是改为盯着编译器(编程语言、编程语言的语法),所以我们学习编程的关键变成了学习编译器的习性,也就是编程语言的语法。

发明一门语言关键就在于发明它的编译器
编译语言的关键就是编译器。yacc和lex工具就是用来发明编程语言的。

步骤3、汇编

汇编程序又经过汇编器生成库文件。所谓库文件就是机器语言编写的代码,即机器码。
汇编器:机器语言到汇编语言,这个过程称为汇编,执行这个过程的工具称为汇编器
汇编器作用:
✅1.输入以.s 为后缀的文件,输出.o的文件;
✅2.从处理器能够理解的指令产生目标代码,还能翻译一些扩展指令,汇编程序的开头是一些汇编指示符,它们是汇编器的命令,用于指出代码和数据的位置、指定程序中使用的特定代码和数据常量

步骤4、链接

多个库文件通过链接器集合在一起,最终生成可执行文件,同样是机器人语言编写的代码,将机器语言模块集成化了。
链接器作用:
✅1.链接器允许各个文件独立编译和汇编,这样在改动部分文件时,不需要重新编译全部源代码。
✅2.链接器把新的目标代码和已经存在的机器语言模块(如函数库)等“拼接”起来。链接器这个名字源于它的功能之一,即编辑所有对象文件的跳转并链接指令(jump and link)中的链接部分。它其实是链接编辑器(link editor)的简称。
✅3.输入输出格式:在 Unix 系统中,链接器的输入文件有.o 后缀,输出 a.out 文件;在 MSDOS 中输入文件后缀为.OBJ 或.LIB,输出.EXE 文件。

步骤5、生成可执行文件

可执行文件通过加载器输出结果

CPU只认识二进制机器指令
CPU是最终干活的,而CPU只认识、只接受二进制。
人类喜欢符号而不是二进制
(1)人类的大脑本身不喜欢二进制而喜欢符号、文字。
(2)人类和机器之间天生有代沟,于是乎编程不容易。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌小超

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值