[완료] 어셈블리 간단한 질문입니다 (MASM)
글쓴이: hwanikani / 작성시간: 수, 2011/01/12 - 6:02오후
.data
num DWORD 12345678h
.code
mov eax, 77777777h
mov esi, OFFSET num
mov num, 77777777h ; 됨 (mov mem, imm)
mov [esi], eax ; 됨 (mov mem, reg)
mov [esi], 77777777h ; 에러: invalid instruction operands (mov mem, imm)
-------------------------------------------------------------------
위 코드에서
mov num, 77777777h하고 mov [esi], eax는 되는데
mov [esi], 77777777h는 안되는 이유를 모르겠습니다.
책에서는
mov instruction이 가질수 있는 operands로
mov reg, reg
mov mem, reg
mov reg, mem
mov mem, imm
mov reg, imm
라고 적어 놨는데
이상하게 destination으로 indirect operand가 올경우(mem)
source로 register가 올경우는 되는데 (mov mem, reg)
immediate value가 올경우에는 (mov mem, imm) 에러가 뜹니다.
혹시 이유 아시는분 계신가요?
Forums:
mov dword ptr [esi],
mov dword ptr [esi], 77777777h
imm 만 보고 dword 인지를 알 수 없기 때문에 타입을 명시해 주어야 해요.
답변 감사드립니다!
앞으로는 그냥 indirect operand에는 타입을 전부 명시해 두는게 편할것 같네요.
답변 감사드립니다! (왜 에러에 instruction operand must have size라고 안뜨는지 - _-ㅋ)
댓글 달기