程序员编写的C语言代码,首先要经过C语言编译器,生成汇编代码,这个过程称为编译阶断,当C语言编译器生成汇编代码后,再调用汇编器来将汇编代码编译成汇编指令。这是一种站在巨人肩人的作法,最早的C++编程语言也是这样的实现方法,只不过那时候叫Cfront程序,Cfront程序的作用是将C++代码转换成C语言代码,类似于一个文本处理器,然后再调用C语言编译器,将C源码编译成汇编代码,然后再调用汇编器将汇编代码编译成机器码。这个过程,在Windows平台上不容易操作,但是在Linux平台上很容易看到。以gcc这款c语言编译器为例,它实际上是四个小程序。cp: c语言预处理程序,有它负责进行预处理操作。cc: C语言编译器,它负责将C源码编译成汇编代码。as: 汇编器,它负责将汇编代码编译成机器码,一般使用gcc test.c这样的命令编译C语言时,会生成一个a.out的程序,它实际上指的就是as ouput,即汇编器输出文件。link: 链接器,它负责将汇编器输入的机器码和库打包成一个操作系统可以运行的可执行文件,在Linux上的可执行文件格式是ELF格式,这个格式的实现是有链接器来完成的。

1:汇编语言是面向具体CPU及其硬件结构的语言C语言可以做到硬件无关性2:汇编语言效率较高C语言效率相对较低3:汇编语言是非结构语言,可读性较弱C语言是结构语言,可读性较强4:汇编语言基本没有可移植性C言可移植性很强5:汇编语言没有函数库,所有代码需要自己组织C语言有丰富的函数库可供调用。
汇编语言和C语言有以下几个主要区别:
1. 抽象级别:汇编语言是一种较低级别的编程语言,与特定的处理器体系结构密切相关。它使用机器码的指令(通常由助记符表示)来直接操作处理器硬件,对硬件的使用和控制更加底层。而C语言是一种较高级别的编程语言,提供了更多的抽象和封装,使得程序员可以更容易地编写、理解和维护代码,而不需要关注底层的硬件细节。
2. 编程风格:汇编语言是基于指令集的编程,需要编写详细的指令序列来完成任务。程序员需要按照特定的语法和语义规则编写程序,并且需要深入了解底层硬件。相比之下,C语言采用结构化编程的风格,通过函数和流程控制语句来组织代码,使得代码更加清晰、易读和可维护。
3. 可移植性:由于汇编语言是与特定处理器架构相关的,所以不同的处理器架构有不同的汇编语言。这就意味着在不同的处理器上运行同一段汇编代码需要进行修改和适配。相比之下,C语言是一种高度可移植的编程语言,可以在不同的平台上编写代码,并通过编译器将其转换为特定平台的机器码。
4. 开发效率:因为C语言提供了丰富的高级数据类型、函数库和编译器优化等特性,使得程序员可以用更少的代码实现复杂的功能。与汇编相比,C语言开发效率更高,代码更简洁,大大减少了程序员的编码工作量和出错的机会。
综上所述,汇编语言更接近硬件,对底层硬件和指令有深入的了解,而C语言则提供了更高级别的抽象和封装,更易于理解和维护,并且具有更高的可移植性和开发效率。