编译器和汇编器在计算机上的什么位置?

Aus*_*tin 5 assembly compilation

因此,我知道非常基本的知识,即编译器将源代码转换为汇编代码,而汇编器将汇编代码转换为机器代码。我一直无法正常使用Google进行搜索,但是它们实际位于何处?

我假设编译器仅位于硬盘驱动器上的某个位置,因为您可以从Web下载编译器并将其用于各种编程语言。

汇编器是位于硬盘驱动器上,操作系统内置的还是实际CPU的某个位置?是否可以选择使用其他汇编器,或者它们是否已预先安装在硬件中?汇编语言是否像汇编程序一样特定,取决于汇编代码的起源,还是整个系统只有一个汇编程序?

old*_*mer 5

您太复杂了。编译器采用某种格式的文本,然后通常将其转换为另一种格式的文本。举例来说,C编译器将C转换为汇编程序。编译器只是一个程序,没有什么特别的,就像您的Web浏览器是一个程序,用于编写程序的文本编辑器只是一个程序,如果使用命令行/控制台,则仅是一个程序。没魔术

汇编程序只是一个程序,它接收文本并通常输出某种形式的二进制文件。就像图像和视频有许多二进制格式一样,格式很多(bmp,jpg,png,gif,tiff,m4v,mpeg等)。没什么魔术,只是一个可以完成上面列出的任何工作的程序。

链接器也是如此,它接收二进制文件,通常输出二进制文件。

通常,这些程序与硬盘驱动器上的所有其他程序一样,或者至少在已安装并可以访问的驱动器上。像Web浏览器和文本编辑器等一样。现在,要在理想状态下“在路径中”运行它们,或者如果它们是某些IDE的一部分,则IDE可能不需要在相对于它们本身所在的路径中就不需要它们。同样,经常为您调用汇编程序和链接程序的编译器可能不需要它可能知道/假定的相对于它们所在位置的路径。但是它们像任何其他程序/文件一样都存在于文件系统中,但是要执行它们,必须能够找到它们。而且取决于工具链的操作系统和安装程序,通常会有不同的选择,而不是一个全局规则。

没有理由不能在文件系统中拥有尽可能多的不同编译器和汇编器,它们就像其他程序一样,因此必须为它们找到一个位置并必须有一种运行它们的方法。没有理由假设任何两个编译器都从相同的源代码生成相同的二进制文件,同样也没有理由假设任何汇编器都能够汇编任何编译器的输出。这就是术语“工具链”的来源,这是一组链接在一起的工具,编译器输出工具链中的汇编器知道如何处理的内容,而汇编器则输出链接器知道如何处理的内容。您可能在不同的工具链/供应商之间具有交叉兼容性,但这并不意味着它们必须是设计使然,或者运气不好。