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

Langages de programmation Discussion :

Assembleur ou C ?


Sujet :

Langages de programmation

  1. #1
    Membre à l'essai Avatar de liquid_stone
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 18
    Points : 10
    Points
    10
    Par défaut Assembleur ou C ?
    Bonjour,

    Je me suis posé une question et ne pouvant trouver la réponse même en cherchant un peu, je la pose à ceux qui connaissent les 2 langages :
    Quels sont les critères qui permettent de choisir l'un ou l'autre quand on veut faire de la prog systeme ?

    Merci de votre participation

  2. #2
    Membre à l'essai
    Inscrit en
    Septembre 2004
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 18
    Points : 18
    Points
    18
    Par défaut
    AMHO, la programmation système en général ne nécessite pas de descendre jusqu'à programmer en assembleur : les optimisations opérées par le compilateur C sur le code machine pourraient s'avérer suffisamment fineaudes pour ne pas justifier de passer en assembleur.

    Tu seras certainement plus productif à rédiger tes algos en C, plutôt qu'en assembleur, non ?

  3. #3
    Membre à l'essai Avatar de liquid_stone
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 18
    Points : 10
    Points
    10
    Par défaut Assembleur ou C ?
    l'assembleur ne sert plus à rien ou quoi ?

  4. #4
    Membre à l'essai
    Inscrit en
    Septembre 2004
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 18
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par liquid_stone
    l'assembleur ne sert plus à rien ou quoi ?
    Si, bien sûr que cela sert encore! Personnellement, je ne l'utiliserai pas forcément pour de la programmation système. Plus pour des systèmes embarqués, pour de la programmation très bas niveau, proche du hardware...

    Et puis, pour moi, il y a un côté ludique à programmer en assembleur.

  5. #5
    HRS
    HRS est déconnecté
    Membre confirmé
    Avatar de HRS
    Inscrit en
    Mars 2002
    Messages
    678
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 678
    Points : 638
    Points
    638
    Par défaut
    seule la nécessité peut vous faire préférer l'assembleur

    -soit votre système ne possède pas de compilateur C

    -soit vos algorithmes sont impossibles à être programmés en C

    -soit les performances de votre généré C sont insuffisantes par rapport
    à vos besoins

  6. #6
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Citation Envoyé par HRS
    -soit vos algorithmes sont impossibles à être programmés en C
    Je ne connais pas l'assembleur, mais tu as des exemples ?

  7. #7
    Membre à l'essai
    Inscrit en
    Septembre 2004
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 18
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par Trap D
    Citation Envoyé par HRS
    -soit vos algorithmes sont impossibles à être programmés en C
    Je ne connais pas l'assembleur, mais tu as des exemples ?
    Je pense que HRS voulait plutôt parler d'implémentation particulières, telles que celles nécessitant de jouer avec du hardware.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Points : 121
    Points
    121
    Par défaut
    L'assembleur est assez indispensable si tu veux travailler pres du materiel...

    C'est sur que tu ne peux pas aller plus vite qu'avec de l'ASM (à condition de savoir programmer!! ;) ) mais bon ca ne justifie pas son emploi dans de la programmation systeme a mon avis

    Le C est largement suffisant est a des possibilités tellement étendues que tu peux presque tout faire avec

  9. #9
    Membre à l'essai
    Inscrit en
    Septembre 2004
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 18
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par Neo82
    C'est sur que tu ne peux pas aller plus vite qu'avec de l'ASM (à condition de savoir programmer!! )
    Il faut surtout savoir bien optimiser... Et mieux qu'un compilateur C. Sinon, autant programmer en C, non?

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Points : 121
    Points
    121
    Par défaut
    C'est sur qu'en C tu n'as pas trop les memes problemes d'optimisation, puisque les fonctions basiques sont pour la grande majorité deja toutes faites....
    Il est aussi beaucoup moins facile de faire une grosse connerie en C qu'en ASM, mais bon je pense que dans les deux cas il faut bien savoir programmer (pas necesairement dans un langage en particulier mais savoir programmer en general), surtout pour de la programmation systeme, sur laquelle beacoup de choses reposent par la suite

  11. #11
    Membre à l'essai
    Inscrit en
    Septembre 2004
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 18
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par Neo82
    Il est aussi beaucoup moins facile de faire une grosse connerie en C qu'en ASM, mais bon je pense que dans les deux cas il faut bien savoir programmer (pas necesairement dans un langage en particulier mais savoir programmer en general), surtout pour de la programmation systeme, sur laquelle beacoup de choses reposent par la suite
    C'est sûr. Et en amont de la programmation système, il faut savoir modéliser intelligemment, justement parce que beaucoup de choses s'appuieront dessus.

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Points : 121
    Points
    121
    Par défaut
    Si tu veux partir sur d'exellentes bases, vaut mieux l'assembleur quand meme, ca evitera d'avoir à réécrire si on trouve que c pas assez rapide

    Si tu veux des bases plus sures, choisis le C

  13. #13
    mat.M
    Invité(e)
    Par défaut
    Quels sont les critères qui permettent de choisir l'un ou l'autre quand on veut faire de la prog systeme ?
    ça dépend : parfois on est obligé de passer par de la programmation assembleur pure.
    Mais il y a des compilateurs C qui optimisent sacrément bien le code généré.

    Donc on peut mixer C et asm

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Points : 121
    Points
    121
    Par défaut
    tiens d'ailleurs comment on fait pour inclure du code assembleur avec gcc??

    On peut le faire directement dans le code, ou bien il faut definir des fonctions integralement en ASM, et les appeler ensuite en C?

  15. #15
    mat.M
    Invité(e)
    Par défaut
    Citation Envoyé par Neo82
    tiens d'ailleurs comment on fait pour inclure du code assembleur avec gcc??

    On peut le faire directement dans le code, ou bien il faut definir des fonctions integralement en ASM, et les appeler ensuite en C?
    euuhh tu me poses une question je sais pas trop ; va voir dans le forum Autres compilos C++ , je suis plutôt spécialisé Borland C++ Builder et Ms Vc++
    Peut-ètre avec la directive _asm{} ?
    Sinon il suffit d'inclure un fichier .asm au projet et de faire une déclaration des fonctions en asm du genre void _cdecl mafonctionenassembleur()

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Points : 121
    Points
    121
    Par défaut
    Ok merci je vais essayer de chercher

  17. #17
    Membre actif
    Profil pro
    Inscrit en
    Août 2003
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 247
    Points : 276
    Points
    276
    Par défaut
    Concrètement, on ne va pas bien loin avec l'ASM inline. Pour inclure des fonction ASM dans un projet C, il faut les écrire dans des fichiers séparés puis les compiler avec l'assembleur de ton choix [NASM]. Tu obtient des fichiers .OBJ (sous Windows, .O sous Linux, à vérifier). Ces fichiers sont les même que les fichiers résultants de la compilation d'un code C. Il faut ensuite dire au linker d'inclure les .OBJ des fichier ASM.


    Sinon, pour programmer en ASM, il faut connaitre les conventions d'appel (Look at that). Pour pouvoir appeler une fonction ASM dans un code C, il faut que celle ci ait été nommée avec le nom décoré selon la convention d'appel. Pour appeler une fonction ASM à partir d'un code C++, il faut déclarer la fonction comme extern "C", le mode de décoration des noms n'étant pas standard.


    Comme personne n'a rien compris, voici un exemple ^^.

    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
    
    @@@@ func.asm
    
    ; On utilise stdcall.
    ; "@8" car 8 octets d'arguments.
    global _func@8
    _func@8:
    
    ; code...
    
    ret 8
    
    
    @@@@ func.h
    
    #ifdef __cplusplus
    extern "C" {
    #endif
    
    int __stdcall func ( int a, int b );
    
    #ifdef _cplusplus
    }
    #endif

  18. #18
    Membre habitué
    Inscrit en
    Novembre 2002
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 120
    Points : 125
    Points
    125
    Par défaut
    Avec GCC c'est assez compliqué d'insérer du code assembleur: ça ressemble pas du tout à de la syntaxe Intel (ça permet de meilleures optimisations apparament), et j'ai jamais vu de tutoriels assez poussés pour faire de l'assembleur correcte avec GCC.

    Je te proposes donc une autre solution hybride:
    - ton code C est compilé par GCC pour donner de l'assembleur AT&T, qui est ensuite compilé par GAS en .o. C'est le comportement normal de GCC.
    - ton code assembleur est compilé par NASM configuré pour donner un .o.
    - Tu lies ensuite le tout avec LD (pour faire un système d'exploitation il faut spécifier les options de linkages; c'est mieux d'utiliser directement ça plutôt que GCC).

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Points : 121
    Points
    121
    Par défaut
    Ok merci pour votre aide

  20. #20
    Membre confirmé Avatar de heid
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mai 2002
    Messages : 388
    Points : 597
    Points
    597
    Par défaut
    A moins de faire un driver pour un périphérique ou d'utiliser ton programme sur un 486 je ne vois pas trop l'intérêt de faire de l'assembleur. Tu développeras beaucoup plus vitte en c.

Discussions similaires

  1. Tutoriels, F.A.Q : la rubrique Assembleur de Developpez.com
    Par Alcatîz dans le forum Assembleur
    Réponses: 3
    Dernier message: 07/06/2007, 20h14
  2. ecrire son OS (assembleur ??)
    Par Anonymous dans le forum Programmation d'OS
    Réponses: 9
    Dernier message: 25/11/2002, 20h25
  3. Assembleur sous Windows et sous Linux
    Par Bibouda dans le forum x86 32-bits / 64-bits
    Réponses: 3
    Dernier message: 28/10/2002, 08h55
  4. Random en Assembleur
    Par funx dans le forum Assembleur
    Réponses: 9
    Dernier message: 02/09/2002, 18h05
  5. Quel désassembleur/assembleur pour un exe Windows ?
    Par Anonymous dans le forum x86 32-bits / 64-bits
    Réponses: 6
    Dernier message: 17/04/2002, 11h59

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