Précédent   Forum du club des développeurs et IT Pro > Autres langages > Assembleur > Programmation d'OS
Programmation d'OS Programmation de systèmes d'exploitation
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 10/11/2009, 17h19   #1
Tyrrell
Invité de passage
 
Inscription : octobre 2008
Messages : 3
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 3
Points : 0
Points : 0
Par défaut Adressage en mode unreal

Bonjour,

Pour la mise en place d'un OS à base de x86, j'ai besoin, avant le passage en mode protégé, de copier du code dans l'espace mémoire au dela du premier mega.
Je sais que le mode réel, du faite de son mode d'adressage, ne permet pas cette action.
En revanche, il me semble que le mode unreal permet de faire un adressages 32 bits tout en restant à l'équivalent du mode réel.
J'ai codé le passage en mode unreal, mais ensuite je n'arrive pas à réaliser un accès mémoire 32 bits au dela du premier mega qui fonctionne.
avez-vous une idée ou un exemple me permettant d'avancer dans cette voie ?

Par avance merci
Tyrrell est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2009, 21h58   #2
tommy60
Membre du Club
 
Homme Frédéric
Inscription : mai 2009
Messages : 36
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Âge : 27
Localisation : France, Oise (Picardie)

Informations forums :
Inscription : mai 2009
Messages : 36
Points : 50
Points : 50
Citation:
Envoyé par Tyrrell Voir le message
J'ai codé le passage en mode unreal, mais ensuite je n'arrive pas à réaliser un accès mémoire 32 bits au dela du premier mega qui fonctionne.
Normallement, il suffit de spécifier d'abord le registre de segment qui pointent vers le descripteur de données de la GDT, suivi de l'adresse de destination. Par exemple, si GS pointe vers ce descripteur, on écrit:
Code :
1
2
 
mov si, word [gs:0x100000]
En espèrant que cela réponde à ta question.
Tommy
tommy60 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2009, 22h48   #3
Forthman
Membre expérimenté
 
Avatar de Forthman
 
Homme François
conception mécanique
Inscription : janvier 2005
Messages : 340
Détails du profil
Informations personnelles :
Nom : Homme François
Âge : 37
Localisation : France, Tarn et Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : conception mécanique
Secteur : Industrie

Informations forums :
Inscription : janvier 2005
Messages : 340
Points : 547
Points : 547
J'ai réalisé un petit TSR pour DOS qui permet d'utiliser ce "mode"

Si ça peut t'aider, je le posterai ici ...

a+ François
Forthman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2009, 12h39   #4
Tyrrell
Invité de passage
 
Inscription : octobre 2008
Messages : 3
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 3
Points : 0
Points : 0
Bonjour et merci pour vos réponses,
J'ai déjà expérimenté l'exemple donnée par Tommy60, mais sans succès
Par contre, je suis preneur de l'exemple proposé par Forthman.
Merci d'avance

Jean-François
Tyrrell est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2009, 17h56   #5
Forthman
Membre expérimenté
 
Avatar de Forthman
 
Homme François
conception mécanique
Inscription : janvier 2005
Messages : 340
Détails du profil
Informations personnelles :
Nom : Homme François
Âge : 37
Localisation : France, Tarn et Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : conception mécanique
Secteur : Industrie

Informations forums :
Inscription : janvier 2005
Messages : 340
Points : 547
Points : 547
Ok, alors je poste direct le code (pas bien long)
il se compile avec FASM

Par contre, je n'ai pas cherché à comprendre exactement ce qu'il faisait.
J'ai mi ce truc au point il y a plusieurs années (Win95 venait tout juste de sortir)
en piochant des infos et des bouts de codes à droite à gauche

Le petit fichier .COM (115 octets) reste en mémoire et redonne la main au DOS
Je préciser que ce dernier ne fonctionne qu'avec un DOS "pur" sans
gestionnaire de mémoire comme HIMEM ou EMM386 (et encore moins sous WINDOWS)

a+ François

Code :
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
 
; ------------------------------------------
; MISE EN PLACE DE LA GESTION MEMOIRE "FLAT"
; ------------------------------------------
 
LENGTH = (END_prog-$)/16+1
 
org 100h
 
FLAT_sel equ FLAT_desc - GDT
 
; Installation du mode FLAT
  pushf
  push ds
  cli
  xor eax,eax
  mov ds,ax
  mov word [ds:34h],FLAT_tsr
  mov ax,cs
  mov [ds:36h],ax
  shl eax,4
  add dword [cs:GDT+2],eax
  pop ds
  popf
 
; Sortie en TSR
  mov ah,31h
  mov dx,LENGTH
  int 21h
 
  mov ah,4Ch ;
  int 21h ;exit
 
;------------------------------------------------------------------------
FLAT_tsr:
   push eax
   mov al,0Bh
   out 20h,al
   jmp $+2
 ;  in al,20h
 ;  test al,20h
  lgdt [cs:GDT] ; Load GDT Register
  push gs
  push fs
  push es
  push ds
  push bx
   mov eax,CR0
   or al,1
   mov CR0,eax
   jmp $+2
   mov bx,FLAT_sel ; Load 4Gb limits
   mov ds,bx
   mov es,bx
   mov fs,bx
   mov gs,bx
   and al,0FEh ; Back to Real mode
   mov CR0,eax
  pop bx
  pop ds
  pop es
  pop fs
  pop gs
  pop eax
  iret
 
GDT:
  dw 15    ; Limit (16 bytes)
  dw GDT,0 ; Offset within current segment...
  dw 0     ; Unused
 
FLAT_desc:
  dw 0ffffh ; Limit (bit 0..15)
  db 0,0,0  ; Base (bit 0..23)
  db 92h    ; Access rights
  db 0cfh   ; Page granularity + Limit(16..19)
  db 0      ; Base (bit 24..31)
 
END_prog:
Forthman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/11/2009, 09h07   #6
Tyrrell
Invité de passage
 
Inscription : octobre 2008
Messages : 3
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 3
Points : 0
Points : 0
Bonjour,

et merci pour ces informations.
Je vais immédiatement essayer de comprendre afin de pouvoir l'appliquer à mon besoin.
Je ne manquerai pas de vous faire part de mon résultat final

Cordialement

Jean-François
Tyrrell est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 19h14.


 
 
 
 
Partenaires

Hébergement Web