Wikipedia states:
High-level assemblers in computing are assemblers for assembly language that incorporate features found in high-level programming languages.
It goes on to say:
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.
Finally, it refers to some high-level assemblers:
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.
Out of these, I've only used NASM, but I can understand why it is a high-level assembler; it has structures, macros and a very extensive preprocessor in general. However, when I see FASM's Wikipedia page, it refers to FASM as a low-level assembler, which I don't really get. FASM not only supports structures and macros (I don't know too much about the preprocessor), but also supports asssemble-time if statements. Is there any other rule that specifies whether an assembler is high-level or low-level? The FASM Wikipedia page says it intentionally does not support many command-line options, but does that alone make it a low-level assembler?
IF
orWHILE
directives that are assembled into machine code, only%if
and%rep
which are assemble-time control flow directives of the preprocessor. Not runtime. It does have preprocessor macros but so does FASM. I wouldn't call NASM "high level". – ecm