Introduction à la programmation en assembleur (processeurs 64 bits de la famille 80x86)
4.3 Mode d'adressage « indirect indexé »

Il est possible, en utilisant ce mode d'adressage, d'effectuer un déplacement relatif par rapport au pointeur. En reprenant l'exemple de la section 4.2, on pourrait copier directement le 2ème élément du tableau dans le registre bx avec l'instruction :

movw 2(%rsi), %bx

Avec ce mode d'adressage, le processeur récupère l'adresse contenue dans rsi, ajoute à cette adresse la constante qui précède la parenthèse ouvrante et copie le contenu de l'adresse ainsi obtenue dans le registre bx. Il est important de noter que :

  • le contenu de rsi reste inchangé. si %rsi contient la valeur $0x0102030405060708 avant l'exécution de « movw 2(%rsi), %bx », il contient toujours $0x0102030405060708 après l'exécution de cette même instruction et non $0x010203040506070A bien que ce soit les 16 bits trouvés à cet emplacement qui sont copiés dans %bx.

  • le déplacement relatif peut être positif ou négatif mais il ne peut être qu'une constante. Par exemple, si rsi contient l'adresse du dernier élément du tableau, alors -2(%rsi) désignera l'avant dernier élément de 16 bits du tableau. Par contre, le mode d'adressage %bx(%rsi) n'est pas autorisé puisque %bx n'est pas une constante.

Nous imaginons facilement comment ce mode d'adressage va se révéler utile pour traiter des données du type record (en pascal) ou structure (en C) :