Programowanie w języku Assembler » FAQ

Jak przełączyć procesor x86 w tryb chroniony

  • 2006-02-13 14:53
  • 1 komentarz
  • 872 odsłony
  • 2/6
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

akasei 2015-11-24 20:59

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: