IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo
Sommaire > F.A.Q. Générale
        Qu'est ce que l'Assembleur ?
        Pourquoi programmer en Assembleur ?
        Que programmer en Assembleur ?
        Comment intégrer de l'assembleur dans un langage évolué ?
        Comment connaître le temps d'exécution de mes fonctions ?
        Comment échanger la valeur de deux registres sans utiliser d'espace d'échange ?
        2.1. Technologies (3)
                Quelle est la différence entre un microprocesseur et un micro-contrôleur ?
                Quelle est la différence entre le 'RISC' et le 'CISC' ?
                Quelle est la différence entre une architecture de 'Von Neumann' et de 'Harvard' ?
        2.2. Terminologie (6)
                Comment est organisée la mémoire ?
                Qu'est ce qu'une Interruption ?
                Qu'est-ce qu'une adresse ?
                Qu'est-ce qu'un 'segment' ?
                Qu'est ce qu'un 'offset' ?
                Qu'est ce qu'un 'registre' ?
        2.3. Compilation (4)
                Pourquoi mon compilateur ne démarre pas ?
                Quels sont les compilateurs pour l'Assembleur ?
                Quels sont les linkers pour l'assembleur ?
                Quels sont les Environnements de Développement (EDI) pour l'assembleur ?
        2.4. Désassemblage et reverse engeenering (1)
                Désassemblage et reverse engineering... Qu'est-ce que c'est ?
        2.5. Emulation (2)
                Qu'est-ce qu'un émulateur ?
                Quand utiliser un émulateur ?

rechercher
precedent    sommaire    suivant    telechargermiroir


Qu'est ce que l'Assembleur ?
auteur : Romain Tartière (Smortex)
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.


Pourquoi programmer en Assembleur ?
auteur : 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...


Que programmer en Assembleur ?
auteur : 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).


Comment intégrer de l'assembleur dans un langage évolué ?
auteur : 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) :

asm
{ code en assembleur }
end;
En C :

asm {
/* Code en assembleur */
}

Comment connaître le temps d'exécution de mes fonctions ?
auteur : 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 :

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.


Comment échanger la valeur de deux registres sans utiliser d'espace d'échange ?
auteur : 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 :

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 :

xor ax,bx
xor bx,ax
xor ax,bx

rechercher
precedent    sommaire    suivant    telechargermiroir

Consultez les autres F.A.Q's


Valid XHTML 1.1!Valid CSS!

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 © 2007 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni 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.