어셈블리 관련 질문입니다
글쓴이: 나그네나그네 / 작성시간: 토, 2008/12/27 - 8:38오후
Visual C++ 2008에서 zlib를 컴파일하는 동안 다음과 같은 어셈블리 에러를 만났습니다 :
inffas32.asm(647) : error A2070: invalid instruction operands
647번째 줄 에러는 다음과 같습니다.
movd mm4, dword ptr[esp+0]
구글링 결과,
http://dave-programming.blogspot.com/2007_06_01_archive.html
에서 다음과 같이 변환하라고 하더군요.
- movd mm4,[esp+0]
+ movd mm4,dword ptr[esp+0]
-된 줄과 +된 줄 사이에는 어떤 차이가 존재하는가요?
어셈블리는 한번도 짜 본적이 없어서 -_-;; 궁금..
Forums:
그냥 제생각대로
Microsoft Macro Assembler 8.0, included with Visual C++ 2008 Express refuses to assemble a MOVD instruction with a memory operand with an implied size, and requires that "dword ptr" prefix the memory operand.
movd는 32비트인 명령어니까
dword ptr를 명시적으로 쳐주는게 맞는듯싶습니다
아직 masm 문법에 익숙하시지 않으시군요
dword ptr 키워드는 32비트 접근에 쓰이구요
qword ptr 키워드는 64비트 접근에 쓰이구요
word ptr 키워드는 16비트 접근에 쓰이구요
그런데 mm4는 64비트니까 qword ptr 키워드를 쓰시는게 맞을거에요.
잘못된 정보입니다.
MOVD 명령은 MMX 레지스터에 대한 32비트 데이터 이동을 할 때 사용할 수 있습니다. (IA-32 Datasheet 참조) 따라서 원래 의도대로 dword ptr을 사용하는 것이 맞습니다.
64비트 전송할때는
64비트 전송할때는 MOVQ를 사용하죠
댓글 달기