【问题标题】:How is FASM a low level assembler and NASM a high level assembler?FASM 是如何成为低级汇编程序而 NASM 是高级汇编程序?
【发布时间】:2021-05-13 21:56:23
【问题描述】:

维基百科指出:

计算中的高级汇编程序是汇编语言的汇编程序,它结合了高级编程语言中的特性。

接着说:

高级汇编程序通常提供直接一对一汇编成低级机器代码的指令,就像在任何汇编程序中一样,加上控制语句,如 IF、WHILE、REPEAT...UNTIL 和 FOR、宏和其他增强功能。

最后,它指的是一些高级汇编程序:

最近的高级汇编器有 Borland 的 TASM、NASM、Microsoft 的 MASM、IBM 的 HLASM(用于 z/Architecture 系统)、Alessandro Ghignola 的 Linoleum 和 Ziron。

其中,我只用过NASM,但我能理解为什么它是一个高级汇编器;它通常具有结构、宏和非常广泛的预处理器。但是,当我看到 FASM 的 Wikipedia 页面时,它会将 FASM 称为低级汇编程序,我并没有真正理解。 FASM 不仅支持结构体和宏(我对预处理器了解不多),还支持汇编时的 if 语句。是否有任何其他规则指定汇编程序是高级还是低级? FASM 维基百科页面说它故意不支持许多命令行选项,但仅此一项就使其成为低级汇编程序吗?

【问题讨论】:

  • NASM 没有组装成机器代码的 IFWHILE 指令,只有 %if%rep 是预处理器的汇编时控制流指令。不是运行时。它确实有预处理器宏,但 FASM 也有。我不会称 NASM 为“高级别的”。
  • 高级和低级等术语是相对术语,在旁观者眼中。它们既是事实,也是意见。我不会太担心将这些术语视为具有硬规则的定义,因为它们是具有规则的定义。在这种情况下,作者心中有一个定义并采取了行动。另一页的作者心中有一个定义并采取了行动。有很多属于这一类的术语,从嵌入术语开始,但也包括术语汇编语言和汇编器。
  • 是的,这是有道理的。我想我只是希望它是一个事实/如果它在维基百科页面上被广泛接受。

标签: assembly nasm fasm


【解决方案1】:

NASM 有很好的宏特性,但它没有像 MASM 那样内置的 .IF、.WHILE、.REPEAT...UNTIL 和 .FOR 指令这样的废话。 MASM 太老了,以至于有些人在宁愿使用高级语言时不得不用 asm 编写。 NASM 是最近设计的,如果您需要,只需使用编译器,以便它可以优化,而不是简单地为 MASM .IF 指令填写模板。

我不会将 NASM 称为“高级”汇编程序。

虽然这些术语没有特定的技术含义,只是一种软设计目标/自我推销语言。 FASM 本身是用 asm编写的,并且肯定会赞美它的精简和小巧。我认为称自己为“低级”汇编程序是为了声明“我们故意不是 MASM”;我们为您提供了对真正编写 asm 有用的工具,而不是伪装成更高级别的语言。

MASM/TASM 也有“变量”——foo dd 123 不仅将foo 定义为符号,在其他指令(如add foo, 1)中使用foo 意味着这些指令的操作数大小。 NASM 和 FASM 没有这样奇怪的东西:您可以查看源代码行并知道它是如何组装的,而无需查看其他地方来确定 fooequ 常量还是符号。

IMO,NASM 是一个不错的宏汇编器,仅此而已。它不是比 FASM 任何“更高级别”。 NASM 在“高级”汇编程序列表中似乎非常不合适。

【讨论】:

  • 是的,我喜欢 NASM 的简单性及其“一切都是标签”系统;它帮助我了解内存地址以及程序如何更好地工作,并且我从 NASM 手册中知道 MASM 没有遵循相同的方法。至于“高/低级别”,我想我明白你的意思。感谢您帮助我理解这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-01
  • 2012-03-21
  • 2014-12-26
  • 1970-01-01
  • 2015-01-23
  • 2013-10-24
相关资源
最近更新 更多