所有编程语言都有汇编程序吗?

时间:2015-08-02 16:31:00

标签: c++ assembly

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

2 个答案:

答案 0 :(得分:1)

  

所有编程语言都有汇编程序

没有

现代C ++编译器可以直接输出机器代码(或llvm的中间对象代码),而无需生成程序集。汇编程序是可选的,如果存在,它是程序员进行代码检查的便捷工具。

答案 1 :(得分:1)

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

发明处理器同时记录指令集机器代码和汇编语言符合公司的最佳利益。汇编语言不是一个通用的东西,它对每个汇编程序都是非常具体的,即解析它并将其转换为机器代码的程序。因此,处理器供应商文档应该使用一些汇编语言来使文档可读。促进新处理器创建或雇用某人来创建汇编程序和其他工具符合他们的最佳利益,但是除了验证处理器之外,你总是必须创建汇编程序。因此,将存在一个通用汇编程序。

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

典型的通用可重定向编译器倾向于支持编译器 - 汇编器 - 链接器模型。可能做的不仅仅是那个,而是倾向于那个模型。再次是哪个汇编程序,哪个链接器?他们为什么可能自己制作或支持通用的原因很多。但如果他们使用该模型,他们必须至少选择一个来支持。销售该编译器的人可能不仅要控制编译器,还要控制包括gui在内的所有工具链。他们从开源获取或自己做,但控制他们的命运符合他们的最佳利益。