编译器和汇编器位于计算机的哪里?

2023-12-15

所以我知道最基本的知识,编译器将源代码转换为汇编代码,汇编器将汇编代码转换为机器代码。但我无法正确谷歌搜索,它们实际上位于哪里?

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

汇编器是位于硬盘上、内置于操作系统中还是实际 CPU 中的某个位置?是否可以选择使用不同的汇编器,或者它们是否已预安装到硬件中?另外,汇编语言是否像编译器一样具体取决于汇编代码的起源,或者整个系统只有一个汇编程序?


你把这件事想得太复杂了。编译器采用某种格式的文本,通常将其转换为另一种格式的文本。例如,C 编译器将 C 语言转换为汇编语言。编译器只是一个程序,没有什么特别的,就像你的网络浏览器是一个程序一样,你用来编写程序的文本编辑器只是一个程序,命令行/控制台(如果你使用的话)也只是一个程序。没有魔法。

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

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编译器和汇编器位于计算机的哪里? 的相关文章

随机推荐

  • Golang 中的位掩码和按位运算

    一般来说 我是编程的初学者 所以如果我在提出这个问题时犯了一些错误 我很抱歉 我正在遵循的教程将详细介绍此代码 package main import fmt const isAdmin 1 lt lt iota isHeadquarter
  • 动画计数器从开始值到结束值

    我想在我的网站上放置一个柜台 以下代码适用于非常大的数字 但像 3 或 95 5 这样的小数字则不起作用 但它适用于超过 1000 的数字 您认为 JavaScript 代码编写的问题出在哪里 预先感谢您的指导 const counters
  • 模板专用函数

    我需要使用模板类对我的函数进行专门化 并且遇到 非法使用显式模板参数 的问题 template
  • MySQL 复合在 FK 上是独一无二的

    我想在mysql中实现以下约束 create table TypeMapping constraint unique server id type id constraint foreign key server id references
  • wicked_pdf 生产中字体太大

    我遇到一个问题 渲染的 PDF 的字体大小为产量较大 在开发中生成的 PDF 中 一切看起来都很棒 这是来自的渲染图发展 这是来自的渲染图生产 这使得我很难为开发中的生产服务器格式化我的文档 你能看一下吗 HTML 版本 http www
  • jqGrid没有addJSONData方法

    今天下午我只是在玩 jqGrid 让它与本地数组数据源配合得很好 但是 现在我正在尝试让它加载本地 JSON 数据 我的代码如下 jQuery list4 jqGrid datatype json lt Also tried local h
  • 如何使用 angularjs 关闭点击主体时动态生成的下拉菜单?

    你好 我正在 angularjs 中开发 Web 应用程序 在右上角 我有一个下拉框 只有在用户登录后才会激活 我有一个场景 用户单击下拉菜单 一旦他单击页面上的任意位置 我想关闭下拉菜单 长期以来我一直在努力解决这个问题 我创建了 plu
  • Python Mysql,“命令不同步;您现在无法运行此命令”

    我有一个从 Python 执行的 MySQL 存储过程 包装在 Django 中 当我尝试执行第二条语句时 出现错误 命令不同步 您现在无法运行此命令 我目前无法提交交易 这只是我调用过程时的一个问题 该怎么办 cursor callpro
  • 如何在 Grails 插件中实现 Groovy 全局 AST 转换?

    我想在编译时修改一些 Grails 域类 我最初认为这是 Groovy 的全局 ASTTransformation 的工作 因为我不想注释我的域类 本地转换器需要 最好的方法是什么 我也尝试模仿DefaultGrailsDomainClas
  • 从 LinqToTwitter IAuthorizer 中提取 BearerToken

    希望对我认为简单的问题有一个简单的答案 经过身份验证后 是否可以从 IAuthorizer 中提取 BearerToken 使用 LinqToTwitter 进行授权后 我想进行自己的 API 调用 并且需要 BearerToken 来执行
  • Maven 的环境变量

    我已将一个项目从 Eclipse 移植到 Maven 并且需要设置一个环境变量以使我的项目正常工作 在 Eclipse 中 我转到 运行 gt 运行配置 然后在 环境 选项卡下 将 WSNSHELL HOME 设置为值 conf 我怎样才能
  • 在c#中裁剪图像

    我有一张图像 当我按下表单上的按钮时 我想裁剪它 我有以下代码 在按下按钮时运行 但它不会对图像执行任何操作 try Image image Image FromFile test jpg Bitmap bmp new Bitmap 200
  • 估算数据的多项回归

    我需要估算缺失的数据 然后使用生成的数据集进行多项回归 我尝试使用小鼠进行插补 然后使用 nnet 中的多项函数进行多项回归 但这给了我不可读的输出 以下是使用 mouse 包提供的 nhanes2 数据集的示例 library mice
  • 证书注册流程是怎样的?

    我正在寻找注册证书的程序 我搜索了很多但没有找到好的答案 到目前为止 我明白首先我必须生成一个密钥存储 用于创建公钥和私钥 然后私钥应保持私有 公钥与其他信息 如名称和组织 一起发送到 CA 然后CA会生成一些东西并返回给我一些包含公钥和信
  • .Net 正则表达式将 $ 与字符串结尾而不是行匹配,即使启用了多行

    我试图突出显示降价代码 但遇到了 NET 正则表达式多行选项的奇怪行为 下面的表达式 在任何在线正则表达式测试工具上都可以正常工作 但它拒绝与 net 一起使用 它似乎没有考虑 标签 只是突出显示所有内容 直到字符串末尾 无论如何 这是我的
  • Pyinstaller:AttributeError:模块“enum”没有属性“IntFlag”[重复]

    这个问题在这里已经有答案了 我需要将python代码编译为exe 我找到了一些如何做到这一点的指南 其中要求我为此安装 PyInstaller pip install upgrade pyinstaller 但我收到下一个错误 C User
  • 使用 Monotouch 处理 iOS 的 UITableViewSource 事件

    我试图捕获并处理一个事件 当 a 的元素UITableViewSource被点击 这是我的代码 public class TableViewSource UITableViewSource public event EventHandler
  • HSpec 无预期编译失败

    我正在学习 Haskell 并且编写了这个函数 safeHead a gt Maybe a safeHead Nothing safeHead x xs Just x 我现在尝试用 HSpec 测试它 import Test Hspec m
  • Eclipse 中的 XSLT 2.0 无需额外的库?

    是否可以在 Eclipse 中执行 XSLT 2 0 转换而无需额外的库 AltovaXML Saxon 答案是否定的 您需要安装 XSLT 2 0 处理器 例如 Saxon
  • 编译器和汇编器位于计算机的哪里?

    所以我知道最基本的知识 编译器将源代码转换为汇编代码 汇编器将汇编代码转换为机器代码 但我无法正确谷歌搜索 它们实际上位于哪里 我假设编译器位于硬盘驱动器上的某个位置 因为您可以从网络下载编译器并将它们用于各种编程语言 汇编器是位于硬盘上