- 컴퓨터 구조(Computer Architecture)
- 폰노이만 구조
- 중앙처리장치 - 버스 - 메모리 의 구조로 되어 있음
- 중앙처리장치는 연산, 버스는 데이터 통로, 메모리는 연산할 데이터를 보내는 역할
- 중앙처리장치에도 레지스터라는 메모리가 있는데, 연산속도가 데이터 교환보다 빠르므로 병목을 방지하고 원활한 연산을 위해 레지스터가 존재함
- 폰노이만 구조
- 명령어 집합 구조(Instruction Set Architecture, ISA)
- x86, ARM 등의 명령어 집합 구조가 존재함
- x86-64는 intel의 64비트 아키텍처이다
- 아키텍처의 64비트, 32비트는 중앙처리장치가 한 번에 처리할 수 있는 데이터의 양
- 다른말로 WORD 라고 부르는데, 32비트 아키텍처의 경우 가상메모리 공간이 상대적으로 적어서 고성능의 소프트웨어를 실행 못할 수 있는 반면, 64비트 아키텍처는 가상메모리 공간이 크기 때문에 가상메모리 공간이 부족할 일은 거의 없다
- 범용 레지스터(General Register)
- 주용도가 있지만 다양한 용도로 사용되는 레지스터
- x86-64에서 범용레지스터는 각각 8바이트의 크기를 가진다
이름 주용도
rax (accumulator register) | 함수의 반환 값 |
rbx (base register) | x64에서는 주된 용도 없음 |
rcx (counter register) | 반복문의 반복 횟수, 각종 연산의 시행 횟수 |
rdx (data register) | x64에서는 주된 용도 없음 |
rsi (source index) | 데이터를 옮길 때 원본을 가리키는 포인터 |
rdi (destination index) | 데이터를 옮길 때 목적지를 가리키는 포인터 |
rsp (stack pointer) | 사용중인 스택의 위치를 가리키는 포인터 |
rbp (stack base pointer) | 스택의 바닥을 가리키는 포인터 |
- 이외에도 r8~15 까지의 레지스터가 존재
- 세그먼트 레지스터(Segment Register)
- x64에는 cs, ss, ds, es, fs, gs총 6가지 레지스터가 있으며 각각은 16바이트의 크기를 가짐
- cs ss, ds 는 코드, 스택, 데이터 영역을 가리킬때 사용되고 나머지는 운영체제별로 범용적인 용도를 가진다
- 플래그 레지스터(Flag Register)
- 플래그 레지스터는 프로세서의 현재 상태를 저장하고 있는 레지스터이다
- x64에는 RFLAGS 라는 64비트 크기의 플래그 레지스터가 있다
- 64비트 이므로 최대 64개의 플래그를 사용할 수 있지만 20여개의 비트만 사용한다
- 아래는 대표적인 플래그 4가지 이다
CF(Carry Flag) | 부호 없는 수의 연산 결과가 비트의 범위를 넘을 경우 설정 됩니다. |
ZF(Zero Flag) | 연산의 결과가 0일 경우 설정 됩니다. |
SF(Sign Flag) | 연산의 결과가 음수일 경우 설정 됩니다. |
OF(Overflow Flag) | 부호 있는 수의 연산 결과가 비트 범위를 넘을 경우 설정 됩니다. |
- 명령어 포인터 레지스터(Instruction Pointer Register, IP)
- CPU가 어느 부분의 코드를 실행할지 가리키는 것이 명령어 포인터 레지스터 이다
- x64에서 명령어 레지스터는 rip이며, 크기는 8바이트 이다
- x86-64 아키텍처는 IA-32 의 확장 아키텍처이이며, 호환이 가능하다
- IA-32 아키텍처에서 레지스터들은 32비트의 크기를 가진다
- rax, rbx, rcx, rdx, rsi, rdi, rsp, rbp 가 64비트 레지스터 라면, eax, ebx, ecx, edx, esi, edi, esp, ebp는 64비트 레지스터의 하위 32비트 부분을 가리키며, ax, bx, cx, dx, si, di, sp, bp는 32비트 레지스터의 하위 16비트를 가리킨다
- 또, 16비트의 상위 8비트는 ah, bh, ch, dh 로 나타내고 하위 8비트는 al, bl, cl, dl로 나타낸다
'Dreamhack' 카테고리의 다른 글
[Dreamhack] Sys-Segment (0) | 2023.04.06 |
---|