c++ - 如何在 C++ 和 Visual Studio 2008 中使用 asm 代码

标签 c++ visual-studio-2008 assembly

我正在做一些跨平台的工作,将代码从 Linux 移植到 Win32,但是当涉及到一些汇编代码时,我无法让它工作。 此代码在 Linux gcc 中正常编译,但在 VS2008 --win32 中无法运行。

下面是我的一些代码。想用VS2008 --win32平台编译需要怎么做:

static inline void spin_wait(int n)
{
    int    tmp = n;
    while(tmp > 0) { tmp--; asm("" ::: "memory", "cc"); }
}

__asm__ __volatile__(
    "xorq        %%rdx, %%rdx    \n"
    "xorq        %%rax, %%rax    \n"
    "incq        %%rdx        \n"
    "lock cmpxchgq    %%rdx, (%1)    \n"
    "decq        %%rax        \n"
: "=a" (not_set) : "r" (n) : "%rdx");

最佳答案

如果您的问题是关于内联汇编的使用,您仍然可以在 Visual Studio 中使用它 (MSDN link),当然您可能需要针对平台进行调整。

例如:

__asm {
   mov al, 2
   mov dx, 0xD007
   out dx, al
}

关于c++ - 如何在 C++ 和 Visual Studio 2008 中使用 asm 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9602030/

相关文章:

c++ - 顶部然后流行使用

c++ - 在 C 和 C++ 中通过 index[array] 访问数组

c - 如何将 "goto"转换为 c 中的不同函数?

performance - "fast"到底是怎样的现代CPU?

c++ - 尝试将带有双结构指针的数据包发送到客户端时抛出访问冲突。 C++ Visual Studio

c++ - 如何包含位于特定文件夹中的头文件? (C++)

c++ - OpenGL GLut 编译问题

visual-studio - 在 Visual Studio 安装项目中,如何根据复选框对话框更新注册表?

c++ - 由于 WTTlog.DLL 导致的运行时错误?

c - 为什么我要添加 rax 和 rdx?