3

当我搜索时,除了关于 64/32 位内容的意见问题外,似乎找不到任何东西。

__asm__ {
  mov rbx, 0xFFFFffffFFFFffffull
  movq mm2, rbx 
}

根据我的 xcode 调试器(这是 C++ 中的内联 asm),在这 2 条指令之后,mm2 寄存器保存值 0x30500004ffffffff。现在我是 x86 程序集的新手,我的程序集课程是在我很久以前学习的 MIPS 中教授的,但我想这不起作用,因为我正在以 32 位模式和 rbx 编译(这是 photoshop 插件的一部分)( ebx、bx 等的 64 位版本,对吗?)在技术上可能不存在。我尝试了其他方法来获得所有 1,例如将 0xfffffffful 加载到 mm2 和另一个寄存器并进行乘法,但这似乎也不起作用。

我正在修复使用一些 SIMD 指令优化我的插件,但我似乎无法弄清楚或找到任何不会让我眼睛受伤的文档。任何帮助深表感谢!

4

2 回答 2

8

尽管 interjay 的代码可以满足您的要求,但有一种更简单的方法可以将 MMX 寄存器(或 XMM 寄存器,就此而言)设置为全 1(此处为mm2):

pcmpeqw mm2, mm2
于 2010-06-26T21:44:45.967 回答
1

您不能在 32 位程序中运行 64 位汇编代码。您可以将值从内存位置读入 MMX 寄存器,也可以使用以下内容:

mov ebx, 0xffffffff
movd mm2, ebx       //copy value to lower 32 bits
punpckldq mm2, mm2  //copy lower 32-bits to upper 32 bits
于 2010-06-24T16:54:18.753 回答