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 :

Passage de données


Sujet :

Programmation d'OS Assembleur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Enseignant
    Inscrit en
    Juillet 2004
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juillet 2004
    Messages : 128
    Par défaut Passage de données
    Bonjour à tous

    Je travaille actuellement sur le tutoriel d'Arnauld Michelizza . J'en suis à la partie où il boot avec GRUB. Mais là n'est pas ma question.

    Je souhaiterais me passer entièrement de GRUB. Je voudrais donc partir du bootloader construit en mode réel, récupérer les infos nécessaires et les utiliser dans le noyau qui lui est en mode protégé.

    Pour un rappel, voici un bout du code du bootloader :

    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
    %define BASE    0x100  ; 0x0100:0x0 = 0x1000
    %define KSIZE   50     ; nombre de secteurs à charger
     
    [BITS 16]
    [ORG 0x0]
     
    jmp start
    %include "UTIL.INC"
    start:
     
    ;; ...
     
    next:
        mov ax, 0x10        ; segment de donne
        mov ds, ax
        mov fs, ax
        mov gs, ax
        mov es, ax
        mov ss, ax
        mov esp, 0x9F000    
     
        jmp dword 0x8:0x1000    ; réinitialise le segment de code
     
    ;--------------------------------------------------------------------
    bootdrv:  db 0
    msgDebut: db "Chargement du kernel", 13, 10, 0
    ;--------------------------------------------------------------------
    gdt:
        db 0, 0, 0, 0, 0, 0, 0, 0
    gdt_cs:
        db 0xFF, 0xFF, 0x0, 0x0, 0x0, 10011011b, 11011111b, 0x0
    gdt_ds:
        db 0xFF, 0xFF, 0x0, 0x0, 0x0, 10010011b, 11011111b, 0x0
    gdtend:
    ;--------------------------------------------------------------------
    gdtptr:
        dw 0  ; limite
        dd 0  ; base
    ;--------------------------------------------------------------------
     
    ;; NOP jusqu'a 510
    times 510-($-$$) db 144
    dw 0xAA55
    Et pour le noyau j'ai pour l'instant conservé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    [BITS 32]
    EXTERN print
    GLOBAL _start
     
    _start:
       mov eax, msg
       push eax
       call print
       pop eax
     
    end:
       jmp end
    Pour tester, et donc commencer, je souhaiterais que le contenu de la variable msg se trouve dans le bootlader.

    Merci d'avance pour votre aide.

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 260
    Par défaut
    Tu dois juste faire coïncider les adresses en mode réel avec les adresse en mode protégé.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Membre confirmé
    Profil pro
    Enseignant
    Inscrit en
    Juillet 2004
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juillet 2004
    Messages : 128
    Par défaut
    Bonjour

    Citation Envoyé par chrtophe Voir le message
    Tu dois juste faire coïncider les adresses en mode réel avec les adresse en mode protégé.
    Ok, je comprends le principe mais comment puis-je connaître l'adresse de mon étiquette msgDebut par exemple ?

  4. #4
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 260
    Par défaut
    Pas besoin de la connaitre, tu connais le nom. tu dois juste faire en sorte que l'adresse mémoire corresponde à l'adresse d'origine org.

    Comme ton code au boot n'est pas l'adresse 0, ça marchera si ton segment démarre là ou le code est chargé, à l'origine à l'adresse 0x7c00 de mémoire.
    Tu peux aussi copier ton code à l'adresse 0x1000 par exemple, mettre ton org à 0x1000, et avoir un descripteur de segment commençant à l'adr 0.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  5. #5
    Membre confirmé
    Profil pro
    Enseignant
    Inscrit en
    Juillet 2004
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juillet 2004
    Messages : 128
    Par défaut
    Excuse-moi, mais autant je suis à l'aise avec la plupart des langages, autant l'assembleur ce n'est pas trop mon truc et je me considère comme débutant dans ce domaine.

    Dans le boot le code est chargé à l'adresse 0x7c00. La GDT a été initialisée. et chargée. Est à dire qu à ce moment, les données sont dans le segment de données défini par la GDT ?

    Le noyau est à l'adresse 0x1000.

    J'(avouerais qu'avec un petit exemple je m'en sortirais mieux.

  6. #6
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 260
    Par défaut
    Le noyau est à l'adresse 0x1000.
    Donc soit tu fais partir ta gdt de l'adresse de base 0x1000 et tu gardes ton code avec org 0, soit tu fais un org 0x1000 de façon à ce que les adresses partent de 0x1000, et tu met l'adresse de base de la GDT à 0, il faudra dans ce cas commencer par copier le code de l'adresse 0x7c00 à 0x1000, puis y sauter.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

Discussions similaires

  1. passage de données entre page
    Par flatron dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 27/01/2006, 13h50
  2. Java script + JSP : Passage de données
    Par Rastapwalu dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 12/12/2005, 15h58
  3. [C#] Winforms passage de données...
    Par T0xF0x dans le forum Windows Forms
    Réponses: 7
    Dernier message: 07/12/2005, 09h14
  4. Passage de données entre deux pages
    Par spica92 dans le forum ASP
    Réponses: 2
    Dernier message: 08/09/2005, 14h38
  5. [popup] passage de données de session
    Par Mister_FX dans le forum ASP
    Réponses: 4
    Dernier message: 23/08/2004, 17h38

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