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

x86 16-bits Assembleur Discussion :

Disquette Boot avec message "Bonjour !"


Sujet :

x86 16-bits Assembleur

  1. #1
    gtr
    gtr est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2002
    Messages : 24
    Points : 16
    Points
    16
    Par défaut Disquette Boot avec message "Bonjour !"
    Bonjour à tous,

    Je voudrais simplement créer un disquette bootable qui affiche le message "Bonjour!".

    J'ai créer mon fichier Bonjour.com et avec debug de ms-dos, j'ai fait comme il était écrit sur ce forum dans un sujet samblable, w cs:100 0 0 1.

    J'ai donc écrit le contenu de mon .com depuis l'adresse CS:100 sur la disquette du lecteur A(0) en écrivant 1 secteur commençant au secteur logique 0 de la disquette et quand je démarre avec la disquette, ça fait rien, ça plante ou ça bloque.

    Pourquoi ça ne fonctionne pas?

    Merci de m'éclairer.

  2. #2
    Membre expérimenté

    Inscrit en
    Mai 2002
    Messages
    720
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 720
    Points : 1 594
    Points
    1 594
    Par défaut
    3 possibilités :
    - Le programme que tu as compilé est buggé, et son exécution n'est pas valide.
    - La disquette est endomagée et il est impossible de booter dessus (Mais, le bios devrait afficher un message ou démarrer sur le disque dur).
    - Ton programme de boot fais plus de 512 octets et ne rentre pas sur 1 secteur.

    Il est fort probable que ce soit un problème du programme. Donne nous le code source...

    Smortex

    Les FAQ Assembleur - Linux
    In The Beginning Was The Command Line Neal Stephenson

  3. #3
    gtr
    gtr est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2002
    Messages : 24
    Points : 16
    Points
    16
    Par défaut
    Voici le code d'un message tout simple sous masm:

    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
     
    code	segment
    	org 100h
    	assume cs:code
     
    Start:	jmp debut
     
    mess	db 'Bonjour$'
     
    debut:	mov ah,09h
    	mov dx,offset mess
    	int 21h
    	ret
     
    code	ends
    	end Start
    Merci

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 19
    Points : 21
    Points
    21
    Par défaut
    Marchera pas si tu boot il faut utiliser la fonction 0Eh de l'int 10h caractère par caractère et pas l'int 21h car ça marche que sous dos

  5. #5
    Membre expérimenté

    Inscrit en
    Mai 2002
    Messages
    720
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 720
    Points : 1 594
    Points
    1 594
    Par défaut
    Houlàlà !

    Il y à plusieurs problèmes dans ton programme. Procédons par ordre.

    Il s'agit d'une Interruption DOS. Comme tu boote sur la disquette, DOS n'est pas en mémoire ! Tu ne peux donc pas utiliser cette interruption ! Il faut utiliser les interruptions B.I.O.S. (Basic Input Output System) (Int 10h pour les fonctions vidéos).

    Le Ret à la fin, n'est valide lui aussi que sous DOS (Et Windows) et provoque le retours au système. Ici, il va se passer n'importe quoi.
    Dans ton cas, arrivé en fin de programme, il faut faire une boucle infinie :
    Concernant le
    Il faut mettre jmp 07C0h:start car le BIOS copie le premier secteur de la disquette en RAM avant d'exécuter ke programme qui s'y trouve.

    Ensuite, pour parfaire le tout, il faut initialiser les registres Ds et Es :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            Mov     Ax,Cs
            Mov     Ds,Ax
            Mov     Es,Ax
    Et pour finir, un disque bootable doit toujours se terminer par 0AA55h, il faudra donc faire quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    org 510
    dw 0AAffh
    Tu trouvera beaucoup d'infos pour t'aider sur ce site :
    http://www.nondot.org/~sabre/os/articles

    Bon développement !

    Smortex

    Les FAQ Assembleur - Linux
    In The Beginning Was The Command Line Neal Stephenson

  6. #6
    Membre régulier

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 65
    Points : 105
    Points
    105
    Par défaut
    eh zut, smortex est trop rapide pour moi. Je laisse quand meme ma réponse, ya peut etre des redites...

    -------------------------------------
    Bonjour,

    Il faut savoir que le code présent dans le premier secteur de boot est chargé au lancement du système à l'adresse 0x07C0:0000. Donc CS vaut 0x7C0 au début de ton prog.

    Donc lorsque tu fais org 100h, le compilateur calcule toutes les adresses de jump et call à partir de ce org. Tous les jump sont donc faux et ça te mets dedans. De même pour le segment de données qu'il faut préciser ( il est d'ailleurs normalement indispensable de fixer le segment de données avant tout appel de la fonction 9 de l'int. 21h même dans un EXE ou un COM bidon car on n'a pas toujours CS==DS).

    Enfin, il est interdit de faire un ret à la fin de ton prog. puisque tu n'as pas de pile !!! (SS doit être défini par toi même). push et pop sont aussi bannis tant que tu n'as pas défini SS.

    Donc le mieux à faire pour l'instant à la fin de ton prog. est une boucle infinie !!!

    Pour en revenir au problème du org, tout dépend de la cible de ton binaire. Si c'est une cible binaire pure, tu n'as normalement pas besoin de spécifier org (en tout cas c'est vrai avec nasm).

    Pour ds, un simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       mov ax,7c0h
       mov ds,ax
       ...
    devrait suffire.

    Ce qu'il faut faire c'est compiler ton prog. et essayer de la désassembler pour voir si tous les jump/call absolus et relatifs concordent. Sinon il faut faire le déplacement toi même par un jump relatif.

    Voilà.
    golem
    +++

  7. #7
    Membre expérimenté

    Inscrit en
    Mai 2002
    Messages
    720
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 720
    Points : 1 594
    Points
    1 594
    Par défaut
    Concernant le Org 100h, ca ne doit pas poser de problème car lorsque tu écris le secteur de boot sous debug (w cs:100 0 0 1), les 100 premiers octets ne sont pas copiés... Si tu faisait w cs:0 0 0 1, là, il devrai y avoir de problèmes...

    A vérifier mais il me semble que j'ai développé mes premières disquettes de boot exactement comme ça sous Debug.

    Smortex

    Les FAQ Assembleur - Linux
    In The Beginning Was The Command Line Neal Stephenson

  8. #8
    gtr
    gtr est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2002
    Messages : 24
    Points : 16
    Points
    16
    Par défaut
    Ouuuuuuuuuais...

    C'est pas aussi simple que je pensais pour moi qui ne fait que commencer en assembleur.

    Merci beaucoup pour vos infos, je vais continuer mon apprentissage et j'en viendrais à comprendre mieux tout ça.

    Merci

  9. #9
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2003
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 1
    Points : 1
    Points
    1
    Par défaut pour ton message en bootable en dos
    Salut
    Ok mais avant de s'emballer sur des complications en assembleur pourquoi tu ne fais pas un "echo bonjour" dans ton autoexec.bat ou tout autre que tu appelle par un call??????????
    Un grand merci!

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    C'est cec que l'on appelel l'apprentissage ponchau. C'est a dire que si il n'utilise pas l'autauexec.bat pour afficher un truc au démarrage, c'est parce que afficher un truc au démarrage ca n'a aucun interet (enfin je ne sait pas cec qui t'interesse toi). Par cotnre savoir comme marche le boot d'un pc et comment creer uin programme qui se lance au démarrage, ca c'est interessant, parcee que ca permet de faire un truc qu'on appelle "apprendre" l'assembleur entre autres.

  11. #11
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Petite correction : Smortex a signalé qu'à la fin du programme de boot, il devait y avoir le word 0AAFFh, mais il me semble que c'est 0AA55h !
    a+
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  12. #12
    Membre expérimenté

    Inscrit en
    Mai 2002
    Messages
    720
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 720
    Points : 1 594
    Points
    1 594
    Par défaut
    Citation Envoyé par wormful_sickfoot
    Petite correction : Smortex a signalé qu'à la fin du programme de boot, il devait y avoir le word 0AAFFh, mais il me semble que c'est 0AA55h !
    a+
    En effet, j'ai fait une petite erreur dans mon bout de code !!!

    Smortex

    Les FAQ Assembleur - Linux
    In The Beginning Was The Command Line Neal Stephenson

Discussions similaires

  1. Réponses: 3
    Dernier message: 30/06/2005, 12h50

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