URL: https://linuxfr.org/forums/programmationautre/posts/adressage-relatif-en-assembleur-amd64-je-suis-perdu Title: adressage relatif en assembleur amd64, je suis perdu Authors: Zylabon Date: 2012年03月31日T15:03:09+02:00 Tags: Score: 2 Bonjour à tous, J'écris ici car il y a quelque chose qui m'échappe totalement. en adressage absolu, c'est pas compliqué. ```gas movl data,%eax ``` en simili C eax = *data en adressage indexé non plus ```gas movl 42(%esi),%eax ``` eax = *(esi + 42) mais en adressage relatif, je suis perdu ```gas movl data(%rip),%eax #du code #ici aussi movl %eax,data(%rip) ``` La même instruction est utilisée, pour référencer le même endroit, sauf qu'entre les deux rip a changé. Donc, la sémantique le movl change si rip est l'une des opérandes ? Je ne comprend pas comment ça marche. Lors de la phase d'assemblage, les décalage sont recalculés ? (en désassemblant on retrouve des constantes), mais en lisant le fichier octet par octet je me rend compte deux deux instructions semblable à deux endroits différent se retrouvent encodée de la même manière dans le binaire, donc, je ne comprend pas. Merci beaucoup si vous pouvez m'éclairer. ajout : effectivement, movl data(%rip),%eax et movl data(%rsi),%eax sont deux instructions différentes, elles ne font même pas la même taille. En fait, à l'exécution (au linkage ?) il connait la différence entre l'adresse 0 de la première instruction et l'adresse data, et à chaque fois qu'il y a un data(%rpi) il y ajoute cette différence ?

AltStyle によって変換されたページ (->オリジナル) /