assembly - .data MASM 指令的内联汇编等效项

标签 assembly d inline-assembly masm

我很好奇(例如)的等价物

        .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 本身来“作弊”。

最佳答案

D 的内联汇编器无法设置代码或数据将发送到哪个部分。它始终会进入与其嵌入的函数代码相同的部分。

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

__gshared int x = 42;

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

关于assembly - .data MASM 指令的内联汇编等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18039437/

相关文章:

algorithm - 范围内所有元素的相等性

iteration - D:map 和 each 有什么区别?

assembly - 将 2 个两位数相加,结果为汇编中的 3 位数字

c - 除了原始机器指令外,可执行文件中还有什么?

c - 带有内联汇编段错误的程序,除非以函数调用为前缀

d - 关于 'align' 属性的混淆

gcc - 如何在 ARM aarch64 GCC 内联汇编中使用 32 位 w 寄存器?

gcc - 在 GCC 风格的扩展内联汇编中,是否可以输出 "virtualized" boolean 值,例如携带标志?

gcc - 为什么Seabios无法使用-fno-inline进行编译

assembly - 直接访问 MIPS 协处理器条件标志