FAQ AssembleurConsultez toutes les FAQ

Nombre d'auteurs : 8, nombre de questions : 50, dernière mise à jour : 8 juillet 2013 

 
OuvrirSommaireF.A.Q. Générale

L'Assembleur est le langage de programmation de plus bas niveau. Cela signifie qu'il est très proche du matériel. A chaque instruction correspond un code machine, qui peut être compris par le microprocesseur. Le code assembleur est donc la version lisible du code machine.

Créé le 8 novembre 2004  par Romain Tartière (Smortex)

S'il est de nos jours impensable de programmer entièrement une application en Assembleur (sauf à des fins d'apprentissage bien sûr), nombreuses situations font que l'on doit avoir recours à ce langage. C'est par exemple le cas lorsque la vitesse est un facteur critique, et que la moindre microseconde est précieuse, ou encore pour écrire un gestionnaire de démarrage (Boot-Loader), etc...

Mis à jour le 9 novembre 2004  par Romain Tartière (Smortex)

Tout ce qui doit être optimisé au niveau de la taille (si on a que 523 octets de mémoire par exemple, cas de certains microcontrôleurs), de la vitesse d'exécution, ou ne peut pas être fait avec autre chose que de l'Assembleur (par exemple un driver de disque dur).

Mis à jour le 9 novembre 2004  par Romain Tartière (Smortex)

La plupart des langages évolués permettent d'utiliser l'Assembleur dans les programmes. La syntaxe à utiliser est dépendante du langage et du compilateur utilisé.

Par exemple, sous Delphi (et plus généralement, en Pascal) :

 
Sélectionnez

asm
{ code en assembleur }
end;

En C :

 
Sélectionnez

asm {
/* Code en assembleur */
}
Mis à jour le 9 novembre 2004  par Romain Tartière (Smortex)

Il y a deux méthodes. La première, qui fonctionne dans tous les cas, est de compter le nombre de cycle d'horloge nécessaire à l'exécution de chaque instruction (Dans la documentation du microprocesseur / microcontrôleur). Une fois que l'on connaît le nombre de cycles d'horloge nécessaires, il suffit de le multiplier par la période d'un cycle d'horloge interne (Qui est généralement différente de la période de l'horloge du composant).
Par exemple, sur un 68HC11 (Un microcontrôleur de Motorola), on a :

 
Sélectionnez

LDAA #$FF ; 2 cycles
STAA PORTB ; 2 cycles

2+2 = 4
Quartz à 20 MHz, fréquence interne : 20 / 4 = 5MHz
Période : 1/(5*10^6) = 500*10^-9 = 500ns
4 * 500 = 2µs

La seconde méthode n'est utilisable que si elle est supportée par votre micro. Elle consiste à utiliser les instructions spécifiques à votre micro permettant de mesurer les durées d'exécution.

Mis à jour le 9 novembre 2004  par Romain Tartière (Smortex)

Il faut utiliser la fonction logique XOR. En effet, Si on a deux registres A et B dont on souhaite échanger les données, et que l'on fait :

 
Sélectionnez

A <- A xor B
B <- B xor A
A <- A xor B

On remarque que A contient la donnée initiale de B et B celle de A (Bien sûr, ça n'est pas utilse si le micro possède une instruction pour le faire... Mais sur un petit micro RISC, si on est à un octet près, c'est utile).
Par exemple, sur x86, pour échanger ax et bx :

 
Sélectionnez

xor ax,bx
xor bx,ax
xor ax,bx
Mis à jour le 9 novembre 2004  par Romain Tartière (Smortex)
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2004-2013 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.