2

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 

セグメンテーション違反が発生します。

それを行う2番目の方法の何が問題になっていますか?Nasm、Intel Atom N270、Linux Mint 12 32 ビットを使用しています

4

1 に答える 1

5

2 番目の例var2では、16 バイト アラインする必要がありますが、そうではないと思われます。

最初の例では、アラインされていないロード/ストアを使用しているため、問題は見られませんがpaddd、2 番目の例の命令では、16 バイトのアラインされたメモリ オペランドが必要です。

于 2012-12-23T20:59:01.587 に答える