asm volatile("sgdt %0\n"
                 : /* no output */
                 : "m" (gdtr)
                );
    _sys_printf("gdtr.limit = %d\n", gdtr.limit);

    _sys_printf("gdtr.base  = %d\n", gdtr.base);

baseが0で返ってきます。
実機でもbochsでも・・・うーんなぜだ・・・