Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2783 clevermous 1
format MZ
2
heap 0
3
stack 800h
4
entry main:start
5
 
6
segment main use16
7
 
8
use16
9
start:
10
 
11
 mov ax,_data
12
 mov ds, ax
13
 mov es, ax
14
 
15
 xor eax, eax
16
 mov ax,ds
17
 
18
 shl eax, 4
19
 
20
 mov bx, gdt
21
 add ebx, eax ; ebx - линейный адрес gdt
22
 
23
 mov word [gdtPtr], 2 * 8 -1 ; предел gdt 2 дескриптора = 0x000f
24
 mov dword [gdtPtr + 2], ebx
25
 
26
 lgdt pword [gdtPtr]
27
 
28
 in al, 0x70 ;запрещаем NMI
29
 mov bl, al
30
 or al, 0x80
31
 out 70h , al
32
 in al, 0x71 ;некоторые RTC после записи байта в порт 0х70
33
             ;ожидают обращения к порту 0x71
34
 
35
 cli
36
 
37
 mov eax, cr0
38
 or al, 01b
39
 mov cr0, eax
40
 
41
 mov dx, 0x08
42
 mov gs, dx ;gs - глобальный сегмент с базой 0 и пределом 0xFFFFFFFF
43
 mov fs, dx
44
 
45
 and al, 0xFE
46
 mov cr0, eax
47
 
48
 sti
49
 
50
 mov al, bl
51
 out 70h , al
52
 in al, 71h
53
 
54
 mov dx,92h
55
 in al,dx
56
 or al,2
57
 out dx,al
58
 
59
;теперь можно получить доступ ко всей памяти
60
;например
61
;mov eax, [gs:0xFFFFFFF0] ;
62
 
63
 mov ah,4ch ;завершение ДОС программы
64
 int 21h
65
 
66
segment _data use16
67
 
68
 align 16
69
 
70
 gdt dw 0, 0, 0, 0 ;0
71
 _flat dw 0ffffh,0,0F200h,008fh ;08 сегмент данных DPL = 3
72
 ;база 0, предел 0xFFFFFFFF
73
 
74
 gdtPtr dq ?