Correct me if I'm mistaken of my understanding of what is assembly language program...
Assembly Programming is a low level programming language that most may ask "why do I need to learn this when we have high level languages already?" I mean, as with the case of our programming classes in our undergrad, we start out with C then OOP with C++, Java, then a framework with .NET programming.. and all of a sudden, after you are well-versed with these languages, you will be introduced with assembly programming... why do we need to learn this?
DIRECT ANSWER: Direct manipulation with computer hardware...
While programming with Java, C++, etc, we do not worry of anything at all with the hardware... To be specific, the CPU...
Assembly Language Programming is a language designed for computer architectures of our systems. With this, we can control how instructions and data are allocated on the CPU cache and registers, how they interfaced with other hardware components, BIOS and the operating system, how they are moved from one point to another, and how they are accessed and processed.
So basically, upon learning assembly programming, you will understand a little more about the behavior of your hardware.
If you want to become experts in computer organization and architecture, learning assembly language programming is the best way.