; GLOBAL DESCRIPTOR TABLE ; ; bits 32 ; !!! GDT !!! ; 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. global GdtFlush ; Allows the C code to link to this extern gp ; Says that 'gp' is in another file GdtFlush: lgdt [gp] ; Load the GDT with our 'gp' which is 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!