Jak przełączyć procesor x86 w tryb chroniony

TKW

Protected mode można włączyć przez ustawienie bitu jedności w rejestrze cr0, jest to rejestr 32-bitowy. Można to tak zrobić:

mov eax,cr0
or eax,1
mov cr0,eax

Należy pamiętać, że protected mode jest od 80286, a 32-bitowość od 80386. Przed włączeniem pmode należy ustawić gdt, i wyłączyć przerwania (instrukcją cli).

1 komentarz

Samo włączenie trybu chronionego (i załadowanie GDT) nie wystarczy, potrzebny jest jeszcze skok do kodu 32 bitowego - ustawiający deskryptor w rejestrze segmentowym CS.

Składnia Nasm:
; wyłącz obsługę wyjątków i przerwań
cli

; załaduj globalną tablicę deskryptorów
lgdt	[gdt_structure_32bit]

; przełącz procesor w tryb 32 bitowy
mov	eax,	cr0
bts	eax,	0	; włącz pierwszy bit rejestru cr0
mov	cr0,	eax	; aktualizuj

; skocz do 32 bitowego kodu
jmp	long 0x0008:protected_mode

; 32 Bitowy kod programu =======================================================
[BITS 32]

protected_mode: