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 位
在第二个示例中var2需要 16 字节对齐,我怀疑情况并非如此。
在第一个示例中,您使用的是未对齐的加载/存储,因此您看不到那里的问题,但paddd第二个示例中的指令需要 16 字节对齐的内存操作数。