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

C++ Discussion :

Mixing ASM/C++


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �clair�
    Inscrit en
    Janvier 2005
    Messages
    84
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 84
    Par d�faut Mixing ASM/C++
    Bonjour,

    Je cherche a compiler et a executer un programme ecrit en ASM/C++.
    Il s'agit d'un Loader qui est charg� par mon boot. Celui ci est en 16-bit car il se charge a passer en PMode.

    Le probleme est que je n'arrive pas a lui donner la main.

    Je travaille sous Windows/Bochs/Nasm/DJGPP/CygWin

    Merci,

  2. #2
    Expert confirm�

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par d�faut
    Que je sache DJGPP c'est un compilo 32 bits. Il te faut un compilo 16 bits.
    Et normalement un loader est d�velopp� enti�rement en assembleur, parce qu'il doit peser 512 octets...

  3. #3
    Membre �clair�
    Inscrit en
    Janvier 2005
    Messages
    84
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 84
    Par d�faut
    Merci,

    Mais c'est le boot qui doit faire 512o pas le Loader.

  4. #4
    Membre �clair�
    Inscrit en
    Janvier 2005
    Messages
    84
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 84
    Par d�faut
    Donc ce que tu suggeres c'est que mon Loader soit en ASM 16-bits passe en PMode et donne la main au Kernel en ASM/C++ 32-bits?

  5. #5
    Expert confirm�

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par d�faut
    le boot = le boot loader = le loader
    la configuration simple veut que le boot loader (512 octets) charge le noyau, commute en pmode et lui passe la main. Peut �tre que ton boot loader charge un autre loader qui va charger et initialiser le noyau (equivalent de lilo/grub, ou NTLDR). Faudrait pr�ciser dans ton cas.
    Mais � priori le code qui switche rmode / pmode devrait �tre �crit en asm, car il va contenir un m�lange d'asm 16 et 32 bits. Le noyau peut �tre en C 32 bits.
    http://inferno.cs.univ-paris8.fr/~am/tutorial/os/tutorial00.html

  6. #6
    Membre �clair�
    Inscrit en
    Janvier 2005
    Messages
    84
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 84
    Par d�faut
    En effet mon projet se decompose en trois modules
    Boot - Verifie la presence du Loader, le charge et lui passe la main.
    Loader - Verification simple du systeme passage en PMode et donne la main au Kernel
    Kernel - PMode 32-Bits (ASM/C++)

  7. #7
    Expert confirm�

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par d�faut
    Je dirais que boot et loader devraient �tre d�velopp�s en asm (il doit �tre possible de les fusionner d'apr�s ce que tu dis...).
    Le kernel utilise de l'asm depuis le code C/C++ ? C'est sp�cifique � chaque compilo, chez DJGPP si je me souviens bien c'est la syntaxe AT&T.
    http://www.delorie.com/djgpp/doc/brennan/brennan_att_inline_djgpp.html

  8. #8
    Membre �clair�
    Inscrit en
    Janvier 2005
    Messages
    84
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 84
    Par d�faut
    Le code du Loader est actuellement trop gros pour le fusionner avec le boot.
    Et le Kernel ne va pas utiliser d'ASM inline, mais de vrai fichier assembleur linker avec les sources C++.

  9. #9
    Expert confirm�

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par d�faut
    Ah ok. Mais... quelle est la question ?
    Le kernel doit �tre link� de mani�re sp�cifique, voir le lien sur boso kernel.

  10. #10
    Membre �clair�
    Inscrit en
    Janvier 2005
    Messages
    84
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 84
    Par d�faut
    Boso Kernel est fait pour Unix, pas pour Windows
    Le probleme que j'ai c'est:
    De linker un fichier ASM avec un fichier CPP, sachant que le point d'entr�e est dans le fichier ASM. De le charger et lui donner la main, et que cela fonctionne.

  11. #11
    mat.M
    Invit�(e)
    Par d�faut
    Citation Envoy� par KnightsOfTheRound
    Boso Kernel est fait pour Unix, pas pour Windows
    Le probleme que j'ai c'est:
    De linker un fichier ASM avec un fichier CPP, sachant que le point d'entr�e est dans le fichier ASM. De le charger et lui donner la main, et que cela fonctionne.
    Pourquoi prendre un fichier .cpp ???
    Au risque de dire des aneries ce n'est pas recommand� voire impossible parce que les conventions d'appels ne sont pas les m�mes qu'en C.
    A l'�dition des liens les noms de fonctions sont '�dulcor�s' ( 'mangled' en anglais ) en C++.
    Donc je recommande vivement de prendre un fichier source avec extension .C et non .cpp ( le pr�processeur et compilateur sont diff�rents selon les cas )
    Tout ce qui touche au syst�me bas-niveau c'est en C et non C++

  12. #12
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    euh, attention, j'ai lu plusieurs fois ici qu'un fichier .C (en majuscule) �tait un fichier C++...

    (mais ce doit �tre faux pour les compilateurs DOS o� tous les noms sont en majuscules...) :
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  13. #13
    Expert confirm�

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par d�faut
    Citation Envoy� par KnightsOfTheRound
    Boso Kernel est fait pour Unix, pas pour Windows
    boso kernel est un noyau, il n'est donc destin� � aucun OS. En revanche il est con�u pour �tre compil� avec GCC, et... c'est ce que tu utilises. Je l'avais compil� avec succ�s sous Windows avec MingW.
    Le probleme que j'ai c'est:
    De linker un fichier ASM avec un fichier CPP, sachant que le point d'entr�e est dans le fichier ASM. De le charger et lui donner la main, et que cela fonctionne.
    Faut d�clarer en C++ les fonctions asm cod�es,et ensuite c'est l'�diteur de liens qui fait tout. Ou alors tu fais de l'asm inline...
    Note que �a doit pas �tre link� n'importe comment. Tu dois sp�cifier une adresse de base, et sortir une image binaire brute. Ton loader doit �tre cod� pour charger le noyau � cette adresse de base. Tout est expliqu� dans le lien sur boso kernel.
    Pour ce qui est du C++, tout ce qui d�pend du runtime n'est pas utilisable : lib standard (fichiers, allocation new/delete,...), RTTI/dynamic_cast, exceptions, ...

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [mode svga][Voir asm et devc++]
    Par Gonath dans le forum Autres �diteurs
    R�ponses: 16
    Dernier message: 16/06/2003, 08h58
  2. Coloration syntaxique ASM dans un RichEdit
    Par Crick dans le forum Composants VCL
    R�ponses: 5
    Dernier message: 20/12/2002, 01h53
  3. Allocation dynamique de m�moire en asm
    Par narmataru dans le forum Assembleur
    R�ponses: 7
    Dernier message: 17/12/2002, 22h31
  4. Reboot en asm ou C++
    Par Juke dans le forum x86 16-bits
    R�ponses: 6
    Dernier message: 17/10/2002, 09h11
  5. [TP]code asm dans une procedure
    Par M.Dlb dans le forum Turbo Pascal
    R�ponses: 3
    Dernier message: 17/08/2002, 20h43

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