Xanetiz > Programmation > L'assembleur
Pour beaucoup de personnes, assembleur rime avec prise de tête inutile. Et oui, il est rare de nos jours de devoir utiliser ce langage de bas niveau. On préfère utiliser des langages de haut niveau tels que le C qui sont beaucoup plus faciles.
Attention, quand on dit bas niveau, ça ne veut absolument pas dire que c'est plus simple. Cela signifie que c'est proche du langage utilisé par votre ordinateur. Plus c'est bas, plus c'est compliqué.
On peut dire que l'assembleur n'est qu'une suite d'instructions très simples et très limités. Il n'y a pas les techniques comme les boucles ou les conditions directement utilisables. Il faut donc les décomposer.
Ainsi, programmer en assembleur n'est finalement, si on savait déjà programmer avant, que décomposer les structures complexes en structures simples. Cela donne donc un code beaucoup plus grand. Une ligne de code a souvent un équivalent multiplié par 10 en assembleur
Avec le langage C, vous l'apprenez et vous serez capable de programmer sur n'importe quelle machine grâce à des compilateurs adéquats. Cependant, avec l'assembleur c'est différent. Chaque processeur à des jeux d'instructions différents. En gros, ce ne sont pas les mêmes façons de programmer.
Le programmeur doit donc s'adapter à chaque fois. Si on résume :
Avec ce langage, vous aurez un programme bien plus performant qu'avec d'autres langages de plus haut niveau. Pour des petits programmes ça n'a aucune utilité, mais pour des jeux qui nécessitent beaucoup de rapidité ou les pilotes de périphériques par exemple, c'est parfois nécessaire.
Je pense que ce langage n'est pas forcément plus complexe que les autres, il est seulement plus long à utiliser et le fait de tout mettre en bloc le rend parfois illisible. De plus, certaines notions comme les piles sont difficiles à comprendre. Mais si vous vous intéressez au fonctionnement du processeur au niveau des registres et des instructions, c'est vraiment intéressant.
Une petite structure avec une condition if en C donnerait :
if(a <= b)
{
// instruction1
}
// instruction2
Si a est plus petit ou égal à b, on fait l'instruction 1. Dans les deux cas on fait l'instruction 2.
Pour un processeur MIPS, on utiliserait l'instruction bgt qui calcule si a > b (car il faut inverser le sens du test). On utilise des labels pour se diriger. Cela donnerait :
bqt $r1,$r2,fin
instruction1;
fin:instruction2;
En gros, on stocke les valeurs de a et b dans des petites mémoires situées dans le processeur qu'on appelle des registres. Ce test donne : si la valeur contenue dans le registre r1 est plus grande que celle contenue dans le registre r2, sautez au label fin et n'exécutez pas l'instruction 1. Sinon, c'est que c'est inférieur ou égal (le test du if pour le C), on fait l'instruction 1 puis l'instruction 2.
Notez que pour ce cas, la différence de lignes de code n'est pas vraiment perceptible (c'est pour ça que je l'ai choisi ). Normalement, il faut initialiser les valeurs en C, et donc les charger dans les registres en assembleur ce qui rajouterait déjà quelques lignes.
Titre | Vu | Date | |
---|---|---|---|
Compiler avec GCC sur Linux | 14 468 | 16/02/10 | |
Le XML | 7 344 | 13/02/10 | |
L'essentiel du langage C | 17 768 | 14/03/10 | |
L'essentiel du langage PHP | 12 469 | 14/03/10 | |
Bloquer le clic droit sur un site web | 9 294 | 23/03/10 |
Nombre d'inscrits : 261
Dernier membre : MichaelDaync
Visiteurs en ligne : 5
Membres en ligne : Aucun
Copyright © 2022 Xanetiz.com - Tous droits réservés