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

问题描述

维基百科声明:

计算中的高级汇编程序是汇编语言的汇编程序,其中包含高级编程语言中的功能。

接着说:

高级汇编程序通常提供直接将一对一汇编成低级机器代码的指令,就像在任何汇编程序中一样,以及诸如 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 有很好的宏特性,但它没有像 MASM 那样内置的像 .IF、.WHILE、.REPEAT...UNTIL 和 .FOR 指令那样的废话。 MASM 太老了,以至于有些人宁愿使用高级语言,也不得不用 asm 编写。 NASM 是最近设计的,如果您需要,只需使用编译器即可优化,而不仅仅是天真地填充 MASM .IF 指令的模板。

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

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

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

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...