连接器大全 C语言、汇编语言、机器指令、CPU之间是怎么联系起来的?
C语言、汇编语言、机器指令、CPU之间是怎么联系起来的?
CPU的全称是中央处理单元,是计算机进行运算的核心,根据使用的技术不同,CPU又分为X86,X64,ARM、DSP、单片机等不同的体系结构。在每种CPU上都有一套特定的指令集,这就是人们常说的机器指令,直接使用机器指令编写的程序就是机器语言程序。
理论上来说,是可以通过机器语言直接编写任何程序的(早期都是直接使用机器语言编程,那时程序相对比较简单),并且编写的程序可以直接运行,但是使用机器语言编程对程序员的要求极高,代码无法移植且不便于人直接阅读,于是人们发明了一组符号,用来表示这些机器指令,这就是汇编语言。汇编语言编写的程序计算机无法直接运行,需要一个叫做汇编器的程序转换为机器语言才可以在特定机器上运行。
而C语言是比汇编语言更高级的语言,使用C语言编写的程序也是无法在计算机上直接运行的,它需要编译器将C语言代码转换为机器语言,这个过程又分为几个子步骤,见下图。
为了使题主的问题更加完善,在这里补充两个概念,链接器与反汇编。
在大型程序中,往往会将任务分解为许多不同的子任务,每个子任务对应一个源文件,在C语言中就是多个C文件,编译器将每个C文件编译成一个目标文件(一般在Windows中是obj文件,Linux中是
.o
文件),这些目标文件也是机器指令,但是缺少一些必要的信息,无法直接运行,需要链接器将这些文件链接起来,再加上一些库文件与可执行文件头信息,成为一个可执行文件(Windows是PE格式,Linux是ELF格式)。通常,在查看一个二进制文件时(目标文件或者可行性文件),不会直接显示机器指令,而是以汇编语言显示,这是因为此过程中有一个反汇编程序,将机器指令转换为汇编语言,它的功能刚好与汇编过程相反。
C语言开发用什么工具比较好?
我是宇宙君,干了20多年开发,我来说说。
C的开发从根本上来说你需要三个东西:编辑器,C编译连接器,目标代码调试器。我们分开来说说。
1、编辑器(或IDE):原则上说你可以用任何一种纯文本编辑器来编辑代码,但为了编辑效率,一般会使用专业的代码编辑器(或IDE),比如:在windows下有微软为大家提供的宇宙第一的VS,你可以选任何一个最近版本的V,当然VS因为功能太强也就比较大如果你的机器不是很给力那你还可以选择VSCode(需要C编译调试插件),source insight,UtraEdit,DevC 等。Linux下选择也很多,你如果是原教旨主义工程师那么必须选择VI或VIM:),不讲究呢就sublime甚至geditor等。
2、编译器:C因为用的很广,实际上有很多不同使用场景的编译器,但我理解你是为了学习C对吧?那正常只有两个选择,微软的C编译连接器和GCC。微软的C编译器与它的集成开发环境VC,VS直接打包在一起你不用了解细节直接用它的IDE就可以。而gcc你需要自己将其配置但开发编辑器中,你至少需要了解gcc的编译开关参数。另外多说一点gcc,gcc是GNU编译器套件(GNU Compiler Collection)的缩写,它实际上包括了C、C 、Objective-C、Fortran、Java、Ada、Go语言和D语言的前端,也包括了这些语言的库(如libstdc 、libgcj等等),非常强大!而且是跨平台的,你以后给经常用到它,有必要熟悉一下。
3、调试器:如果是使用微软的IDE,啊你也不需要了解细节,微软都集成好了,直接用就好啦!当前另一些比如DevC 也集成好了。如果是其它的独立编辑和编译环境就需要自己配置,一般使用gcc配套的gdb来做。
最后总结一下。
Windows系统下:初学者不折腾那就是微软的VS集成环境,机器不行就换DevC (但这个平台实际上有些烦人的bug..)或者VSCode,如果不嫌版本低甚至可以VC6,哈哈。
Linux系统下:VSCode,sublime,vim都是好选择!
然后,给到学习C的朋友一句鼓励的话:C语言江湖深似海,入此江湖遍历鬼雨旭日,回首往已百年身。。。慎重啊!
:)
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。