MOV Register

agnusdei·2024년 7월 28일

mov 명령어는 어셈블리어에서 가장 기본적이고 중요한 명령어 중 하나로, 데이터를 한 위치에서 다른 위치로 복사하는 데 사용됩니다. mov 명령어는 레지스터, 메모리, 상수 간의 데이터를 이동시킬 수 있습니다. 여기서는 x86 아키텍처를 중심으로 mov 명령어의 다양한 사용법을 설명하겠습니다.

mov 명령어 형식

mov destination, source
  • destination: 데이터를 저장할 목적지(레지스터 또는 메모리 위치)
  • source: 데이터를 가져올 소스(레지스터, 메모리 위치 또는 상수)

사용 예제

레지스터 간 데이터 이동

mov eax, ebx  ; EBX 레지스터의 값을 EAX 레지스터로 이동
mov ecx, edx  ; EDX 레지스터의 값을 ECX 레지스터로 이동

상수를 레지스터에 이동

mov eax, 10   ; 10이라는 상수를 EAX 레지스터에 이동
mov ebx, 0xFF ; 0xFF(16진수 255)를 EBX 레지스터에 이동

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

mov eax, [myVar] ; 메모리 위치 myVar의 값을 EAX 레지스터로 이동
mov ebx, [esp]   ; 스택 포인터가 가리키는 메모리 위치의 값을 EBX 레지스터로 이동

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

mov [myVar], eax ; EAX 레지스터의 값을 메모리 위치 myVar로 이동
mov [esp], ebx   ; EBX 레지스터의 값을 스택 포인터가 가리키는 메모리 위치로 이동

상수를 메모리에 이동

mov [myVar], 10  ; 10이라는 상수를 메모리 위치 myVar로 이동

메모리 주소 지정 모드

mov 명령어는 다양한 메모리 주소 지정 모드를 지원합니다.

직접 주소 지정

mov eax, [0x00403000] ; 메모리 주소 0x00403000의 값을 EAX 레지스터로 이동

베이스 레지스터 주소 지정

mov eax, [ebx] ; EBX 레지스터가 가리키는 메모리 위치의 값을 EAX 레지스터로 이동

베이스 레지스터와 오프셋 주소 지정

mov eax, [ebx+4] ; EBX 레지스터의 값에 4를 더한 메모리 위치의 값을 EAX 레지스터로 이동

인덱스 레지스터와 스케일 주소 지정

mov eax, [ebx+esi*4] ; EBX 레지스터의 값에 ESI 레지스터의 값을 4배한 값을 더한 메모리 위치의 값을 EAX 레지스터로 이동

16비트와 8비트 레지스터

mov 명령어는 32비트 레지스터뿐만 아니라 16비트와 8비트 레지스터에도 사용할 수 있습니다.

16비트 레지스터

mov ax, bx   ; BX 레지스터의 값을 AX 레지스터로 이동
mov [myVar], ax ; AX 레지스터의 값을 메모리 위치 myVar로 이동

8비트 레지스터

mov al, bl   ; BL 레지스터의 값을 AL 레지스터로 이동
mov [myVar], al ; AL 레지스터의 값을 메모리 위치 myVar로 이동

예제 프로그램

다음은 간단한 어셈블리어 프로그램으로, mov 명령어를 사용하여 두 숫자를 더하는 예제입니다.

section .data
    num1 dd 10   ; 32비트 정수 10
    num2 dd 20   ; 32비트 정수 20
    result dd 0  ; 결과를 저장할 32비트 정수

section .text
    global _start

_start:
    mov eax, [num1]  ; num1의 값을 EAX 레지스터로 이동
    mov ebx, [num2]  ; num2의 값을 EBX 레지스터로 이동
    add eax, ebx     ; EAX에 EBX의 값을 더함
    mov [result], eax ; 결과를 메모리 위치 result로 이동

    ; 프로그램 종료를 위해 exit 시스템 호출
    mov eax, 1       ; 시스템 호출 번호 (sys_exit)
    xor ebx, ebx     ; 종료 코드 0
    int 0x80         ; 시스템 호출 인터럽트

이 프로그램은 num1num2의 값을 더하고, 결과를 result에 저장합니다.

요약

  • mov 명령어는 데이터를 한 위치에서 다른 위치로 복사합니다.
  • 소스와 목적지는 레지스터, 메모리 위치, 상수 등이 될 수 있습니다.
  • 다양한 메모리 주소 지정 모드를 지원합니다.
  • 32비트, 16비트, 8비트 레지스터 모두 사용할 수 있습니다.

mov 명령어를 잘 이해하고 활용하면 어셈블리어 프로그래밍에서 매우 유용한 도구가 됩니다.

profile
DevSecOps Pentest🚩

0개의 댓글