Assembly FASM是如何成为低级汇编程序的,NASM是如何成为高级汇编程序的?

Assembly FASM是如何成为低级汇编程序的,NASM是如何成为高级汇编程序的?,assembly,nasm,fasm,Assembly,Nasm,Fasm,维基百科说: 计算中的高级汇编程序是汇编语言的汇编程序,它结合了高级编程语言中的特性 它接着说: 高级汇编程序通常提供直接将一对一汇编成低级机器代码的指令,如任何汇编程序中的指令,以及控制语句,如IF、WHILE、REPEAT…till、FOR、宏和其他增强功能 最后,它涉及一些高级汇编程序: 最近的高级组装商有Borland的TASM、NASM、微软的MASM、IBM的HLASM(用于z/Architecture系统)、Alessandro Ghignola的油毡和Ziron 其中,我只使用了

维基百科说:

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

它接着说:

高级汇编程序通常提供直接将一对一汇编成低级机器代码的指令,如任何汇编程序中的指令,以及控制语句,如IF、WHILE、REPEAT…till、FOR、宏和其他增强功能

最后,它涉及一些高级汇编程序:

最近的高级组装商有Borland的TASM、NASM、微软的MASM、IBM的HLASM(用于z/Architecture系统)、Alessandro Ghignola的油毡和Ziron


其中,我只使用了NASM,但我能理解为什么它是一个高级汇编程序;它通常有结构、宏和非常广泛的预处理器。然而,当我看到FASM的Wikipedia页面时,它将FASM称为一个低级汇编程序,我并不真正理解。FASM不仅支持结构和宏(我不太了解预处理器),而且还支持ASSEMBLE time if语句。是否有其他规则指定汇编器是高级还是低级?FASM Wikipedia页面表示,它有意不支持许多命令行选项,但仅此一点就可以使它成为一个低级汇编程序吗?

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

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

虽然这些术语没有具体的技术含义,但只是一种软设计目标/自我提升语言。FASM本身是用asm编写的,它肯定是在美化它是多么的简陋和渺小。我认为称自己为“低级”汇编程序是为了声明“我们不是MASM”;我们提供的工具对真正编写asm非常有用,而不是假装是一种更高级的语言

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


在我看来,NASM是一个不错的宏汇编程序。它并不比FASM“更高层次”。NASM在“高级”汇编程序列表中似乎非常不合适。

NASM没有
IF
,而
指令被汇编成机器代码,只有
%IF
%rep
是预处理器的汇编时间控制流指令。不是运行时。它确实有预处理器宏,但FASM也有。我不会把NASM称为“高水平”。像高水平和低水平这样的术语是相对的术语,在旁观者的眼里。他们既是事实也是观点。我不会因为把这些术语看作是有硬规则的定义而太激动,因为它们是有规则的定义。在本案中,提交人心中有一个定义,并据此采取了行动。另一个页面的作者心里有一个定义,并按照定义行事。有一长串的术语属于这一类,从嵌入式术语开始,但也包括汇编语言和汇编程序。是的,这很有意义。我想我只是希望这是一个事实/如果它出现在维基百科的页面上,会得到广泛的认同;它帮助我理解了内存地址和程序如何更好地工作,我从NASM手册中知道MASM并没有遵循同样的方法。至于“高/低水平”,我想我明白你的意思了。谢谢你帮我理解这一点。