모든 프로그램은 컴퓨터 부품이 실행하며, 이는 성능, 용량, 그리고 비용을 결정한다.
✔️ 컴퓨터구조의 큰 두 분류
1. 프로그램을 이루는 두 정보
1) 명령어 (instruction) : 컴퓨터를 동작시키는 실질적인 정보
2) 데이터 (data) : 명령어의 대상 (재료)
2. 컴퓨터의 네 가지 핵심 부품

1) CPU : 명령어 해석, 실행 담당하는 장치
2) 메인 메모리 & 캐시 메모리 : 실행 중인 프로그램 저장하는 장치
3) 보조기억장치 : 보관할 프로그램 저장하는 장치
4) 입출력장치(I/O) : 컴퓨터 내외부와 정보를 주고 받는 장치
◾메인 보드(마더보드) : 이러한 핵심 부품들을 연결할 기판
◾ 시스템 버스 : 부품 간 정보를 주고받을 통로
즉, 고급 언어로 작성된 소스코드는 내부적으로 저급 언어로 구성된 명령어와 데이터로 변환된다. 따라서 CPU나 컴파일러의 종류에 따라 변환되는 언어의 형태가 달라질 수 있다.
✔️ 저급 언어의 두 종류
✔️ 고급 언어에서 저급 언어로 변환되는 대표적 방식
컴파일
인터프리트 (interpret)
❗오개념 주의❗
고급언어에서 저급언어로 바뀌는 과정은 complier explorer에서 확인 가능하다. (https://www.godbolt.org/)

사진에서와 같이 색깔로 구분지어 각 코드 라인이 어떻게 변환되는지 시각적으로 확인이 가능하다.
putty등과 같은 곳에서 컴파일을 해보자
$cat hello.c // 파일 내용을 복사하여 출력
#include <stdio.h>
int main()
{
printf("hello world\n");
return 0;
}
$gcc -o hello hello.c // hello라는 파일에 hello.c을 컴파일한 결과를 저장
$ ./hello
hello world
$gcc -S hello.c -o hello.S //hello.c로 어셈블리어 생성하여 hello.S에 저장
📌 명령어 구조
이때, 명령어는 어떤 것을 대상으로 어떤 것을 수행할 것을 명시하는 것이다.
명령의 대상은 오퍼랜드(operand)라고 하며, 명령의 동작을 연산코드(op-code)라고 한다.
오퍼랜드는 대상(데이터)이 직접 명시되기도 하고, 대상의 위치 즉 레지스터 이름이나 메모리 주소가 명시되기도 한다.
| 연산코드 | 설명 | |
|---|---|---|
| 데이터 | MOVE | 데이터를 옮겨라 |
| 전송 | STORE | 메모리에 저장해라 |
| LOAD(FETCH) | 메모리에서 가져와라 | |
| PUSH | 스택 최상단에 데이터를 저장하라 | |
| POP | 스택 최상단의 데이터를 가져와라 | |
| --- | --- | --- |
| 산술 | ADD/SUBTRACT/MULTIPLY/DIVIDE | 덧셈/뺄셈/곱셈/나눗셈을 수행하라 |
| 논리 | INCREMENT/DECREMENT | 1 증가/감소시켜라 |
| 연산 | AND/OR/NOT | AND/OR/NOT 연산을 수행해라 |
| COMPARE | 두 숫자 또는 TRUE/FALSE 값을 비교하라 | |
| --- | --- | --- |
| 제어 | JUMP | 특정 주소로 실행 순서를 옮겨라 |
| 흐름 | CONDITIONAL JUMP | 조건에 부합할 경우 특정 주소로 실행 순서를 옮겨라 |
| HALT | 프고르매 실행을 멈춰라 | |
| CALL | 되돌아올 주소를 저장한 채 특정 주소로 실행 순서를 옮겨라 | |
| RETURN | CALL 호출 시 지정했던 주소로 돌아가라 | |
| --- | --- | --- |
| 입출력 | READ(INPUT) | 특정 입출력장치로부터 데이터를 읽어라 |
| 제어 | WRTIE(OUTPUT) | 특정 입출력장치로 데이터를 써라 |
| START IO | 입출력장치를 시작하라 | |
| TEST IO | 입출력장치의 상태를 확인하라 |
📌 주소 지정
주소를 지정하여 이야기하는 이유는 명령어의 길이가 한정되어 있기 때문!
✔️ 주소 지정 방식
1. 즉시 주소 지정
- 연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시
- 가장 빠른 주소 지정 + 데이터 크기에 제한
컴퓨터는 0과 1만을 이해한다.
📌 이진수와 2의 보수

2의 보수법
👉 16진법(16진수)
📌 부동 소수점
십진수 소수를 이진수로 표현할 때 십진수 소수와 이진수 소수 표현이 딱 맞아 떨어지지 않을 수 있어, 십진수 소수 값을 계산하여 그 값을 비교할 때 원하는 값이 도출되지 않을 수 있다.
ex. 1/3이라는 분수를 m X 3^n 꼴로 표현하면 딱 떨어지지만, mx X 10^n 꼴로 표현하면 무한히 많은 가수가 필요하다.
📌 문자 인코딩과 디코딩
0과 1로 문자 표현하기
흔히 코딩을 하다보면 문자가 깨지는 경우를 만날 수 있을 것이다. 이러한 경우는 인코딩 버전이 맞지 않아 발생하는 문제이다!

📌 CPU 구성 요소

ALU(산술논리연산장치) : 연산을 수행하는 장치 (계산을 담당하는 회로)
제어 장치 : 명령어를 해석하고 제어 신호를 내보내는 장치
레지스터 : 명령어 처리 전후로 값을 임시 저장하는 장치
📌 레지스터 살펴보기
📌 명령어 사이클과 인터럽트