FASM 如何成为低级汇编器而 NASM 成为高级汇编器?

How is FASM a low level assembler and NASM a high level assembler?

维基百科指出:

High-level assemblers in computing are assemblers for assembly language that incorporate features found in high-level programming languages.

接着说:

High-level assemblers typically provide instructions that directly assemble one-to-one into low-level machine code as in any assembler, plus control statements such as IF, WHILE, REPEAT...UNTIL, and FOR, macros, and other enhancements.

最后引用一些高级汇编器:

More recent high-level assemblers are Borland's TASM, NASM, Microsoft's MASM, IBM's HLASM (for z/Architecture systems), Alessandro Ghignola's Linoleum and Ziron.

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

NASM 具有不错的宏功能,但它没有像 MASM 那样内置的 .IF、.WHILE、.REPEAT...UNTIL 和 .FOR 指令等废话。 MASM 太老了,以至于有些人宁愿使用高级语言也不得不用 asm 编写。 NASM 是最近设计的,如果您需要,只需使用编译器即可 优化 而不是天真地为 MASM .IF 指令填充模板。

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

尽管这些术语没有具体的技术含义,只是一种软性设计目标/自我宣传语言。 FASM 本身是 written in asm,当然美化了它是多么精简和小巧。我认为称自己为“低级”汇编器是为了声明“我们故意不是 MASM”;我们为您提供的工具可用于真正编写 asm,而不是假装是一种高级语言。

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

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