I have done a little more debugging and I found QEMU very helpful.
Debugging by launching the VM with the debug flag set to log interrupts, the first interrupt appears to be a general protection fault (0xd - 13):
Code:
check_exception old: 0xffffffff new 0xd
0: v=0d e=0010 i=0 cpl=0 IP=0008:0010001b pc=0010001b SP=0010:00301fb4 env->regs[R_EAX]=00000010
Update - After sacrificing some of my sleep I have finally figured out the problem! My function which deals with split bits is incorrect and produces incorrect bits so I have converted my entry structure into a little bitfield and simply opted into hard coding the bits with a little assistance of a binary to hex converter and now my table works.
Code:
GDT DefaultGDT = {
{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
{0x8000, 0x0, 0x0, 0x9A, 0x0, 0xC, 0x0},
{0x8000, 0x0, 0x0, 0x92, 0x0, 0xC, 0x0},
{0x8000, 0x0, 0x0, 0xFA, 0x0, 0xC, 0x0},
{0x8000, 0x0, 0x0, 0xF2, 0x0, 0xC, 0x0}
};
And have also fixed up my far jump with the help of the wiki.
Thank you everyone for your contributions!