在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 的当前值。