アセンブラーが自動的に短いエンコードまたは通常のエンコードを使用したとします。一見すると、可能であれば常に短いエンコーディングに切り替えても問題ないように見えるかもしれませんが、実際にはそうすることが可能であり、他のブランチを再び長いエンコーディングに変更する必要があります。
例(テストされていないか、アイデアを得るために):
jmp _skip ; relative offset depends on
the size of "other code", which may include other jumps
; other code
_skip:
したがって、サイズを決定するために「フォワード」パスを実行することはできません。そのジャンプにいるときは、他のジャンプをどうするかまだ決めていないため、それが収まるかどうかはまだわかりません。 .
じゃあ後ろ向き?(ただアイデアを得るために、テストされていないか、何もありません)
.fill 124
jmp _somewhere ; 2 bytes, or 5?
jmp _quiteFarAway ; relative offset is either 130 or 127
.align 256
_quiteFarAway:
いいえ、後方パスも実行できません。_quiteFarAway へのジャンプのエンコーディングを決定するとき、他のジャンプをどうするかまだ決めていないため、それが適合するかどうかはまだわかりません。
ポイント 2 を実行するのは難しく、それを解決するにはさまざまな方法があります。そのような明示的な「短い」修飾子、明示的な「長い」修飾子を使用して、安全な推測を行い、まれに必要のない長いバージョンになるなど.