如何在 Visual C++ 6.0 中编写以下内联汇编代码?
Posted
技术标签:
【中文标题】如何在 Visual C++ 6.0 中编写以下内联汇编代码?【英文标题】:How do I write the following inline assembly code in Visual C++ 6.0? 【发布时间】:2009-07-22 04:13:22 【问题描述】:我正在用 C 语言在 GCC(适用于 Linux/Ubuntu)中编写一个使用以下内联汇编的应用程序。
float a[4] = 10, 20, 30, 40 ;
float b[4] = 0.1, 0.1, 0.1, 0.1 ;
asm volatile("movups (%0), %%xmm0\n\t"
"mulps (%1), %%xmm0\n\t"
"movups %%xmm0, (%1)"
:: "r" (a), "r" (b));
请原谅上面的错别字(我是凭记忆写的)。 Visual C++ 6.0 中等效的内联汇编器是什么?我发现我需要移植我的代码。
【问题讨论】:
您可能会发现使用 gcc-on-Window 端口之一将 Linux 应用程序移植到 Windows 更容易:wiki.answers.com/Q/How_do_you_install_GCC_in_Windows_XP 【参考方案1】:__declspec(align(16)) float a[4] = 10, 20, 30, 40 ;
__declspec(align(16)) float b[4] = 0.1f, 0.1f, 0.1f, 0.1f ;
__asm
movups xmm0, a; // could be movaps if array aligned
mulps xmm0, b;
movups b, xmm0; // could be movaps if array aligned
我不确定 Visual C++ 6,但它可以在 Visual C++ 2008 中使用。
【讨论】:
TBH 如果您将浮点数组对齐到 16 个字节,您也可以使用 movaps,因为它会快很多倍...... @Goz,在回答中添加了您的注释。我试着写一份问题的精确副本,并出于习惯添加了__declspec(align(16))
嘿,我刚刚阅读了一些关于对齐的内容,并且这个解决方案(关于对齐和 movaps 指令)可能不会受到此线程上所选答案中提出的问题的影响: ***.com/questions/841433/…以上是关于如何在 Visual C++ 6.0 中编写以下内联汇编代码?的主要内容,如果未能解决你的问题,请参考以下文章
在win7系统下,如何安装 Microsoft Visual C++ 6.0呢?谢谢····
Visual C++ 6.0 学术版,使用 MFC 作为静态库
C++ 代码在 msdev 6.0 中运行良好,在 Visual Studio 2010 中崩溃