• # Questions pas très claire

    Posté par (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.

    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?