所以我知道最基本的知识,编译器将源代码转换为汇编代码,汇编器将汇编代码转换为机器代码。但我无法正确谷歌搜索,它们实际上位于哪里?
我假设编译器位于硬盘驱动器上的某个位置,因为您可以从网络下载编译器并将它们用于各种编程语言。
汇编器是位于硬盘上、内置于操作系统中还是实际 CPU 中的某个位置?是否可以选择使用不同的汇编器,或者它们是否已预安装到硬件中?另外,汇编语言是否像编译器一样具体取决于汇编代码的起源,或者整个系统只有一个汇编程序?
你把这件事想得太复杂了。编译器采用某种格式的文本,通常将其转换为另一种格式的文本。例如,C 编译器将 C 语言转换为汇编语言。编译器只是一个程序,没有什么特别的,就像你的网络浏览器是一个程序一样,你用来编写程序的文本编辑器只是一个程序,命令行/控制台(如果你使用的话)也只是一个程序。没有魔法。
汇编器只是一个接收文本并通常输出某种形式的二进制文件的程序。格式有很多种,就像图像和视频有多种二进制格式一样(bmp、jpg、png、gif、tiff、m4v、mpeg 等)。没有什么魔法,只是一个可以完成上面列出的任何工作的程序。
链接器也是如此,它接收二进制文件并通常输出二进制文件。
这些程序通常与硬盘驱动器上的所有其他程序一样,或者至少是您已安装并可以访问的驱动器上的所有其他程序。就像 Web 浏览器和文本编辑器等一样。现在要运行它们,理想情况下您需要它们“在路径中”,或者如果它们是某个 IDE 的一部分,那么 IDE 可能不需要它们在相对于自身位置的路径中。同样,经常为您调用汇编器和链接器的编译器可能不需要它可能知道/假设的相对于它们所在位置的路径。但它们像任何其他程序/文件一样存在于文件系统上,但要执行它们,需要能够找到它们。根据操作系统和工具链安装程序的不同,通常会有不同的选择,而不是一个全局规则。
你没有理由不能拥有尽可能多的适合你的文件系统的不同编译器和汇编器,它们只是像其他程序一样的程序,所以你必须为它们找到一个地方,并且必须有一种方法来运行它们。没有理由假设任何两个编译器从相同的源代码生成相同的二进制文件,同样没有理由假设任何汇编器都能够汇编任何编译器的输出。这就是术语“工具链”的由来,一组在链中链接在一起的工具,编译器输出工具链中的汇编器知道如何处理的内容,汇编器输出链接器知道如何处理的内容。您可能在不同的工具链/供应商之间具有一定的交叉兼容性,但这并不意味着他们必须这样做,这可能是设计使然,也可能是运气不好。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)