Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Following on from a previous thread, it has got me interested in learning a little about Assembly programming. Not so much for wanting to program useful apps in, just to get a feel for low level programming to better understand what is happening.

Can anybody recommend any books or online resources for beginners?


share|improve this question

closed as not constructive by Yannis Jul 10 '12 at 20:05

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.If this question can be reworded to fit the rules in the help center, please edit the question.

This book by Dr. Paul Carter was pretty good for x86 ASM. – jonescb Mar 8 '11 at 19:26
up vote 5 down vote accepted

Recommended Book : The Art of Assembly Language Programming.

I also liked this site. Nice introduction to assembly programming! I used this site as a reference while studying for my Microprocessors and Microcontrollers course.

share|improve this answer
Excellent...thanks. Out of interest, how intuitive did you find learning it compared to a typical modern language? My history is 6 months c# (in industry) and around the same time C++ (in my bedroom :) ) – Darren Young Dec 19 '10 at 12:48
I came across Assembly programming in my course(I am still a student), and as you said in your question, It was helpful in knowing how embedded systems work and all. Yet, compared to high-level(modern as you say) languages, I found it not much useful. You know, never going to use it in my field - web development. :) – ykombinator Dec 19 '10 at 13:32

Is this an academic exercise, or are you intending to use the assembly language you learn? This is pretty specialized stuff, these days. Compiler optimization has become so good, that even something like a high performance hard disk drive would typically have around 1% of its code base written in assembler. Going way down the food chain to 4bit or some 8bit processors you'll see much more assembly language being used.

If you really want to have a go at assembly language, pick a processor that has a nice instruction set. I'm a former ARM employee so I'm probably biased, but I found that the ARM instruction set was particularly easy to learn - I was able to write an efficient FIR filter in asm on my third day at the company. ARM's semiconductor partners are shipping about a billion ARM cores per quarter these days, so it is pretty easy to find a company that is willing to use your ARM ASM expertise.

There are plenty of ARM eval boards available for around $50 to try your code out on - it looks like ARM Cortex M3 is going to be immensely popular. It uses ARM's Thumb2 instruction set, which is a little more obscure than plain ol' ARM32 code, but still pretty easy, and very powerful.

This little board looks very cool, for 80 euros:

share|improve this answer
It#s purely academical/self-learning. I would like to better understand low level memory management as well as higher level languages. – Darren Young Dec 20 '10 at 0:48

Basically, in the sense of assembly programming, you need to know the underlying architecture first, then the correspondent language, for example, with the PIC micro-controllers, you can use the compiler which the provided and the language. I use this site for referencing to PIC micro-controller tutorials.

share|improve this answer

I always found the toughest part was hello world, which is usually just a trivial assem function called from a higherlevel languare like adding two numbers. Once you get past that hurdle it is simply a matter of adding instructions and psuedo-ops (like defining data) to your repertoire.

I would second geekbrit, although I've never used ARM. A minimal architecture like that would be not only be easier, but might come closest to having a legitimate -as opposed to only a didactic purpose.

share|improve this answer

I have an instruction set, assembler, and simulator, with some lessons that were created just for this purpose. I dont yet have feedback on how good or bad I did but its out there, give it 15 minutes or a half an hour see if it teaches you anything. After that I have some mainstream instruction set simulators you can try as well, simple, no frills, should run anywhere you have a C compiler, etc.

share|improve this answer

Not the answer you're looking for? Browse other questions tagged or ask your own question.