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 指令 - 内存源操作数的分段错误的主要内容,如果未能解决你的问题,请参考以下文章