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 :

Boot sector BosoKernel vers syntaxe AT&T


Sujet :

Programmation d'OS Assembleur

  1. #1
    Membre chevronné
    Avatar de Edouard Kaiser
    Profil pro
    Inscrit en
    Février 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2004
    Messages : 521
    Par défaut Boot sector BosoKernel vers syntaxe AT&T
    Bonjour à tous !
    BosoKernel ( http://inferno.cs.univ-paris8.fr/~am/tutorial/os/tutorial02.html ) utilise NASM pour compiler son bootsector.
    Je voulais reprendre le code et le passer en syntaxe AT&T pour le compiler avec gcc, ce qui me donne (arretez moi si j'ai tort) :

    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
     
    /*------------------------------------------------------------
     |
     | BosoKernel 
     | bootsector.s
     |
     | Secteur de boot x86 (Syntaxe AT&T pour gcc)
     |
     | Fonctionnalitées :
     |  - Initialisation des registres de segments du processeur
     |  - Affichage d'un message
     |  - Boucle infinie
     |
     \-------------------------------------------------------------*/
     
        /*---------------------------------------------------------
    	; Point d'entrée
    	;---------------------------------------------------------*/
     
        // Initialisation des segments en 0x07C0
        movw $0x07C0, %ax
        movw %ax, %ds       // Segment de données
        movw %ax, %es       // Segment
        movw $0x8000, %ax	// Stack en 0xFFFF
        movw %ax, %ss
        movw $0xf000, %sp   // Fin du stack
     
    	// On affiche un message
    	mov msg, %si
    	call afficher
     
    	// Boucle infinie...
    	end:
    		jmp end
     
    	/*---------------------------------------------------------
    	; Variables & fonctions
    	;---------------------------------------------------------*/
     
    	msg: .string "Hello World !\n"
     
    	// Affiche une chaine de caracteres se terminant par 0x0
    	// Entree:   DS:SI -> pointe sur la chaine a afficher
    	afficher:
    		push %ax    // On empile les registres courantes
    		push %bx
    	.debut:
    		lodsb		// On place ds:si dans al
    		cmp 0, %al  // Fin chaine ?
    		jz .fin     // Alors on va à la fin...
    		mov $0x0E, %ah	// Sinon appel au service 0x0e, int 0x10 du bios
    		mov $0x07, %bx	// bx -> attribut, al -> caractere ascii
    		int $0x10
            jmp .debut  // On va au caractère suivant
     
    	.fin:
    		pop %bx
    		pop %ax
    		ret
     
    	// On inscrit le nombre 'magique'
    	.word 0xAA55
    Problème : Je ne connais pas la commande gcc pour compiler ce fichier et obtenir un fichier binaire pur de ces instructions, sans entete et blablabla..., bref un bootsector quoi
    Quelqun pour m'aider ?
    Merci d'avance !

  2. #2
    Membre confirmé Avatar de Arnaudv6
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 82
    Par défaut
    je ne peux pas t'aider, désolé,
    mais y'a quelque chose que je ne comprend pas :
    si tu veux de toute maniere obtenir un binaire,
    pourquoi tu ne le fais pas avec nasm ?
    (il marche aussi sous linux)...
    et par defaut, il produit un binaire sans en tete ni rien 8)

  3. #3
    Membre chevronné
    Avatar de Edouard Kaiser
    Profil pro
    Inscrit en
    Février 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2004
    Messages : 521
    Par défaut
    Oui c'est vrai que je pourrais passer avec nasm, mais je voulais tout faire sous gcc (petit défi personnel on va dire...).

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 150
    Par défaut
    1 an et 4 mois plus tard, une réponse...

    Salut, je vois que le message est très ancien, mais bon comme je suis tombé dessus grâce à google en faisant une recherche sur cette question et que j'ai fini par trouvé la réponse, je vais quand même répondre, ca pourra peut être aider quelqu'un qui sait...

    Alors il faut d'abord compiler son programme avec gcc, mais juste le compiler sans le linker (option -c).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gcc -c test.c -o test.o
    Ensuite il faut utiliser le linker de gcc en utilisant la directive --oformat binary qui permet de spécifier qu'on veut un binaire brute de décoffrage (j'aime bien cette expression de beauf) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ld -o test.bin --oformat binary test.o
    C'est aussi valable pour du code assembleur.

  5. #5
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    8 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 8 080
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par pier*
    1 an et 4 mois plus tard, une réponse...
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

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

Discussions similaires

  1. Création d'un boot sector
    Par [R3D]Talus dans le forum Programmation d'OS
    Réponses: 2
    Dernier message: 18/08/2010, 22h45
  2. [Pépin] Utilisation de EAX, ECX dans le boot sector 16 bits
    Par spiner900 dans le forum Programmation d'OS
    Réponses: 4
    Dernier message: 29/05/2009, 22h46
  3. Lien vers une page : pb de syntaxe
    Par soad029 dans le forum Langage
    Réponses: 2
    Dernier message: 07/09/2006, 10h03
  4. Syntaxe incorrecte vers 'where'.
    Par lepeintre dans le forum ASP
    Réponses: 15
    Dernier message: 19/05/2005, 11h57

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