2017-03-05 11 views
2

のデフォルトのアドレスが何であるか、我々はDSを初期化する必要がありますなぜ私は混乱しているこのすべて一緒に行くレジスタ:8086 - データ・セグメント

data segment 
msg1 db 10,13, "saisir le premier digit:$" 
data ends 
mov ax,data 
mov ds,ax` 

最初の変数が格納されている場合にそのように、データセグメント に保存されています最初の変数が格納されている場合、彼らはすでに同じ

+2

これはDOSの.EXEプログラムですか? DOSローダーが実行ファイル( '.EXE')をロードすると、デフォルトでは、_DS_(および_ES_)が[PSP](https://en.wikipedia.org/wiki/Program_Segment_Prefix)のセグメントに設定されます。 DS:0とES:0は、PSPの底を指します。 _DS_をデータを含むセグメントに明示的に設定する必要があります。 –

+0

この質問は、http://stackoverflow.com/questions/3715618/how-does-dos-load-a-program-into-memoryと密接に関連している可能性があります。 –

答えて

1

そのデータセグメントに

を保存した場合、我々は、DS用=データを初期化しなければならない理由 はすでにDS用=データではありません

私は誤解があると思います。コンパイル時と実行時を区別する必要があります。

あなたのプログラムのデータセクションにmsg1テキストを置くのはあなたのコンパイラ(アセンブラ)でした。実際にはという変数を格納しているこのとは関係なく、DSセグメントレジスタの設定は特にありません。

実行時に、これらの変数を取得または保存する場合は、DSセグメントレジスタはデータセクションを指す必要があります。プログラムの開始時にそうではないので、それを明示的に行うことはあなた次第です。

1 data segment 
2 msg1 db 10,13, "saisir le premier digit:$" 
3 data ends 
4 mov ax,data 
5 mov ds,ax 

このコードスニペットの最初の行ではなく、4番目のコードで実行が開始されたことに注意してください。これは、データセグメントに先にストアがないことを確認する別の方法です。