Is assembly language a dead skill set?
Interesting article here http://www.embeddedinsights.com/channels/2011/02/02/is-assembly-language-a-dead-skillset/
The comments that follow the article are very good.
I can't imagine working with a uc that I could not write asm
for....and asm is actually the easiest language to use of all,
it's just a bit tedious, tiny baby-steps to accomplish
your task.
The comments that follow the article are very good.
I can't imagine working with a uc that I could not write asm
for....and asm is actually the easiest language to use of all,
it's just a bit tedious, tiny baby-steps to accomplish
your task.
Comments
One minicomputer had such a complex instruction set that a Snobol preprocessor was supplied.
Writing ARM assembly language is quite difficult and the compiler does a better job in many cases.
Most code I write is C but I lean heavily on asm to speed up interrupt
routine code.
This statement from the comments below the article is particularly good.
"when you need to squeeze the extra performance or program space out of the inexpensive 8 bit micro driving your cost sensitive product, assembler may be the only answer."
I couldn't afford an assembler when I started, so I hand-assembled my programs. I got quite good at it, and even produced a comprehensive debugger for the 8088 - about 15 pages of hand-written and hand-assembled code. It got easier when the basic debugger was working as I was able to use it to debug the next version.
Since you are in the UK I bet you are aware that the ARM is very much a British creation.
I hear MS is porting W8 to ARM.... WIntel is joined by WARM ..LoL
Sort of unfriendly, but there are lots of nice ARM asm tutorials on the web.
You can pick up a basic working knowledge in a week or so if you put in
a few hours a day. MIPS I'm really not acquainted with.
http://www.coranac.com/tonc/text/asm.htm#sec-arm
http://www.google.com/search?rls=ig&hl=en&source=hp&biw=1680&bih=873&q=arm+assembly+tutorial&aq=2&aqi=g10&aql=&oq=arm+assembly
C.W.
Of course, there are a lot of processor that don't have an optimized compiler where assembly is needed to get the most out of the chip. So at the low-end of the scale assembly language is still very important.
This is one area where the prop is kind of interesting. Because of how the cogs work, assembly bits can be very easily compartmentalized and used in tandem with higher level things. Worth some thought, IMHO.
Also, some other comments to the article were spot on. Assembly language will fall out of popular favor, but won't ever go away. The higher level stuff depends on the skills assembly language programmers have, and there are always legacy systems too. Those with good skill will always find there is a need to employ it. Can't boot strap, just like we've been doing with the Propeller, without those skills either. New tech then always starts with assembly language as all the little bits of code needed to fold it into the higher level constructs are assembly language by default, because of the need for boot strapping the tech into general use.
Efficient cache utilization is more a function of code and data organization than anything else. Some processors allow for preloading the cache with DMA and locking ia portion of it. This can be done in a high level language as easy as assembly.
But it's assembly's role is shrinking. Recently I bought one of those el cheapo TI 430 kits, come to find out TI expects you to code for the lilliputian in C even though it has a easy to learn ISA. And to me to install a bloated piece of excrement like Eclipse and play C compiler games just to work with this chip was nothing short of a insult.
I doubt that good assembly programmers will ever be wanting for work. And if there are fewer and fewer practitioners, so much the better for the rest of us! At least Browser will still be getting his shrimp treats.
-Phil
I have always felt that Assembly and machine lang are the way to go for most applications, easier to debug, fewer bugs period, easier to read (with a few exceptions). I also use BASIC, UCSD complient Pascal, ANSI C (NOT gcc style [yuk]), and a few custom languages (starting to even do some SPIN). Though assembly remains the best for any serious project in my book, the high level languages are good for small rarely used code, you need assembly for any big and/or serious project.
My current problem is that in timing critical applications PC's have been impossible for more than a decade, so you need ether a really elaborate interrupt driver that can somehow convince the OS not to freeze it out (good luck with that) or outboard processing. I am currently going with outboard processing, and after using Blue Earth Controllers in a similar way (I have better interrupt driven serial drivers than the manufacturers do) and for some things Basic Stamps, I have now had one of our esteemed peers here make a board to do those kind of things with a Propeller. Not planning to look back.
What I really want to do is ditch the PC and put the app on the web via an ethernet adapter from one of these embedded boards. That doesn't quite fit in 32K but I'm working on what looks like a very viable alternative.
I did the same for my first 8080 computer up until I hand assembled a floppy disk bootstrap program for CPM. The hex digits were then entered by hand on our 1702 eprom programmer. Took several tries to get it right but by the time I did I knew 8080 machine code really well. I was also very happy to type "B" at the monitor prompt and have CPM load.
Although they may never actually write in assembler.
How so?
Because they are the guys who write the compilers that the rest of us mere mortals use:)
I admire your spirit but there are a few issues to deal with.
Quite possibly true on small systems where you need the speed and or small size
of code. And where you are not expecting to move the code from architecture to
architecture. For anything large and cross-platform we have to deal with the
following:
I guess most would disagree for obvious reasons that I won't state. But
consider this: If I need a large and complicated piece of code, an operating
system or a web browser for example, and if I want it to run on many different
platforms, x86, ARM, MIPs, Spark etc etc then if I work in assembler I have to
write it as many times as there are platforms. That is of course not going to
happen, life is short and humans have better things to do than write the same
thing 100 times.
Anyway it means I have multiplied the number of of possible bugs by the number
of platforms. Ergo debugging is harder.
No, same reason as above.
As to the reliability issue, I agree there as well. However, I believe the biggest leap in reliability occurs when you use a language with bounds checking (or even better: autovivification, as in Perl) and automatic garbage collection. Buffer overflows and memory leaks (from poor heap management) are probably two of the biggest contributors to software instability. And I blame this directly on the profusion of programs written in C.
Assembly language definitely has its place, especially for programming micros or PC device drivers. But for big projects (and despite the fact that Chip wrote the Spin compiler in X86 assembly), I think HLLs are the way to go.
-Phil
Yes, me for one! I loved programming in x86 assembler in the good ol' days of DOS!
Anyway, assembly language isn't a dead skillset, but is a diminishing one as cheap microcontrollers become more and more capable and more supportive of high level language constructs, allowing the overhead to become a more and more insignificant part of development and implementation costs. There will always be special applications where the "utmost" performance is needed from the hardware or functionally limited hardware needs to be used for cost, space, or power reasons and assembly language will be needed for at least part of the coding.
How can one do the critical part (effectively) in assembly when he has only rudimentary knowledge of such?
I am sure someone will come up with real argument for learning and programming in assembly.
Assembly language should be placed in museum and not be subject of lessons in one of the nation's educating for future institution.
I think I'll Google for assembly language job.
PS I did start computer programing ( 1973) using assembly language the reason we had whopping 4K ( four kilobytes) of memory to run our test program.
critical interrupt code. I do enjoy it but since so few programmers
are using it it makes my code hard to work with for others.
I comment my small asm routines exhaustively in hopes that
they will be understandable to someone with weak asm skills.
As uCs get faster and faster I am discovering that I can do some
really good work in pure C.
I do admit that it is fun to be sought out to write some fast code in asm though :-)
I have to disagree:)
The "future" of computing has been and looks like it still is made by two important groups, the hardware designers bringing us ever more powerful processors and the software designers, guys who will have to write compilers for those new processors. The point at which these specialists come together is the instruction set, the assembly language. Both the hardware and the software guys need to know what a computer is.
Its quite possible for the hardware designers to come up with amazingly fast and powerful machines that have such a contorted architecture that the compiler writers cannot deal with it. They cannot write smart enough compilers to realize the potential performance. The Intel Itanium and i860 before that come to mind as examples.
Conversely I'm sure the language designers can come up with all kinds of theoretically brilliant language concepts that make no practical sense to implement in hardware.
So whilst I'm not suggesting comp. sci. and digital design students be taught assembler with a view to ever writing serious code with it, they both have a serious need to know it. If they want to design sensible processors or be able to write efficient compilers.
So whilst you may not find jobs advertised for assembler programmers you will find things like this:
https://www.xcore.com/forum/viewtopic.php?f=33&t=1194
Note the requirements: Minimum upper second class honours degree from a top university.
I'm sure they would expect any candidates to very familiar with assembler.
-Phil
Ha! Sadly not. Too old, too ugly, under qualified, wrong degree subject, wrong university anyway. And now living in the wrong country:)
I would imagine that a suitably qualified candidate could command a much bigger salary at Google or Microsoft or Facebook or whatever.
But given the choice would you help boost advertising revenue, make crappy operating systems, peer into peoples affairs?
Or would you rather work with Chip Gracey at Parallax or David May at X..cough, cough developing something real and useful that people love?
These are their stories. BADUMP.
MEDIUM SHOT: DEAD COMPUTER LANGUAGE
TURING: Looks like we got another one.
VON NEUMANN: Oh Smile, that's COBOL.
TURING: You knew this guy?
VON NEUMANN: I knew his mother. Nice lady. Knew the neighborhood well. Damn, he was getting up there but it looked like he was doing pretty well through the whole Y2K thing.
TURING: Any idea who popped him?
VON NEUMANN TURNS OVER BODY
VON NEUMANN: Access. Microsoft Access.
TURING: Never heard of him.
VON NEUMANN: Filthy piece of ignorant bloatware that gets its fingers into everything in this business. Well this is it. I'm gonna nail the bastard for this. And we're gonna start by leaning on all his friends.
TURING: Guy like that won't have many friends.
VON NEUMANN: Oh, but this one does. And we're gonna start with the first, the worst, and the dirtiest: Visual Basic Dot Net.
FADE TO COMMERCIAL