컴퓨터의 기능 구조에 대한 설계
폰 노이만 구조, 하버드 구조, 수정된 하버드 구조명령어 집합 구조(Instruction Set Architecture)
: CPU의 명령어에 대한 설계
x86-64 등마이크로 아키텍처(Micro Architecture)
: CPU의 하드웨어적 설계
하드웨어 및 컴퓨팅 방법론
: 프로그램의 연산을 처리하고 시스템을 관리하는 컴퓨터의 두뇌(연산, 제어)
산술논리장치(Arithmetic Logic Unit, ALU) : 산술/논리 연산 처리제어장치(Control Unit) : CPU 제어레지스터(Register) : CPU에 필요한 데이터 저장: 컴퓨터가 동작하는데 필요한 여러 데이터 저장(저장)
주기억장치 : 프로그램 실행과정에서 필요한 데이터들을 임시로 저장하기 위해 사용보조기억장치 : 운영체제, 프로그램 등과 같은 데이터를 장기간 보관하고자 할 때 사용: 컴퓨터 부품과 부품 사이 또는 컴퓨터와 컴퓨터 사이에 신호를 전송하는 통로(데이터나 제어 신호 교환)
데이터 버스(Data Bus) : 데이터 이동주소 버스(Address Bus) : 주소 지정제어 버스(Control Bus) : 읽기/쓰기 제어명령어 집합 구조
: CPU가 해석하는 명령어의 집합
프로그램을 실행하면 명령어들을 CPU가 읽고, 처리
(프로그램은 기계어로 이루어짐)
IA-32, x86-64(x64), MIPS, AVR 등
x86-64는 고성능 프로세서를 설계하기 위해 사용
x86-64 : AMD가 개발한 x86과 호환되는 64비트 아키텍처(인텔의 32비트 CPU 아키텍처인 IA-32를 64비트로 확장)
* n비트 아키텍처
n => CPU가 한번에 처리할 수 있는 데이터의 크기
ex ) 32비트 아키텍처, 64비트 아키텍처에서 32와 64
레지스터
: CPU가 데이터를 빠르게 저장하고 사용할 때 이용하는 보관소
x64 아키텍처에 존재하는 레지스터↓
범용 레지스터(General Register)
: x86-64에서 각각의 범용 레지스터는 8바이트를 저장 가능
↓이 외에도 x64에는 r8, r9 , ... , r15까지의 범용 레지스터가 더 존재
| 이름 | 주용도 |
|---|---|
| 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) | 스택의 바닥을 가리키는 포인터 |
세그먼트 레지스터(Segment Register)
명령어 포인터 레지스터(Instruction Pointer Register, IP)
: CPU가 어느 부분의 코드를 실행할지 가리킴
플래그 레지스터(Flag Register)
: 프로세서의 현재 상태를 저장
x64 아키텍처에서는 RFLAGS라고 불리는 64비트 크기의 플래그 레지스터 존재

| 플래그 | 의미 |
|---|---|
| CF(Carry Flag) | 부호 없는 수의 연산 결과가 비트의 범위를 넘을 경우 설정 |
| ZF(Zero Flag) | 연산의 결과가 0일 경우 설정 |
| SF(Sign Flag) | 연산의 결과가 음수일 경우 설정 |
| OF(Overflow Flag) | 부호 있는 수의 연산 결과가 비트 범위를 넘을 경우 설정 |
RAX(64비트) = 상위 32비트 + 하위 32비트(EAX)
EAX(32비트) = 상위 16비트 + 하위 16비트(AX)
AX(16비트) = 상위 8비트(AH) + 하위 8비트(AL)
