I had my blog on WordPress.com and i have decided to move it to one of the self hosted wordpress, main reason was because they don't support Google adsense.
First go to your original hosting and access your wp-admin, in my case in wordpress.com I had to click on it, most other cases it would be from yourSite/wp-admin.
Then hover over Tool and click Export which will take you to a page with a free export box and in some cases a paid guided transfer, I clicked "Start Export" in the free box option.
Choose "All content" then click on "Download Export File" which will create an xml file for you, that xml will have the current url for posts and media images, be sure not to change your domain DNS till you finish migrating.
Once you download the XML file, go to your new host and access the wp-admin, hover the Tools and click Import.
You will be brought to a list of other systems to choose from (WordPress, Blogroll, LiveJournal...etc). If you could not find your system you can always click on "search the plugin directory" for extra options, once you have your system in that list, click on run importer.
Browse to your file and click "Upload file and import".