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
|
;***************************
appb: ;appel des fonctions lié au bios
cli
push ebx
push ecx
push edx
push esi
push edi
push ds
push es
push fs
push gs
mov dx,10h
mov ds,dx
lidt[r_idt] ; charge la gdt et l'idt sauvegardé
lgdt[r_gdt] ;
mov edx,cr0
and dx,0FFFEh
jmp $+2
mov cr0,edx
jmp 6000h:fctreel ;saut ou sont installé les fonction en mode réel
;suivant l'adressage mémoire du mode réel
finappb:
mov dx,18h
mov ss,dx
pop gs
pop fs
pop es
pop ds
pop edi
pop esi
pop edx
pop ecx
pop ebx
sti
ret
;****************************
;fonction execut en mode réel
fctreel:
mov dx,5000h
mov ds,dx
mov es,dx
mov fs,dx
mov gs,dx
mov dx,4000h
mov ss,dx
;ici je met l'interruption que je souhaite appeler (avec les bon paramètres)
rtrnmp: ;retourne en mode protégé
mov dx,6000h
mov ds,dx
lidt[p_idt]
lgdt[p_gdt]
mov eax,cr0
or eax,1
jmp $+2
mov cr0,eax
jmp 10h:finappb |
Partager