2024. 4. 11. 23:37ㆍCS/컴퓨터구조
고급언어와 저급언어
우리가 사용하는 C, C++ 같은 프로그래밍 언어들이 고급언어이다. 즉, 인간을 위한 언어이다.
이제 우리가 이해할 수 있는 언어를 컴퓨터가 이해할 수 있는 언어로 변경해야되는데 컴퓨터가 이해할 수 있는 언어가 저급언어이고 저급언어에는 기계어와 어셈블리어가 있다.
기계어는 명령어와 데이터가 모두 0과 1로만 이루어져있기 때문에 사람이 읽기에 의도를 파악하기 쉽지 않다. 그렇기에 어셈블리어를 만들어 읽기 편한 형태로 번역한 것이다.
0101 0101 ➡ push rbp
컴파일 언어와 인터프리터 언어
고급언어가 저급언어로 변환되는 방식에는 컴파일 방식과 인터프리트 방식이 있다.
C언어가 컴파일 언어이고 자바스크립트가 인터프리터 언어이다.
컴파일 방식
오른쪽 방향으로 컴파일이 진행된다.
| 소스코드 | 전처리기 | 컴파일러 | 어셈블러 | 링커 | 실행파일 |
| 컴파일 준비과정 | 소스코드➡어셈블리어 | 어셈블리어➡기계어 |
소스코드를 컴파일러가 컴파일 과정을 거쳐 저급언어인 목적코드로 변환한다.
조금 더 자세히 말하면 컴파일러가 소스코드를 어셈블리어로 변환하고 어셈블러가 어셈블리어를 기계어인 목적코드로 변환한다.
그리고 링커에서 목적코드끼리의 링킹작업이 이루어진 후에 실행파일이 된다. 즉, 목적파일과 실행파일은 다르다.
인터프리터 방식
인터프리터 방식은 소스 코드를 한 줄씩 저급 언어로 변환하여 실행한다.
속도는 컴파일 방식이 더 빠르다.
명령어의 구조
| 연산 코드 | 오퍼랜드 |
연산코드는 명령어가 수행할 연산이다. 예를 들어 10과 20을 더해라 라는 명령어가 있으면 더해라가 연산코드에 해당한다.
오퍼랜드는 연산에 사용할 데이터가 저장된 위치 즉, 주소값이 저장되어있다.
오퍼랜드에는 메모리 주소나 레지스터 이름이 담기게 되는데 그래서 주소 필드라는 말로 명칭하기도 한다.
그리고 연산에 필요한 데이터가 저장되어 있는 주소를 유효 주소라고 한다.
이 유효 주소를 찾는 방법을 주소 지정 방식이라고 하는데 종류에 대해 알아보자.
즉시 주소 지정 방식
즉시 주소 지정 방식은 연산에 사용할 데이터를 오퍼랜드 필드에 그대로 직접 명시하는 것이다.
직접 주소 지정 방식
데이터가 저장된 공간의 주소를 오퍼랜드 필드에 명시하는 것이다. 즉시 주소 지정 방식보다는 표현할 수 있는 데이터의 크기가 크다.

간접 주소 지정 방식
직접 주소 지정 방식보다 표현할 수 있는 유효 주소의 범위가 넓지만 두 번 메모리 접근이 필요하므로 속도가 느리다.

레지스터 주소 지정 방식
일반적으로 CPU 외부에 있는 메모리에 접근하는 것보다 내부의 레지스터에 접근하는 것이 속도가 빠르기 때문에 레지스터 주소 지정방식은 직접 주소 지정 방식보다 빠르게 데이터에 접근할 수 있다. 하지만 표현할 수 있는 레지스터 크기에 제한이 있을 수 있다.

레지스터 간접 주소 지정 방식
레지스터에 데이터가 들어있는 유효주소를 넣어줌으로써 오퍼랜드 필드에 표현할 수 있는 레지스터의 크기의 제한이 직접 방식보다 늘어났다. 그리고 메모리에 접근하는 방식이 한번으로 줄었기 때문에 간접 주소 지정방식보다 빠르다.

정리를 하면 다음과 같다.
- 즉시 주소 지정 방식 : 연산에 사용할 데이터
- 직접 주소 지정 방식 : 유효 주소
- 간접 주소 지정 방식 : 유효 주소의 주소
- 레지스터 주소 지정 방식 : 유효 주소(레지스터 이름)
- 레지스터 간접 주소 지정 방식 : 유효 주소를 저장한 레지스터
그 외로 스택 주소 지정 방식과 변위 주소 지정 방식이 있다. 후에 차차 공부해보자.
'CS > 컴퓨터구조' 카테고리의 다른 글
| 명령어 사이클과 인터럽트 (0) | 2024.04.24 |
|---|---|
| CPU의 작동원리2️⃣ - 레지스터 (0) | 2024.04.18 |
| CPU의 작동원리1️⃣ - 사칙연산, ALU, 제어장치 (0) | 2024.04.17 |
| 데이터(✨중요) (0) | 2024.04.11 |
| 컴퓨터 구조의 큰 그림 (0) | 2024.04.11 |