Extrait du cours programmation en assembleur
Instructions de transfert de donnée
Une opération MOV ne peut avoir deux opérandes qui sont toutes les deux des adresses mémoires. Autrement dit, il n’existe pas en IA32 de transfert direct de la mémoire vers la mémoire: il faut passer par un registre.
Un mot sur l’assembleur de GCC:
GAS
Le format de l’assembleur GNU ( noté GAS ) est très différent du format standard utilisée dans la documentation d’Intel ainsi que d’autres compilateurs (y compris Microsoft ) une différence majeure est dans l’inversion de l’ordre des opérandes source et destination. Ainsi que le suffixe % dont sont affublés les registres.
Dans GAS les registres EAX, EBX, etc se notent:
%EAX
%EBX etc
GNU Assembleur Versus Assembleur INTE
GAS documente ses propres différences avec les notations standard d’Intel.
La commande info as dans l’environnement
Linux permet d’obtenir la documentation sur GAS dans l’environnement Linux.
Une sous-section est réservée à la comparaison de GAS avec la notation standard d’Intel.
Dans la pratique: l’assembleur GAS est utilisé uniquement pour le code généré de gcc.
L’assembleur sous LINUX
Observation 1:
Il est interessant de connaître GAS pour s’inspire du code produit pour les programmes C et C++ Observation 2:
Cependant, il est plus intéressant de connaître le instructions de la documentation d’Intel qui s’imposent comme un standard.
………
Programmation en assembleur (244 KO) (Cours PDF)