5

我一直在将 linux 应用程序移植到 windows 平台。

这是linux代码,

 __asm__ __volatile__ ("lock; cmpxchgl %1, %2"
                      : "=a" (prev)
                      : "q" (new_value), "m" (*ptr), "0" (old_value)
                     : "memory");

我尝试使用 _asm volatile,但在 Visual Studio 2012 中出现错误提示“'操作码'中的内联汇编语法错误;找到'数据类型'”。

我需要一些 Windows 等效代码。请提供任何信息/建议。

4

2 回答 2

1

一般来说,我更喜欢外部汇编模块而不是内联汇编——它更便携(是的,便携和汇编在同一个句子中使用)。nasmyasm等汇编程序可用于多个平台,并且可以生成多种目标文件格式。

外部汇编模块不适用于像您的代码这样对性能至关重要的单行代码 - 考虑使用编译器内在函数而不是内联汇编。您可能想查看便携式比较和交换

于 2012-06-13T08:26:42.080 回答
0

我认为这里的主要问题是 Visual Studio 使用英特尔风格的内联汇编语言,而你没有使用它。

看看这个:http: //msdn.microsoft.com/en-us/library/4ks26t93%28v=vs.80%29.aspx

关于 volatile 说明符和重新排序,即使使用 o2 优化,我还没有看到 VS 2010 或 2012 重新排序 __asm 块。

问候,安迪

于 2012-11-07T14:08:22.850 回答