【问题标题】:Who can tell me that how could it get the value of register DS谁能告诉我它是如何得到寄存器DS的值的
【发布时间】:2011-08-11 08:18:57
【问题描述】:

在uc/os的源码中,下面的代码看不懂。

*stk = _DS;

它的 cmets 是获取 DS 的当前值。

你能告诉我为什么吗?

【问题讨论】:

    标签: c ucos


    【解决方案1】:

    几乎可以肯定,编译器将_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.
    

    【讨论】:

    • 是的,通过你的例子,我想我已经得到了答案。谢谢!
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-27
      • 1970-01-01
      • 2021-03-03
      • 2017-10-09
      • 1970-01-01
      • 1970-01-01
      • 2013-05-29
      • 1970-01-01
      相关资源
      最近更新 更多