Ну код правильный, так как у меня все работает, смотря как записываете, нужно в первый сектор диска. Так-же посмотрите с того ли образа загружается виртуальная машина.
Я лично решил что загрузчик делать не буду, и использую в UltraICO, фитчу "Установить загрузочным файлом", Так можно сразу писать ядро, и не бояться за пределы памяти.