./39> Je ne comprends pas ta question

En fait je ne connais pas à l'avance l'emplacement des labels, étant donné que ça dépend des instructions et pseudo instructions qui seront effectivement générées. Du coup je dois générer des instructions et tenter de les réduire par la suite. Mais je me doutais bien que ça ne fonctionnerait pas. Je prends un exemple extrêmement simple, mais on peut en trouver des plus complexes qui posent le même problème:
BRA :a ; goto 'a' (adresse 0)
:a ; label 'a' (adresse 2)
Au début il ne connaît pas encore l'emplacement de :a, donc il va générer l'instruction la plus large. Ensuite il va trouver :a = 2 et se rendre compte qu'il peut réduire l'instruction à zéro octets (en effet, elle génèrerait BRA 0, qui est inutile).
Ensuite en regénérant le code avec :a = 0 on va cette fois faire BRA :0 qui va générer une instruction (BRA -1), donc déplaçant :a à 2. Ensuite rebelotte. On peut "patcher" ce cas facilement en supprimant une instruction de 0 octet, mais j'imagine qu'il y a d'autre cas où ça va merder, mais je n'arrive pas à trouver de contre exemple

Et je n'arrive pas non plus à prouver qu'une optimisation (saut/chargement sur moins d'instructions) génèrera un code plus petit dans tous les cas (i.e. il n'y a jamais de répercussions).
Des idées?