movl 이용시 궁금한점
글쓴이: bjbm / 작성시간: 월, 2007/10/29 - 5:49오전
안녕하세요.
처음으로 글 남깁니다.
리눅스, i386기반에서 어셈블리어 공부하고 있는데
movl 명령어 쓸 때
memory-memory transfer가 안되는 이유가 뭐죠?
꼭 레지스트리를 통해야 하는지요?
예를 들면,
a=1;
b=3;
a=b;
이런식의 간단한 표현이 있다고 하면
movl $1, a
movl $3, b
movl a,%eax
movl %eax, b
이렇게 해야 하더군요
movl $1, a
movl $3, b
movl b,a
이렇게는 왜 안되는지요?
여기저기 검색해봤는데
안된다고는 나와 있는데 이유가 안나와서...
답변 부탁 드립니다.
Forums:
그냥 갑자기 생각난건데
학교 다닐때 어셈으로 실습하면서 선풍기를 만들었던 적이 있습니다.
그때 8086인가 8088을 이용했던거 같은데...
요즘은 CPU(저는 마이크로 프로세서라고 배웠는데)라고 하면 퍼스널 컴퓨터의 이미지가 상당히 강하지만 예전도 그렇고 지금도 그렇고 다른 분야에서도 많이 사용되고 있습니다.
그런 여러 분야를 생각할때 쓰기 가능하고 접근이 빠른 유일한 저장장치는 CPU에 내장된 레지스터 밖에 없는걸로 알고 있습니다.
CPU입장에서 메모리는 외부 장치로 생각이 되지 않을까요?
혹시 이게 그 이유가 아닐까 싶은데...
-- Signature --
青い空大好き。
蒼井ソラもっと好き。
파란 하늘 너무 좋아.
아오이 소라 더좋아.
i386에는 memory에서 memory로 직접 전송하는 명령어가 없습니다.
mov 명령은 immediate 값을 메모리로 전송하는 형태(movl $1, a 같은 형태)까지만 허용합니다. 메모리에서 메모리로 직접 옮기는 건 아무 의미가 없기 때문이죠. 다른 CPU에서도 메모리에서 메모리로 한 명령어로 옮기는 경우는 쉽게 찾아볼 수 없을 겁니다.
감사합니다.
충분히 답변이 된 것 같습니다.^^
댓글 달기