Interruption qui passe en 32 bits ? [Résolu]

Messages postés
257
Date d'inscription
dimanche 22 août 2004
Statut
Membre
Dernière intervention
29 septembre 2010
- - Dernière réponse : vinc1008881
Messages postés
257
Date d'inscription
dimanche 22 août 2004
Statut
Membre
Dernière intervention
29 septembre 2010
- 30 janv. 2006 à 23:03
Bonjour tout le monde,

dans le cadre du developpemet d'un micro OS, j'aurais voulu savoir s'il existe une interruption qui passe en Pmode (ou du moins en 32 bits), c'est en fait car je suis confornté à un probleme :

1- Le secteur de boot charge le noyau 32 bits
2- Le secteur de boot passe en Pmode
3- Execution du kernel

seulement il ne me reste plus assez d'octet pour la seconde partie........à moins que l'on peut avoir un code qui passe en 32 bits de maniere assez succintes (je veux juste que les instructions soient en 32 bits c'est tout)

voilà, en vous remerçiant à l'avance de votre intêret sur le probleme,

+
Afficher la suite 

2 réponses

Meilleure réponse
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
3
Merci
salut,

j'ai reussi a loger le tout dans un secteur CD ( 2048 octets ) afin de lancer un loader directement en 32bits. Le code mbr peut tres bien lire les 3 secteurs suivants et le tour est joué ou bien charger un loader intermediaire.

sinon, la fonction 89H de l'interruption 15H permet le passage en PMODE par le BIOS par contre, tu dois quand meme specifier une GDT de 64 octets. La taille minimale de la GDT etant 8*4 = 32 octets, y'a peut etre une perte quand meme.

voila ce que j'ai de + petit pour le passage en pmode. La partie ldr32 doit pouvoir etre enlevée du code mbr, il te reste plus que ldr16 et la table GDT a prévoire ce qui doit faire moins de 64 octets en tout.

;******************************************************************************
align 4
GDT:
dd 0
db 0
dw DESC_NUL
db 0

FLAT_CODE0 EQU $-GDT
gdt_01:
dw -1
dw 0
db 0
dw DESC_C32+0x0F00
db 0

FLAT_DATA0 EQU $-GDT
gdt_02:
dw -1
dw 0
db 0
dw DESC_D32+0x0F00
db 0
gdt_03:
dd 0,0
GDT_size EQU $-GDT
GDTR:
dw GDT_size-1
dd GDT
IDTR
dw 0
dd 0
;******************************************************************************
[BITS 32]
ldr32:
mov ax,FLAT_DATA0
mov ss,ax
mov ds,ax
mov es,ax
movzx eax,word [(SEG_PRIDESC*16)+VD_PRIMARY.appuse+TOM.exseg]
movzx edx,word [(SEG_PRIDESC*16)+VD_PRIMARY.appuse+TOM.exoff]
lea eax,[eax+eax]
lea eax,[edx+eax*8]
mov esp,eax
jmp dword [eax]
;******************************************************************************
[BITS 16]
ldr16:
cli
in al,0x70
or al,0x80
out 0x70,al
lgdt [GDTR]
lidt [IDTR]
mov eax,cr0
or al,1
mov cr0,eax
jmp FLAT_CODE0:ldr32

@++

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 191 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_patatalo
Messages postés
257
Date d'inscription
dimanche 22 août 2004
Statut
Membre
Dernière intervention
29 septembre 2010
0
Merci
ok, merci beaucoup avec 30 octet de libre je vais essayer de faire un truc !



merci encore, @+
Commenter la réponse de vinc1008881