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는 데이터를 복사하는 명령어이며 원본 값은 변하지 않는다.
- 레지스터 ↔ 레지스터, 레지스터 ↔ 메모리, 값 ↔ 레지스터 이동이 가능하다.
- 메모리 ↔ 메모리 이동은 직접 수행할 수 없고, 반드시 레지스터를 경유해야 한다.
'언어 > 어셈블리어' 카테고리의 다른 글
[어셈블리어] x86-64 (=x64) 아키텍처 ( 64비트 ) 범용 레지스터 (0) | 2025.02.17 |
---|---|
[어셈블리어] x86 아키텍처 ( 16비트 ) 범용 레지스터 (0) | 2025.02.16 |
[어셈블리어] x86 아키텍처 ( 32비트 ) 범용 레지스터 (0) | 2025.02.15 |
[어셈블리어] 어셈블리어( Assembly language ) (0) | 2025.02.14 |