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

Posted

技术标签:

【中文标题】xmm 指令 - 内存源操作数的分段错误【英文标题】:xmm instructions - segmentation fault with memory source operand 【发布时间】:2012-12-23 20:53:08 【问题描述】:

我正在尝试使用 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 位

【问题讨论】:

【参考方案1】:

在第二个示例中,var2 需要 16 字节对齐,我怀疑不是这种情况。

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

【讨论】:

我添加了一个对齐指令,但它仍然不起作用。以下是完整代码:codeviewer.org/view/code:2d8c 你不会得到 16 字节与 align 2 对齐。 轻松搞定。与您的情况无关,但根据最近在 Nasm 论坛上发布的“问题”,section .bss 使用 alignb 而不是 align...

以上是关于xmm 指令 - 内存源操作数的分段错误的主要内容,如果未能解决你的问题,请参考以下文章

mov指令中的分段错误

由于 C 中的内存不足导致的分段错误

有效内存分段错误

4.1系统寄存器和系统指令

为啥释放内存会导致分段错误?

什么是分段错误?