MOV 명령어는 어셈블리어에서 가장 기본적인 명령어 중 하나다.
데이터를 한 위치에서 다른 위치로 복사하는 역할을 한다.
일반적으로 레지스터 간, 메모리와 레지스터 간, 값과 레지스터 간 데이터 이동에 사용된다.

 

📌 MOV 명령어 기본 형식

MOV 대상, 소스
  • 대상( Destination ) : 데이터를 저장할 위치 ( 레지스터 또는 메모리 )
  • 소스( Source ) : 데이터를 제공하는 위치 ( 레지스터, 메모리, 값 )

📌 MOV 명령어 사용 예시

1️⃣ 레지스터 간 데이터 이동

MOV EAX, EBX ( EBX 레지스터 값을 EAX 레지스터로 복사 )
MOV EDX, ECX ( ECX 레지스터 값을 EDX 레지스터로 복사 )

 

같은 크기의 레지스터끼리만 이동할 수 있다.

 

2️⃣ 값을 레지스터에 저장

MOV EAX, 1 ( EAX에 1을 저장 )
MOV EBX, 2 ( EBX에 2를 저장 )

 

값은 직접 레지스터에 저장할 수 있다.

 

3️⃣ 메모리에서 레지스터로 데이터 이동

MOV EAX, [1234h] ( 메모리 주소 1234h의 값을 EAX에 저장 )
MOV EBX, [ESI] ( ESI 레지스터가 가리키는 메모리 값을 EBX에 저장 )

 

4️⃣ 레지스터에서 메모리로 데이터 이동

MOV [1234h], EAX ( EAX 값을 메모리 주소 1234h에 저장 )
MOV [EDI], ECX ( ECX 값을 EDI가 가리키는 메모리에 저장 )

 

📌 MOV 명령어 사용 시 주의할 점

❌ 메모리에서 메모리로 직접 데이터 이동 불가

MOV [1234h], [5678h] ( 오류 )

 

메모리에서 메모리로 직접 이동하는 명령은 지원되지 않는다.

레지스터를 경유해야 한다.

MOV EAX, [5678h] ( 먼저 메모리 값을 EAX로 이동 )
MOV [1234h], EAX ( EAX 값을 다른 메모리에 저장 )

 

📌 정리 

  • MOV는 데이터를 복사하는 명령어이며 원본 값은 변하지 않는다.
  • 레지스터 ↔ 레지스터, 레지스터 ↔ 메모리, 값 ↔ 레지스터 이동이 가능하다.
  • 메모리 ↔ 메모리 이동은 직접 수행할 수 없고, 반드시 레지스터를 경유해야 한다.

+ Recent posts