While Assembly has been mostly abstracted away from the lives of the majority of programmers, it still has a few specific use cases throughout the industry such as:
- Embedded systems that have limited memory and hardware capacity
- Direct hardware testing
- Software optimization
Embedded systems, along with their microcontrollers, are very often programmed in Assembly because it gives programmers the ability to control hardware functions on a task by task level, ensuring the size and speed of the program maximizes hardware limits.
A refrigerator, for example, has limited storage and computing capacity. Programming in Assembly ensures that both are used to their full potential.
Learning an Assembly language can give a programmer the idea of the “cost of code”. Certain algorithms can be optimized based on data storage and memory access techniques. Understanding how hardware implements these techniques can help a programmer choose the right tools for the right job and develop superior code.
Small optimizations in programs might not seem incredibly important with our advances in processing power, but in some cases, they can make all the difference. For example, if we are trying to achieve as near to real-time analysis as we can get, say to predict market swings in the stock market, things as trivial as the bit-space taken up by an integer can make a huge difference at run-time.
There are several Assembly languages, each written for a specific processor, or more precisely, in accordance with a processor’s Instruction Set Architecture. Three primary industry competitors are the x86, ARM, and MIPS architectures, which account for the majority of desktop, mobile, and embedded technologies respectively.
While we won’t master a specific Assembly language in this lesson, the goal that remains is to understand how Assembly language works on a fundamental level in order to write better software.
The three computers show some of the largest ISAs and Assembly languages in the industry. This is only the top of the list with many, many more in existence. Each serves a different part of the market with some smaller applications written only for a single device.