NASM 어셈블리 언어

mov 명령

4.2.3) mov 명령

mov 명령을 다음과 같이 설명할 수 있다.

mov: copy value from source to destination

mov reg, reg

reg, mem

reg, imm

mem, reg

mem, imm

첫 줄에는 mov 명령에 대한 설명이 적혀있다. mov 명령을 포함한 NASM의 대부분의 연상 기호는 첫 번째 피연산자가 목적지(destination), 두 번째 피연산자가 근원지(source)가 된다.

다음 칸을 보면 mov 명령에 대해 가능한 피연산자의 목록을 확인할 수 있다.

- reg, reg: 근원지로 레지스터목적지로 레지스터가 옵니다.

- reg, mem: 근원지로 메모리목적지로 레지스터가 옵니다.

- reg, imm: 근원지로 즉시 값목적지로 레지스터가 옵니다.

- mem, reg: 근원지로 레지스터목적지로 메모리가 옵니다.

- mem, imm: 근원지로 즉시 값목적지로 메모리가 옵니다.

여기서 중요한 내용이 있다. NASM에서는 한 번에 두 군데 이상의 메모리를 참조할 수 없다무슨 말이냐면, mov와 같은 명령의 피연산자로 근원지도 메모리목적지도 메모리가 올 수는 없다는 말이다따라서 어떤 메모리에 저장된 값을 다른 메모리로 복사하기 위해서는 레지스터에 먼저 보관하는 과정을 거쳐야만 한다.

다음은 mov 명령에 대한 예제이다.

mov.asm

%include 'handy/handy.inc'

 

segment .text

global _main

 

_main:

push ebp

mov ebp, esp

 

mov esi, 10 ; mov r32, imm (3)

call print_int 정수 출력; esi = 출력할 정수

call print_newline 개행 문자를 콘솔에 출력합니다.

 

mov eax, 20 ; mov r32, imm (3)

mov esi, eax ; mov r32, r32 (1)

call print_int ; esi의 값인 10을 출력합니다.

call print_newline

 

mov eax, 0

mov esp, ebp

pop ebp

ret

r32와 같은 기호를 써서 당황한 분이 있을 것이다실제론 간단한데, r32라고 하면 32bit 레지스터를 의미하는 것이다마찬가지로, m32라고 하면 32bit 메모리를 의미하는 것이다.

이 예제를 완전히 이해했다면 다음 절로 넘어가자메모리를 다루는 방법은 좀 더 나중에 배운다.

댓글

댓글 본문
graphittie 자세히 보기