Copy Link
Add to Bookmark
Report
Tutorial Assembleur - Chapitre 01b
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, aprs avoir dbut 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 "systme" (contrle priphriques, mmoire, handlers..)
- lors de la programmation d'une intro 4K (c'est presque vident) :)
- ds qu'un aspect "la taille du programme doit rester petite" entre en jeu
Il est dconseill de faire du 100% asm :
- pour des routines qui ne demandent pas forcment
tre traites
en "realtime" (code de prcalculation, traitement de fichiers..)
- pour coder toute une demo en asm ou des projets d'une certaine ampleur
- ds que la taille du programme ne reprsente pas de problme
- si on veut faire un programme portable (qu'on peut utiliser dans diffrents
OS), il est mme 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 monte en puissance des compilateurs C a diminu
la diffrence de vitesse entre le code asm fait par le programmeur
et le mme code en C que le compilateur va optimiser.
Des compilateurs C tels que Watcom (commercial) et Djgpp (gratuit) sont
dsormais capables de surpasser les mmes routines crites en asm.
Cela s'explique par le fait que les compilateurs prennent en considration
les caractristiques des processeurs et optimisent de manire trs pousse
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 rexamine le code en optimisant
chaque fois un peu plus pour finalement aboutir
un code extrmement
bien ficell. Watcom travaille probablement de la mme facon. D'aprs
mes propres expriences, les compilateurs C sont trs
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 dsassembler le code cre
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 trs bon codeur en asm, il est difficile d'optimiser
la vitesse des routines compiles en C. Il y'a des exceptions
cette
rgle, tout dpend 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 considrable,
cette exprience m'est aussi arriv. Nous nous sommes retrouves 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 matire de programmation
est l'optimisation des algorithmes. Un algorithme mdiocre aura beau
tre optimis avec la plus grande attention, le rsultat final n'arrivera
pas
la hauteur d'un code bien structur et performant de part les mthodes
employes pour parvenir au rsultat escompt.
Un bon algorithme n'est pas synonyme de "petite taille". Le code le plus
court n'est pas forcment le meilleur mme si le nombre de lignes de la
routine est infrieur
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 contrlant 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 ncessite
du code supplmentaire, 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, infrieur au temps
pris pour calculer la position d'un objet qui est en dfinitive invisible.
### Chapitre 1b - dake / c a l o d o x ###
### http://www.space.ch/scene/calodox ###