最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【整理】编译器和汇编器的区别 + 汇编语言和高级语言的区别

Embedded crifan 7498浏览 0评论

1. 一些术语

机器码:machine code == 机器指令:machine instruction == 指令instruction

汇编语言:assembly

汇编器:assembler

高级语言:high-level language

编译器:compiler

 

2. 编译器和汇编器的区别

机器码

机器码即一条条的指令,可以被CPU处理器所识别的语言,CPU可以执行对应的指令,实现相应的功能。

不论是编译器还是汇编器,最终生成的都是机器码。

汇编语言

汇编器产生机器码,指的是将汇编语言已编译成机器码。

汇编语言中的每一个命令,一般情况下,都对应着一个,可以被CPU所识别的,机器码中的,机器指令。

高级语言

编译器,将高级语言编译成机器码。

绝大多数的高级语言,比如C,C++,Java等,的命令,即高级语言写出来的语句,和机器语言都没有一一对应的关系,一般来说,一条高级语言的语句或几条语句所组成的代码段,都对应着(更多)多条机器码。

硬件抽象层

硬件抽象层是一种技术,将底层硬件细节抽象隐藏出来,以方便上层软件编程。

汇编语言中,一般不存在硬件抽象层的概念,因为其本身语句,就接近于硬件指令,是用来直接操作硬件的。

而被编译器所编译后的高级语言,会很大程度地涉及到硬件抽象层。

汇编器的优势和劣势

由于汇编语言本身和指令就基本是一一对应的关系,所以用汇编器将汇编代码编译所生成的可执行代码(指令)的效率,比高级语言被编译器最终编译生成的可执行代码的效率,要高很多。

所以,当程序的性能作为最重要的考量的时候,比如在图像处理方面,或者是硬件资源有限的情况下,倾向于用汇编语言,以实现代码运行更高效,占用资源更少的效果。

汇编语言的劣势是,不容易使用,难学,难用。

编译器的优势和劣势

在绝大多说情况下,在这点很小的性能的提升方面的优势,不足够补偿其在难学难用方面的劣势,此时,

往往使用高级语言,比如C,C++,Java等。高级语言,更容易使用,更容易用来描述更加复杂的上层逻辑等。

 

3. 总结

汇编器 vs 编译器

 汇编器编译器
输入文件汇编(源)代码高级语言(C/C++/Java/…的源)代码
输出文件机器码(指令)机器码(指令)
是否有代码优化功能一般没有(一般也不需要,因为只是涉及到将汇编代码直接转换/翻译为机器码)一般都包含代码优化(优化代码,以提高运行效率)

 

汇编语言 vs 高级语言

 汇编语言(不同CPU对应不同的自己的汇编语言和机器语言)高级语言(C/C++/Java/…)
学习和使用的难易度相对容易
和机器指令的一一对应程度基本一一对应一条高级语言往往对应着多条机器指令
代码执行效率极高相对汇编来说较低

 

【参考资料】

1. Difference Between Assemblers and Compilers

2.Difference between assembler and compiler?

转载请注明:在路上 » 【整理】编译器和汇编器的区别 + 汇编语言和高级语言的区别

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
88 queries in 0.182 seconds, using 22.12MB memory