<分区>
不久前了解到asm编译器大多是用C或其他语言编写的,我们说汇编是最快的语言。但如果它是用 C 编写的,它怎么可能比 C 本身更快呢?编译器会做什么呢? ASM中有ASM的编译器吗?我真的不明白这一切是如何运作的......我在互联网上搜索过,但我没有清楚地找到我要找的东西...... 您是否解释过或提供了任何可以帮助我更好地理解程序集编译器概念的链接?
<分区>
不久前了解到asm编译器大多是用C或其他语言编写的,我们说汇编是最快的语言。但如果它是用 C 编写的,它怎么可能比 C 本身更快呢?编译器会做什么呢? ASM中有ASM的编译器吗?我真的不明白这一切是如何运作的......我在互联网上搜索过,但我没有清楚地找到我要找的东西...... 您是否解释过或提供了任何可以帮助我更好地理解程序集编译器概念的链接?
最佳答案
这里涉及三个概念:
首先,先说明一下,编译某些可执行文件所花费的时间与该可执行文件运行所花费的时间几乎没有关系。 (编译器可能需要更长的时间来进行一些仔细的分析和应用优化。)
处理器的运行速度是另一回事。汇编语言最接近机器语言,这是您的处理器可以理解的语言。机器语言中的任何给定指令都将以机器处理该指令的速度运行。
根据定义,在您的处理器上执行的所有内容都必须在某个时候转换为机器语言,以便您的处理器能够理解和执行它。
这就是事情变得棘手的地方。汇编程序会将您直接编写的代码翻译成机器语言,但程序不仅仅是知道如何转换为机器语言。假设您有一个复杂的值,例如选项的集合。这些选项必须以字符串、整数、 float 等形式进行维护。它们是如何存储的?他们是如何访问的?
完成这一切的方式可能会有所不同。您组织程序的方式可能会有所不同。这些变化会影响可执行时间。
所以你可以用汇编语言写一个非常慢的程序,用解释语言写一个非常快的程序。而且,坦率地说,即使您直接使用汇编程序,编译器通常比您更擅长组织最终机器代码。
简而言之:编译器的工作是将您的文本源代码(C 或汇编,或其他)转换为您的处理器可以理解的机器代码。一旦完成,就不再需要编译器了。
远不止于此,但这是一般的想法。
关于c - 汇编编译器是如何编程的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46868670/