Nobody these days seriously considers programming substantial applications in Assembler. Why? I once asked a professional C++ programmer this questions, he said "Because I'd have to write all the device drivers myself, it would be horrible".
So, what he's saying is, to him the thought of low-level programming is horrible. Device drivers can be accessed through library's, and they can and are likely themselves to be written in C, the systems programming language, but to program entirely in assembler cannot be separated from writing device drivers as Assembly itself is essentially the base-level device language. All substantial assembly language programs are classed as device drivers of sorts. The assembly language code 3D games designers use to speed up rendering cores are essentially ways of intervening on the portions of the video device driver code which would normally be addressed via a high level interface. DirectX is essentially a 3D video hardware device driver, designed to protect programmers from the vagaries of different 3D hardware low-level designs. The theory is, it lets you get on with designing your software, without having to think too hard about the hardware.
Excellent... isn't it?
Back with my friend and his dislike of device drivers with an assembler product, especially if it's 100% assembler, you have to think about the hardware. In fact, you have to think about the hardware most of the time because you're using it all the time. Assembler language itself is usually, with very rare exceptions, a hardware issue. The hardware being the aspects of your computer environment you cannot change using software.
But, doesn't this imply, one of the important issues which are at stake if you choose a high level language, which is so much of what is not hardware, can be made different with software. If you use a third party device driver, you forfeit some of what you can change. If you program for an operating system, in particular, you lose the right to change a great deal. Is having almost every program on your desktop looking almost exactly the same as all the others something to celebrate? Is it good that the look of these programs is decided not by the users, nor by the software designers but by a single operating system supplier? Just how much of your screen space was designed not by you, nor by the makers of the software you're using, but by one company, right down to that little Microsoft(tm) logo there in the bottom left hand corner on the Windows(tm) start button? Are then high-level programmers among the group of people involved in design least likely to say "Things don't have to be this way"? because they're so accustomed to outsourcing so many of their decisions they don't stop to wonder how things could be if they didn't? Of course, they may stop to think for a long time about how things could be different if they coded those other things themselves, but they don't, because programming the hardware would be horrible. Right? I mean, you know, from experience, just what it is like to program the hardware?
No? Well, how do you know what it's like?
Actually, I can program the PC in machine-code and I can tell you, it is pretty awful.
The thing about programming the hardware is that it is the level of the most powerful, most fundamental decisions on what you, the computer owner, can actually do with your computer. Has it ever occured to you just how much power you are giving away by conspiring to trust all that power to an outside source?
Just how big are Microsoft right now? Did it occur to you that the reason they have got so big is down to one simple fact: They know how your hardware works and you don't. Furthermore, so many people are put of by just how horrible it would be to learn how their hardware works that nobody does and Microsoft have no serious competition in that area at all.
Who do you think really pushed the whole idea of just how difficult and horrible it is to program your hardware? Intel did. Just after they lost their world-famous court battle with AMD who had duplicated their instruction code and made compatible CPUs, a loss which is still costing INTEL Billions of dollars. Before that Intel would happily send books of their instruction codes out to potential programmers for free from their HQ in America, I know, because I wrote to them about it and they sent me one.
Here is a quote from an Internet blog from a graphics hardware expert:
"I keep my copy of the Savage3D's register and hardware spec close by, to remind me how unlikely it would ever be to get similar documents for a modern GPU".
If you don't know how a piece of hardware works, that's good for the manufacturers because they keep control of it. It isn't good for you. But they are happy to tell you it is. They want you to be in the dark about the business-end of your computer because it protects the business-end of their business, which is to take a huge financial advantage of knowledge you do not have access to.
So take their advice: Don't go round learning the low level details of your hardware because it's boring, it's hard to learn and you don't stand to gain anything from knowing. Look at Bill Gates, it never did him any good.
Why bother to learn how your CPU works. After all, what's it done for Intel?
Better to just keep on learning what the worlds most powerful people tell you to.
http://www.intel.com/pressroom/archive/releases/20050111corp.htm