Lesson 18

This commit is contained in:
Carlos Fenollosa
2015-02-03 19:12:51 +01:00
parent 69a7c1c2a6
commit 418bb11305
17 changed files with 412 additions and 16 deletions

View File

@@ -1 +0,0 @@
../../10-32bit-enter/32bit-switch.asm

View File

@@ -0,0 +1,22 @@
[bits 16]
switch_to_pm:
cli ; 1. disable interrupts
lgdt [gdt_descriptor] ; 2. load the GDT descriptor
mov eax, cr0
or eax, 0x1 ; 3. set 32-bit mode bit in cr0
mov cr0, eax
jmp CODE_SEG:init_pm ; 4. far jump by using a different segment
[bits 32]
init_pm: ; we are now using 32-bit instructions
mov ax, DATA_SEG ; 5. update the segment registers
mov ds, ax
mov ss, ax
mov es, ax
mov fs, ax
mov gs, ax
mov ebp, 0x90000 ; 6. update the stack right at the top of the free space
mov esp, ebp
call BEGIN_PM ; 7. Call a well-known label with useful code