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 :

Imgmount, erreur, Pourquoi ?


Sujet :

Programmation d'OS Assembleur

  1. #1
    Nouveau membre du Club

    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 39
    Points : 38
    Points
    38
    Par défaut Imgmount, erreur, Pourquoi ?
    Bonjour à toutes et à tous,

    Je me suis lancé dans la création d'un os didactique.
    Et j'ai commencé par le secteur de boot le plus basique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    [bits 16]
    [org 0x0]
     
    int 0x18
     
    times 510-($-$$) db 0
    dw 0xAA55
    qui est compilé avec NASM en boot.com.
    Ce boot.com avec lequel je crée une image :
    copy boot.com/B disk.img /Y (je suis sous windows)

    Ensuite je lance dosBox, je rentre la commande :
    imgmount e disk.img -t floppyet il me dit : can't create drive from file...

    alors je fais :
    imgmount e disk.img -size 512,63,16,142et il me dit: can't create drive from file...

    Pourquoi?

    PS: je n'ai pas de lecteur de disquette.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 370
    Points : 23 625
    Points
    23 625
    Par défaut
    Essaie d'ajouter times 1474048 db 0 en fin de programme pour obtenir un fichier d'exactement 1,44 Mio et rappelle ta première commande. Il est possible également que le chemin d'accès à ton fichier image soit le mauvais. Écris-le en entier à la place de ton nom fichier en utilisant éventuellement des guillemets.

    Par contre, pourquoi INT 0x18 ? C'est une interruption archaïque.

  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
    Obsidian a raison, l'int 18h c'était pour lancer un Basic présent en ROM
    un truc qui n'a existé qu'au début des années 80

    edit :
    comme il n'y a rien dans ton programme ce n'est pas grave, mais il faut initialiser les segments, et le début du programme n'est pas en 0000h

  4. #4
    Nouveau membre du Club

    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 39
    Points : 38
    Points
    38
    Par défaut
    Bonjours,

    Merci de vos réponses je vais tester cela tout de suite!

    J'utilise c'est trois urls pour me documenté:
    http://www.vnutz.com/articles/PC_Boo...utorial_In_ASM (int 18h)

    http://a.michelizza.free.fr/pmwiki.p...utoOS.Bootsect

    http://esauvage.developpez.com/tutor...tel-avec-nasm/

    J'ai aussi quelques questions si vous me le permettez:

    Pourquoi le fichier doit faire 1,44Mio?

    J'ai trouver cela sur le wiki:
    int 18h = Execute Cassette BASIC: True IBM computers contain BASIC in the ROM to be interpreted and executed by this routine in the event of a boot failure (called by the BIOS)
    Du coup je l'ai mis au cas ou sa boot pas... Si l'int 18h est archaique lequel dois-je utiliser?

  5. #5
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 370
    Points : 23 625
    Points
    23 625
    Par défaut
    Citation Envoyé par theludovyc Voir le message
    J'ai aussi quelques questions si vous me le permettez:

    Pourquoi le fichier doit faire 1,44Mio?
    Ce n'est qu'une hypothèse. Comme la commande que tu utilises pour monter ton image disque échouait, j'ai pensé que ça pourrait aider de fabriquer un fichier qui ait exactement la taille d'une disquette, et donc plus susceptible d'en être l'image.

    Du coup, ça marche ou pas ?

    J'ai trouver cela sur le wiki:
    int 18h = Execute Cassette BASIC: True IBM computers contain BASIC in the ROM to be interpreted and executed by this routine in the event of a boot failure (called by the BIOS)
    Du coup je l'ai mis au cas ou sa boot pas...
    Sauf que tu places cet appel DANS ton secteur de boot. Donc, si ça ne démarre pas, il n'y aura pas d'appel à INT 18h du tout.

    Si l'int 18h est archaique lequel dois-je utiliser?
    Tu es dans un cas de figure où il n'y a « plus rien en dessous ». Soit tu utilises les autres interruptions du BIOS pour écrire un message, attendre l'appui sur une touche et rebooter à chaud, soit tu fais une boucle infinie pour que le programme s'arrête là, en insérant « HLT » dans cette boucle.

  6. #6
    Nouveau membre du Club

    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 39
    Points : 38
    Points
    38
    Par défaut
    Nouveau code :
    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
    [bits 16]
    [org 0x0]
     
    ;init segments
    mov ax, 0x07c0
    mov ds, ax
    mov es, ax
    mov ax, 0x8000
    mov ss, ax
    mov sp, 0xf000
     
    ;512 bootstrap bytes
    times 510-($-$$) db 0
    dw 0xAA55
     
    ;1,44Mio floppy
    times 1474048-($-$$) db 0
    je compile tout va bien, je refais la copy tout va bien. Je monte l'image sa marche pas.

    Du coup je me suis dit vu qu'en fait la commande dos:
    copy boot.com/B disk.img /Y
    n'est qu'une copie sa ne marche peut être pas a cause de sa.
    Je télécharge donc ultraIso pour faire une .img sur 185Mb et la non plus sa ne marche pas...

  7. #7
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 370
    Points : 23 625
    Points
    23 625
    Par défaut
    Citation Envoyé par theludovyc Voir le message
    je compile tout va bien, je refais la copy tout va bien. Je monte l'image sa marche pas.
    C'est-à-dire ?

    La commande te renvoie toujours un message d'erreur ou bien c'est au boot qu'il ne se passe rien ? Parce qu'en l'état actuel des choses, ton programme ne fait rien. Il initialise les segments et ne fait plus rien d'autre.

    Pire : il s'agit d'assembleur : le programme ne va pas spontanément s'arrêter après la dernière instruction que tu as saisie. Le micro-processeur n'a aucun moyen de savoir si les données qui suivent en mémoire sont bien du code ou, au contraire, des valeurs complètement indéfinies. Il va invariablement tenter de les exécuter avec les résultats catastrophiques que l'on peut craindre.

    Il faut mettre un point d'arrêt en fin de programme.

  8. #8
    Nouveau membre du Club

    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 39
    Points : 38
    Points
    38
    Par défaut
    Désolé il est vrai que je me suis mal exprimer dans mon dernier message. C'est au montage de l'image que cela pause problème, je vais changer le titre de la section en imgmount, erreur, pourquoi?.

    J'ai mis un ret dans mon bootstrap:
    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
    [bits 16]
    [org 0x0]
     
    ;init segments
    mov ax, 0x07c0
    mov ds, ax
    mov es, ax
    mov ax, 0x8000
    mov ss, ax
    mov sp, 0xf000
     
    ret
     
    ;512 bootstrap bytes
    times 510-($-$$) db 0
    dw 0xAA55
     
    ;1,44Mio floppy
    times 1474048-($-$$) db 0
    Merci de votre aide jusqu'à présent, savoir que l'on peut ce faire épauler sur des choses aussi pointu fait plaisir

  9. #9
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 370
    Points : 23 625
    Points
    23 625
    Par défaut
    Citation Envoyé par theludovyc Voir le message
    Désolé il est vrai que je me suis mal exprimer dans mon dernier message. C'est au montage de l'image que cela pause problème, je vais changer le titre de la section en imgmount, erreur, pourquoi?.
    Dans ce cas, c'est de ce côté qu'il faut regarder. Tant que cela ne sera pas réglé, tu pourras mettre tout ce que tu veux dans ton programme, cela ne changera rien au problème.

    J'ai mis un ret dans mon bootstrap:
    C'est une bonne idée, c'est souvent ce qu'il faut faire, mais ça ne marchera pas non plus. « ret » signifie « return » et sert à quitter la procédure en cours et remonter vers le programme qui nous a appelé. Pour cela, le micro-processeur va chercher l'adresse de retour dans la pile.

    Mais en l'occurrence, il n'y a rien au dessus de nous (à part le BIOS, mais bon) puisqu'on est justement au démarrage du système. Et il n'y a pas de pile pré-initialisée non plus. RET va donc nous renvoyer n'importe où et ton ordinateur va planter également.

    Merci de votre aide jusqu'à présent, savoir que l'on peut ce faire épauler sur des choses aussi pointu fait plaisir
    À ton service.

  10. #10
    Nouveau membre du Club

    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 39
    Points : 38
    Points
    38
    Par défaut
    nouveau code (très lourd):
    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
    [bits 16]
    [org 0x0]
     
    ;init segments
    mov ax, 0x07c0
    mov ds, ax
    mov es, ax
    mov ax, 0x8000
    mov ss, ax
    mov sp, 0xf000
     
    mov si, hello
    xor bh, bh
    mov ah, 0x03
    int 0x10
    mov cx,1
    affiche_suivant:
    mov al, [si]
    or al, al
    jz fin_affiche_suivant
    mov ah, 0x02
    int 0x10
    mov ah, 0x0A
    int 0x10
    inc si
    inc dl
    jmp affiche_suivant
    fin_affiche_suivant:
     
    ret
     
    hello: db 'Bonjour papi.', 0
     
    ;512 bootstrap bytes
    times 510-($-$$) db 0
    dw 0xAA55
     
    ;1,44Mio floppy
    times 1474048-($-$$) db 0
    Que j'ai assembler, puis fait le copy pour le transform en.img. J'ai aussi installer bochs. La je monte une floppy avec mon .img et la miracle sa marche, le boot ce fait et il me dit bonjour papi. C'est la classe

    Pour le ret il dit rien pour le moment mais je ferais un:
    Je mettrais en résolus quand tu aura lu

    Sa marche sous bochs mais pas sous DosBox

  11. #11
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 370
    Points : 23 625
    Points
    23 625
    Par défaut
    Félicitations !

    Par contre, le RET t'enverra toujours dans le décor. Écris plutôt

    … à la place.

  12. #12
    Nouveau membre du Club

    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 39
    Points : 38
    Points
    38
    Par défaut
    Merci de ton temps, de ta connaissance et de ton aide, je ferais appel à toi si besoin est .

    Sujet résolu

  13. #13
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 169
    Points : 251
    Points
    251
    Par défaut
    Juste un petit truc, tu peux aussi faire un
    à la fin du programme, le $ sera converti en l'adresse de l'instruction par l'assembleur et tu passeras donc ton temps à sauter sur place.

    Ça ne change strictement rien par rapport à ce qu'a dit Obsidian, mais c'est marrant à écrire

  14. #14
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 370
    Points : 23 625
    Points
    23 625
    Par défaut
    Citation Envoyé par CP / M Voir le message
    Ça ne change strictement rien par rapport à ce qu'a dit Obsidian, mais c'est marrant à écrire
    « Strictement » n'est pas le terme qui convient ici. À l'époque, c'était peut-être vrai mais aujourd'hui, les micro-processeurs actuels sur PC sont faits pour changer de cadence et sont d'une manière générale très gourmands en énergie.

    HLT signifie « halt » et se trouve sur la majorité des micro-processeurs, même très anciens. Ils servent mettre le micro-processeur en sommeil jusqu'à ce qu'une interruption arrive. Des interruptions, il en arrive en permanence, mais à une fréquence autrement moindre que sa cadence d'exécution.

    Il n'y a qu'à observer à quelle vitesse travaille le ventilateur une fois cette ligne atteinte pour s'en convaincre.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Mon script php et sql genere une erreur pourquoi ?
    Par booster71 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 16/07/2014, 08h05
  2. 120 erreurs pourquoi ?
    Par antoine974 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 15/10/2008, 22h13
  3. [VB2005] Messages d'erreur pourquoi ?
    Par julien7 dans le forum VB.NET
    Réponses: 2
    Dernier message: 03/03/2008, 17h54
  4. Réponses: 6
    Dernier message: 29/11/2005, 19h36
  5. erreur LOOP attendu , mais pourquoi?
    Par ahage4x4 dans le forum ASP
    Réponses: 10
    Dernier message: 23/05/2005, 16h22

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