我正在尝试使用XMM寄存器,使用SSE2指令以汇编语言将4个数字添加到其他4个数字。我确实成功了,但我找到了一些我不理解的东西。 如果我这样添加:
movdqu xmm0, oword [var1]
movdqu xmm1, oword [var2]
paddd xmm0, xmm1
movdqu oword [var1], xmm0
完美无缺。
但如果我这样试试:
movdqu xmm0, oword [var1]
paddd xmm0, oword [var2]
movdqu oword [var1], xmm0
它给我一个分段错误。
第二种做法有什么问题?我正在使用Nasm,Intel Atom N270,Linux Mint 12 32位
答案 0 :(得分:4)
在第二个例子中var2
需要16字节对齐,我怀疑不是这样。
在第一个示例中,您使用的是未对齐的加载/存储,因此您没有看到问题,但第二个示例中的paddd
指令需要一个16字节对齐的内存操作数。