12Fermer14
deleted2Le 03/02/2014 à 16:44
Bon, je crois comprendre le comportement d'A68k, pour ce code :
_main:
        bra *
        move.w _main,d0

-> où que soit le code en RAM, le contenu à l'adresse _main.w sera toujours le même : $60FE. Donc il fait comme si c'était du PC-relatif, bien qu'en vrai, l'adressage soit absolu et relogé (puisqu'on connait pas encore l'adresse de _main). Là où je suis pas d'accord, c'est que ça limite l'amplitude de l'adressage à -32/+32 ko, alors qu'en vrai, l'adressage devrait concerner une adresse >0 et <4 Go, en étant sûr que _main soit positionné dans cette plage au run-time, mais sur TI on sait pas faire, sauf dans le cas d'un OS encore une fois (relogement au linking). Donc A68k transforme le code "pour que ça marche", mais j'aime pas ça. Si on veut écrire du pc-relatif, on le fait. Si on veut un adressage court, on a le droit de l'avoir.

Par contre, pour #label, il s'agit d'un relogement d'adresse tout à fait standard, ya pas de souci. Le seul fait étrange est que A68k assemble un move.w #label,d0, qui n'aurait de sens encore une fois que dans le cas d'un OS. Là, il devrait émettre un relogement, à résoudre impérativement au linking, puisqu'on devrait être sûr que le label sera dans la place 0-64 ko.

PpHd, t'es d'accord avec ça ?