IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation d'OS Assembleur Discussion :

Adressage en mode unreal


Sujet :

Programmation d'OS Assembleur

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 15
    Points : 10
    Points
    10
    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

  2. #2
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Mai 2009
    Messages : 36
    Points : 52
    Points
    52
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mov si, word [gs:0x100000]
    En espèrant que cela réponde à ta question.
    Tommy

  3. #3
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    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

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    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

  5. #5
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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:

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    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

Discussions similaires

  1. Adressage en mode protégé
    Par E-Sh4rk dans le forum x86 32-bits / 64-bits
    Réponses: 2
    Dernier message: 07/07/2010, 20h20
  2. Modes d'adressage des données
    Par Elaich dans le forum x86 32-bits / 64-bits
    Réponses: 4
    Dernier message: 30/05/2008, 10h28
  3. Adressage indirect : Invalid indexing mode
    Par beraaa dans le forum x86 16-bits
    Réponses: 2
    Dernier message: 31/10/2007, 23h50
  4. Mode d'adressage d'un ordinateur
    Par Spitfire378 dans le forum Assembleur
    Réponses: 1
    Dernier message: 29/04/2007, 09h31
  5. [EPROM] Adressage en mode réel
    Par ruda.tom dans le forum Assembleur
    Réponses: 16
    Dernier message: 06/11/2003, 00h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo