고급언어와 저급언어
고급언어: 사람을 위한 언어, 대부분의 프로그래밍 언어가 고급 언어의 속한다.
**저급언어: 컴퓨터가 직접 이해하고 실행할 수 있는 언어, 컴퓨터가 이해할 수 있는 언어는 오직 저급 언어뿐이다.
저급언어의 두 종류
1. 기계어: 0과 1의 명령어 비트로 이루어진 언어이다.
2. 어셈블리어: 기계어를 읽기 편한 형태로 번역한 언어, 0과 1로 이루어지 기계어를 읽기 편하게 만든 저급 언어일 뿐,
개발자가 어셈블리어를 이용해 복잡한 프로그램을 만들기 쉽지 않다. 하지만 하드웨어와 밀접하게 있는 프로그램을 개발하는 임베디드 개발자, 게임 개발자, 정보 보안 분야 등의 개발자는 많이 사용한다.
컴파일 언어와 인터프리터 언어
고급언어로 작성한 소스 코드를 저급 언어로 변환하는 방식
1. 컴파일 방식: 컴파일 방식으로 작동하는 프로그래밍 언어를 컴파일 언어
▶ 컴파일 언어: 컴파일러에 의해 소스 코드 전체가 저급 언어로 변환되어 실행되는 고급 언어
- 컴파일: 코드 전체가 저급 언어로 변환되는 과정
- 컴파일러: 컴파일을 수행해 주는 도구
- 목적코드: 컴파일러를 통해 저급 언어로 변환된 코드
2. 인터프리터 방식: 인터프리터 방식으로 작동하는 프로그래밍 언어를 인터프리터 언어
▶ 인터프리터 언어: 인터프리터에 의해 소스 코드가 한 줄씩 실행되는 고급 언어 ex) Python
- 인터프리터: 소스 코드를 한 줄씩 저급 언어로 변환하여 실행해주는 도구
[참고!]
하나의 프로그래밍 언어가 반드시 둘 중 하나의 방식만으로 작동한다고 생각하는 것은 오개념이다. 대표적인 방식정도 생각하는 것이 좋다.
명령어의 구조
연산 코드와 오퍼랜드
명령어는 무엇을 대상으로, 어떤 작동을 수행하는 구조로 되어 있다.
명령어는 연산코드와 오퍼랜드로 구성되어 있다.
연산코드: 명령어가 수행할 연산, (연산자)
명령어의 종류와 생김새는 CPU마다 다르다.
연산코드 유형:
- 데이터 전송
- 산술/논리 연산
- 제어 흐름 변경
- 입출력 제어
오퍼랜드: '연산에 사용할 데이터' 또는 '연산에 사용할 데이터가 저장된 위치', (피연산자)
오퍼랜드 필드에는 숫자와 문자 등을 나타내는 데이터 또는 메모리나 레지스터 주소가 올 수 있다.
많은 경우 연산에 사용할 데이터가 저장된 위치, 즉 메모리 주소나 레지스터 이름이 담긴다.
주소 지정 방식
명령어의 오퍼랜드 필드에 메모리나 레지스터의 주소를 담는 경우가 많은데 이는 명령어 길이 때문이다.
오퍼랜드 필드 안에 메모리 주소가 담긴다면 표현할 수 있는 데이터의 크기는 하나의 메모리 주소에 저장할 수 있는
공간만큼 커진다.
주소 지정 방식: 오퍼랜드 필드에 데이터가 저장된 위치를 명시할 때 연산에 사용할 데이터 위치를 찾는 방법
유효 주소: 연산에 사용할 데이터가 저장된 위치
즉시 주소 지정 방식
연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시하는 방식, 가장 간단한 형태의 주소 지정 방식이다.
하지만 표현할 수 있는 데이터의 크기가 작아지는 단점이 있다.
직접 주소 지정 방식
오퍼랜드 필드에 유효 주소를 직접적으로 명시하는 방식이다. 오버랜드 필드에서 표현할 수 있는 데이터의 크기는 즉시 주소 지정 방식보다 크지만 표현할 수 있는 범위가 연산 코드의 비트 수만큼 줄어든다.
간접 주소 지정 방식
유효 주소의 주소를 오퍼랜드 필드에 명시한다. 직접 주소 지정 방식 보다 표현할 수 있는 범위가 넓어지지만 두 번의 메모리 접근이 필요하기에 일반적으로 느린 방식이다.
레지스터 주소 지정 방식
직접 주소 지정 방식과 비슷하게 연산에 사용할 데이터를 저장한 레지스터를 오퍼랜드 필드에 직접 명시하는 방법
일반적으로 CPU 외부에 있는 메모리에 접근하는 것보다 CPU 내부에 있는 레지스터에 접근하는 것이 더 빠르다.
표현할 수 있는 레지스터 크기에 제한일 생길 수 있을 수 잇다.
레지스터 간접 주소 지정 방식
연산에 사용할 데이터를 메모리에 저장하고, 그 유효 주소를 저장한 레지스터를 오퍼랜드 필드에 명시하는 방법
스택과 큐
스택: 나중에 저장한 데이터를 가장 먼저 빼내는 데이터 관리 방식
큐: 가장 먼저 저장된 데이터부터 빼내는 데이터 관리 방식
'computer sciernce' 카테고리의 다른 글
CPU 성능 향상 기법 (1) | 2024.06.12 |
---|---|
CPU의 작동 원리 (0) | 2024.06.11 |
데이터 (0) | 2024.05.30 |
컴퓨터 구조 시작하기 (0) | 2024.05.28 |