24 lines
819 B
NASM
24 lines
819 B
NASM
bits 32
|
||
|
||
global gdt_flush
|
||
|
||
gdt_flush:
|
||
; Берем адрес gdtp, переданный как аргумент функции (лежит в стеке)
|
||
mov eax, [esp + 4]
|
||
lgdt [eax] ; Загружаем новую GDT
|
||
|
||
; Обновляем сегменты данных. 0x10 — это смещение Kernel Data в нашей GDT (индекс 2 * 8 = 16 = 0x10)
|
||
mov ax, 0x10
|
||
mov ds, ax
|
||
mov es, ax
|
||
mov fs, ax
|
||
mov gs, ax
|
||
mov ss, ax
|
||
|
||
; Делаем дальний прыжок, чтобы обновить регистр CS.
|
||
; 0x08 — это смещение Kernel Code (индекс 1 * 8 = 8 = 0x08).
|
||
; Процессор прыгнет на метку .flush, но уже с новым селектором CS.
|
||
jmp 0x08:.flush
|
||
|
||
.flush:
|
||
ret
|