维基百科指出:
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 为“高级”汇编程序。
虽然这些术语没有具体的技术含义,只是一种软性设计目标/ self 宣传语言。 FASM 本身是用 asm 编写的,并且肯定会美化它是多么精简和小巧。我认为称自己为“低级”汇编器是为了声明“我们故意不是 MASM”;我们为您提供的工具可用于真正编写 asm,而不是假装是一种高级语言。
MASM/TASM 也有“变量” - foo dd 123
不仅将 foo
定义为一个符号,还在其他指令中使用 foo
add foo, 1
表示这些指令的操作数大小。 NASM 和 FASM 没有任何像这样奇怪的东西:你可以查看源代码行并知道它是如何组装的,而无需查看其他地方来确定 foo
是否是 equ
常量或符号。
IMO,NASM 是一个不错的宏汇编程序,仅此而已。它并不比 FASM 任何“更高级别”。 NASM 在“高级”汇编程序列表中似乎非常不合适。
关于assembly - FASM 是低级汇编器而 NASM 是高级汇编器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66133054/