Je n'ai pas compris toutes les questions que tu poses, entre les fautes de frappe sur les registres et les imprécisions… je vais cependant faire de mon mieux.
Lors de la phase d'assemblage, les décalage sont recalculés ?
Je ne comprend pas trop ce que tu veux dire… dans le schéma de travail
Source -> Assemblage -> Fichier objet
Fichier objets -> Édition des liens -> Fichier final
beaucoup d'adresses sont inconnues à l'assemblage, donc le fichier objet les recense et elles sont résolues à l'édition des liens. Notamment ton data est inconnue l'assemblage mais l'est à l'édition des liens.
movl data(%rip),%eax et movl data(%rsi),%eax
C'est parceque l'architecture Intel est une architecture basée sur des registres spécialisés. Ainsi les registres ne sont pas interchangeables et ont des rôles préassignés. AX est l'accumulateur, CX est le compteur de boucle, SI le source indicator et DI le destination indicator, BP est le base pointer. Ainsi les lectures et écritures sur des adresses mémoire de type {DI,SI,BP} + offset sont des formes attendues et sont représentées par une instruction courte, tandis que si tu utilises un autre registre, le nom du registre doit aussi être codé dans l'instruction. C'est comme si il y avait des instructions
movl_from_si
movl_from_bp
movl_from_generic
movl_to_di
movl_to_bp
movl_to_generic
deux instructions semblable à deux endroits différent se retrouvent encodée de la même manière dans le binaire,
De quelles instructions s'agit-il? Sont-elles semblables ou identiques? Si elles sont identiques, c'est plutôt normal non?
# Questions pas très claire
Posté par Michaël (site web personnel) . En réponse au message adressage relatif en assembleur amd64, je suis perdu. Évalué à 3.
Je n'ai pas compris toutes les questions que tu poses, entre les fautes de frappe sur les registres et les imprécisions… je vais cependant faire de mon mieux.
Je ne comprend pas trop ce que tu veux dire… dans le schéma de travail
Source -> Assemblage -> Fichier objet
Fichier objets -> Édition des liens -> Fichier final
beaucoup d'adresses sont inconnues à l'assemblage, donc le fichier objet les recense et elles sont résolues à l'édition des liens. Notamment ton data est inconnue l'assemblage mais l'est à l'édition des liens.
C'est parceque l'architecture Intel est une architecture basée sur des registres spécialisés. Ainsi les registres ne sont pas interchangeables et ont des rôles préassignés. AX est l'accumulateur, CX est le compteur de boucle, SI le source indicator et DI le destination indicator, BP est le base pointer. Ainsi les lectures et écritures sur des adresses mémoire de type {DI,SI,BP} + offset sont des formes attendues et sont représentées par une instruction courte, tandis que si tu utilises un autre registre, le nom du registre doit aussi être codé dans l'instruction. C'est comme si il y avait des instructions
movl_from_si
movl_from_bp
movl_from_generic
movl_to_di
movl_to_bp
movl_to_generic
De quelles instructions s'agit-il? Sont-elles semblables ou identiques? Si elles sont identiques, c'est plutôt normal non?