谁能告诉我它怎么能得到寄存器DS的价值

时间:2011-08-11 08:18:57

标签: c ucos

在uc / os的源代码中,我无法理解以下代码。

* stk = _DS;

它的评论是获取DS的当前值。

你能告诉我为什么吗?

2 个答案:

答案 0 :(得分: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.

答案 1 :(得分:2)

这是一个编译器定义的宏(我假设这是由于只有大写的名称)。前导_通常会告诉您它是特定于编译器的。因此,一旦预处理器运行,它将插入自己的代码,该代码将基本上返回DS的当前值。