D内联汇编程序:访问静态变量

Mor*_*öfl 5 assembly d inline-assembly

我在D编程语言中使用内联汇编程序访问静态变量时遇到了一些麻烦.文档说我必须访问局部变量

mov EAX, var[EBP]; //or mov EAX, var;
Run Code Online (Sandbox Code Playgroud)

和类变量

mov EBX, this;
mov EAX, var[EBX];
Run Code Online (Sandbox Code Playgroud)

但它没有记录如何访问静态变量.这是我的代码抛出错误:

module test;

static int A = 1234;

static void SetA()
{
    asm
    {
        mov A, 5432; //compiles, but throws an error
        //tried it with "mov dword ptr [A], 5432; too
    }
}
Run Code Online (Sandbox Code Playgroud)

对于可以从汇编程序和汇编程序访问的整数,我真的需要一种"全局存储"的方式,我会非常高兴有任何这方面的帮助(或替代方法).

Vla*_*eev 4

在 D2 中,全局变量默认放置在线程局部存储中。用于__gshared声明“经典”静态变量。

这有效:

module test;

__gshared int A = 1234;

void SetA()
{
    asm
    {
        mov A, 5432;
    }
}

unittest
{
    SetA();
    assert(A == 5432);
}
Run Code Online (Sandbox Code Playgroud)