4.1 Stuff that cannot be done in HLPL

Although most programming tasks can be done in a HLPL, there are certain tasks that cannot be easily done this way.

4.1.1 Cheap MCUs

An MCU (microcontroller unit) is a computer-on-a-chip that has the ability to interface to other electronic devices. They are commonly found in embedded applications, especially small and/or inexpensive applications.

MCUs can be quite powerful, approaching the capabilities of a low-end netbook computer. However, MCUs can also be quite inexpensive, costing less than 50 cents each. One way to make an MCU inexpensive is to reduce processing resources, such as RAM (for variables) and ROM (for code).

As a result, a HLPL cannot be used to write programs for these inexpensive MCUs. This is because most HLPLs assume a minimum amount of resources available on the target platform. These resources are missing in inexpensive MCUs. For example, some MCUs have no RAM, and only up to 512 individual instructions.

Assembly language programming is the only means (other than machine coding) to write programs for these inexpensive MCUs.

4.1.2 BIOS/bootstrap code

Even if a PC has gigabytes of memory, the bootstrap or BIOS code cannot assume resources that are available to application programs. This is because BIOS code and bootstrap code (e.g., from the MBR, master boot record) execute before an operating system is loaded. For example, when the BIOS code of a computer executes from a cold or warm start, it does not even know where or much memory is available.

This means that assembly programming is the only way to write BIOS and bootstrap code on a computer, at least until memory is initialized to the point that the necessary resources of a HLPL is available.

4.1.3 (Ethical) Hacking

The “payload” of most exploits need to be hand coded in machine code (not assembly language!) because specific byte sequences have to be avoided.

4.1.4 Compilers

Developers who write compilers, especially the “backend”, need to understand how to code in assembly language.