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.

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.
