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 回答