Du kan ikke direkte skifte til beskyttet tilstand med en enkelt samlingsinstruktion. Det er en flertrinsproces, der involverer indlæsning af Global Descriptor Table (GDT) og indstilling af PE-flag i kontrolregisteret CR0. Her er et forenklet eksempel, der demonstrerer de vigtigste trin i samlingen (forudsat at du har en foruddefineret GDT indlæst på en bestemt adresse):
`` `forsamling
.Model Flat, stdcall
.stack 100h
.data
Gdt_ptr dd gdt_table; Pointer til GDT
; ... (Definer din GDT -struktur her)
.kode
Hovedproc
; 1. Indlæs GDT -registeret (GDTR) med adressen på din GDT
LGDT [GDT_PTR]
; 2. Indstil PE -bit i CR0 -registeret
MOV EAX, CR0
eller eax, 1; Indstil bit 0 (PE -flag) til 1
Mov CR0, Eax
; 3. hopp til et kodesegment defineret for beskyttet tilstand
JMP Far PTR Protected_mode_entry
; ... (din kode til beskyttet tilstand starter her)
Protected_mode_entry Proc
; ...
ret
Protected_mode_entry Endp
HOVED ENDP
Afslut hoved
`` `
Forklaring:
1. `lgdt [gdt_ptr]`: Denne instruktion indlæser Global Descriptor Table Register (GDTR) med adressen på din GDT. GDT indeholder deskriptorer for alle segmenter i beskyttet tilstand, herunder kodesegmenter, datasegmenter og stakesegmenter.
2. `eller eax, 1`: Dette indstiller PE (Protection Enable) bit i CR0 -registeret. Denne bit styrer driftstilstanden for CPU:0 for reel tilstand, 1 for beskyttet tilstand.
3. Denne instruktion udfører et langt spring og overgår CPU'en til beskyttet tilstand. `Far PTR` angiver, at det er et spring til et nyt segment, der er vigtigt for tilstandskontakten.
Vigtige overvejelser:
* GDT -opsætning: Du skal definere din GDT, før du udfører denne kode. GDT skal indeholde deskriptorer for alle segmenter, du planlægger at bruge i beskyttet tilstand.
* Beskyttet tilstandskode: Efter springet skal din kode skrives til beskyttet tilstand. Dette inkluderer brug af segmentvælgere til adressering af hukommelse og brug af forskellige instruktioner til hukommelsesstyring.
* Real Mode Boot: Denne kode antager, at du allerede er i reel tilstand (16-bit-tilstand). Du skal starte dit system i reel tilstand, inden du går ind i beskyttet tilstand.
Husk: Dette er et grundlæggende eksempel til demonstrationsformål. Du skal tilpasse det til dine specifikke krav, herunder:
* Definition af en komplet og passende GDT.
* Opsætning af interrupt -deskriptortabellen (IDT).
* Implementering af Protected Mode Memory Management med segmentering og personsøgning.
* Skrivning af beskyttet mode-specifik kode for opgaver, du har brug for at udføre.
Du kan finde mere omfattende oplysninger om Protected Mode -programmering i Intel- eller AMD -processor -manualer.