0,0 → 1,74 |
format MZ |
heap 0 |
stack 800h |
entry main:start |
|
segment main use16 |
|
use16 |
start: |
|
mov ax,_data |
mov ds, ax |
mov es, ax |
|
xor eax, eax |
mov ax,ds |
|
shl eax, 4 |
|
mov bx, gdt |
add ebx, eax ; ebx - ëèíåéíûé àäðåñ gdt |
|
mov word [gdtPtr], 2 * 8 -1 ; ïðåäåë gdt 2 äåñêðèïòîðà = 0x000f |
mov dword [gdtPtr + 2], ebx |
|
lgdt pword [gdtPtr] |
|
in al, 0x70 ;çàïðåùàåì NMI |
mov bl, al |
or al, 0x80 |
out 70h , al |
in al, 0x71 ;íåêîòîðûå RTC ïîñëå çàïèñè áàéòà â ïîðò 0õ70 |
;îæèäàþò îáðàùåíèÿ ê ïîðòó 0x71 |
|
cli |
|
mov eax, cr0 |
or al, 01b |
mov cr0, eax |
|
mov dx, 0x08 |
mov gs, dx ;gs - ãëîáàëüíûé ñåãìåíò ñ áàçîé 0 è ïðåäåëîì 0xFFFFFFFF |
mov fs, dx |
|
and al, 0xFE |
mov cr0, eax |
|
sti |
|
mov al, bl |
out 70h , al |
in al, 71h |
|
mov dx,92h |
in al,dx |
or al,2 |
out dx,al |
|
;òåïåðü ìîæíî ïîëó÷èòü äîñòóï êî âñåé ïàìÿòè |
;íàïðèìåð |
;mov eax, [gs:0xFFFFFFF0] ; |
|
mov ah,4ch ;çàâåðøåíèå ÄÎÑ ïðîãðàììû |
int 21h |
|
segment _data use16 |
|
align 16 |
|
gdt dw 0, 0, 0, 0 ;0 |
_flat dw 0ffffh,0,0F200h,008fh ;08 ñåãìåíò äàííûõ DPL = 3 |
;áàçà 0, ïðåäåë 0xFFFFFFFF |
|
gdtPtr dq ? |