관리 메뉴

JIE0025

[Assembly] 기초 어셈블리명령어와 레지스터, Pointer Register, Push, Pop, Call, Retn, Mov 본문

기타 학습/Language

[Assembly] 기초 어셈블리명령어와 레지스터, Pointer Register, Push, Pop, Call, Retn, Mov

Kangjieun11 2020. 3. 18. 02:48
728x90

➡️ 기초 어셈블리 명령어

➡️레지스터 종류와 역할

➡️추가 설명

- Pointer Register

  1) ESP (Stack Pointer) : 가장 최근에 스택에 입력된 데이터의 포인터

  2) EBP (Base Pointer) : Stack Frame을 사용할 때 현재 실행중인 함수가 사용하는 Stack Frame의 바닥을 가리킴

  3) EIP (Instruction Pointer) : 다음에 수행 될 명령어의 포인터

     * Stack Frame ? : 현재 수행중인 함수의 스택영역, ESP와 EBP 사이의 공간

 

- PUSH : stack에 데이터를 저장함 (esp값 자동 조정 : 감소)

- POP : stack에서 데이터를 지움 (esp 자동 조정 : 증가)

아래 그림을 통해 stack push pop 에 대해 간략히 설명해 보자면,

가장 왼쪽의 스택은 먼저 만들어 놓은 스택으로 push를 통해 비어있던 스택에서 10이 들어간 상태이다.

보라색 글씨를 보면 스택에서 위로 갈수록 주소값이 작아지는것을 볼 수 있다.

push를 하게 될 경우 esp(최근 데이터의 포인터)의 값이 0 에 가까워 지므로 감소하는 것이고,

pop을 하게 될경우 esp의 값이 최대값인 1000 에 가까워 지므로 증가한다고 보면 된다.

 

 

- RETN : return, 함수 호출자에게 반환

  

- CALL : 함수 호출, EIP(동작하고자 하는 다음 명령어)를 변경하기 전에 스택에 백업 함

 

- MOV : 데이터를 복사하는 명령어.

     mov esp ebp  >> ebp의 값을 esp로 복사한다는 뜻