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

Assembleur Discussion :

Assembleur et C


Sujet :

Assembleur

  1. #1
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 491
    Points : 172
    Points
    172
    Par défaut Assembleur et C
    Hello
    Ma question va peut être vous paraityre naive, ne vous en étonnez pas donc
    Je code en C, je fais du calcul numérique, et l'optimisation joue donc un role important pour avoir des simulations les moins longues possible.

    On m'a dit que l'assembleur était plus rapide que le C... Et que dans la mesure du possible coder en assembleur serait plus avantageux.
    En fait quelque chose m'échappe dans cette affirmation et je souhaiterai avoir vos lumières: le code C à la compilation est traduit en binaire. L'assembleur c'est pareil je suppose. A l'arrivée, c'est quoi la différence entre un programme écrit en C et un programme écrit en assembleur?

    De plus, j'ai cru comprendre que les compilateurs C (GCC par exemple) réalisent déja des optimisations de code..

    Bref, je voulais savoir quel interet peut représenter le codage en assembleur à la place du C?

    Merci d'avance

  2. #2
    Membre du Club
    Inscrit en
    Février 2007
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 45
    Points : 44
    Points
    44
    Par défaut
    avec C( ou autre langage evolué) on on tjs besoin d'un complilateur ou un traducteur alors que l'assembleur il est directement ecrit en code machine ( aprés la conversion du fichier texte qui est ecrit en ASCII);
    donc nous pouvons gagner toute une étape ( tradu. ou compilation),

    dans les cas les plus sensibles on peut se rabattre sur l'assembleur. Et que les compilateurs modernes sont capables d'optimiser le code en fonction des besoins (rapidité, compacité...)

    Donc, je maintiens que le recours à l'assembleur doit rester exceptionnel : pas question de développer l'ensemble de l'application dans ce langage

  3. #3
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Bonjour,

    Citation Envoyé par vinzzzz
    le code C à la compilation est traduit en binaire. L'assembleur c'est pareil je suppose. A l'arrivée, c'est quoi la différence entre un programme écrit en C et un programme écrit en assembleur?
    Le C, comme l'assembleur, sont des langages natifs, c'est-à-dire que l'étape de compilation produit du code directement exécutable par le processeur (a contrario des langages interprétés).

    La seule différence est qu'en assembleur, on retrouve directement ce qu'on a écrit sous forme binaire, alors que pour le C (et pour schématiser) le compilateur devra "traduire" le C en micro-opérations conformes au jeu d'instruction du processeur cible.

    De plus, j'ai cru comprendre que les compilateurs C (GCC par exemple) réalisent déja des optimisations de code..
    Oui (encore faut-il préciser le niveau d'optimisation) les compilateurs qui tiennent le devant du pavé (GCC, Microsoft Compiler, Intel Compiler, etc.) réalise des optimisations vraiment très performantes pour certains.

    Bref, je voulais savoir quel interet peut représenter le codage en assembleur à la place du C?
    Pour les processeurs x86 (je ne voudrais pas m'avancer pour les autres) le gain à vouloir optimiser en assembleur sur les instructions de l'ALU est quasi-impossible. Il y a tellement de règles à connaître que seul un processus automatisé comme un compilateur est à même de faire cela correctement dans 99% des cas.

    Pour nuancer ce propos, il reste néanmoins des cas spécifiques sur de petites portions de code ou un compilateur peut ne pas choisir la bonne séquence d'instruction.

    C'est encore plus vrai sur le FPU ou sur les jeux d'instruction spécialisés (MMX, SSE, 3DNow!) ou les compilateurs sont rarement au point de ce coté (d'ailleurs ils n'utilisent quasiment jamais ces instructions très optimisées). C'est généralement là qu'un programmeur assembleur à toute sa place.

    Pour ce qui est de l'optimisation sur l'ALU (les calculs et instructions de bases) mieux vaut optimiser son code haut niveau (en C) à fond plutôt que d'aller chercher la petite bête en assembleur dans un premier temps.
    Une fois que l'optimisation de l'algorithme en haut niveau est certaine et que l'on du mal à gagner du temps (ou de la taille de code), on peut alors aller voir le code produit par le compilateur pour essayer de tirer encore un meilleur partie sur la région critique (après profiling de code).

    A ce propos, voir les manuels d'optimisation d'Agner Fog qui sont de véritables bijoux et qui font comprendre toute la difficulté d'optimiser correctement du code assembleur (notamment le volume 3) : http://www.agner.org/optimize/

  4. #4
    ALT
    ALT est déconnecté
    Membre émérite
    Avatar de ALT
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2002
    Messages
    1 234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 234
    Points : 2 338
    Points
    2 338
    Par défaut
    Il faut savoir que les langages de haut niveau font beaucoup plus d'opérations que nécessaire, afin d'assurer le bon fonctionnement du code en toutes circonstances.
    Exemple : si on programme (proprement) l'affichage d'une chaîne en assembleur, on ira plus vite qu'avec l'instruction printf du C ou writeln du Pascal, par exemple.
    C'est à tel point que, il n'y a pas si longtemps, un programme vide (c'est à dire qui ne faisait absolument rien) occupait déjà 6 ko...
    Exemples de programmes vides :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    program machin;
    begin
    end.
    L'origine de ces kilo-octets était vraisemblablement l'appel automatique de la bibliothèque standard. En plus de la sauvegarde du contexte d'exécution & quelques autres bricoles.
    De nos jours, cet appel n'est plus automatique, & quand on n'a besoin que d'une fonction de ladite biblio., le compilateur n'inclut que le code de cette fonction.
    Néanmoins, je n'ai pas vu la taille des exécutables réduire. Au contraire.
    Les processeurs étant désormais très rapides, ce n'est pas grave.

    L'assembleur n'intervient donc que dans des cas très précis, quand il faut absolument gagner du temps ou de la place en RAM. Car on s'abstient de faire des contrôles inutiles, on va droit au but. C'est pour ça qu'il est plus rapide à l'exécution.
    « Un peuple qui est prêt à sacrifier un peu de liberté contre un peu de sécurité, ne mérite ni l'une, ni l'autre, et finira par perdre les deux. »
    Attribué indistinctement à :
    Thomas Jefferson
    Benjamin Franklin
    Albert Einstein !

  5. #5
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 491
    Points : 172
    Points
    172
    Par défaut
    Donc je comprends que pour ma part c'est pas vraiment la peine d'y penser... Car d'une part je suis débutant en assembleur, donc aucune expérience, donc je suppose que j'aurai bien du mal a optimiser du code assembleur mieux que ne le font les compilateurs déja existants...

    Finalement, à moins d'être expert en assembleur, ca ne présente pas vraiment d'interêt de coder avec ce langage, à la place du C j'entends.

  6. #6
    Futur Membre du Club
    Inscrit en
    Mars 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    salut tous j`ai un probleme un peut bizarre pour certain ,plutot pour tous. je travail avec tasm .mais j`ai besoin que le "output "fait apparaitre des mots en russe .que doit-je faire?

  7. #7
    ALT
    ALT est déconnecté
    Membre émérite
    Avatar de ALT
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2002
    Messages
    1 234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 234
    Points : 2 338
    Points
    2 338
    Par défaut
    vinzzzz : Optimiser est facile en assembleur, si tu t'en tiens aux bases, puisque tu demanderas à ton programme de faire exactement ce que tu veux, sans ajouter des instructions inutiles dans ton cas, ce que ne peut pas toujours faire un compilateur.
    Si tu veux aller plus loin dans l'optimisation, il te faut choisir en outre des instructions rapides, donc ça suppose parfois de changer d'algorithme pour tenir compte de ces instructions. Là, c'est plus complexe.

    ezzaim25 : Si je ne m'abuse, tasm doit utiliser les pages de code du DOS (850 pour l'Europe occidentale, par exemple).
    Si tu changes de page de code, tu dois pouvoir afficher des caractères cyrilliques.
    « Un peuple qui est prêt à sacrifier un peu de liberté contre un peu de sécurité, ne mérite ni l'une, ni l'autre, et finira par perdre les deux. »
    Attribué indistinctement à :
    Thomas Jefferson
    Benjamin Franklin
    Albert Einstein !

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, 19h14
  2. ecrire son OS (assembleur ??)
    Par Anonymous dans le forum Programmation d'OS
    Réponses: 9
    Dernier message: 25/11/2002, 19h25
  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, 07h55
  4. Random en Assembleur
    Par funx dans le forum Assembleur
    Réponses: 9
    Dernier message: 02/09/2002, 17h05
  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, 10h59

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