1

これが私のコードです(私はTASMを使用しています)

CODE SEGMENT                  
ASSUME CS:CODE, DS:CODE, SS:CODE

org 256     
;------start-------
STARTPROC       PROC
        mov ax, CODE
        ret
STARTPROC       ENDP    

CODE ENDS
        end STARTPROC

「movax、CODE」という行により、TLINKでエラーが発生します-「COMファイルを生成できません:セグメント再配置可能アイテムが存在します」。なぜ悪いのか分かりませんか?使用するセグメントは1つだけです。

4

1 に答える 1

2

.com実行可能ファイルは非常に単純なファイル形式であり、セグメントを持つことはできません。すべてのセグメントレジスタが唯一のセグメントに設定された状態で起動します。値は予測できません。

あなたがしたようにセグメントを参照しようとすると、リンカーに心臓発作を引き起こし、予測不可能なことを予測するようにリンカーに依頼します。これは、再配置可能な実行可能ファイルである.exeでのみ機能します。これは実行可能ファイル形式であり、セグメントのロードアドレスに合わせて調整する必要があるコード内の場所のリストも含まれています。.exeファイルは、すべてのセグメントが0000:0000でロードされるかのように書き込まれます。オペレーティングシステムローダーは、実行時にすべてのセグメントが実際にロードされる場所を決定します。そして、そのテーブルをウォークし、コードにパッチを適用してセグメントロードアドレスを追加します。次に、プログラムを開始します。これは.comファイルでは機能しません。そのテーブルはありません。

于 2012-11-26T18:20:02.480 に答える