作者简介东星耀杨,C站煮播之星,【无规则教学】创始人,曾奉太上老君之名下凡,为了给迷途中的兄弟萌指点迷津帮助兄弟萌早日踏入如我这般境界!世人见我,皆称之“王霸之气侧漏”的男人,哇靠蒸滴c!c了兄弟萌!

往期回顾
【数据库专题】智多星带你五分钟攻略“关系代数”——《狗叫江湖》第二幕续集
【数据库专题】“第二幕”——《狗叫江湖》之关系数据库(1)“解锁新角色:刘能“
【数据库专题】“第一幕”——《狗叫江湖》之数据库系统概论(续集)【蒸滴很c】
耀杨和兄弟萌的约定:等我到一千粉,给兄弟萌发红包!感谢兄弟萌的陪伴和支持!
目录下面奉上本人靓照

《认真教学》

兄弟萌,耀杨今天心情不佳本来不打算更新了,可想到已经快两天没有给兄弟萌出教学了,还是在晚上九点时分来给兄弟萌出一期教学。今天就没有骚话了,好好做教学。

《Hello world到底是怎么来的?》

之前课上老师给我们讲到了这个问题,颇有意思,问的是:

在c语言中:

printf("Hello World");

在系统中是怎样运行的?深挖其中的原理究竟是什么?这个问题着实勾起了耀杨的注意。

当初学c的时候觉得这只是很简单的问题,没想到背后还有这么深的奥义!

  • Hello World是给人看的语言。用中国话来讲是“世界你好!”但是如果要机器去识别这段话可不是那么容易的事情,Hello World看似简单的一段文本,可是机器想要看懂,就需要经过预编译、编译、汇编、链接四个过程将之转换为可执行的二进制文件。

各部分完成的具体工作如下:

预处理器:根据以#开头的命令,修改源程序。如根据#include行,预处理器读取系统头文件stdio.h中的内容,代替此行内容。源程序经过预处理后,得到另一个c程序,此程序通常以.i为后缀保存。

编译器:将预处理后的.i文件转换成汇编程序。编译器将不同的高级语言(如c语言,C++语言)转换成严格一致的汇编语言格式进行输出。汇编语言以标准的文本格式确切的描述每机器语言指令。编译器得到的文件通常以.s为后缀保存。

汇编器:将汇编语言(.s文件)翻译成机器语言指令,并将这些指令打包成一种可定位目标程序格式。汇编后得到的文件即为二进制文件,通常以.o为后缀。

链接器:hello,world程序中调用过printf函数,它是一个c标准库里的函数。Printf函数存放在一个名为printf.o的单独预编译的文件中。而这个文件必须以适当的方式并入到我们的程序中,这个工作由链接器完成。将外部的.o文件并入后,得到一个完整的hello,world可执行文件。可执行文件加载到存储器后,由系统复制执行。

好了到这里咱么已经获得了Hello World 的可执行二进制文件。

接下来这份可执行二进制文件就被输入进了shell(命令行解释器)中,shell将其从磁盘中加载到存储器中,在通过处理器进行解释执行,得到最终的结果,通过终端将结果打印在屏幕中。到这里Hello World就成功地问世了!

值得一提的是,当这份可执行文件被运送到了主存中,cpu会执行相应的机器指令,将Hello World这几个字符从主存中赋值到寄存器文件中,再将其复制到显示设备上显示,这样的过程会花费大量的时间,所以人们研究了高速缓存机制……(后续耀杨会和兄弟萌深入探讨!)


  • 有粉丝私信耀杨说听起来感觉也不是很繁琐呀,其实不然,其实这里面还蕴含着许多的东西在里面,比如进程的运行和终止。在往后的篇章中耀杨会着重讲解的,还有PCB,内核模式用户模式以及Linux命令等等,请大家一直支持耀杨兄!感谢兄弟萌支持!

今天就这样了,爱你们!