xmm 指令 - 内存源操作数的分段错误

Cat*_*ile 2 x86 assembly sse simd memory-alignment

我正在尝试使用 XMM 寄存器使用 SSE2 指令在汇编语言中将 4 个数字添加到其他 4 个数字中。我确实成功了,但我遇到了一些我不明白的事情。如果我以这种方式添加:

movdqu xmm0, oword [var1]
movdqu xmm1, oword [var2]
paddd xmm0, xmm1
movdqu oword [var1], xmm0 
Run Code Online (Sandbox Code Playgroud)

它工作得很好。

但如果我这样尝试:

movdqu xmm0, oword [var1]
paddd xmm0, oword [var2]
movdqu oword [var1], xmm0 
Run Code Online (Sandbox Code Playgroud)

它给了我一个分段错误。

第二种方法有什么问题?我正在使用 Nasm、Intel Atom N270、Linux Mint 12 32 位

Pau*_*l R 5

在第二个示例中var2需要 16 字节对齐,我怀疑情况并非如此。

在第一个示例中,您使用的是未对齐的加载/存储,因此您看不到那里的问题,但paddd第二个示例中的指令需要 16 字节对齐的内存操作数。

  • 您不会使用“align 2”获得 16 字节对齐。 (3认同)
  • 轻松完成。与您的情况无关,但根据最近在 Nasm 论坛上发布的“问题”,在 `section .bss` 中使用 `alignb` 而不是 `align` ... (2认同)