Question about which tools to use, bugs, the best way to implement a function, etc should go here. Don't forget to see if your question is answered in the wiki first! When in doubt post here.
To answer that properly, we would need to see your gdt_set function, but assuming that your last entries are the access and granularity bytes, that looks ok.
The best way to tell is:
a) Run some ring 0 protected mode instructions (even just cli; hlt;) If they execute without triple-faulting, you're OK.
b) Run in Bochs - when you stop emulation, you'll get a register dump with a summary of segment base / limit values.