Даже не мечтай сделать бутлоадер на C++, это невозможно. Если не хочешь возиться с Ассемблером, то просто возьми GRUB, он легко умеет запускать бинарники ELF генерируемые gcc. Так же C++ является очень зависимым от окружения языком. Кто-то должен обеспечить ему реализацию operator new, operator delete, а так же различные функции связанные с обработкой исключений. Такой код зачастую не может быть использован в ядре за исключением кода, который можно вытеснить в область приложений.
Что до того как повторить GRUB, смотри исходники GRUB.