It turns out the reason why my kernel would not boot had nothing to do with my amd64 architecture! The linker script was not properly written so the multiboot header was not in the right place!
So I have finally made some progress:
As you can see, I have a rudimentary way to show text on-screen. It simply writes stuff to the memory-mapped video area at 0xB8000. It also has a simplified implementation of rendering newlines and stuff. The hexadecimal numbers are rendered by using the high and low nibble and adding either '0' or 'A' to them.
The global descriptor table and interrupt descriptor table are also loaded as of 10 minutes ago. The GDT is using a flat memory model, so all data segments are mapped 0x00000000 to 0xFFFFFFFF.
The interrupt descriptor table has a really simple handler for now, I might need to add default handlers with default panic screens for each of them... perhaps later :-).