고급 언어와 저급 언어의 차이를 이해하자.
컴파일 언어와 인터프리터 언어의 차이를 이해하자.
명령어를 구성하는 연산 코드와 오퍼랜드에 대해 학습하자.
명령어의 주소 지정 방식에 대해 학습하자.

소스 코드와 명령어
고급 언어와 저급 언어
고급언어 : C, C++, Java... 사람이 이해하고 작성하기 쉽게 만들어진 언어
저급언어 : 컴퓨터가 이해하고 실행할 수 있는 언어
- 기계어 : 0과 1의 명령어 비트로 이루어진 언어
- 어셈블리어 : 기계어와 일대일 대응이 되고 기계어보다는 읽기 편한 형태로 번역한 언어
컴파일 언어와 인터프리터 언어
고급언어로 작성된 소스코드는 결국 저급 언어로 변환된다. 그 방식으로 컴파일, 인터프리트 방식이 있다.
컴파일 언어 : 소스 코드 처음부터 끝까지 저급 언어로 컴파일하여 오류를 발견하면 컴파일에 실패한다.
성공 시 저급 언어인 목적코드가 생성된다.
- C
인터프리터 언어 : 소스 코드가 한 줄씩 실행되는 언어
- Python
속도는 인터프리터 언어가 컴파일 언어보다 더 느리다. 하나하나 저급언어로 해석하며 실행해야 하기 때문에.
목적파일과 실행파일
목적 파일 : 목적 코드로 이루어진 파일로 컴파일의 결과로 나타나는 파일.
만약 main.c를 컴파일하면 main.o라는 목적코드로 이루어진 목적 파일이 나타나는 것이다.
만약 main.c에서 라이브러리를 사용했다면? 해당 라이브러리 기능을 main.o와 연결 짓는 작업인 링킹이 필요하다.
이 링킹작업이 완료되면 실행 파일(.exe)이 만들어지는 것이다
명령어의 구조
명령어는 연산 코드와 오퍼랜드로 구성되어 있다.
오퍼랜드(=주소필드)
연산에 사용할 데이터가 저장된 위치 혹은 연산에 사용할 데이터.
오퍼랜드는 명령어 안에 하나도 없을 수도 있고 한개, 두개, 세개 등 여러개 존재할 수 있다.
연산코드
명령어가 수행할 연산을 의미한다.
- 데이터 전송 : MOVE, PUSH, POP
- 산술/논리 연산 : ADD, AND, OR
- 제어 흐름 변경 : JUMP
- 입출력 제어 : READ, WRITE
주소 지정 방식
명령어 안에는 연산할 주소가 저장된다. 이 경우 다양한 주소 지정 방식이 존재한다.
Q. 그렇다면 오퍼랜드에 데이터를 그냥 저장하면 되지 왜 주소를 저장할까?
A. 데이터로 더 많은 정보를 표현할 수 있도록 하기 위해서
만약 데이터를 바로 저장한다고 하자.
오퍼랜드 필드당 6비트가 주어진다고 하면 데이터로 표현할 수 있는 정보의 가짓수가 2^6밖에 되지 않는다.
하지만 16비트의 크기로 이루어진 메모리에 데이터를 넣어두고 그 주소를 오퍼랜드 필드에 넣으면 2^16개를 표현할 수 있게 되는 것이다.
이 때 이 데이터가 저장된 주소를 유효주소 라고 한다.
이 유효주소를 찾는 방법을 주소 지정 방식이라고 하는 것이다.
1. 즉시 주소 지정 방식
데이터를 바로 오퍼랜드 필드에 넣는 방식
2. 직접 주소 지정 방식
데이터가 저장된 주소(유효주소)를 오퍼랜드 필드에 넣는 방식
3. 간접 주소 지정 방식
유효주소가 담긴 주소를 오퍼랜드 필드에 넣는 방식
4. 레지스터 주소 지정 방식
데이터를 저장한 레지스터를 오퍼랜드 필드에 넣는 방식
직접 주소 지정방식과 비슷하지만 더 빠른 속도
5. 레지스터 간접 주소 지정 방식
데이터가 저장된 주소값을 레지스터에 넣어두고 그 레지스터를 오퍼랜드 필드에 넣는 방식
6. 스택 주소 지정 방식
메모리의 스택영역에 데이터들이 존재한다.그리고 CPU의 스택 포인터 레지스터가 스택의 꼭대기를 가르킨다.
가르키고 있는 메모리 주소를 참조하여 이 주소에 위치한 데이터를 연산한다.
7. 변위 주소 지정 방식
오퍼랜드 필드 값 + 특정 레지스터 값을 더해 유효주소를 얻어낸다.
- 상대 주소 지정 방식 : 오퍼랜드와 PC 값을 더해 유효 주소를 얻는다.
PC값 - 읽어들일 명령어 주소 + 오퍼랜드 값
- 베이스 레지스터 주소 지정 방식 : 오퍼랜드와 베이스 레지스터 값을 더해 유효 주소를 얻는다.
베이스 레지스터 - 기준주소 + 오퍼랜드 값
스택과 큐
스택 : LIFO(후입 선출) 자료구조로 PUSH, POP과 같은 명령어를 사용한다.
큐 : FIFO(선입 선출) 자료구조
'컴퓨터 구조' 카테고리의 다른 글
CH 5 CPU 성능 향상 기법 (0) | 2024.03.31 |
---|---|
CH4 명령어 사이클과 인터럽트 (0) | 2024.03.21 |
CH.4 CPU의 작동원리 (0) | 2024.03.21 |
CH.2 데이터 (0) | 2024.03.14 |
CH.1 컴퓨터 구조 시작하기 (0) | 2024.03.11 |