1) 소스 코드와 명령어
1-1) 고급 언어와 저급 언어
1-2) 컴파일 언어와 인터프리터 언어
1-3) 목적 파일 VS 실행 파일
2) 명령어의 구조
2-1) 연산 코드와 오퍼랜드
2-2) 주소 지정 방식
2-3) 스택과 큐(중요!!)
1) 소스 코드와 명령어
1-1) 고급 언어와 저급 언어
- 고급 언어(high-level programming language) : 사람이 이해하고 작성하기 쉽게 만들어진 언어
- 저급 언어(low-level programming language) : 컴퓨터가 직접 이해하고 실행할 수 있는 언어
※ 컴퓨터가 이해하고 실행할 수 있는 언어는 오직 저급 언어뿐이기에 고급 언어로 작성된 소스 코드가 실행되려면 반드시 저급 언어, 즉 명령어로 변환되어야 함!
* 저급 언어의 종류
- 기계어(machine code) : 0과 1로 이루어진 명령어로 구성된 저급 언어
- 어셈블리어(assembly language) : 0과 1로 이루어진 기계어를 사람이 읽기 편한 형태로 번역한 저급 언어
1-2) 컴파일 언어와 인터프리터 언어
※ 고급 언어가 저급 언어로 변환되는 방식에는 크게 두 가지, 컴파일 방식과 인터프리터 방식이 있음
(컴파일 방식으로 작동하는 프로그래밍 언어를 컴파일 언어, 인터프리트 방식으로 작동하는 프로그래밍 언어를 인터프리터 언어라고 함)
- 컴파일 언어 : 컴파일러에 의해 소스 코드 전체가 저급 언어로 변환되어 실행되는 고급 언어
- 인터프리터 언어 : 인터프리터에 의해 소스 코드가 한 줄씩 저급 언어로 변환되어 실행되는 고급 언어
+) 컴파일(compile) : 컴파일 언어로 작성된 소스 코드의 코드 전체가 저급 언어로 변환되는 과정
+) 컴파일러(compiler) : 컴파일을 수행해주는 도구
+) 목적 코드(object code) : 컴파일러를 통해 저급 언어로 변환된 코드
+) 인터프리터(interpreter) : 소스 코드를 한 줄씩 저급 언어로 변환하여 실행해 주는 도구
※ 목적 코드는 컴퓨터가 이해하고 실행할 수 있는 저급 언어인 반면, 인터프리터 언어는 소스 코드 마지막에 이를 때까지 한 줄 한 줄씩 저급 언어로 해석하며 실행해야 하기 때문에 일반적으로 인터프리터 언어는 컴파일 언어보다 느림
1-3) 목적 파일 VS 실행 파일
- 목적 파일 : 목적 코드로 이루어진 파일
- 실행 파일 : 실행 코드로 이루어진 파일(윈도우의 .exe 확장자를 가진 파일이 대표적인 실행 파일임)
- 링킹 : 목적 코드가 실행 파일이 되기 위해 외부 기능들을 연결짓는 작업
2) 명령어의 구조
2-1) 연산 코드와 오퍼랜드
※ 명령어는 연산 코드와 오퍼랜드로 구성되어 있음
- 연산 코드(operation code) : 명령어가 수행할 연산을 의미하며, 연산자라고도 부름
- 오퍼랜드(operand) : '연산에 사용할 데이터' 또는 '연산에 사용할 데이터가 저장된 위치'를 의미하며, 피연산자라고도 부름
* 오퍼랜드 필드 : 숫자나 문자 등을 나타내는 데이터 또는 메모리나 레지스터 주소가 올 수 있음(단, 오퍼랜드 필드에는 숫자나 문자와 같이 연산에 사용할 데이터를 직접 명시하기보다는 많은 경우 연산에 사용할 데이터가 저장된 위치, 즉 메모리 주소나 레지스터 이름이 담김)
- 0-주소 명령어 : 오퍼랜드가 하나도 없는 명령어
- 1-주소 명령어 : 오퍼랜드가 하나인 명령어
- 2-주소 명령어 : 오퍼랜드가 두 개인 명령어
- 3-주소 명령어 : 오퍼랜드가 세 개인 명령어
* 연산 코드 기본 유형
- 데이터 전송
- 산술/논리 연산
- 제어 흐름 변경
- 입출력 제어
2-2) 주소 지정 방식
* 주소 지정 방식(addressing mode) : 오퍼랜드 필드에 데이터가 저장된 위치를 명시할 때 연산에 사용할 데이터 위치를 찾는 방법
* 유효 주소(effective address) : 연산 코드에 사용할 데이터가 저장된 위치, 즉 연산의 대상이 되는 데이터가 저장된 위치
* 대표적인 주소 지정 방식
- 즉시 주소 지정 방식(immediate addressing mode) : 연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시하는 방식
- 직접 주소 지정 방식(direct addressing mode) : 오퍼랜드 필드에 유효 주소를 직접적으로 명시하는 방식
- 간접 주소 지정 방식(indirect addressing mode) : 유효 주소의 주소를 오퍼랜드 필드에 명시하는 방식(두 번의 메모리 접근이 필요하므로 앞서 설명한 주소 지정 방식들보다 일반적으로 느림)
- 레지스터 주소 지정 방식(register addressing mode) : 직접 주소 지정 방식과 비슷하게 연산에 사용할 데이터를 저장한 레지스터를 오퍼랜드 필드에 직접 명시하는 방법(일반적으로 CPU 외부에 있는 메모리에 접근하는 것보다 CPU 내부에 있는 레지스터에 접근하는 것이 더 빠르기 때문에 레지스터 주소 지정 방식은 직접 주소 지정 방식보다 빠르게 데이터에 접근할 수 있음)
- 레지스터 간접 주소 지정 방식(register indirect addressing mode) : 연산에 사용할 데이터를 메모리에 저장하고, 그 주소(유효 주소)를 저장한 레지스터를 오퍼랜드 필드에 명시하는 방법
2-3) 스택과 큐(중요!!)
- 스택(stack) : 한쪽 끝이 막혀 있는 통과 같은 저장 공간으로 '나중에 저장한 데이터를 가장 먼저 빼내는 데이터 관리 방식(후입선출)'이라는 점에서 LIFO(Last In First Out) 자료구조라고도 부름(스택에 새로운 데이터를 저장하는 명령어는 'PUSH', 스택에 저장된 데이터를 꺼내는 명령어는 'POP')
- 큐(queue) : 스택과는 달리 양쪽이 뚫려 있는 통과 같은 저장 공간으로 '가장 먼저 저장된 데이터부터 빼내는 데이터 관리 방식(선입선출)'이라는 점에서 FIFO(First In First Out) 자료구조라고도 부름
'Computer Structure & Operating System > 2025 version' 카테고리의 다른 글
Computer Structure & OS(6) - 메모리와 캐시 메모리 (0) | 2025.02.27 |
---|---|
Computer Structure & OS(5) - CPU 성능 향상 기법 (0) | 2025.02.25 |
Computer Structure & OS(4) - CPU와 작동 원리 (0) | 2025.02.24 |
Computer Structure & OS(2) - 0과 1로 숫자 및 문자를 표현하는 방법 (0) | 2025.02.19 |
Computer Structure & OS(1) - 컴퓨터 구조를 알아야 하는 이유, 컴퓨터 구조의 큰 그림 (0) | 2025.02.18 |