uc/osのソースで、次のコードを理解できませんでした。私はそれがどのようにレジスタDSの値を得ることができると教えてくれるのですか?
* stk = _DS;
コメントはDSの現在の値を取得することです。
理由を教えてもらえますか?
uc/osのソースで、次のコードを理解できませんでした。私はそれがどのようにレジスタDSの値を得ることができると教えてくれるのですか?
* stk = _DS;
コメントはDSの現在の値を取得することです。
理由を教えてもらえますか?
コンパイラは、特別な「変数」として_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.
それはコンパイラ定義マクロだ(Iこれは大文字のみ名による仮定します) 。先頭の_
は通常、それがコンパイラ固有であることを伝えます。したがって、プリプロセッサが実行されると、DSの現在の値を本質的に返す独自のコードを挿入します。
ああ、ありがとうございました! – nobody
あなたの例では、私は答えがあると思います。ありがとう! – nobody