Assembly Language Keeps Rising


Assembly language is a very low-level programming language for niche platforms such as bootloaders, device drivers, and embedded devices. In the minds of many, it’s the sort of language that computer-science students will cover in the course of their classwork, and never use in their actual jobs. But as demonstrated by the TIOBE Index for July, Assembly language has enjoyed a steady rise in the rankings of the most popular programming languages.

Assembly language now stands in tenth place, ahead of even programming stalwarts such as Ruby, Visual Basic, Swift, and R. It is also well ahead of highly specialized languages such as MATLAB and Groovy. (TIOBE uses programming-related traffic from search engines and Websites such as Wikipedia and YouTube to generate its rankings.)

“Why would anyone write code at such a low level, being far less productive if compared to using any other programming language and being vulnerable to all kinds of programming mistakes?” read TIOBE’s note accompanying the rankings. “The only reasonable explanation for this is that the number of very small devices that are only able to run assembly code is increasing.”

Even toothbrushes and coffee machines “are running assembly code these days,” the note added. “Another reason for adoption is performance. If performance is key, nobody can beat [assembly language].” Assembly language is notable for its one-to-one alignment between the language and the machine-code instructions (ISAs) for particular computer architecture; this is a world of difference from other programming languages that can operate across multiple kinds of architectures.

It’s difficult for a human to get closer to the heart of the machine than via assembly language. For that reason alone, it’s a worthy subject of study for anyone interested in how CPUs and programming actually work. For working programmers, it’s also clear that assembly language represents an efficient way to build new products, especially as more and more household objects end up with processors onboard.

7 Responses to “Assembly Language Keeps Rising”

  1. Dan Sutton

    Good news for me, then, since that’s where I started.

    Note that there’s no such thing as “Assembly Code”. There’s “Assembly Language”, which is “assembled” (we don’t use “compiled” because the process is one-to-one instruction to op-code, thus the normal types of compiler function such as optimization don’t apply) by an “Assembler” into “Machine Code”. The phrase “Assembly Code” is an oxymoron.

  2. David Jonathan Bush

    Back when I wrote games for the Motorola M6809, each CPU model had its own instruction set. Lance Leventhal would write an excellent book about each one. I wonder how many different languages are lumped together here under the same “Assembly Language” banner. Does an Athlon use the same language as an Intel? It seems unlikely. I wonder what a statistical breakdown of the most popular CPUs and GPUs would look like.

  3. Dan Sutton

    @David Jonathan Bush: Athlons, Pentium derivatives and other 64-bit Intel chips use an extended version of the old Intel 8086 16-bit instruction set, involving new instructions to handle larger register sizes, operations, etc. What tends to happen is that someone like Microsoft swears allegiance to a manufacturer’s standard (in the late ’90s it was AMD; now it’s Intel) and other manufacturers had better make sure their chips conform to the standard that the new version of, say, Windows is going to conform to. So yes: an Athlon uses the same instruction set as an Intel. Manufacturers can/could build in extensions to their own base instruction set, but this tends to be counterproductive since it leads to incompatibility in terms of software development.

    However, this article appears (to me, at least) to be talking about different chipsets altogether, such as ARM, or whatever, which might be embedded into small devices: the machine code for those systems is entirely different, since the chips’ architecture is different: we’re talking about a RISC-style thing without the complex instructions (CISC) that Intel/AMD chips use.

  4. One thing that held assembly language back was lack of structure. Macros can however be used to form nestable program structures and a lot of other abstractions, dramatically raising the level of the language, programmer productivity, and code maintainability, and reducing bugs, all with (in most cases) zero penalty in run speed or memory taken since they’re just assembling the very same thing you would write out by hand if you didn’t use the macros. I used a nice macro assembler starting even 30 years ago, but I’m still finding out just how much can be done with one, things that even today have not occurred to most assembly-language programmers. I wish I had figured all this stuff out back then.

    BTW, thankyou for correctly calling it “assembly language” rather than “assembler,” as “assembler” is not a language but rather the piece of software that takes the assembly-language source code and produces the machine language that the microprocessor understands.