私が書いている8086アセンブラに問題があります。 問題は、アセンブラの問題です。アセンブラが問題を解決する
パス1では、各ラベルのセグメントに対する相対的な位置を計算します。
これで、各命令のサイズを計算し、オフセットに加算する必要があります。
ラベルの位置が範囲内にある場合、8086の命令のほうが小さくなる必要があります。たとえば、 "jmp _label"は可能な場合はショートジャンプを選択し、そうでない場合は近いジャンプを選択します。
問題はパス1に達しています。したがって、ラベルにまだ到達していないため、 "jmp short _label"が "jmp near _label"命令よりも小さいため、命令のサイズを判断できません。
天気「jmp _label」が「jmp short _label」になるかどうかはどうやって決められますか?
現在の命令がオフセットを与える前にすべての命令のサイズを知る必要があるので、3回のパスも問題になる可能性があります。あなたは何ができるか
おかげ
私は可能な解決策を考えました。同意すれば教えてください。 – NibbleBits
あなたが同意すれば私は可能な解決策を考えましたか? 私ができることは、推測して短いジャンプを選択することです。セグメントのサイズを計算し終えたら、それを追跡して、すべての命令のオフセットを修正するのが間違っているかどうかを確認します。これは遅いですが、誰かがより良い方法を持っていればうまくいくでしょう。 – NibbleBits
私は8086用のアセンブラを書いています。そこからアセンブリを生成するコンパイラを作成したので、アセンブラはマシンコードを作成します。 – NibbleBits