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 :

Secteur de boot


Sujet :

Programmation d'OS Assembleur

  1. #1
    Membre du Club
    Inscrit en
    Août 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 8
    Par défaut Secteur de boot
    Bonjour alors voilà :
    je change de système d'exploitation très souvent et je ne trouve pas de quoi me satisfaire. Alors j'ai eu l'idée de créer mon propre système d'exploitation.
    Bon je ne vais pas vous raconter ma vie mais pour faire court : je me suis documenté (j'ai trouvé des choses intéressantes, de plus je connais le c et cpp et j'ai des notions (très minimes) de asm).
    Mon problème (enfin :p ) :

    j'ai recopié le code suivant dans un fichier bootsect.asm :
    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
    [BITS 16] ; indique a nasm que l'on travaille en 16 bits
    [ORG 0x0]
     
    ; initialisation des segments en 0x07C00
    mov ax, 0x07C0
    mov ds, ax
    mov es, ax
    mov ax, 0x8000
    mov ss, ax
    mov sp, 0xf000 ; stack de 0x8F000 -> 0x80000
     
    ; affiche un msg
    mov si, msgDebut
    call afficher
     
     
    end:
    jmp end
     
     
    ;--- Variables ---
    msgDebut db "Hello world !", 13, 10, 0
    ;-----------------
     
    ;---------------------------------------------------------
    ; Synopsis: Affiche une chaine de caracteres se terminant par 0x0
    ; Entree: DS:SI -> pointe sur la chaine a afficher
    ;---------------------------------------------------------
    afficher:
    push ax
    push bx
    .debut:
    lodsb ; ds:si -> al
    cmp al, 0 ; fin chaine ?
    jz .fin
    mov ah, 0x0E ; appel au service 0x0e, int 0x10 du bios
    mov bx, 0x07 ; bx -> attribut, al -> caractere ascii
    int 0x10
    jmp .debut
     
    .fin:
    pop bx
    pop ax
    ret
     
    ;--- NOP jusqu'a 510 ---
    times 510-($-$$) db 144
    dw 0xAA55
    Je l'ai compilé grâce à la fonction : nasm -f bin -o bootsect bootsect.asm

    Créer un fichier .img avec ce secteur de boot :bfi -v -f=test.img -b=bootsect

    Mais lors du démarrage de la disquette (sur virtual box) le boot plante et ne m'affiche même pas de message d'erreur.
    Quelqu'un peut m'aider à réparer cette erreur ?

    P.S. :
    si quelqu'un connaît bien ce qui concerne la création de noyau de systèmes et qui serait prêt à m'offrir son aide je suis preneur.

    Merci !

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 145
    Par défaut
    Bonjour,

    ne travaillant pas sous Windows, je n'ai pas la solution, mais je trouve tout de même étrange qu'il n'y ait ni message d'erreur ni mode debug avec cet émulateur.

  3. #3
    Membre du Club
    Inscrit en
    Août 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 8
    Par défaut
    je ne travail en multiboot avec win et linux mais pour le script je l'ai trouvé que le site là http://a.michelizza.free.fr/PmWiki/p...=TutoOS.TutoOS

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 444
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 444
    Par défaut
    Si tu as encore un lecteur de disquettes quelque part, essaie de démarrer directement avec plutôt que d'utiliser une virtual box.

    Vérifie déjà que le fichier généré par nasm fais bien exactement 512 octets. Ensuite, colle-le au début de ta disquette avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ cat bootsect > /dev/fd0
    Pour le reste, à première vue, le programme a l'air correct mais approximatif quand même : d'une part, bien que ce soit strictement équivalent, j'aurais initialisé mon programme en 0000:7C00 plutôt qu'en 07C0:0000. Ensuite, je ne ferais pas confiance à l'INT 10h pour garder mes registres en l'état.

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 145
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    bien que ce soit strictement équivalent, j'aurais initialisé mon programme en 0000:7C00 plutôt qu'en 07C0:0000
    Pourquoi ?

    Ensuite, je ne ferais pas confiance à l'INT 10h pour garder mes registres en l'état.
    Pourquoi ?

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

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Par défaut
    Hello,

    Je n'utilise pas d'assembleur du commerce, mais t'es sur qu'a la place de la ligne

    il ne faudrait pas un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mov si, offset msgDebut
    ?

    a+ Francois

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 145
    Par défaut
    Si je peux me permettre quelques remarques a propos des info fournies par sheik5757 :
    1. Aucune information nous permet de l'aider vraiment dans sa démarche
    2. Le 2nd post est absolument inintelligible


    Sinon, la disquette générée par ce programme a été testée avec Bochs, Qemu et sur mon PC sans problème. Il y a peut-être une erreur quelque part, par exemple un défaut d'initialisation, qui fait que sous certaines configurations, ça ne fonctionne pas. Mais malheureusement, je n'ai pas de Windows sous la main pour tester avec Virtual Box.

    Voilà, je ne veux pas sembler trop sévère à l'égard de Sheik5757, mais il me semble qu'un minimum de coopération de sa part pourrait nous être utile.

Discussions similaires

  1. Secteur de boot et kernel
    Par ADABLA dans le forum Assembleur
    Réponses: 3
    Dernier message: 20/02/2008, 12h22
  2. Secteur de boot.
    Par swingNJava dans le forum C
    Réponses: 3
    Dernier message: 26/11/2007, 00h24
  3. Virus dans le secteur de Boot
    Par JACQUEY dans le forum Sécurité
    Réponses: 11
    Dernier message: 08/11/2006, 08h20
  4. Utilité et contenu d'un secteur de boot
    Par Ekinoks dans le forum Programmation d'OS
    Réponses: 10
    Dernier message: 14/04/2005, 22h39
  5. Problème avec un secteur de boot en mode protégé...
    Par Nico*3-3 dans le forum Assembleur
    Réponses: 17
    Dernier message: 10/02/2005, 19h32

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