在uc / os的源代码中,我无法理解以下代码。
* stk = _DS;
它的评论是获取DS的当前值。
你能告诉我为什么吗?
答案 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的当前值。