(별로 적을게 없겠군)
2.1 범용 cPU 레지스터
x86 명령어 셋에서 cpu는 8개의 범용 레지스터(EAX, EDX, ECX, ESI, EDI, EBP, ESP, EBX)를 사용
각 레지스터 이해 중요!
- EAX : accumulator register , 산술 연산을 수행하기 위해 사용되거나, 함수의 리턴 값을 전달하기 위해 사용,
- EDX : data register, EAX에 확장 개념으로 사용된다. (곱하기와 나누기와 같이 복잡한 연산을 위해 추가적으로 데이터를 저장할 때 사용된다.)
- ECX : counter register , 반복적으로 수행되는 연산에 주로 사용, ECX 레지스터는 값을 증가시키면서 카운트를 세는 것이 아니라 값을 감소 시키면서 카운트를 센다
이 코드를 어셈블리언어로 바꿔서 해석해보면 ECX에 카운터가 10에서 0으로 감소하는 형식으로 구성 되어 있다. - ESI : 데이터 연산을 위한 원천지 인덱스(source index)를 나타내거나, 입력 데이터 스트림의 위치를 나타내기 위해 사용
- EDI : 데이터 연산의 목적지 인덱스(destination index)를 나타내거나, 데이터 연산의 결과가 저장되는 위치를 나타내는 데 사용
- ESP레지스터와 , EBP레지스터는 각기 스택 포인터(Stack Pointer)와 베이스 포인터(Base Pointer)레지스터이다.
- ESP : 스택의 가장 높은 위치(TOP)를 가리킨다. 곧 ESP는 리턴 주소를 가리키고 있다.
- EBP : 호출 스택의 가장 낮은 위치(bottom)를 가리키는데 사용,
- EBX : 특정한 목적으로 설계된 레지스터가 아니다.
- EIP : 현재 실행 중인 명령의 주소를 가리킨다.
2.2 스택(stack) - 인터넷에 많으니까 정리 대충 요점만
- FILO(First In Last Out) 구조
- 함수를 호출할 때 해당 함수에 전달되는 파라미터를 스택에 push 하고, 함수가 리턴할 때는 pop을 함
- esp레지스터는 스텍에 꼭대기를 가리키기 위해 사용되며, ebp레지스터는 스텍에 바닥을 가리키기 위해 사용된다.
댓글 없음:
댓글 쓰기