Here's my boot loader:
http://www.losethos.com/code/BootHD.htmlI didn't know there was a standard address of 0x7C00 when I wrote it, so I made it work for any load address. It copies itself up to just under 0x80000, then loads the 2nd stage to 0x10000.
Before I made a boot loader, I launched my kernel from real mode FREEDOS. It started like an application and because free dos lets you do anything, I had access to GDT and could just switch-over to protected mode. I remember it used to load it to an unusual address because it was an application.
I wrote my own assembler and didn't bother with all the 16-bit code modes that are not used in 64-bit mode. Therefore, I hand code a far jump instruction.