An old joke goes something like this:"There are three reasons for using assembly language: speed,
speed, and more speed." Even those who absolutely hate assembly language will admit that if speed is
your primary concern, assembly language is the way to go. Assembly language has several benefits:
Assembly language is the uncontested speed champion among programming languages. An expert
assembly language programmer will almost always produce a faster program than an expert C programmer. While certain programs may not benefit much from implementation in assembly, you can speed up
many programs by a factor of five or ten over their HLL counterparts by careful coding in assembly language;
even greater improvement is possible if you're not using an optimizing compiler. Alas, speedups
on the order of five to ten times are generally not achieved by beginning assembly language programmers.
However, if you spend the time to learn assembly language really well, you too can achieve these impressive
performance gains.
Despite some people's claims that programmers no longer have to worry about memory constraints,
there are many programmers who need to write smaller programs. Assembly language programs are often
less than one-half the size of comparable HLL programs. This is especially impressive when you consider
the fact that data items generally consume the same amount of space in both types of programs, and that
data is responsible for a good amount of the space used by a typical application. Saving space saves
money. Pure and simple. If a program requires 1.5 megabytes, it will not fit on a 1.44 Mbyte floppy. Likewise,
if an application requires 2 megabytes RAM, the user will have to install an extra megabyte if there is
only one available in the machine 7 . Even on big machines with 32 or more megabytes, writing gigantic
applications isn't excusable. Most users put more than eight megabytes in their machines so they can run
multiple programs from memory at one time. The bigger a program is, the fewer applications will be able
to coexist in memory with it. Virtual memory isn't a particularly attractive solution either. With virtual
memory, the bigger an application is, the slower the system will run as a result of that program's size.
Capability is another reason people resort to assembly language. HLLs are an abstraction of a typical
machine architecture. They are designed to be independent of the particular machine architecture. As a
result, they rarely take into account any special features of the machine, features which are available to
assembly language programmers. If you want to use such features, you will need to use assembly language.
A really good example is the input/output instructions available on the 80x86 microprocessors.
These instructions let you directly access certain I/O devices on the computer. In general, such access is
not part of any high level language. Indeed, some languages like C pride themselves on not supporting
any specific I/O operations. In assembly language you have no such restrictions. Anything you can do on
the machine you can do in assembly language. This is definitely not the case with most HLLs.
Of course, another reason for learning assembly language is just for the knowledge. Now some of
you may be thinking, "Gee, that would be wonderful, but I've got lots to do. My time would be better
spent writing code than learning assembly language." There are some practical reasons for learning assem-bly,
even if you never intend to write a single line of assembly code. If you know assembly language well,
you'll have an appreciation for the compiler, and you'll know exactly what the compiler is doing with all
those HLL statements. Once you see how compilers translate seemingly innocuous statements into a ton of
machine code, you'll want to search for better ways to accomplish the same thing. Good assembly language
programmers make better HLL programmers because they understand the limitations of the compiler
and they know what it's doing with their code. Those who don't know assembly language will accept
the poor performance their compiler produces and simply shrug it off.
Yes, assembly language is definitely worth the effort. The only scary thing is that once you learn it
really well, you'll probably start using it far more than you ever dreamed you would. That is a common
malady among assembly language programmers. Seems they can't stand what the compilers are doing
with their programs.
Back to EAS home