You are currently using
Code:
.Data: equ $ - GDT
dd 0xFFFF ; Limit & Base (low)
db 0 ; Base (mid)
db PRESENT | NOT_SYS | RW | 0xF ; Access
db GRAN_4K | LONG_MODE ; Flags
db 0 ; Base (high)
The '| 0xF' on the Access byte of that data segment descriptor may be setting a bit that should be zero - the AMD manual suggests that bit 11 in the upper dword should be 0 and bit 12 should be 1, and my code triple faults when I have bit 11 set. Bit 12 is set correctly by NOT_SYS.
You may also want to remove the '| 0xF' from your code segment descriptor to make the code cleaner, although it will probably have no effect on the outcome.
'0x0000920000000000' works for me as the full data segment entry, and you seem to be using '0x00A09
F000000FFFF', while removing the '| 0xF' should give you '0x00A09
2000000FFFF', which should at least work. Please correct me if I've mis-counted the bytes somewhere there.
You can view the full AMD manual
here, and the relevant section is Volume 2 Chapter 4 sections 7 (legacy) and 8 (long mode). I'd recommend bookmarking that link, and I've found the AMD manuals to be easier to navigate than Intel's, although that is probably just personal preference.
If this works for you, the wiki page should probably be updated.