컴퓨터 구조를 공부하면서 배운 내용을 정리해보자.
문자 표현
컴퓨터는 기본적으로 0,1로 문자를 표현한다.
문자 집합은 컴퓨터가 이해할 수 있는 문자의 모음이며 컴퓨터가 문자를 이해하기 위해선 문자를 0과 1로 이루어진 문자 코드로 변환하는 과정이 (즉 코드화 하는 과정)이 필요한데 이를 인코딩이라고 한다. 반대로 0과 1로 표현된 문자 코드를 문자로 변환하는 과정은 디코딩이라고 한다.
-아스키 코드와 EUC-KR, UTF-8
아스키 코드는 초창기 문자 집합 중 하나로써 알파벳, 아라비아 숫자, 일부 특수 문자 및 제어 문자를 표현할 수 있다. 인코딩이 간단하며 7비트로 하나의 문자를 표현한다.(아스키 코드는 총 8비트이지만 1비트는 오류 검출을 위해 사용되는 패리티 비트로 사용됨) 그러나 7비트로 하나의 문자를 표현하기 때문에 한글을 포함한 다른 언어 문자, 다양한 특수 문자 표현이 불가했다.(즉 128개보다 더 많은 문자를 표현할 수 없었음) 특히 한글은 한글이 가진 고유한 특성 때문에 (초성 + 중성 + 종성으로 이루어짐) 한글을 위한 인코딩이 필요했다.
EUC-KR : 완성형 인코딩, 글자 하나하나에 2바이트 크기의 코드를 부여, 2300여개의 한글 표현이 가능. 하지만 모든 한글을 표현할 수는 없었고, 다른 언오도 마찬가지로 언어별 인코딩 방식을 모두 이해해야 한다는 단점이 있음
UTF-8 : 유니코드(통일된 문자 집합, 한글, 영어, 특수문자, 이모티콘) 인코딩 방식으로 인코딩 결과가 1~4바이트로 가변 길이 인코딩이다. 인코딩 결과가 몇 바이트가 될지는 유니 코드에 부여된 값에 따라 다름.
소스 코드와 명령어
-언어의 종류
언어의 종류는 크게 고급 언어와 저급언어로 나눌 수 있다.
고급 언어 : 개발자가 이해하기 쉽게 만든 언어
저급 언어 : 컴퓨터가 이해하고 실행하는 언어
또한 저급 언어에는 기계어와 어셈블리어가 있다.
기계어 : 0과 1로 이루어진 명령어로 구성된 언어
어셈블리어 : 0과 1로 이루어진 기계어를 읽기 편한 형태로 번역한 저급 언어
고급언어로 작성된 코드를 컴퓨터가 이해하고 실행하려면 저급언어로 변환되어야 하는데 이 때에도 두 가지 방식이 있다.
컴파일 언어 : 컴파일 언어로 작성된 소스코드는 컴파일러에 의해 저급 언어올 변환되고 이 과정을 컴파일이라고 한다. 컴파일의 결과로 저급 언어인 목적 코드가 생성된다. 오류가 하나라도 있으면 컴파일 과정에서 에러를 내고 실행이 아예 불가능하다.
인터프린트 언어 : 인터프린터에 의해 한 줄씩 실행. 소스 코드 전체가 저급 언어로 변환되기까지 기다릴 필요가 없음. 오류가 있어도 그 오류를 실행하기 직전 코드까지 실행이 가능하다.
-명령어의 구조
명령어는 연산 코드와 오퍼랜드로 나뉜다.
연산 코드 : 수행할 연산. 각 CPU마다 다른 연산 코드를 가지며 대부분 데이터 전송, 산술/논리 연산, 제어 흐름 변경, 입출력 제어 등이 존재
오퍼랜드 : 연산에 사용될 데이터 혹은 연산에 사용될 데이터가 저장된 위치 (이 때는 사실 위치를 훨씬 자주 저장하게 된다. 데이터를 저장하게 되면 저장할 수 있는 데이터의 크기가 한정적이기 때문이다. 그래서 주소 필드라고도 부르며 오퍼랜드는 아예 없을 수도, 하나 이상일 수도 있다.)
상술 했듯이 오퍼랜드에는 저장할 수 있는 데이터의 크기가 제한 되어 있기 때문에 데이터 자체보다는 위치를 저장하는 경우가 많으며 연산에 사용될 데이터가 저장된 위치를 유효주소라고 한다. 이 때 이 유효주소를 찾는 방법을 명령어 주소 지정 방식이라고 하는데 다양한 방법이 있다.
-즉시 주소 저장 방식 : 연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시, 가장 간단한 형태의 주소 지정 방식이며 사용할 데이터의 크기가 작아질 수 있지만 속도가 빠르다.
-직접 주소 저장 방식 : 오퍼랜드 필드에 유효 주소를 직접적으로 명시. 유효주소를 표현할 수 있는 크기가 연산 코드만큼 줄어듬
-간접 주소 지정 방식 : 오퍼랜드 필드에 유효주소의 주소를 명시, 앞선 주소 지정 방식들에 비해 속도가 느림. 결국 주소를 읽고 한 번 더 읽어서 데이터를 읽기 때문
-레지스터 주소 지정 방식 : 연산에 사용할 데이터가 저장된 레지스터 명시. 메모리에 접근하는 속도보다 레지스터에 접근하는 것이 더 빠름(메모리는 CPU 밖에 있고 레지스터는 CPU 안에 있기 때문에 속도가 더 빠르다.)
-레지스터 간접 주소 지정 방식 : 연산에 사용할 데이터를 메모리에 저장, 그 주소를 저장한 레지스터를 오퍼랜드 필드에 명시
'CS' 카테고리의 다른 글
[CS] 컴퓨터 구조 (6) 메모리와 캐시 메모리 (0) | 2023.07.05 |
---|---|
[CS] 컴퓨터 구조 (5) CPU 설계 기법 (0) | 2023.06.28 |
[CS] 컴퓨터 구조 (4) ALU와 제어장치 (0) | 2023.06.27 |
[CS] 컴퓨터 구조 (3) CPU의 작동 원리 (0) | 2023.06.15 |
[CS] 컴퓨터 구조 (1) 컴퓨터의 핵심 부품들 (0) | 2023.06.12 |