; This will set up our new segment registers. We need to do
; something special in order to set CS. We do what is called a
; far jump. A jump that includes a segment as well as an offset.
; This is declared in C as 'extern void gdt_flush();'
global _gdt_flush	; Allows the C code to link to this.
extern _gp		; Says that '_gp' is in another file

_gdt_flush:
	lgdt[_gp]	; Load the GDT with our '_gp', a special pointer
	mov ax, 0x10	; 0x10 is the offset in the GDT to our data segment
	mov ds, ax
	mov es, ax
	mov fs, ax
	mov gs, ax
;	mov ss, ax
	jmp 0x08:flush2	; 0x08 is the offset to our code segment: FAR JUMP!
flush2:
	ret		; Returns back to the C code!
