yehey's 공부 노트 \n ο(=•ω<=)ρ⌒☆

어셈블리어 명령어와 범용 레지스터 본문

컴퓨터 시스템

어셈블리어 명령어와 범용 레지스터

yehey 2020. 9. 6. 02:07

어셈블리어 명령어 종류와 기능

 

  • mov: 데이터 이동 시에 사용

  • lea: 주소 값을 옮길 때 사용

  • add: 레지스터나 메모리의 값을 덧셈할 때

  • sub: 레지스터나 메모리의 값을 뺄 때

  • dec: 값을 1 감소 시킨다.

  • inc: 값을 1 증가 시킨다.

  • cmp: 레지스터와 레지스터 값을 비교

  • jmp 특정한 곳으로 분기

  • call: 프로시저를 호출

  • ret: 호출했던 바로 다음 지점으로 이동 (call한 주소로 이동)

  • push: 값을 스택에 저장

  • pop: 값을 스택에서 삭제

  • nop: 아무것도 하지 않는다.

 

어셈블리어 명령어 분류

  • 데이터 이동: mov, lea

  • 논리 연산: add, sub, dec, inc

  • 흐름제어: cmp, jmp

  • 프로시저: call, ret

  • 스택 조작: push, pop

 

범용 레지스터 

: 논리연산, 수리연산에 사용되는 피연산자, 주소 계산 피연산자, 메모리 포인터가 저장되는 CPU 내의 공간

 

 

1. EAX: 피연산자와 연산 결과의 저장소

- 산술연산자, 논리연산자를 수행하여 함수의 반환 값(return 값)이 이 레지스터에 저장된다.

 

2. EBX: DS segment안의 데이터를 가리키는 포인터

- 메모리 주소를 저장하기 위한 용도

 

3.ECX: 문자열 처리나 루프를 위한 카운터

- 반복 명령어 사용시 반복 카운터로 사용되는 레지스터

 

4. EDX: I/O 포인터

- 부호 확장 명령 등에 쓰이는데, 큰 수의 곱셈 혹은 나눗셈 등의 연산이 이루어질 때

- EAX 레지스터와 함께 쓰인다.

 

5. ESI: DS 레지스터가 가리키는 data segment 내의 어느 데이터를 가지고 있는 포인터

- 문자열 처리에서 source를 가리킨다.

- 데이터를 조작하거나, 복사 시에 소스 데이터의 주소가 저장된다.

 

6. EDI: ES 레지스터가 가리키고 있는 data segment 내의 어느 데이터를 가리키고 있는 포인터

- 문자열 처리에서 destination(목적지)를 가리킴

- 복사 시에 목적지의 주소가 저장된다.

 

7. ESP: SS 레지스터가 가리키는 stack segment의 맨 꼭대기를 가리키는 포인터

- 스택 프레임의 끝 지점 주소(스택의 가장 아랫 부분, 스택의 마지막)가 저장된다.

- push, pop 명령에 따라 ESP의 값이 4바이트씩 변한다.

 

8. EBP: SS 레지스터가 가리키는 스택 상의 한 데이터를 가리키는 포인터

-하나의 스택 프레임 시작주소가 저장된다.

-현재 사용되는 스택 프레임이 소멸되지 않은 이상 EBP 레지스터의 값은 변하지 않는다.

-현재 스택 프레임이 소멸되면 이전 스택 프레임을 가르키게 된다.


추가적으로 알아두면 좋은 것 

 

EIP 레지스터: 다음 실행할 명령어의 주소를 가지고 있는 레지스터

- 현재 실행하고 있는 명령어가 종료되면 CPU는 EIP 레지스터에 있는 명령어를 실행한다.

 

SFP (Stack Frame Pointer): 스택프레임을 거치고, 함수가 돌아가야할 위치를 저장해 둔 포인터

- 함수가 호출되기 전 스택의 흐름을 그대로 유지하기 위한 포인터

 

'컴퓨터 시스템' 카테고리의 다른 글

gdb 명령어 모음  (0) 2020.09.07
gdb 사용하기  (0) 2020.09.06
8086 Memory Architecture, register  (0) 2020.09.06
컴퓨터 시스템의 기초  (0) 2020.09.05
Comments