c - 汇编编译器是如何编程的

标签 c assembly

<分区>

不久前了解到asm编译器大多是用C或其他语言编写的,我们说汇编是最快的语言。但如果它是用 C 编写的,它怎么可能比 C 本身更快呢?编译器会做什么呢? ASM中有ASM的编译器吗?我真的不明白这一切是如何运作的......我在互联网上搜索过,但我没有清楚地找到我要找的东西...... 您是否解释过或提供了任何可以帮助我更好地理解程序集编译器概念的链接?

最佳答案

这里涉及三个概念:

  • 编译器的速度
  • 处理器的速度
  • 可执行文件的速度

首先,先说明一下,编译某些可执行文件所花费的时间与该可执行文件运行所花费的时间几乎没有关系。 (编译器可能需要更长的时间来进行一些仔细的分析和应用优化。)

处理器的运行速度是另一回事。汇编语言最接近机器语言,这是您的处理器可以理解的语言。机器语言中的任何给定指令都将以机器处理该指令的速度运行。

根据定义,在您的处理器上执行的所有内容都必须在某个时候转换为机器语言,以便您的处理器能够理解和执行它。

这就是事情变得棘手的地方。汇编程序会将您直接编写的代码翻译成机器语言,但程序不仅仅是知道如何转换为机器语言。假设您有一个复杂的值,例如选项的集合。这些选项必须以字符串、整数、 float 等形式进行维护。它们是如何存储的?他们是如何访问的?

完成这一切的方式可能会有所不同。您组织程序的方式可能会有所不同。这些变化会影响可执行时间。

所以你可以用汇编语言写一个非常慢的程序,用解释语言写一个非常快的程序。而且,坦率地说,即使您直接使用汇编程序,编译器通常比您更擅长组织最终机器代码。


简而言之:编译器的工作是将您的文本源代码(C 或汇编,或其他)转换为您的处理器可以理解的机器代码。一旦完成,就不再需要编译器了。

远不止于此,但这是一般的想法。

关于c - 汇编编译器是如何编程的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46868670/

相关文章:

c - 如何在 Windows 7 X64 SP1(x64 模式)下执行直接系统调用?

c - 使用 C 和程序集创建用户级线程的段错误

C:线程 semaphore_wait 与 while 循环

Linux 操作系统类的内容

c - 无需安装的 C 单元测试框架?

c - 了解汇编 .long 指令

c - 如何使用 gcc 进行内联汇编来防止错误 "more than 30 operands in ' asm'"

c - 动态创建自定义结构数组

c - Visual Studio 文件输出错误

assembly - 有人可以解释一下 PPC 分支链接吗