2012-12-23 2 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 

그것은 나에게 세그먼트 오류를 ​​제공합니다.

두 번째 방법은 무엇이 있습니까? 나는 Nasm, Intel Atom N270, Linux Mint 12 32-bit를 사용하고있다.

답변

4

두 번째 예제에서 var2은 16 바이트 정렬이되어야하는데, 나는 그렇지 않다.

첫 번째 예제에서는 정렬되지 않은로드/저장소를 사용하므로 문제가 보이지 않지만 두 번째 예제의 paddd 명령어는 16 바이트 정렬 된 메모리 피연산자가 필요합니다.

+0

정렬 지시문을 추가했지만 여전히 작동하지 않습니다. 전체 코드는 다음과 같습니다. http://codeviewer.org/view/code:2d8c –

+2

'정렬 2'로 16 바이트 정렬을 얻지 못할 것입니다. –

+0

비트에 대해 바이트를 혼동했습니다. 그것은 "align 16"으로 작동합니다. –