소스 코드와 명령어
1. 고급언어와 저급언어
고급언어: 사람이 이해하고 작성하기 쉽게 만들어진 언어
저급언어: 컴퓨터가 직접 이해하고 실행할 수 있는 언어
컴퓨터는 C, C++, Java, Python같은 프로그래밍 언어를 이해할 수 없다. 컴퓨터가 이해하고 실행할 수 있는 언어는 명령어로 이루어진 저급언어뿐이기 때문에 고급언어에서 저급언어(=명령어)로의 변환이 필요하다.
저급언어의 두가지 종류
1.1. 기계어
0과 1의 명령어 비트로 이루어진 언어로 2진수, 혹은 16진수로 표현한다.
오로지 컴퓨터만을 위해 만들어진 언어이기 때문에 사람이 의미를 해석하긴 힘들다.
01010101 01000111 00001111 01111010
00000000 10001001 11111111 00010000
1.2. 어셈블리어
0과 1의 명령어를 읽기 편한 형태로 번역한 언어
기계어 | 어셈블리어 |
0101 0101 | push rbp |
0101 1101 | pop rbp |
어셈블리어를 읽으면 컴퓨터가 프로그램을 어떤 과정으로 실행하는지, 어떤 절차로 작동하는지 관찰할 수 있다.
push rbp
mov rbp, rsp
mov DWORD PTR [rbp-4], 1
어셈블리어 한줄한줄이 명령어이다
2. 고급언어에서 저급언어로 변환 방법
2.1. 컴파일 방식
컴파일 언어
컴파일 방식으로 작동하는 언어
컴파일러에 의해 소스 코드 전체가 저급 언어로 변환되어 실행되는 고급 언어이다.
EX) C
컴파일러
개발자가 작성한 소스 코드 전체를 쭉 훑어보며, 소스 코드에 문법적인 오류는 없는지, 실행 가능한 코드인지 등을 따지며 처음부터 끝까지 저급 언어로 컴파일 한다.
→ 오류가 하나라도 발견되면 소스코드는 컴파일에 실패한다

2.2. 인터프리터 방식
인터프리트 방식
인터프리트 방식으로 작동하는 언어
인터프리터에 의해 소스 코드 한 줄씩 실행되는 고급 언어이다.
EX) Python
인터프리터
소스코드를 한줄씩 저급 언어로 변환하여 실행해주는 도구
→ 소스 코드 N번째 줄에 문법 오류가 있어도 N-1번째 줄까지는 올바르게 수행된다
저급 언어로 변환하는 시간을 기다릴 필요 X
컴파일방식 인터프리터 방식 속도 비교
컴파일 언어: 독일어로 쓰인 책(소스 코드) 전체를 한국어로 번역한뒤 번역된 책(목적 코드)를 전해주는 방식
인터프리터 언어: 독일어로 쓰인 책을 한 줄씩 한국어로 설명해주는 방식
→ 컴파일 방식 > 인터프리터 방식
명령어의 구성 - 연산코드와 오퍼랜드
명령어 = '무엇을 대상으로' + '어떤 동작을 수행하라'
더해라 | 100과 | 120을 |
빼라 | 10을 | 메모리 128번지에 |
= 연산 = 명령어의 작동
= 연산에 사용할 데이터 & 연산에 사용할 데이터가 저장된 위치
연산코드 / 오퍼랜드
push rbp
mov rbp, rsp
mov DWORD PTR [rbp - 4], 1
1. 연산코드(연산자)
명령어가 수행할 연산
- 데이터 전송
- 산술/논리 연산
- 제어 흐름 변경
- 입출력 제어
2. 오퍼랜드(피연산자)
연산에 사용할 데이터 또는 연산에 사용할 데이터가 저장된 위치(메모리나 레지스터 주소)
명령어에 따라 오퍼랜드의 개수는 다르다

주소 지정 방식
오퍼랜드 필드에 데이터가 저장된 위치를 명시할때 연산에 사용할 데이터 위치를 찾는 방법
= 유효 주소 찾는 방법
1) 즉시 주소 지정 방식
연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시
- 장점: 속도가 빠르다(메모리나 레지스터로부터 찾는과정이 없어서)
- 장점: 데이터의 크기가 작아진다
2) 직접 주소 지정 방식
오퍼랜드 필드에 유효 주소(메모리 주소)를 직접적으로 명시하는것
- 장점: 데이터 크기 증가
- 단점: 유효주소 표현 범위가 연산 코드의 비트수만큼 감소
= 표현할 수 있는 유효 주소에 제한
3) 간접 주소 지정 방식
유효 주소의 주소를 오퍼랜드 필드에 명시
- 장점: 데이터 크기 증가
- 단점: 메모리에 두번접근해야하기 때문에 속도가 느리다
4) 레지스터 주소 지정 방식
연산에 사용할 데이터를 저장한 레지스터의 유효주소(이름) 오퍼랜드 필드에 직접 명시
- 장점: 직접 주소 지정 방식보다 빠르다(CPU내부에 있는 레지스터에 접근하는 속도 > CPU 외부에 있는 메모리에 접근하는 속도)
- 단점: 레지스터 크기에 제한
5) 레지스터 간접 주소 지정 방식
연산에 사용할 데이터를 메모리에 저장하고 유효주소를 저장한 레지스터를 오퍼랜드 필드에 명시
- 장점: 간접 주소 지정 방식과 비슷하지만 메모리에 한번 접근하고, 레지스터에 접근하지도 않기 때문에 속도가 빠르다