Unlike most of the people here; I think that assembler is the perfect language to start with...
Why? because it's what gives you the most idea of how things really work. While programming in assembler, you programm on such a low level that you have to make all by your-self; thus really understanding how things are done by a PC. Besides; if you want to programm some drivers or some fast (i mean really fast) small utility to control some hard you'll really need to know assembler. I sarted by learning assembler (Z-80's asm); and really recommend starting with it; because it helped me a lot when then studing C and it helped me to uinderstad the reall procesing of a machine. Starting with assembler is like starting with the concepts (and then when programming with a higer level lang understandig what's going on donw there).
To sum up; i would fisrt learn some assembler (not from a very complex chip; cause they are all kind-of the same; so Z-80 or 8080 or peak or any other of that kind will really do well); and after that i would study some C... and afterwards if you still have some will to study; i would go into C++...
Well; hope I helped you (didn't answer the other questions cause they are already answered in the posts above)...
ampm2003