【问题标题】:Does all the programming languages have assemblers [closed]是否所有的编程语言都有汇编器[关闭]
【发布时间】:2015-08-02 16:30:59
【问题描述】:

我发现 Go 语言有自己的汇编器,C 语言的各种编译器都有自己的汇编器,例如 Turbo C、LCC、OpemWatcom。但是有些只是像nasm,gas等的汇编器。为什么高级语言的编译器带有汇编器,如果编译器必须将源代码转换为汇编代码,那么所有编程语言都必须具有自己的汇编器。请有人解释一下。

【问题讨论】:

  • 不是所有的编程语言都一样?
  • 不,所有编程语言意味着未编译的语言(即解释未编译的脚本语言),它们不会使用汇编程序。

标签: c++ assembly


【解决方案1】:

所有的编程语言都有汇编器吗

没有。

现代 C++ 编译器可以直接输出机器代码(或 llvm 的中间目标代码),无需生成汇编。汇编器是可选的,如果存在,它作为程序员检查代码的便捷工具提供。

【讨论】:

  • ...以及像 Java 这样不产生“真实”程序的语言(但每次程序启动时都需要由另一个软件处理的文件)也没有汇编程序,因为它们没有他们的文件格式需要一个。
【解决方案2】:

只能由一个司机驾驶一辆特定的汽车吗?不,汽车是装配工,可以为多个司机制造。

发明一种处理器来记录指令集机器代码和汇编语言符合公司的最大利益。汇编语言不是一个通用的东西,它对每个汇编程序都非常特定,即解析它并将其转换为机器代码的程序。所以处理器供应商的文档应该使用一些汇编语言来使文档可读。推广新处理器以创建或雇用某人创建汇编器和其他工具符合他们的最大利益,但您始终必须创建汇编器,如果没有其他原因,只是为了验证处理器。所以会有一个通用的汇编器。

然后编译器供应商当然可以选择支持一个通用的、一个竞争对手的,或者自己制作或任何组合。这些选择的原因可能很多。由于各种原因,一些编译器可能选择不生成汇编语言作为中间步骤,而是直接生成机器代码。

您的典型通用可重定向编译器倾向于支持编译器-汇编器-链接器模型。可能会做得更多,但会倾向于该模型。又是哪个汇编器,哪个链接器?他们可能会自己制作或支持通用的原因有很多。但如果他们使用该模型,他们至少必须选择一个来支持。从事销售该编译器业务的人可能不仅想要控制编译器,还想要控制包括 gui 在内的所有工具链。他们从开源中获取或自己做,但控制自己的命运符合他们的最大利益。

【讨论】:

    猜你喜欢
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-11
    • 2014-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多