x86-64 아키텍처: 레지스터

Hyeon_uk·2022년 5월 26일
1

System

목록 보기
1/1
post-thumbnail

범용 레지스터

주용도는 있으나, 그 외의 다양한 용도로 사용될 수 있는 레지스터

❗ 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 )스택의 바닥을 가르키는 포인터



세그먼트 레지스터

x64 아키텍처에는 cs, ss, ds, es, fs, gs 총 6가지 세그먼트 레지스터가 존재한다.

❗ 각 레지스터의 크기는 16비트

과거에는 사용가능한 물리 메모리의 크기를 키우려고 만들었지만,

현대의 x64 아키텍처에서는 cs, ds, ss 레지스터는 코드 영역과 데이터, 스택 메모리 영역을 가르킬 때 사용

나머지는 운영체제 별로 용도를 결정할 수 있도록 범용적인 용도로 쓰인다.


명령어 포인터 레지스터

CPU가 어느 부분을 실행할지 가르키는 레지스터

❗ x64 아키텍처의 명령어 레지스터는 `rip` 이며 , 크기는 8바이트이다.



플래그 레지스터

프로세서의 현재 상태를 저장하고 있는 레지스터

❗ x64 아키텍처에는 RFLAGS라고 불리는 64비트 크기의 플래그 레지스터가 존재

자주쓰는 플래그

플래그의미
CF ( Carry Flag )부호 없는 수의 연산 결과가 비트의 범위를 넘을 경우 설정
ZF ( Zero Flag )연산의 결과가 0일 경우에 설정
SF ( Sign Flag )연산의 결과가 음수일 경우에 설정
OF ( Overflow Flag )부호 있는 수의 연산 결과가 비트 범위를 넘을 경우 설정



레지스터의 호환

x86-64 아키텍처는 IA-32의 64비트 확장 아키텍처이며, 호환 가능


출처 : 드림핵

profile
전공자가 되기 위해 노력중

0개의 댓글