uc / osのソースでは、次のコードを理解できませんでした。
* stk = _DS;
コメントは、DSの現在の値を取得することです。
私に理由を教えてくれる?
ほぼ確実に、コンパイラ_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.
これはコンパイラで定義されたマクロです(大文字のみの名前のため、これを想定しています)。先頭_
は通常、コンパイラ固有であることを示しています。したがって、プリプロセッサが実行されると、DSの現在の値を本質的に返す独自のコードが挿入されます。