Embedded.com: Is Assembly Language Obsolete?

Embedded.com has an interesting article on the perceived obsolescence of assembly by some professions. I've spoken with a number of programmers and engineers, and almost every one, with the exception of low level computer engineers, says 'Nobody programs in assembly anymore'. This might be true for desktop applications, server applications, or web service engineers, however nothing is further from the truth for embedded engineers. I've always believed that to understand how something works, you need to know how it is implemented. This article shares this thought and asserts that any good embedded engineer needs to understand computer architecture and thus assembly. That or you are going to be stuck with this:

"If a Java-only developer ever pondered CPU design, can you imagine the horribly-complex room-full of logic he'd envision? 'Here's the circuit that implements a formatted print instruction.'"

What do you do and when was the last time you programmed some assembly?

Article: http://www.embedded.com/design/206801678
http://en.wikipedia.org/wiki/Assembly_language

3 Comments:
Doomerz on Feb 25th, 2008 11:25am
Embedded programming and I used it last week while writing some device drivers.
Max on Feb 25th, 2008 1:48pm
This makes me really sad. These programmers are so far away from the hardware with their API's that they have no clue as to what's going on. In order to make the most out of whatever you are programming you must known how it operates. I am a liberal arts student and the last time I programmed assembly was a couple weeks ago when messing around with microcontrollers.
Greg on Feb 29th, 2008 9:25am
I'm a web programmer and, in my spare time, an Arduino enthusiast. I'm taking a class right now that's a survey of computer science issues from digital circuit design through operating system and networking issues, all using the Arduino as the platform for development. Right now, we're at the assembly stage of things, so I'm literally in the middle of learning AVR assembly for the first time right now.

I've gained two big things from learning assembly:

(1) a strong sense of the border between software and hardware (manipulating registers immediately after having learned how they're built), which gives me a whole new perspective on what it means for code to be efficient, i.e. what the resources it's actually using are and what kinds of operations use more and less of them;

(2) a whole new appreciation for the value and design challenges involved in implementing higher level languages. First of all, learning assembly by looking at code generated by the gcc is very instructive since it's often hard to understand why the compiler decided to approach things in a certain (less efficient) way or (conversely) how it figured out the solution to a problem that's hard even for the programmer to solve. Relatedly, learning the C conventions for the use of registers in order to write assembly that interoperates with compiled C code has been a tour of all of the design decisions and tradeoffs the implements of C for this platform had to make.

In the next phase of this class, we're going to design our own c-like high level language and write a compiler to implement it on the Arduino. This is a lot closer to my actual interests, but having gotten a real feel for how the assembler that is the final output of such a complier really works makes me feel much more prepared to approach it.
Leave a comment:

Name
Email (optional)
Website (optional)

bold[TEXT] - italic[TEXT] - underline[TEXT] - big[TEXT]
Enter Number