❗ x86-64에서 각각의 범용 레지스터는 8바이트 저장 가능주용도는 있으나, 그 외의 다양한 용도로 사용될 수 있는 레지스터
이름 | 주용도 |
---|---|
rax ( accumulator register ) | 함수의 반환 값 |
rbx ( base register ) | 주된 용도 없음 |
rcx ( counter register ) | 반복문의 반복 횟수 , 각종 연산의 시행 횟수 |
rdx ( data register ) | 주된 용도 없음 |
rsi ( source index ) | 데이터를 옮길 때 원본을 가르키는 포인터 |
rdi ( destination index ) | 데이터를 옮길 때 목적지를 가르키는 포인터 |
rsp ( stack pointer ) | 사용중인 스택의 위치를 가르키는 포인터 |
rbp ( stack base pointer ) | 스택의 바닥을 가르키는 포인터 |
❗ 각 레지스터의 크기는 16비트x64 아키텍처에는
cs, ss, ds, es, fs, gs
총 6가지 세그먼트 레지스터가 존재한다.
과거에는 사용가능한 물리 메모리의 크기를 키우려고 만들었지만,
현대의 x64 아키텍처에서는 cs, ds, ss
레지스터는 코드 영역과 데이터, 스택 메모리 영역을 가르킬 때 사용
나머지는 운영체제 별로 용도를 결정할 수 있도록 범용적인 용도로 쓰인다.
❗ x64 아키텍처의 명령어 레지스터는 `rip` 이며 , 크기는 8바이트이다.CPU가 어느 부분을 실행할지 가르키는 레지스터
❗ x64 아키텍처에는 RFLAGS라고 불리는 64비트 크기의 플래그 레지스터가 존재프로세서의 현재 상태를 저장하고 있는 레지스터
자주쓰는 플래그
플래그 | 의미 |
---|---|
CF ( Carry Flag ) | 부호 없는 수의 연산 결과가 비트의 범위를 넘을 경우 설정 |
ZF ( Zero Flag ) | 연산의 결과가 0일 경우에 설정 |
SF ( Sign Flag ) | 연산의 결과가 음수일 경우에 설정 |
OF ( Overflow Flag ) | 부호 있는 수의 연산 결과가 비트 범위를 넘을 경우 설정 |
x86-64 아키텍처는 IA-32의
64비트 확장 아키텍처
이며, 호환 가능
출처 : 드림핵