2

我很好奇(例如)相当于什么

        .data
x       dword 42
        .code
main    proc
        ; Do stuff here.
        ret
main    endp
        end

如果我正在编写内联汇编(在 D 中),那将是。我知道我可以做类似的事情

int main()
{
    int x = 42;
    asm
    {
        // Do stuff here.
    }

    return 0;
}

,但练习的重点不是通过使用 D 本身来“作弊”。

4

1 回答 1

4

D 的内联汇编器无法设置代码或数据将被发送到哪个部分。它总是与嵌入它的函数的代码进入同一部分。

但是您可以使用普通的 D 声明将数据插入 D 的数据段:

__gshared int x = 42;

请注意,如果您不使用 __gshared,x 将在线程本地存储块中结束,并且需要专门生成的代码才能访问。此外,如果使用 -fPIC 编译代码,则需要专门生成的代码才能访问所有数据段数据。

于 2013-08-05T18:52:23.193 回答