【问题标题】:Is assembly implemented only in software?汇编仅在软件中实现吗?
【发布时间】:2015-02-08 20:01:12
【问题描述】:

我有一些困惑

  • 是否只能在带有汇编器的软件中实现汇编?

  • 谁更新和编写汇编程序?

  • cpu 甚至不知道程序集的存在吗?

  • 假设英特尔发布了一个带有新指令的新 cpu,需要做什么来利用这些新指令?

    我的意思是最终cpu只执行机器码,然后通过微码引擎将其转换为电信号。

【问题讨论】:

  • 这并不完全清楚。汇编语言只是另一种编程语言,恰好与底层指令集非常接近(几乎是 1:1)。
  • 那么在这种情况下 x64 程序集设计和实现英特尔?

标签: assembly cpu cpu-architecture


【解决方案1】:

是否只能在带有汇编器的软件中实现汇编?

是的。汇编语言和其他任何语言一样都是一种编程语言,它只是使用非常接近处理器中指令集的操作代码。它仍然从包含源代码的文本文件编译成处理器可以使用的机器代码。

谁更新和编写汇编程序?

任何喜欢的人,从像 MASM from Microsoft 这样的大型软件公司到像 The netwide assembler (NASM) 这样的开源项目。

创建处理器的公司指定指令集,任何人都可以编写编译到该集的汇编程序。

cpu 甚至不知道程序集的存在吗?

没错。处理器只执行机器码,不知道是汇编源代码还是Visual Basic源代码生成的。

假设英特尔发布了一个带有新指令的新 CPU, 需要做什么来利用这些新指令?

您可以直接在汇编程序中使用它们,只需将指令的字节码放入代码中即可。如果你想使用汇编操作代码来使用它们,需要在汇编器中添加。

【讨论】:

  • 很好的解释。这是否意味着 Intel 和 AT&T 语法就像一个标准,在将机器代码映射到汇编助记符时,汇编器必须遵循这个标准?
  • @BsD:不,汇编程序根本不需要遵循指令集,任何人都可以根据自己的喜好发明自己的指令集,但是保持接近定义的指令集意味着很多程序员已经知道。一个值得注意的例外是在 .NET 框架中使用的CIL,这是一种面向对象的汇编语言,它编译成不特定于任何 CPU 的字节码。执行代码时,它首先由 JIT(即时)编译器自动转换为将运行的特定 CPU 的机器代码。
  • 两个小问题:首先,对于“创建处理器的公司指定指令集”,不清楚是否会说 ARM(以及其他销售设计而不是硬件的公司) “创建”处理器,并且可以授权 ISA 来创建硬件,而无需获得更改 ISA 的许可;其次,ISA 说明符通常会指定操作码名称,甚至是程序集格式。
  • @PaulA.Clayton 我还没有完全理解你在说什么。你的意思是ARM只卖ISA而不卖cpu?其次,ISA 说明符是什么意思?
  • @BsD ARM(目前)只销售处理器(和其他硬件,如 GPU 内核)的设计,其他人将其集成到芯片设计中并已制造,以及设计和制造与 ARM 兼容的处理器的权利(以及扩展 ISA 的权利)。 ARM 不销售硬件。 ISA 说明符是指 MIPS、ARM、Tensilica 等组织。定义 ISA,通常是 provide processor designs 以及 Intel、AMD、Oracle 等。谁定义 ISA 并销售硬件,即
【解决方案2】:

汇编语言只不过是一种对机器指令进行编码的形式,与十六进制或十进制数字相同,并添加了一些用于描述放置在内存中的数据字段的指令。 (注意,在冯诺依曼架构中,数据和可执行代码没有区别)

当然,汇编程序提供的编码对于人类的阅读、写作和理解来说要方便得多。它是专门为这个目标而发明的。

汇编程序是由人类编写的。例如,FASM 由来自波兰的杰出程序员和数学家 Tomasz Grysztar 编写并提供支持。

NASM 是另一个很好的汇编程序。它是由一组程序员编写的。

【讨论】:

  • 所以为了编写汇编程序,开发人员必须知道每条指令的机器码,以及寄存器机器码中的每一种编码?
  • @BsD 你让这听起来很难,但事实并非如此。当然,他们不需要记住每个操作码,他们可以根据需要查找它们。
【解决方案3】:

是否只能在带有汇编器的软件中实现汇编?

Assembly 是一种非常接近机器代码的语言。所以它必须被认为是软件。

谁更新和编写汇编程序?

所以每个对指令集有很好了解的人都可以编写汇编程序,但他也需要知道object file format。这意味着他还必须知道操作系统需要这种格式。 CPU 制造商拥有所需的知识,但如果提供足够的文档,每个人都可以像开源社区一样编写汇编程序。

cpu 甚至不知道程序集的存在吗?

Cpu 不知道机器代码是如何生成的。它只是执行机器指令。

假设英特尔发布了一个带有新指令的新 cpu,需要做什么来利用这些新指令?

如果 Intel 添加新指令,则必须通过为这些指令添加新助记符来更新汇编程序。

【讨论】:

  • 如果增加了新指令,汇编器的更新由谁来完成?
  • 开发汇编程序的人。英特尔必须更新它自己的实现,它自己的版本的开源社区,...
  • @JuniorCompressor - 好吧,英特尔实际上没有汇编程序实现。至少,没有发表过。
  • 是的,你是对的!!!我只是想说每个有实现的人都必须更新它。
猜你喜欢
  • 2021-07-16
  • 2013-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-13
  • 2014-02-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多