2010-07-03 3 views
3

메모리 위치에 xmm6 레지스터의 값을 쓰는 샘플 코드가 있습니다. 코드는 NASM에 : 나는 컴파일하려고 할 때 나는 오류를 얻고있다 그러나Mach-O 64 비트 형식은 32 비트 절대 주소를 지원하지 않습니다.

value: 
    dd 0 

movq [value], xmm6 

이 형식을 macho64하기 :

64 비트 형식은 32 비트 절대 주소를 지원하지 않습니다.

해결 방법이 있습니까? 어떤 도움을 주시면 x86_64 어셈블리가 새로 생겼습니다.

+0

당신이 질문 때문에 단지 코드가 바보 코드 스크롤-일에를 편집 할 수 있습니까? 감사합니다 – sarnold

답변

3

당신은 8 바이트의 메모리 위치를 가리 키도록 늘 어셈블러에게로해야합니다

movq qword[value], xmm6 
+0

xmm6의 크기가 qword이므로 qword를 사용해야 균형을 맞출 수 있습니까? – Alex

+0

아니요, value라는 이름의 64 비트 변수로 작동하지 않을 것입니다. xmm 레지스터는 128 비트를 메모리에 복사하지 않고 "movdqa dqword [value]"를 사용하면 128 비트 크기입니다. –

+0

dd (32 비트)로 값을 선언 했으므로 단어를 사용해야합니다. – Alex

1

나는 자신의 질문에 의해 해결 한 것 같다 :

value: 
    dd 0 

default rel 
movq [value], xmm6 

이 유효합니까?

+0

예, 아니오! 왜냐하면 이제는 32 바이트 (4 바이트) 어셈블러에서별로 똑똑하지 않은 8 바이트의 기본 뾰족한 크기를 갖기 때문입니다. –

관련 문제