One of the earliest high-level assemblers was Niklaus Wirth's PL360 from 1968. 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.
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. This allows the use of high-level control statement abstractions wherever maximal speed or minimal space is not essential; low-level statements that assemble directly to machine code can be used to produce the fastest or shortest code. The end result is assembly source code that is far more readable than standard assembly code while preserving the efficiency inherent with using assembly language.
High-level assemblers generally provide information-hiding facilities and the ability to call functions and procedures using a high-level-like syntax (i.e., the assembler automatically produces code to push parameters on the stack rather than the programmer having to manually write the code to do this).
High-level assemblers also provide data abstractions normally found in high level languages. Examples include structures, unions, classes, and sets. Some high level assemblers (e.g., TASM and HLA) support object-oriented programming.
- Assemblers and Loaders, David Salomon. Presents definitions and examples of older high-level assemblers.
- The Art of Assembly Language, Randall Hyde
- Webster site with information and links on HLA and assembler