2012-12-23 30 views
1

我正在嘗試使用XMM寄存器向SSE2指令的彙編語言中的其他4個數字添加4個數字。我確實成功了,但是我過來了一些我不明白的東西。 如果我這樣做:xmm整數加法 - 分段錯誤

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 

它給了我一個分段錯誤。

第二種做法有什麼問題?我使用納斯姆,英特爾凌動N270,Linux Mint 12 32位

回答

4

在第二個例子中,var2需要16字節對齊,我懷疑是不是這種情況。

在第一個示例中,您正在使用未對齊的加載/存儲,因此您在那裏看不到問題,但第二個示例中的paddd指令需要16字節對齊的內存操作數。

+0

我已經添加了一個align指令,它仍然不起作用。這裏是完整的代碼:http://codeviewer.org/view/code:2d8c –

+2

你不會得到16字節與「對齊2」對齊。 –

+0

我混淆了字節的位。它適用於「對齊16」 –