2011-08-11 47 views

回答

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. 
+0

是的,用你的例子,我想我已經得到了答案。謝謝! – nobody

2

這是一個編譯器定義的宏(我假設這是由於大寫唯一的名字) 。領先的_通常會告訴您它是編譯器特定的。所以一旦預處理器運行,它將插入自己的代碼,它將基本上返回DS的當前值。

+0

啊,謝謝!明白了。 – nobody

相關問題