레지스터
- 기본적으로 CPU가 요청을 처리할때 사용하는 데이터의 임시저장 공간이다
- RAM과 레지스터를 같은걸로 생각할 수 있는데 다른것이다
- 레지스터 마다 각각의 역할이 있는데 무조건 그렇게 해야한다는 강제성은 없지만 일반적으로 맞춰서 사용하는 것이 좋다
범용 레지스터
주 용도는 있으나 그외에 다른 용도로 사용가능한 중요하고 자주쓰는 레지스터
- 산술 연산 레지스터
- RAX : 사칙연산 등 산술 연산에 자동으로 사용되며, 함수의 반환 값을 처리할 때도 사용
- RBX : 간접 번지 지정에 사용됩니다. 산수, 변수를 저장
- RCX : 반복(Loop)에서 반복 Count 역할을 수행
- RDX : RAX를 보조하는 역할을 합니다. 예를 들어 나누기를 진행할 경우 몫은 RAX에 나머지는 RDX에 저장
- 인덱스 레지스터
- RSI : 복사나 비교를 할 경우 출발지 주소를 저장하는 레지스터
- RDI : 복사나 비교를 할 경우 목적지 주소를 저장하는 레지스터
- 포인터 레지스터
- RIP : 다음에 실행할 명령어의 주소를 가지고 있는 레지스터입니다. 현재 실행하고 있는 명령어가 종료되면 이 레지스터에 있는 명령어를 실행하게 됩니다.
- RSP : Stack Pointer의 가장 최근에 저장된 공간의 주소를 저장하는 레지스터
- RBP : Stack Pointer의 기준점(바닥 부분)을 저장하는 레지스터
- R8 ~ R15
- 특별히 정해진 용도 없이 다양하게 쓰이며 일반적으로 함수의 매개변수로 사용된다고 함
세그먼트 레지스터
일단 현재 메모리 주소 표현 각 영역의 기본 위치를 가르킴 즉 주소 공간 구분 역할
*TMI : 범용레지스터가 32비트 64비트로 점점 늘어가는동안 이놈은 아직 16비트
- CS : 코드 영역을 가르키는 레지스터
- SS : 스택 영역을 가르키는 레지스터
- DS : 데이터 영역을 가르키는 레지스터
- 이외의 레지스터들은 운영체제 별로 용도를 결정할 수 있는 범용적 세그먼트 레지스터
플래그 레지스터
프로세서의 현재 상태를 저장하고있는 레지스터이다
위 그림처럼 엄청나게 많은 플래그 레지스터가 있지만 연산결과에 자주 쓰는 4가지만 알아보면
- CF : 부호 없는 수의 연산 결과가 비트의 범위를 넘은 경우
- ZF : 연산 결과가 0 일때
- SF : 연산 결과가 음수 일때
- OF : 부호 있는 수의 연산 결과가 비트 범위를 넘었을 경우
이렇게 4가지가 있다
나머지는 알아서 찾아보길.. 크흠