Programmation Assembleur/x86/Copie entre registres et mémoire

Un livre de Wikilivres.
Sauter à la navigation Sauter à la recherche
Programmation Assembleur x86

Modifier ce modèle


Move[modifier | modifier le wikicode]

L'instruction la plus courante est MOV (abréviation de l'anglais move : déplacer) qui permet de transférer le contenu d'un emplacement mémoire vers un registre et inversement, ou entre deux registres de même taille.

Le nombre de bits transféré est défini par la taille du registre source ou cible du transfert. Les assembleurs peuvent employer des suffixes pour le nom de l'instruction indiquant ce nombre d'octets :

  • movb (Move Byte) : 8 bits
  • movw (Move Word) : 16 bits
  • movl (Move Long) : 32 bits

Exemple :

 .data
 
 valeur:
         .long   2
 
 .text
         .global _start
 
 _start:
         movl    $6, %eax
         # %eax = 6
 
         movw    %ax, valeur
         # valeur = 6
 
         movl    $0, %ebx
         # %ebx = 0
 
         movb    %al, %bl
         # %ebx = 6
 
         movl    valeur, %ebx
         # %ebx = 6
 
         movl    $valeur, %esi
         # %esi = l’address de valeur
 
         xorl    %ebx, %ebx
         # %ebx = 0
 
         movw    valeur(, %ebx, 1), %bx
         # %ebx = 6
 
 # Linux sys_exit
         mov     $1, %eax
         xorl    %ebx, %ebx
         int     $0x80