TUTORIAL ASSEMBLEUR - chapitre 1b Quand faut-il utiliser l'asm ? ------------------------------ A mes debuts en tant que codeur, j'avais un esprit "100% asm". Je me suis rendu compte, aprŠs avoir d‚but‚ l'apprentissage du C, que programmer toutes les routines en asm ne pouvait mener qu'… une perte de temps sensible. Il est important de savoir o— et quand il faut utiliser l'asm afin d'avoir un programme le plus performant tout en conservant des temps de developpement les plus courts possibles. Il est conseill‚ d'utiliser l'asm lors : - routine d'affichage de polygones/triangles (en 3D) - routine de Vesa/copies ecran - routines "systŠme" (contr“le p‚riph‚riques, m‚moire, handlers..) - lors de la programmation d'une intro 4K (c'est presque ‚vident) :) - dŠs qu'un aspect "la taille du programme doit rester petite" entre en jeu Il est d‚conseill‚ de faire du 100% asm : - pour des routines qui ne demandent pas forc‚ment … ˆtre trait‚es en "realtime" (code de pr‚calculation, traitement de fichiers..) - pour coder toute une demo en asm ou des projets d'une certaine ampleur - dŠs que la taille du programme ne repr‚sente pas de problŠme - si on veut faire un programme portable (qu'on peut utiliser dans diff‚rents OS), il est mˆme conseill‚ d'utiliser l'asm avec parcimonie. - si l'on sait que l'on va souvent effectuer des changements dans ses routines (pour "tester") ASM against C ------------- Mais attention. La mont‚e en puissance des compilateurs C a diminu‚ la diff‚rence de vitesse entre le code asm fait par le programmeur et le mˆme code en C que le compilateur va optimiser. Des compilateurs C tels que Watcom (commercial) et Djgpp (gratuit) sont d‚sormais capables de surpasser les mˆmes routines ‚crites en asm. Cela s'explique par le fait que les compilateurs prennent en consid‚ration les caract‚ristiques des processeurs et optimisent de maniŠre trŠs pouss‚e en cherchant les meilleurs combinaisons pour avoir un gain de vitesse maximum. J'ai entendu dire que Djgpp effectue des "passes", il compile le programme une 1ere fois, ensuite, il re‚xamine le code en optimisant … chaque fois un peu plus pour finalement aboutir … un code extrˆmement bien ficell‚. Watcom travaille probablement de la mˆme facon. D'aprŠs mes propres exp‚riences, les compilateurs C sont trŠs … l'aise sur les programmes complexes o— interviennent de nombreuses boucles. C'est pourquoi, je conseille … tous ceux qui veulent se lancer dans la programmation d'apprendre … la fois le C et l'asm et d'utiliser les 2 dans leur programme. Les compilateurs C sont moins performants sur le plan des optimisations pour la taille du code et c'est … ce moment l… que l'asm devient utile. On peut aussi d‚sassembler le code cr‚e par le compilo C et regarder s'il y'a lieu d'optimiser ses routines. Je ne parlerai pas des compilateurs Pascal et Basic, ceux ci n'arrivent pas … assembler de facon aussi savante que les compilos C. A moins d'ˆtre un trŠs bon codeur en asm, il est difficile d'optimiser la vitesse des routines compil‚es en C. Il y'a des exceptions … cette rŠgle, tout d‚pend du compilateur et des options choisies. J'ai eu de nombreux ‚chos de personnes qui avaient convertis leur routine du C vers l'asm en ayant l'espoir d'un gain de vitesse consid‚rable, cette exp‚rience m'est aussi arriv‚. Nous nous sommes retrouv‚es avec du code 25% plus lent. Un codeur de mon groupe a converti un effet ‚crit en C, vers de l'asm, il a obtenu un code plus rapide que ce qu'avait compil‚ Djgpp. Il faut donc tester pour savoir quelle est la meilleure solution. Optimiser les algorithmes ------------------------- La chose qui me semble la plus importante en matiŠre de programmation est l'optimisation des algorithmes. Un algorithme m‚diocre aura beau ˆtre optimis‚ avec la plus grande attention, le r‚sultat final n'arrivera pas … la hauteur d'un code bien structur‚ et performant de part les m‚thodes employ‚es pour parvenir au r‚sultat escompt‚. Un bon algorithme n'est pas synonyme de "petite taille". Le code le plus court n'est pas forc‚ment le meilleur mˆme si le nombre de lignes de la routine est inf‚rieur … celui d'une routine plus rapide. Prenons l'exemple de la 3D (je simplifie l'exemple). En 3D, on fait des rotations d'objets et on affiche les triangles ou polygones qui constituent les objets. 1. Mauvais algorithme - je fais la rotation de tous les objets (je fais tous les calculs de rotation, translations, homotheties...) - j'affiche tous les polygones (en contr“lant si ceux-ci sont sur l'‚cran) 2. Algorithme plus performant (mais pas optimal ;) - je calcule quels objets seront totalement ou en partie visible … l'‚cran - je ne fais que les calculs pour ces objets - j'affiche seulement les polygones de ces objets L'algorithme 1 est plus court que l'algorithme 2 car ce dernier n‚cessite du code suppl‚mentaire, pour savoir si l'objet est sur l'‚cran. L'algorithme 2 demeure plus performant car le temps de calcul pour savoir si un objet sera sur l'‚cran ou pas, sera, dans la plupart des cas, inf‚rieur au temps pris pour calculer la position d'un objet qui est en d‚finitive invisible. ### Chapitre 1b - dake / c a l o d o x ### ### http://www.space.ch/scene/calodox ###