hi,

first post here. It seems a very nice community.
So, I know a little about 16bit DOS Assembly and also a little about 32bit Linux Assembly.
I started learning Assembly out of curiosity, to understand C better and to learn exactly how the stack worked.
I am currently learning Linux Assembly, as this is the OS I want to concentrate in for the time being.
While reading, a lot of computing concepts and theories made a lot more sense.
While I enjoy assembly much, a question keeps popping up.

Is assembly worth learning it?

I know that everything you learn can only be an advantage, but sometimes I just get the feeling that I'm wasting my time with Assembly.
I've got a huge list of books that I want to read and I just want to be sure that I'm not spending precious time on something that is obselete, unwanted and useless.
The thing is, that I really like low-level stuff.

So my questions are:
1. I hear a lot of people saying that the only people still writing assembly are some crazy old hackers that refuse to use anything else. Is that true?
2. I hear also that anyone wanting/trying to make a real application in assembly (except device drivers) is a masochist. Like make a GUI in Windows or something. Is that true?
3. It has come to my attention, that there is no dedicated forum for Linux Assembly on the whole web! The only resources/discussions I have seen are a couple of blogs and some empty/deserted subforums in larger assembly forums.
What is the reason of this limited interest in Linux Assembly?
Does this mean that noone uses assembly on Linux?
Or does that mean that doing assembly on Linux is pretty much useless?
4. I know assembly is fast and efficient (if the programmer is good) and is great for developing device drivers, operating systems and is often used in embedded devices. But what are some other applications of it?
5. The most people I see are just *forced* to learn assembly, in order to involve themselves with reverse engineering or cracking.
I think that's because the 95% or more of the assembly material/forums/resources I see is headed towards the Microsoft Windows OS. Because there is a lot of commercial programs that attract reverse engineers and/or crackers. Is that right?
Is there a reason to do Windows Assembly if you're not interested in reverse engineering (I'm not saying that I'm not)? If yes, please list as many as you can.
6. Does learning 16bit DOS Assembly make any sense anymore? Except the concepts/general asm way of thinking taught from it.

go with a higher level language becuase the only use for assembly is for boot loaders the modern day compilers have power to do so good these days there is no reason to code for speed!

I will try to answer some of yout questions.

Is assembly worth learning it?

The answer is yes and no. Learn it but dont crack your head about it.

1. I hear a lot of people saying that the only people still writing assembly are some crazy old hackers that refuse to use anything else. Is that true?

No its not true. Ok old guys using them more than young ones, but not for hacking. For example for optimising, but not for PC but for embedded systems.

2. I hear also that anyone wanting/trying to make a real application in assembly (except device drivers) is a masochist. Like make a GUI in Windows or something. Is that true?

Yes he is masochist (this is only my opinion which can be false).

It has come to my attention, that there is no dedicated forum for Linux Assembly on the whole web! The only resources/discussions I have seen are a couple of blogs and some empty/deserted subforums in larger assembly forums.
What is the reason of this limited interest in Linux Assembly?

Once time I wanted to add tutorial for MIPS assembler, and I posted a thread to ask where can I do it. This answer I got. So now you know the answer for your question.

Does this mean that noone uses assembly on Linux?
Or does that mean that doing assembly on Linux is pretty much useless?

Skipping these questions becouse don't know the answer.

4. I know assembly is fast and efficient (if the programmer is good) and is great for developing device drivers, operating systems and is often used in embedded devices. But what are some other applications of it?

For example I'm using it for embedded system, but don't know for what also is used.
For other questions don't know the answer.
The point is that assembly is not very popular. For example there are bunch of moderators for assembly forum (which are taken from C/C++ forum) but they hardly visit this forum, not to say that almost never post anything here. Narue posted here (from the team who helps to work this forum) but I don't know where she is. Hadn't seen here for a while. Also the owner of this forum posts here. I'm trying to post as much as I can but only for MIPS assembly. There are off course others who posts here but none of them are mods.

Is assembly worth learning it?

I know that everything you learn can only be an advantage, but sometimes I just get the feeling that I'm wasting my time with Assembly.
I've got a huge list of books that I want to read and I just want to be sure that I'm not spending precious time on something that is obselete, unwanted and useless.
The thing is, that I really like low-level stuff.

Its worth it if you plan stay close with hardware. One of the other reasons why I wanted to learn assembly was to upgrade my debugging skills when writting in higher languages. Its definitly not a useless skill, which may evolve to reverse engineering/cracking but most people I know learn it to utilise themselves for the better programmer, things such as disassembling to debug or find out how the compiler is generating code so you may know how to write a more efficient code in higher languages.

6. Does learning 16bit DOS Assembly make any sense anymore? Except the concepts/general asm way of thinking taught from it.

Besides learning the concept of assembly theres no need to learn the DOS int 21h functions (if you don't plan on writting for DOS) but will get you familiar with real mode which is needed in some cases.


Is assembly worth learning it?

I believe so, while High Level languges make life easier, ASM teaches you how processors actually work.


1. I hear a lot of people saying that the only people still writing assembly are some crazy old hackers that refuse to use anything else. Is that true?

Nah ASM is big in the debugging world. A lot of engineerings (especially those who work in reverse engineering) use it.


2. I hear also that anyone wanting/trying to make a real application in assembly (except device drivers) is a masochist. Like make a GUI in Windows or something. Is that true?

LOL, sounds like something a VB coder would say.


3. It has come to my attention, that there is no dedicated forum for Linux

Assembly on the whole web! The only resources/discussions I have seen are a couple of blogs and some empty/deserted subforums in larger assembly forums.
What is the reason of this limited interest in Linux Assembly?
Does this mean that noone uses assembly on Linux?
Or does that mean that doing assembly on Linux is pretty much useless?

While some elements of ASM are OS specific you should focus more on the concepts which are univeral between all processors.


4. I know assembly is fast and efficient (if the programmer is good) and is great for developing device drivers, operating systems and is often used in embedded devices. But what are some other applications of it?

You can code ANYTHING in ASM. Its all about how much time you have on your hands ;)

Common uses:
Boot application
BIOS'
Virii
Stupid Hello world scripts :)


5. The most people I see are just *forced* to learn assembly, in order to involve themselves with reverse engineering or cracking.
I think that's because the 95% or more of the assembly material/forums/resources I see is headed towards the Microsoft Windows OS. Because there is a lot of commercial programs that attract reverse engineers and/or crackers. Is that right?
Is there a reason to do Windows Assembly if you're not interested in reverse engineering (I'm not saying that I'm not)? If yes, please list as many as you can.

See my closing statement

6. Does learning 16bit DOS Assembly make any sense anymore? Except the concepts/general asm way of thinking taught from it.

Just concepts, which is all you should be looking for

Assembly isn't for everyone, personally I think assembly programming is a wonderful thing. I think most programmers would learn a thing or two if they spent some time learning the cocepts which asm is based around.


That said there is no real reason to learn assembly in depth, writing a few applications and understand the cocepts of stacks, pointers and registries is as far as most people need to take it.

I learnt assembly in the days of MS-DOS, when the chances of actually making use of it in real life programs were high. But now you will hardly ever find yourself making use of it, and that primarily for two reasons:

1.) Assembly language was the only way in which MS-DOS functions could be called. Therefore, if you wanted to do more than was easily do-able in a high level language, you had to use assembly language. However, the Windows and Linux API's were both designed with C in mind, so assembly language is no longer needed for that.

2.) Another reason for writing in assembly language used to be so that you could directly program the hardware: Bare metal programming as it was (still is) called. However, protected mode operating systems like Windows take a very dim view of applications trying to directly program the hardware, and shut them down if they try. (The reason for that being that, in a multi tasking environment, you can't have two or more programs vying for direct control of one and the same piece of hardware). Therefore assembly is no longer needed for that purpose either.

So, unless I was planning on writing my own operating system, or very low level device drivers (which are mostly written in C nowadays) I would probably have only very limited motivation for learning assembly language today.

This article has been dead for over six months. Start a new discussion instead.