Assembly Language: Is It Useful? Can You Still Get a Job with It?

There’s a pervasive myth that being able to program in assembly language makes you a master programmer with deity-level skills. Yet novice programmers can also pick up the nuances of assembly language—provided they invest the time and effort.

The first thing to know: there are many varieties of assembly language, always named for a particular CPU or family of related CPUs. There’s x86 assembly language and x64 assembly language (i.e., the 64-bit version). On smartphones, which depend on ARM CPUs, it’s AArch32 or Aarch64 (a.k.a. ARM64) assembly language. Those ARM CPUs are also found in Raspberry Pis and Mac M1 computers, though the CPUs differ enormously.

Assembly language also has a long and storied history. Back in the 1980s, when home computers first appeared, you could program them in Basic or assembly language, the latter offering greater speed (specifically, 6502 for CBM-64s, Atari and BBCs, and Z80 for Timex Spectrums and Tandy TRS-80). Compared to modern CPUs, those instruction sets were a lot simpler; for example, the 6502 CPU only had 69 instructions and three registers to play with. The Z80 had a few more registers and 391 instructions.

How Easy is It to Program in Assembly Language?

If you think programming is challenging in C# or Java, try writing assembly language programs. No matter which CPU family you write for, the only math operations are add, subtract, multiply and divide, and there’s no Object Oriented or Functional programming. In fact, there are no data structures at all except blocks of memory. That means no string handling, lists, dictionaries, structs, classes, and so on. If you want to use those, you have to get a library of routines or write them yourself. It gets even harder if you want to use multiple threads or tasks.

Programming in assembly language is hard work; it’s slow, tedious and needs a lot of concentration. You have no variables, just registers and memory locations. Throw away any aversion to using Goto because the JMP instruction (Goto’s equivalent in assembly language) gets used quite a bit. Your program’s structure will be made up of loops, condition checking, procedure calling and lots of JMPs.

How Does Assembly Language Work?

Irrespective of CPU type, assembly language is just a set of simple instructions that moves data between memory and registers, performs simple arithmetic in registers, calls addresses, or jumps to an address. Other operations include comparing registers, rotating registers and clearing or setting CPU flags. The older CPUs (6502, Z80) managed data in 8-bit or 16-bit sizes while newer 64-bit CPUs can handle 8, 16, 32 and 64 bits.

Modern CPUs also have extra hardware for doing arithmetic, compare, packing and bitwise operations on multiple items at once. They’re called Streaming SIMD extensions (SSE for short). When used properly, they can speed up some calculations enormously.

What Job Opportunities are Available with Assembly Language?

Up until the late 1980s, games were still being written in assembly language. However, the increased productivity of C helped swallow up the market-share for the older language; you no longer had to do a full rewrite when moving games between different CPU types such as 68000 (Atari St and Amiga) and 8086 (PC).

In language popularity surveys, assembly language usually ranks pretty low; it’s 33rd on Gihut.info, a site that analyses GitHub projects. The TIOBE Index, which analyses the “buzz” around various programming languages, puts assembly language in its top ten, but it’s difficult to find any comparable ranking within the ecosystem of websites and companies that measure the comparative popularity of programming languages.

Today, assembly language finds its greatest use in compiler development and low-level engineering, with some finance applications. Some companies definitely need the talent. According to Lightcast (formerly Emsi Burning Glass), which collects and analyses millions of job postings from across the country, there were 5,088 open job postings over the past 12 months that mentioned assembly language; however, the platform estimates job growth for the language at -10.8 percent over the next two years.

Those skilled in assembly language can expect relatively high salaries, at least: Lightcast pegs the median salary for jobs requiring assembly language at $93,022, which can drift higher with the right mix of skills and experience. Jobs requesting assembly language knowledge include software developer/engineer, training and development specialist, embedded software engineer, and firmware engineer.

Top industries for assembly language knowledge include manufacturing, public administration, and professional, scientific and technical services.

Conclusion

Another myth with assembly language is that you get faster programs than with compiled higher-level programming languages lsuch as C++, Java or C#. There are many ways of running code faster at this level, although some solutions are rather complicated. Unless you have a lot of assembly language programming experience, your assembly language programs are going to be outperformed by optimized high-level programs.