1. 명령어
(1) 고급언어와 저급언어
- 우리가 프로그램을 만들 때 사람이 이해하기 쉬운 언어를 고급언어라고 함.
- 컴퓨터가 직접 이해하고 실행할 수 있는 언어는 저급언어
- 고급 언어로 작성된 소스코드가 실행되려면 반드시 저급언어 즉, 명령어로 변환되어야 한다.
1) 저급언어-기계어
- 0과 1의 명령어 비트로 이루어진 언어
- 컴퓨터는 0과 1로 이루어진 기계어를 이해하고 실행
2) 저급언어-어셈블리어
push rbp
mov rbp, rsp
mov DWORD PTR [rbp-4], 1
mov DWORD PTR [rbp-4], 2
mov edx, DWORD PTR[rbp-4]
mov eax, DWORD PTR[rbp-8]
add eax, edx
mov DWORD PTR [rbp-12], eax
mov eax, 0
pop rbp
ret
- 어셈블리어는 매우 중요한 관찰의 대상
- 어셈블리어를 읽으면 컴퓨터가 프로그램을 어떤 과정으로 실행하는지 알 수 있음.
(2) 컴파일 언어와 인터프리터 언어
1) 컴파일 언어
- 컴파일러에 의해 소스 코드 전체가 저급언어로 변환되어 실행되는 고급언어
- 컴파일: 작성된 소스코드를 저급언어로 변환시키는 과정
- 컴파일러: 컴파일을 수행해주는 도구
- 오류가 하나라도 발생하면 컴파일 실패.
- 컴파일러를 통해 저급언어로 변환된 코드: 목적코드
2) 인터프리터 언어
- 소스코드가 한줄씩 실행되는 고급언어(예:파이썬)
- 인터프리터: 소스코드를 한줄씩 저급언어로 변환하여 실행해주는 도구
- 인터프리터 언어는 소스 코드를 한줄씩 실행하기 때문에 소스코드 n번째 줄에 오류가 있더라도 n-1번째 줄까지 올바르게 수행
- 인터프리터 언어는 컴파일언어보다 느림
(3) 목적파일 vs 실행파일
- 목적코드로 이루어진 파일: 목적파일
- 실행코드로 이루어진 파일: 실행파일
- 목적코드가 실행 파일이 되기 위해서 링킹이라는 작업을 거친다.
링킹
helper.c와 main.c라는 두개의 소스코드 작성했다고 가정
main.c
helper.c에 있는 HELPER_더하기
화면 출력 라이브러리
helper.c
HELPER_더하기
이들을 컴파일하면 소스코드로부터 목적 코드가 생성되고
helper.c와 main.c 목적 파일은 각각 helper.o, main.o
main.o는 저급언어라 실행할 수 없음.
main.o는 main.c 내용이 그대로 저급언어로 변환될뿐 어떻게 실행되는지 알 수 없다.
main.o가 실행되면 main.o에 없는 외부 기능을 출력하는 기능을 연결하는 작업을 링킹이라고 한다.