<aside> 💡
컴파일
컴파일 & 인터프리트 컨버터
컴파일과정

전처리 test.c → test.i … 코드펼치기(include, define, #if/ifdef…)

컴파일 test.i → test.s … 저급언어로 변환(어셈블리)
어셈블 test.s → test.o … 기계어로 변환 (목적코드/목적파일)
nm 유틸리티
→ $ nm target.oreadelf
→ $ readelf -s target.oreadelf
→ $ readelf -hSl target.oobjdump
→ $ objdump -d target.o링킹 test.o → test.exe … 여러 목적파일을 실행파일로 패키징

API vs ABI </aside>
<aside> 💡
CPU
CPU

레지스터 : 작업용 임시저장장치 → 명령어&데이터는 실행전후 레지스터에 적재
프로그램 카운터 : 메모리에서 읽어올 명령어주소
명령어 레지스터 : 읽어온 명령어 데이터
메모리주소 레지스터 : 메모리주소 저장
메모리버퍼 레지스터 : 메모리향 데이터버스 송수신용 버퍼공간
플래그 레지스터 : 연산 결과 / CPU상태 부가정보

| 플래그 종류 | 의미 | 사용 예시 |
|---|---|---|
| 부호 플래그 | 연산 결과의 부호 | 1일 경우 결과는 음수, 0일 경우 결과는 양수. |
| 제로 플래그 | 연산 결과가 0인지 | 1일 경우 결과는 0, 0일 경우 결과는 0이 아님. |
| 캐리 플래그 | 올림수/ 빌림수 발생여부 | 1일 경우 올림수/빌림수 발생, 0일 경우 발생 안 함. |
| 오버플로우 플래그 | 오버플로우 발생여부 | 1일 경우 오버플로우 발생, 0일 경우 발생 안 함. |
| 인터럽트 플래그 | 인터럽트가 가능한지 | 1일 경우 인터럽트 가능, 0일 경우 불가능. |
| 슈퍼바이저 플래그 | 커널 모드 실행 여부 | 1일 경우 커널 모드, 0일 경우 사용자 모드. |
범용 레지스터 : 자유사용영역
스택포인터 : 스택의 최상단
베이스 레지스터 : 기준 주소 저장 (offset기준)
캐시형
ALU

제어장치

클럭 : 컴퓨터의 모든 부품 작동의 동시성 기준이 되는 시간 단위

명령어 주소지정방식
MMU 메모리 관리 장치 : 논리(+베이스레지스터=)물리 주소변환

인터럽트

시스템 버스 : 각각의 주제를 주고 받는 통로(회로)
명령어 파이프라인
개념 : 단계가 곂치지 않는다면, 각 단계를 동시 실행가능

위험
슈퍼스칼라 : 여러개의 명령어 파이프라인 보유 CPU구조
CISC (Complex Instruction Set Computer)
RISC (Reduced Instruction Set Computer) </aside>
<aside> 💡
</aside>
<aside> 💡
</aside>
<aside> 💡
</aside>
<aside> 💡
</aside>