low-level programming language: 명령어로 이루어져 있음 / 기계어, 어셈블리어
- 기계어(machine code): 0과 1로 이루어진 명령어 모음
- 어셈블리어: 기계어를 읽기 편한 형태로 번역한 언어
컴파일 언어: 컴파일(컴파일 언어로 작성된 소스 코드 전체가 저급 언어로 변환되는 과정) 방식으로 작동하는 프로그래밍 언어
- 컴파일러에 의해 소스 코드 전체가 저급 언어로 변환되어 실행되는 고급 언어
- 대표적으로 C
- 컴파일러가 소스 코드 내에서 오류를 하나라도 발견하면, 해당 소스 코드는 컴파일에 실패
- 목적 코드(object code): 컴파일러를 통해 저급 언어로 변환된 코드
인터프리터 언어: 인터프리트 방식으로 작동하는 프로그래밍 언어
- 인터프리터에 의해 소스 코드가 한 줄씩 실행되는 고급 언어
- 대표적으로 Python
- 소스 코드 N번째 줄에 문법 오류가 있더라도 N-1 번째 줄까지는 올바르게 수행됨
- 일반적으로 인터프리터 언어는 컴파일 언어보다 느림
-> 컴파일을 통해 나온 결과물(목적 코드)는 컴퓨터가 이해하고 실행할 수 있는 저급 언어이나, 인터프리터 언어는 소스 코드 마지막에 이를 때까지 한 줄씩 저급 언어로 해석하며 실행해야 하기 때문.
고급 언어가 저급 언어로 변환되는 대표적인 방법에 컴파일 방식과 인터프리트 방식이 있다.
모든 프로그래밍 언어를 컴파일 언어와 인터프리터 언어로 딱 잘라 구분할 수 없다.
목적 파일: 목적 코드로 이루어진 파일
실행 파일: 실행 코드로 이루어진 파일로, 대표적인 실행 파일로 윈도우의 .exe 확장자를 가진 파일
목적 코드 -(링킹)-> 실행 파일
링킹(linking): 해당 목적 파일에 없는 외부 기능들과 연결 짓는 작업
명령어 = 연산 코드(operation code) + 오퍼랜드(operand)
- 오퍼랜드(= 피연산자): 연산에 사용할 데이터 또는 연산에 사용할 데이터가 저장된 위치
- 오퍼랜드 필드에는 주로 사용할 데이터가 저장된 위치, 즉 메모리 주소나 레지스터 이름이 담김. 따라서 오퍼랜드 필드를 주소 필드라 부름.
- 오퍼랜드는 명령어 안에 하나도 없을 수도 있고, 여러 개 있을 수도 있음.
-오퍼랜드가 N(>=0) 개인 명령어 : N-주소 명령어
- 연산 코드(= 연산자): 명령어가 수행할 연산
- 기본적인 연산 코드 유형: 데이터 전송, 산술/논리 연산, 제어 흐름 변경, 입출력 제어
- 명령어의 종류와 생김새는 CPU마다 다름. -> 연산 코드의 종류와 생김새 또한 CPU마다 다름.
유효 주소(effective address): 연산 코드에 사용할 데이터가 저장된 위치, 즉 연산의 대상이 되는 데이터가 저장된 위치
주소 지정 방식(addressing mode): 유효 주소를 찾는 방법
<대표적인 다섯 가지 주소 지정 방식>
● 즉시 주소 지정 방식(immediate addressing mode): 오퍼랜드 필드에 연산에 사용할 데이터를 직접 명시
- 가장 간단하고 가장 빠른 주소 지정 방식
● 직접 주소 지정 방식(direct addressing mode):오퍼랜드 필드에 유효 주소(메모리 주소)를 직접적으로 명시
- 오퍼랜드 필드의 길이가 연산 코드의 비트 수만큼 줄어들어, 표현할 수 있는 유효 주소에 제한 발생 가능
● 간접 주소 지정 방식(indirect addressing mode): 오퍼랜드 필드에 유효 주소의 주소를 명시
- 두 번의 메모리 접근으로 앞의 두 방식보다 일반적으로 느린 방식
● 레지스터 주소 지정 방식(register addressing mode): 오퍼랜드 필드에 연산에 사용할 데이터를 저장한 레지스터(레지스터 이름)를 직접적으로 명시
- 일반적으로 CPU 외부에 있는 메모리에 접근하는 것보다 CPU 내부에 있는 레지스터에 접근하는 것이 더 빠름
-> 직접 주소 지정 방식보다 빠르게 데이터 접근 가능
- 표현할 수 있는 레지스터 크기에 제한 발생 가능
● 레지스터 간접 주소 지정 방식(register indirect addressing mode): 연산에 사용할 데이터를 메모리에 저장하고, 그 주소(유효 주소)를 저장한 레지스터를 오퍼랜드 필드에 명시
- 유효 주소 찾는 과정이 간접 주소 지정 방식과 비슷하지만, 메모리 접근 횟수가 한 번으로 줄어듦
- 일반적으로 CPU 외부에 있는 메모리에 접근하는 것보다 CPU 내부에 있는 레지스터에 접근하는 것이 더 빠름
-> 간접 주소 지정 방식보다 빠름
스택(stack) - LIFO(Last In First Out; 후입선출)
큐(queue) - FIFO(First In First Out; 선입선출)
'✍🏻 TIL > 혼자 공부하는 컴퓨터 구조+운영체제' 카테고리의 다른 글
| [Chapter 04] CPU의 작동 원리 (6) | 2025.07.29 |
|---|---|
| [Chapter 02] 데이터 (1) | 2025.07.24 |
| [Chapter 01] 컴퓨터 구조 시작하기 (1) | 2025.07.24 |
