assembly - FASM 是低级汇编器而 NASM 是高级汇编器吗?

标签 assembly nasm fasm

维基百科指出:

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/

相关文章:

assembly - 将立即 float 加载到 ARM 寄存器中

arrays - 从 gdb 中的 .bss 打印 "array"

delphi - FASM - 将字符串传递给 Delphi DLL

assembly - 使用 FASM 将用户输入的两个数字相加

linux - 一个简单的汇编代码导致段错误?

assembly - MIPS 中的 "Long call"函数是什么意思

c - 从 C 执行二进制机器代码

linux - 多次读取后结果错误

assembly - FASM 对齐 32 部分对齐不够

assembly - 用于打印消息的 AutoIt 汇编代码