티스토리 뷰
레지스터는 cpu에서 사용하는 고속 기억장치이다.
간단한 명령어는 외워두자고 생각했지만 생각보다 익숙하지 않고 용어가 거의 비슷해서 포스팅함.
인텔 x86 cpu의 아키텍쳐(IA-32)에서는 9개의 범용 레지스터를 제공한다.
이것을 두가지로 분류 할 수 있는데,
프로그램에서 사용하는 것 EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP
OS에서 사용하는 것 EIP
물론 다른 레지스터들이 존재하지만 추후에 알아둬야 할 레지스터가 있다면 추가로 올려두겠다.
위의 9가지는 기본이니 알아두는게 좋다.
EAX(Extended Accumulator Register)
--> 곱셈, 나눗셈 명령에 사용, 함수의 리턴값 저장
EBX(Extended Base Register)
--> ESI, EDI 둘중하나의 레지스터와 결합해서 인덱싱에 사용함
ECX(Extended Counter Resister)
--> 반복을 사용할 때 반복 count를 저장하는 용도.
EDX(Extended Data Register)
--> EAX 와 같이 사용되고 부호 확장 명령 등에 쓰임.
ESI(Extended Source Index)
--> 데이터 복사, 데이터 조작을 하는 경우 소스 데이터 주소가 저장. ESI 레지스터가 가리키는 주소에 있는 데이터를
EDI 레지스터가 가리키는 주소로 복사하는 용도로 주로 사용된다고 함
EDI(Extended Destination Index)
--> 복사 작업 시 목적지 주소가 저장됨. 주로 ESI 레지스터가 가리키는 주소의 데이터를 복사함
EBP(Extended Base Pointer)
--> 하나의 스택 프레임 시작 주소가 저장됨. (이건 아마 자주 봐서 좀 익숙하다) 현재 사용하고 있는 스택프레임이 존재하는
동안 불변하는 값이다. 이게 있어야 스택 프레임이 날라갔을 때 되돌아올 곳을 알 수 있으니까.
ESP(Extended Stack Pointer)
--> 하나의 스택 프레임의 끝 지점 주소 저장 PUSH, POP 에 따라서 ESP 값이 변한다.
EIP(Extended Instruction Pointer)
--> 다음에 실행할 명령어가 저장된 메모리 주소가 저장됨.