0

uc / osのソースでは、次のコードを理解できませんでした。

* stk = _DS;

コメントは、DSの現在の値を取得することです。

私に理由を教えてくれる?

4

2 に答える 2

4

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

言い換えれば、次のa = bようにコンパイルされる可能性があります。

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

一方、a = _DS可能性があります:

push ds               // or, if available: mov ax, ds
pop ax
mov  [0x56785678], ax // assuming a is at this location.
于 2011-08-11T08:22:49.057 に答える
2

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

于 2011-08-11T08:23:29.413 に答える