High-Level Assembly (HLA) is a
language
Language is a structured system of communication that consists of grammar and vocabulary. It is the primary means by which humans convey meaning, both in spoken and signed language, signed forms, and may also be conveyed through writing syste ...
developed by
Randall Hyde that enables the use of higher-level language constructs to aid both novice and experienced assembly developers. It supports advanced
data type
In computer science and computer programming, a data type (or simply type) is a collection or grouping of data values, usually specified by a set of possible values, a set of allowed operations on these values, and/or a representation of these ...
s and
object-oriented programming
Object-oriented programming (OOP) is a programming paradigm based on the concept of '' objects''. Objects can contain data (called fields, attributes or properties) and have actions they can perform (called procedures or methods and impl ...
. Its
syntax
In linguistics, syntax ( ) is the study of how words and morphemes combine to form larger units such as phrases and sentences. Central concerns of syntax include word order, grammatical relations, hierarchical sentence structure (constituenc ...
is loosely based on several
high-level programming language
A high-level programming language is a programming language with strong Abstraction (computer science), abstraction from the details of the computer. In contrast to low-level programming languages, it may use natural language ''elements'', be ea ...
s (HLLs), such as
Pascal,
Ada,
Modula-2
Modula-2 is a structured, procedural programming language developed between 1977 and 1985/8 by Niklaus Wirth at ETH Zurich. It was created as the language for the operating system and application software of the Lilith personal workstation. It w ...
, and
C++, to facilitate the creation of readable assembly language programs and enable HLL programmers to learn HLA quickly.
Origins and Goals
HLA was initially designed as a tool for teaching assembly language programming at the college and university level. The objective was to leverage students' existing programming knowledge to accelerate their learning of assembly language. Most students in assembly language programming courses are already familiar with high-level
control flow
In computer science, control flow (or flow of control) is the order in which individual statements, instructions or function calls of an imperative program are executed or evaluated. The emphasis on explicit control flow distinguishes an '' ...
structures like IF, WHILE, and FOR. HLA allows students to immediately apply this knowledge to assembly language coding early in the course. This enables them to master other prerequisite subjects in assembly before learning how to code low-level forms of these control structures. The book ''The Art of Assembly Language Programming'' by Randall Hyde utilizes HLA for this purpose.
High vs. low-level assembler
HLA v2.x supports the same low-level machine instructions as a regular low-level assembler. High-end assemblers also support high-level-language-like statements (such as IF and WHILE) and more advanced data declaration directives, including
structures-
records, unions, and even
classes.
Examples of high-end assemblers include HLA,
Microsoft Macro Assembler (MASM), and
Turbo Assembler (TASM) on the Intel
x86
x86 (also known as 80x86 or the 8086 family) is a family of complex instruction set computer (CISC) instruction set architectures initially developed by Intel, based on the 8086 microprocessor and its 8-bit-external-bus variant, the 8088. Th ...
processor family.
Unlike most other assembler tools, the HLA compiler includes a ''Standard Library'' with thousands of
functions, proceduress and
macross that can be used to create full applications with the ease of a high-level language. While assembly language
libraries
A library is a collection of Book, books, and possibly other Document, materials and Media (communication), media, that is accessible for use by its members and members of allied institutions. Libraries provide physical (hard copies) or electron ...
are not new, a language that includes a large standardized library encourages programmers to use library code rather than writing their own functions.
HLA supports all the same low-level machine instructions as other x86 assemblers. Furthermore, HLA's high-level control structures are based on those found in MASM and TASM, whose HLL-like features predated HLA by several years. In HLA, low-level assembly code can be written just as easily as with any other assembler by ignoring the HLL control constructs. Unlike HLLs like Pascal and C(++), HLA does not require inline asm statements. HLA's HLL-like features provide a learning aid for beginning assembly programmers by easing the learning curve, with the expectation that they will discontinue using those statements once they master the low-level instruction set. In practice, many experienced programmers continue to use HLL-like statements in HLA, MASM, and TASM long after mastering the low-level instruction set, typically to improve readability.
It is also possible to write ''high-level'' programs using HLA, which reduces the tedium of low-level assembly language programming. Some assembly language programmers reject HLA outright because it allows programmers to do this. However, supporting both high-level and low-level programming gives any language a broader range of applicability.
Distinguishing features
Two HLA features distinguish it from other x86 assemblers: its powerful macro system (compile-time language) and the HLA Standard Library.
Macro system
HLA's compile-time language allows easy extension of the language, even enabling the creation of small
domain-specific language
A domain-specific language (DSL) is a computer language specialized to a particular application domain. This is in contrast to a general-purpose language (GPL), which is broadly applicable across domains. There are a wide variety of DSLs, ranging ...
s to simplify common programming problems. The macro
stdout.put
is a good example of a sophisticated macro that can simplify programming. Consider the following invocation of that macro:
stdout.put( "I=", i, " s=", s, " u=", u, " r=", r:10:2, nl );
The stdout.put macro processes each argument to determine its type and then calls an appropriate procedure in the HLA Standard Library to handle the output of each operand.
Most assemblers offer some macro capabilities. HLA's advantage over other assemblers is its ability to process macro arguments like
r:10:2
using HLA's extensive compile-time string functions. HLA's macro facilities can also infer variable types and use that information to direct macro expansion.
HLA's macro language provides a special ''Context-Free'' macro facility. This feature allows easy writing of macros that span other code sections via a ''starting'' and ''terminating'' macro pair (along with optional ''intermediate'' macro invocations available only between the start–terminate macros). For example, one can write a fully recursive-nestable SWITCH–CASE–DEFAULT–ENDSWITCH statement using this macro facility.
Because of the HLA macro facilities' context-free design, these switch..case..default..endswitch statements can be nested without conflicting code emission.
Compile-Time Language
The HLA macro system is a subset of the larger HLA ''Compile-Time Language'' (CTL). The HLA CTL is an interpreted language available within an HLA program source file; hence the name ''compile-time language''.
The HLA CTL includes control statements such as #IF, #WHILE, #FOR, #PRINT, and an
assignment statement. One can also create compile-time variables and constants, including structured data types like records and unions. The HLA CTL also provides hundreds of built-in functions, including a rich set of string and pattern-matching functions. The HLA CTL allows programmers to create CTL ''programs'' that scan and parse strings, enabling the creation of ''embedded
domain-specific language
A domain-specific language (DSL) is a computer language specialized to a particular application domain. This is in contrast to a general-purpose language (GPL), which is broadly applicable across domains. There are a wide variety of DSLs, ranging ...
s'' (EDSLs, also termed ''
mini-language
A domain-specific language (DSL) is a computer language specialized to a particular application domain. This is in contrast to a general-purpose language (GPL), which is broadly applicable across domains. There are a wide variety of DSLs, ranging ...
s''). The
stdout.put
macro mentioned earlier is an example of such an EDSL. The put macro (in the stdout namespace, hence ''stdout''.put) parses its macro parameter list and emits the code that will print its operands.
Standard library
The HLA Standard Library is an extensive collection of pre-made routines and macros (like the stdout.put macro described above) that simplify programming by preventing programmers from starting from scratch for each new application. Perhaps equally important, the HLA Standard Library allows programmers to write portable applications that run under Windows or Linux by simply recompiling the
source code
In computing, source code, or simply code or source, is a plain text computer program written in a programming language. A programmer writes the human readable source code to control the behavior of a computer.
Since a computer, at base, only ...
. Similar to the
C standard library
The C standard library, sometimes referred to as libc, is the standard library for the C (programming language), C programming language, as specified in the ISO C standard.International Organization for Standardization, ISO/International Electrote ...
for the programming language
C, the HLA Standard Library allows users to abstract away low-level
operating system
An operating system (OS) is system software that manages computer hardware and software resources, and provides common daemon (computing), services for computer programs.
Time-sharing operating systems scheduler (computing), schedule tasks for ...
(OS) calls, so the same set of OS
application programming interface
An application programming interface (API) is a connection between computers or between computer programs. It is a type of software Interface (computing), interface, offering a service to other pieces of software. A document or standard that des ...
s (APIs) can serve for all operating systems that HLA supports. While an assembly language allows making any needed OS calls, using the HLA Standard Library API set simplifies writing OS-portable programs.
The HLA Standard Library provides thousands of functions, procedures, and macros. As of mid-2010 for HLA v2.12, the library included functions in these categories (though the list changes over time):
* Command-line argument processing
* Array (dynamic) declaration and manipulation
* Bit manipulation
* Blob (binary large object) manipulation
* Character manipulation
* Conversions
* Character set manipulation
* Date and time functions
* Object-oriented file I/O
* Standard file I/O
* File system manipulation functions, e.g., delete, rename, change directory
* HLA-related declarations and functions
* The HLA Object Windows Library: object-oriented framework for Win32 programming
* Linked list manipulation
* Mathematical functions
* Memory allocation and management
* FreeBSD-specific APIs
* Linux-specific APIs
* MacOS-specific APIs
* Win32-specific APIs
* Text console functions
* Coroutine support
* Environment variable support
* Exception handling support
* Memory-mapped file support
* Sockets and client–server object support
* Thread and synchronization support
* Timer functions
* Pattern matching support for regular expressions and context-free languages
* Random number generators
* Remote procedure call support
* Standard error output functions
* Standard output functions
* Standard input functions
* String functions
* Table (associative) support
* Zero-terminated string functions
Design
The HLA v2.x language system is a command-line driven tool that consists of several components, including a ''shell'' program (e.g., hla.exe under Windows), the HLA language compiler (e.g., hlaparse.exe), a low-level translator (e.g., the HLABE, or HLA Back Engine), a
linker
Linker or linkers may refer to:
Computing
* Linker (computing), a computer program that takes one or more object files generated by a compiler or generated by an assembler and links them with libraries, generating an executable program or shar ...
(link.exe under Windows, ld under Linux), and other tools such as a resource compiler for Windows. Versions before 2.0 relied on an external assembler back end; versions 2.x and later of HLA use the built-in HLABE as the back-end object code formatter.
The HLA ''shell'' application processes command line parameters and routes appropriate files to each program in the HLA system. It accepts
.hla
files (HLA source files),
.asm
files (source files for MASM, TASM, FASM, NASM, or Gas assemblers),
.obj
files for input to the linker, and
.rc
files (for use by a resource compiler).
Source code translation
Originally, the HLA v1.x tool compiled its source code into an intermediate source file that a ''back-end'' assembler such as MASM, TASM, flat assembler (
FASM
FASM (''flat assembler'') is an assembler for x86 processors. It supports Intel-style assembly language on the IA-32 and x86-64 computer architectures. It claims high speed, size optimizations, operating system (OS) portability, and macro abi ...
),
Netwide Assembler (NASM), or
GNU Assembler
The GNU Assembler, commonly known as gas or as, is the assembler developed by the GNU Project. It is the default back-end of GCC. It is used to assemble the GNU operating system and the Linux kernel, and various other software. It is a part o ...
(Gas) would translate into the low-level object code file. As of HLA v2.0, HLA included its own ''HLA Back Engine'' (HLABE) that provided the low-level object code translation. However, via various command-line parameters, HLA v2.x can still translate an HLA source file into a source file compatible with one of these other assemblers.
HLA Back Engine
The HLA Back Engine (HLABE) is a compiler back end that translates an internal intermediate language into low-level
Portable Executable
The Portable Executable (PE) format is a file format for executables, object file, object code, Dynamic-link library, dynamic-link-libraries (DLLs), and binary files used on 32-bit and 64-bit Microsoft Windows, Windows operating systems, as well ...
(PE), Common Object File Format (
COFF
The Common Object File Format (COFF) is a format for executable, object code, and shared library computer files used on Unix systems. It was introduced in Unix System V, replaced the previously used a.out format, and formed the basis for ext ...
),
Executable and Linkable Format
In computing, the Executable and Linkable FormatTool Interface Standard (TIS) Portable Formats SpecificationVersion 1.1'' (October 1993) (ELF, formerly named Extensible Linking Format) is a common standard file format for executable files, obje ...
(ELF), or
Mach-O object code. An HLABE ''program'' mainly consists of data (byte) emission statements, 32-bit relocatable address statements, x86 control-transfer instructions, and various directives. In addition to translating byte and relocatable address statements into the low-level object code format, HLABE also handles branch-displacement optimization (picking the shortest possible form of a branch instruction).
Although the HLABE is incorporated into the HLA v2.x compiler, it is a separate product. It is public domain and open source (hosted on
SourceForge.net).
See also
*
Comparison of assemblers
This is an incomplete comparison of Assembler (computing), assemblers. Some assemblers are components of a compiler system for a high-level programming language and may have limited or no usable functionality outside of the compiler system. Some a ...
Notes
References
* Richard Blum, ''Professional assembly language'', Wiley, 2005, , p. 42
*
Randall Hyde, ''Write Great Code: Understanding the machine'',
No Starch Press
No Starch Press is an American publishing company, specializing in technical literature often geared towards the geek, hacker, and DIY subcultures. Popular titles include '' Hacking: The Art of Exploitation'', Andrew Huang's ''Hacking the Xbo ...
, 2004, , pp. 14–15 and used throughout the book
*
Randall Hyde, ''The Art of Assembly Language, 2nd Edition'',
No Starch Press
No Starch Press is an American publishing company, specializing in technical literature often geared towards the geek, hacker, and DIY subcultures. Popular titles include '' Hacking: The Art of Exploitation'', Andrew Huang's ''Hacking the Xbo ...
, 2010, , used throughout the book
Further reading
* Paul Panks (June 29, 2005),
HLA: The High Level Assembly Programming Language',
Linux Journal
''Linux Journal'' (''LJ'') is an American monthly technology magazine originally published by Specialized System Consultants, Inc. (SSC) in Seattle, Washington since 1994. In December 2006 the publisher changed to Belltown Media, Inc. in Hous ...
External links
*
Downloads for Windows, macOS, and Linux
{{X86 assembly topics
Assemblers
Assembly languages
Public-domain software
High-level programming languages