Instruction Pointer의 약자로, X64 architecture에서 명령어 레지스터이다.
즉, (64bit에서는) 이 레지스터가 Program Counter이다.
다음에 CPU에서 어떤 명령을 실행할지 가리키는 레지스터이며 크기는 8byte이다.
Instruction Pointer 인데 rip가 된 이유는 64bit 레지스터를 가리킬 때는 앞에 r을 붙이기 때문이다.
32bit는 보통 e를 붙인다.
스택 포인터로 런타임 스택의 가장 끝 부분 (가장 최근에 push된 데이터)를 가리키기 위해 사용된다.
다시말해 사용중인 스택의 위치를 가리키는 포인터이다.
이 두 레지스터가 중요한 이유는 프로그램이 함수를 호출하는 과정에서 사용되기 때문이다.
함수 호출
함수가 호출되면 현재 %rip의 값(다음 실행할 명령어의 주소)은 스택에 저장된다.
%rsp가 스택의 최상단으로 이동하고, 새로운 스택 프레임이 생성된다.
함수 내부
함수 내에서 지역 변수 및 함수의 인수와 같은 데이터가 스택에 저장된다.
%rsp는 스택에 데이터가 푸시(push)될 때마다 감소하며, 팝(pop)될 때마다 증가한다.
함수 반환
함수가 반환되면 스택에서 이전 %rip 값이 팝되어 복원되며, 프로그램은 이전 호출 지점으로 다시 이동한다.
함수 호출(function call)은 프로그램에서 함수 간의 제어를 전환하는 중요한 메커니즘으로
1. 스택을 사용하여 호출 정보를 관리하며
2. ret 명령어를 통해 함수 호출을 완료하고 호출자로 제어를 반환한다.