Fermer2
deleted2Le 02/02/2014 à 20:54
yop,


Je constate ce genre de comportements avec A68k, sans optimisation de linking :
_main:
        bra *
        move.w _main,d0

produit un move.w -4(pc),d0
Pourquoi un adressage pc-relatif alors qu'on a rien demandé ?
Ensuite :
_main:
        bra *
        move.l _main,d0

produit la même chose, adressage pc-relatif, sauf qu'on lit évidemment 4 octets (donc le 60FE du bra *, puis l'opcode du move). Mais le côté pc-relatif de l'adressage me laisse perplexe. confus

Maintenant, rajoutons un #:
_main:
        bra *
        move.w #_main,d0

produit un move #$FFFC,d0, sans relogement ??? WTF ???
Enfin :
_main:
        bra *
        move.l #_main,d0

produit enfin, grâce à un relogement, un move.l <adresse de _main>,d0


Donc mes questions, puisque j'ai les mains dans la mélasse :

1. Doit-on présupposer un adressage pc-relatif quand c'est pas demandé ? Amha non. Mais qu'en pensez-vous ?

2. Et que signifie, au juste, move.w _main,d0 ? Comment interprêtez-vous cette instruction ?
Pour moi, ça n'a pas de sens.

3. Quid du move.w #_main,d0 ? Pourquoi me sort-il une valeur de son chapeau ? Pour moi, faut émettre un relogement à l'assemblage, et une erreur de linking si le relogement ne tient pas sur deux octets (typiquement dans le cas d'une BSS, lors du linking d'un OS).

Voilà, merci de m'aider à y voir lus clair, pour en tirer quelque chose de générique. happy