movl 이용시 궁금한점

bjbm의 이미지

안녕하세요.
처음으로 글 남깁니다.
리눅스, 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
이렇게는 왜 안되는지요?

여기저기 검색해봤는데
안된다고는 나와 있는데 이유가 안나와서...

답변 부탁 드립니다.

dormael의 이미지

학교 다닐때 어셈으로 실습하면서 선풍기를 만들었던 적이 있습니다.
그때 8086인가 8088을 이용했던거 같은데...

요즘은 CPU(저는 마이크로 프로세서라고 배웠는데)라고 하면 퍼스널 컴퓨터의 이미지가 상당히 강하지만 예전도 그렇고 지금도 그렇고 다른 분야에서도 많이 사용되고 있습니다.

그런 여러 분야를 생각할때 쓰기 가능하고 접근이 빠른 유일한 저장장치는 CPU에 내장된 레지스터 밖에 없는걸로 알고 있습니다.
CPU입장에서 메모리는 외부 장치로 생각이 되지 않을까요?

혹시 이게 그 이유가 아닐까 싶은데...

-- Signature --
青い空大好き。
蒼井ソラもっと好き。
파란 하늘 너무 좋아.
아오이 소라 더좋아.

익명 사용자의 이미지

mov 명령은 immediate 값을 메모리로 전송하는 형태(movl $1, a 같은 형태)까지만 허용합니다. 메모리에서 메모리로 직접 옮기는 건 아무 의미가 없기 때문이죠. 다른 CPU에서도 메모리에서 메모리로 한 명령어로 옮기는 경우는 쉽게 찾아볼 수 없을 겁니다.

bjbm의 이미지

충분히 답변이 된 것 같습니다.^^

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.