Add an example user space process

This commit is contained in:
2026-06-08 21:17:27 +03:00
parent 2d4f76a5dd
commit b32c12b311
23 changed files with 553 additions and 63 deletions
+21 -14
View File
@@ -224,30 +224,30 @@ jmp load_gdt
gdt_start:
gdt_0: dq 0x0000000000000000
gdt_1:
gdt_32_code:
.limit_low: dw 0xFFFF
.base_low: dw 0x0000
.base_middle: db 0x00
.access: db 10011010b ; present, ring 0, code, executable, readable
.flags: db 11001111b ; 32-bit, 4KB granularity
.base_high: db 0x00
gdt_1_end:
gdt_2:
gdt_32_code_end:
gdt_64_code:
.limit_low: dw 0xFFFF
.base_low: dw 0x0000
.base_middle: db 0x00
.access: db 10011010b ; present, ring 0, code, executable, readable
.access: db 10011010b ; present, ring 0, code, executable, readable
.flags: db 10101111b ; long mode (L bit)
.base_high: db 0x00
gdt_2_end:
gdt_3:
gdt_64_code_end:
gdt_data:
.limit_low: dw 0xFFFF
.base_low: dw 0x0000
.base_middle: db 0x00
.access: db 10010010b ; present, ring 0, data, writable
.flags: db 00000000b
.base_high: db 0x00
gdt_3_end:
gdt_data_end:
gdt_end:
gdt_descriptor:
@@ -276,23 +276,30 @@ protected_mode:
mov ss, ax
mov esp, 0x00090000
; zero page table memory at 0x00010000 (3 pages = 768 dwords)
; zero page table memory
mov edi, 0x00010000
mov ecx, 768
mov ecx, 256 * 5
xor eax, eax
rep stosd
; PML4[0] -> PDPT at 0x00011000
mov dword [0x00010000], 0x00011003
; PDPT[0] -> PD at 0x00012000
mov dword [0x00011000], 0x00012003
; PML4[511] -> PDPT at 0x00012000
mov dword [0x00010FF8], 0x00012003
; PML4[0].PDPT[0] -> PD at 0x00013000
mov dword [0x00011000], 0x00013003
; PML4[511].PDPT[510] -> PD at 0x00014000
mov dword [0x00012FF0], 0x00014003
; PD: fill 64 entries, each mapping 2MB
mov edi, 0x00012000
mov edi, 0x00013000
mov eax, 0x00000083 ; present, writable, huge page, base 0
mov ecx, 64
.fill_pd:
mov ebx, edi
add ebx, 0x1000
mov dword [edi], eax
mov dword [ebx], eax
add edi, 8
add eax, 0x00200000 ; next 2MB
loop .fill_pd
@@ -327,11 +334,11 @@ long_mode:
mov ds, ax
mov es, ax
mov ss, ax
mov rsp, 0x0000000000090000
mov rsp, 0xFFFFFFFF80090000
xor rax, rax
xor rbx, rbx
xor rcx, rcx
xor rdx, rdx
jmp 0x00020000
jmp 0xFFFFFFFF80020000