2011-08-11 6 views

答えて

4

コンパイラは、特別な「変数」として_DSを認識し、変数が格納されている場所からその変数の内容を抽出するのではなく、データセグメントレジスタの内容を直接使用します。

mov ax, [0x12341234] // assuming b is at this location. 
mov [0x56785678], ax // assuming a is at this location. 

a = _DS一方であってもよい:すなわち

a = bは以下のようにコンパイルされるかもしれない

push ds    // or, if available: mov ax, ds 
pop ax 
mov [0x56785678], ax // assuming a is at this location. 
+0

あなたの例では、私は答えがあると思います。ありがとう! – nobody

2

それはコンパイラ定義マクロだ(Iこれは大文字のみ名による仮定します) 。先頭の_は通常、それがコンパイラ固有であることを伝えます。したがって、プリプロセッサが実行されると、DSの現在の値を本質的に返す独自のコードを挿入します。

+0

ああ、ありがとうございました! – nobody

関連する問題