Copy Link
Add to Bookmark
Report

Tutorial Assembleur - Chapitre 01b

eZine's profile picture
Published in 
Tutorial Assembleur
 · 11 Oct 2020

  

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 ###

← previous
next →
loading
sending ...
New to Neperos ? Sign Up for free
download Neperos App from Google Play
install Neperos as PWA

Let's discover also

Recent Articles

Recent Comments

Neperos cookies
This website uses cookies to store your preferences and improve the service. Cookies authorization will allow me and / or my partners to process personal data such as browsing behaviour.

By pressing OK you agree to the Terms of Service and acknowledge the Privacy Policy

By pressing REJECT you will be able to continue to use Neperos (like read articles or write comments) but some important cookies will not be set. This may affect certain features and functions of the platform.
OK
REJECT