What is an Assembly Language

Assembly languages are low-level languages that are specific to a particular computer architecture. By comparison, many high-level programming languages can be used on multiple architectures, but require interpreting or compiling before it reaches the processor. 

BREAKING DOWN Assembly Language

Assembly languages have been largely replaced by high-level programming languages. Software engineers would rather write a single application that works across all PCs - regardless of whether they have Intel or AMD processors - using high-level languages. By comparison, they would be required to write separate applications for each type of computer architecture using assembly languages. These applications would become extremely difficult to maintain since every update would entail updating several different applications.

The most basic instructions executed by a computer are binary codes, consisting of ones and zeros, since these are directly translatable to the on and off states for electricity moving through a processor. Of course, it's impractical for software engineers - or any humans - to translate information into ones and zeros, so assembly languages were developed to simplify the process. These assembly languages still involved a lot of work translating code across different architectures, so higher level programming languages came after them.

That said, assembly languages are still common in certain markets that demand high speed and performance. Flight simulators may use highly specialized architectures where higher level languages don't work, which means that assembly languages may be a necessity. High frequency trading operations may also use assembly languages since they can execute analyses and transactions much more quickly than high-level languages, which may result in better trading revenue and profitability relative to the competition.

Example of Assembly Languages

Assembly languages send directions to the processor, memory, and other computer components. These directions are slightly more abstract versions of binary code, which consists purely of ones and zeros. For example, the code 10110000 01100001 tells a processor to move an 8-bit value to a register. By using hexadecimal format, these instructions can be shortened to B0 61. Assembly languages make this even more understandable by introducing operators, like MOV AL, 61h, where MOV is an abbreviation for "move".

Higher level programming languages often handle these tasks automatically and let software engineers focus on much higher level tasks, such as assigning variables and completing operations on them. For example, a software engineer may define a variable in JavaScript using let myVariable = 123 and that variable will be automatically assigned a place in memory based on the integer 123's size and other factors. The software engineer doesn't have to worry about managing memory and can instead focus on what the variable is doing.