Wie sehen denn die Definitionen aus?
(MAX_GDT_ENTRYS, GDT_DATA, ...)
Des Weiteren berechnet sich das limit meinem Wissensstand nach sie folgt (vorrausgesetzt, MAX_GDT_ENTRYS ist kein Macro für die Größe der struktur):
((Größe der Struktur) * Anzahl der Einträge) -1
Dann ist mir noch aufgefallen, dass du im gdt zeiger die Adresse zur GDT speichern musst:
// Anstatt folgendem:
pgdt.base=gdt;
// sollte es heißen:
pgdt.base=(DWORD)&gdt;
Das ist, was mir so auf den ersten Blick aufgefallen ist. Hier noch ein Link zu einem Tutorial, in dem die GDT auch in C implementiert wird:
http://osdever.net/bkerndev/Docs/gdt.htmIch schreibe diesen Link, damit du einen alternativen Weg siehst, wie man das einbauen kann. Da es ein Teil eines Tutorials ist, kann man dies auch übernehmen.
*EDIT*
Eines noch: Nach dem du die GDT mit lgdt geladen hast, muss ein Sprung zum Codesegment gemacht werden.