you need to have your 32-bit GDT descriptors, and then your 64-bit one as well. The descriptor for the 64-bit cs is almost identical to the 32-bit one except that it has the L flag set.
Code:
GDTR: ; Global Descriptors Table Register
dw 4*8-1 ; limit of GDT (size minus one)
dq GDT ; linear address of GDT
GDT:
dw 0,0,0,0 ; null desciptor
dw 0FFFFh,0,9200h,08Fh ; flat data desciptor
dw 0FFFFh,0,9A00h,0CFh ; 32-bit code desciptor
dw 0FFFFh,0,9A00h,0AFh ; 64-bit code desciptor
then the GDT table gets loaded with the lgdt command before entering PMode, and then can be re-used when enterring 64-bit mode because the 64-bit descriptor is already there.
Code:
lgdt [cs:GDTR]
when you jump into 64-bit mode, just make sure you use the correct descriptor (0x18) for the far jump.