c语言编译器可以写汇编吗
A. c语言和汇编语言的关系
程序员编写的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格式,这个格式的实现是有链接器来完成的。
B. c语言编译器是用汇编语言写的吗
这个是肯定的。算法优化,首先是逻辑描述的精炼化。至于C,只是计算逻辑到计算机模式的一种映射,而汇编仅是利用特殊计算机指令的一个更深的藕荷。
不过有一点,C语言由于是计算逻辑到计算机模式的映射,所以不单单考虑算法本身,还肩负数据组织的实现。数据流动方式,数据组织方式,对计算性能的影响也很大。这要看是否和计算机组成原理相贴近。其实这块也是侧重逻辑的设计,而不是具体机器指令的实现,因此汇编是无能为力的。
不过在DSP等特殊CPU架构,C语言和编译器无法很好的将上述逻辑转换为机器指令,或者C本身的逻辑无法很好的贴近CPU的特性,那么还是得汇编。一个典型的例子就是如何使用DSP的并行指令(通常的矢量计算)和并发指令集,几个不同的指令(隶属不同处理单元)的同时执行。使用C语言无法描述清楚这些逻辑方式,而编译器又太水,则还是不得不用汇编。此时C语言仅能沦落到大的计算机组织特性的贴近,和整体框架,模块的设计上。细节方面无能为力了。
C. 在Compiler+Explorer上怎么将C语言转变为汇编语言
Compiler+Explorer是一个在线编译器,可以将源代码转换为汇编代指拍码。唯租羡如果想将C语言转型敬变为汇编语言,请按以下步骤操作:
访问Compiler+Explorer的官方网站。
在代码编辑器中编写C语言代码。
选择编译器版本,如gcc或clang,并在“Options”选项卡中选择汇编语言格式。
点击“Compile”按钮,Compiler Explorer将生成汇编代码。
点击“Asm”标签查看汇编代码。
D. 如果操作系统是C语言开发的,那么C编译器运行在什么上呢
操作系统是c开发的,跟c编译器运行在机器上,这两个问题一点关系都没有。
在没有c编译器之前的那个时代,当然只能用汇编写操作系统了,但是后来用汇编开发了c编译器,就可以用c写操作系统了,用c写了操作系统,经过c编译器编译之后得到的就是机器代码(可以认为是汇编),c编译器只是一个工具,反正你给机器代码给cpu执行就行了,没有任何问题呵呵
这就好比如在原始社会人类只能用手挖东西,挖了铁以后就可以用铁做出铁器来挖东西,就是这么发展。
c语言又可以用来开发更高级的编译器,更高级的编译器又可以拿来开发操作系统了,只要你喜欢。
不同的是汇编直接写的执行效率比较高,高级语言写的执行效率比较低,但是高级语言开发的时间比较短,提高工作效率
E. C语言是用什么语言编的
在探讨C语言的编写语言时,通常会涉及编译器、汇编语言以及机器代码。首先,现代C语言和C++程序是由编译器编写的。编译器将源代码转换为计算机可以理解并执行的二进制代码。
早期的C编译器确实使用了汇编语言编写。汇编语言是一种低级语言,可以直接映射到机器代码,即计算机可以执行的指令。使用汇编语言编写编译器,可以让编译器更加高效地将源代码转换为机器代码。
但汇编语言本身是由机器指令组成的,这些指令是计算机硬件可以直接执行的。因此,最早的汇编语言是由硬件工程师使用特定的机器指令编写。这些指令在不同的计算机架构下有所不同,因此,硬件工程师需要针对每种计算机架构编写特定的汇编语言代码。
简单来说,C语言和C++程序是由编译器编写,编译器使用汇编语言编写,而汇编语言则由硬件工程师使用机器指令编写。这种层级结构使得计算机程序可以在不同架构的计算机上运行。