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 :

bootloader de linux 0.01


Sujet :

x86 16-bits Assembleur

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 1
    Points : 1
    Points
    1
    Par défaut bootloader de linux 0.01
    Bonjour à tous,

    Voici quelques questions à propos d'une partie du code du fichier boot.s de linux 0.01 (excusez-moi si le sujet existe déjà, je ne voudrais pas créer une nouvelle discussion pour rien, mais je n'ai pas regardé). Voici le bout de code en question :

    Code asm : 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
    read_it:
    	mov ax,es
    	test ax,#0x0fff
    die:	jne die			| es must be at 64kB boundary
    	xor bx,bx		        | bx is starting address within segment
    rp_read:
    	mov ax,es
    	cmp ax,#ENDSEG		| have we loaded all yet?
    	jb ok1_read
    	ret
    ok1_read:
    	mov ax,#sectors
    	sub ax,sread
    	mov cx,ax
    	shl cx,#9
    	add cx,bx
    	jnc ok2_read
    	je ok2_read
    	xor ax,ax
    	sub ax,bx
    	shr ax,#9

    On est censé ici lire les secteurs des pistes, mais certaines lignes sont (pour moi) assez obscures. Voici les questions que je me pose :
    Que vaut la variable sectors utilisée au début de ok1_read? Et où est-elle? On peut la voir, mais juste en commentaire au début du fichier.

    Je ne comprends pas du tout la ligne add cx, bx dans ok1_read. Jusqu'à présent, on mettait le nombre de secteurs par piste dans ax, on lui soustrait le nombre de secteurs restant à lire, on met le tout dans cx, on le multiplie par 512 (pour déterminer la taille des secteurs restant à lire???), et on en arrive ensuite à add cx, bx que je ne comprends pas. La doc que j'ai trouvée n'est pas claire là-dessus *. Quel est le rapport de tout ça avec la limite de 64KB (dans les commentaires de Linus) ?? La limite d'adressage ? Que signifie-t-elle, ici, dans la lecture des secteurs ?

    Ensuite, quelqu'un pourrait-il m'expliquer les routines read_it, die et rp_read (fonctionnement + chaque ligne de code). Qu'est ce qu'ENDSEG ? Quelle valeur vaut-il ? Dans die, pourquoi mettons-nous à 0 bx (à quoi cela servirait-t-il alors de l'ajouter à cx dans ok1_read) ? Et quelle est la valeur de es dans read_it ? 0x0 ou 0x10000 (je veux dire : conserve-t-il la valeur SYSSEG plus haut dans boot.s) ? À quoi sert le "test" ici, et pourquoi ce masque ? Quel bit cherche-t-on à tester et dans quel but ? Si un spécialiste pouvait m'éclairer… excusez pour les erreurs éventuelles.

    * La doc contient ceci en commentaire de add cx, bx : « cx = cx + offset in current segment (bx) = total bytes read after the processing of this time ». Si cx est la taille des secteurs restant à lire, et bx une adresse, comment peut-on les ajouter ?

    Merci beaucoup !
    Bonne fin de journée !

  2. #2
    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
    C'est moi ou il manque pas mal de code ?

    pour lire les secteurs, il est obligatoire de trouver l'interruption 13h
    quelque part puisqu'on est en mode réel

    a+ François

Discussions similaires

  1. démarrage Linux bloqué par "bootloader"(?) Windows 8
    Par BlackoOSX dans le forum Linux
    Réponses: 0
    Dernier message: 22/03/2015, 21h28
  2. Débat : quelle distribution Linux choisir pour débuter ?
    Par Anonymous dans le forum Distributions
    Réponses: 227
    Dernier message: 18/02/2015, 11h09
  3. [Kylix] Le débutant en Kylix et Linux....
    Par Eclypse dans le forum EDI
    Réponses: 2
    Dernier message: 08/05/2002, 11h37
  4. OmniORB : code sous Windows et Linux
    Par debug dans le forum CORBA
    Réponses: 2
    Dernier message: 30/04/2002, 18h45
  5. Je ne peux établir une connexion cliente sous Linux.
    Par Anonymous dans le forum CORBA
    Réponses: 5
    Dernier message: 16/04/2002, 16h57

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