-
Notifications
You must be signed in to change notification settings - Fork 0
/
ExtendedProgram.asm
64 lines (52 loc) · 954 Bytes
/
ExtendedProgram.asm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
jmp EnterProtectedMode
%include "gdt.asm"
%include "print.asm"
EnterProtectedMode:
call EnableA20
cli
lgdt [gdt_descriptor]
mov eax, cr0
or eax, 1
mov cr0, eax
jmp codeseg:StartProtectedMode
EnableA20:
in al, 0x92
or al, 2
out 0x92, al
ret
[bits 32]
%include "CPUID.asm"
%include "SimplePaging.asm"
StartProtectedMode:
mov ax, dataseg
mov ds, ax
mov ss, ax
mov es, ax
mov fs, ax
mov gs, ax
mov [0xb8000], byte 'H'
mov [0xb8002], byte 'e'
mov [0xb8004], byte 'l'
mov [0xb8006], byte 'l'
mov [0xb8008], byte 'o'
mov [0xb800a], byte ' '
mov [0xb800c], byte 'W'
mov [0xb800e], byte 'o'
mov [0xb8010], byte 'r'
mov [0xb8012], byte 'l'
mov [0xb8014], byte 'd'
call DetectCPUID
call DetectLongMode
call SetupIdentityPaging
call EditGdt
jmp codeseg:Start64bitmode
[bits 64]
[extern _start]
Start64bitmode:
mov edi,0xb8000
mov rax,0x1f201f201f201f20
mov ecx,500
rep stosq
call _start
jmp $
times 2048-($-$$) db 0