I personally prefer the layout of the AMD manuals. These are available here:
http://developer.amd.com/documentation/ ... fault.aspx
The most useful documents are:
1. AMD64 Architecture Programmer's Manual Volume 2: System Programming Rev 3.14
2. BIOS and Kernel Developer's Guide for AMD NPT Family 0Fh Processors (or 010h Family if you prefer)
3. AMD64 Architecture Programmer's Manual Volume 3: General-Purpose and system Instructions Rev 3.14
The first manual serves as a good introduction and reference to GDT, IDT, LDT, TSS, Paging, Interrupts, and other core functionality of x86 and x86_64 processors. The second manual is very handy when implementing Local and IO APIC functionality. Finally, the third is going to be handy whenever you need to learn how to write or read an MSR, issue some sort of jump, or track down the source of a GP fault.
The absolute best resource I had when I was getting started was Bran's Kernel Development tutorial, available here:
http://osdever.net/bkerndev/Docs/intro.htm
Read it word for word, and make sure you understand all the code. Once you've gone through that, I'd suggest starting over from either Barebones or Barebones C++ (on the wiki here), and attempting to duplicate the functionality of Bran's sample kernel yourself.