ok,lets think it through...what does a good demo provide?on the graphical side good and fast graphics.nice sound is another thing most people dont want to miss.so you will need 2 things:
1. a way to render graphics,2D and 3D aswell.i think direct3d/direct graphics are good interfaces to do that.another api is OpenGL which is a good choice,too.some people prefer D3D,other opengl....
2. sound.this depends on what kind of demo you want to create.simple playback of a wavefile for example could be done with the win32-api.for complex effects with lots of channels and suround you should use directsound.
3. programming.....ok,you need a language which needs to access the win32-api and which produces fast (and maybe small,depends on the demo) code.visual basic can do it,but i prefer c or c++.some assembly is a good idea but not a must-have.i suggest learning c/c++ and create some stuff for training.after a few thousand lines of working code you may start a bit assembly ;)
4. the best sound and graphics-engine is useless without good graphics and sound.for learning programming you can use any .wav and .bmp as sound or texture,but a real demo requires some good,selfmade stuff.
for creating 3D-models you could use the great 3D-studio-max,however this tool isnt free and quite expensive.a free tool which is still powerful and provides some nice features to export as static arrays-includes for c/c++-compiler.this makes it easy to render your first model with your own code.
5. you will need some experience with demo/intros to create good ones.just do some,show them to your friends...
so,to make it short,buy a book about c/c++-programming.