[혼공학습단 12기] 1장 ~ 3장, 데이터와 명령어
[ 1장 ]
컴퓨터는 0과 1로 표현된 데이터만을 이해한다.
이처럼 0과 1로 표현되는 정보에는 데이터와 명령어가 있다.
( ex )
cat.jpg -> 데이터
usb에 cat.jpg를 저장하라 -> 명령어
컴퓨터의 핵심 장치는,
(1)중앙처리장치(CPU) / (2)주기억장치(메모리) / (3)보조기억장치 / (4)입출력장치
(+)
주기억장치는 RAM / ROM 이 있다. 메모리라 함은 보통 RAM을 말한다.
(1) 중앙처리장치(CPU)
명령어 받고, 받은 명령어 해석하고 실행까지 하는 컴퓨터의 두뇌
핵심 내부 구성 : (1)산술논리연산장치(ALU), (2)레지스터, (3)제어장치
(1)산술논리연산장치(ALU)
계산하는 부품
(2)레지스터
CPU 내부 작은 임시 저장 장치
실행하는 데 필요한 값들을 임시로 저장
CPU 안에는 다른 이름과 역할을 수행하는 래지스터가 여러 개 존재
(3)제어장치
제어신호를 내보내고 명렁어를 해석
(2) 주기억장치(메모리)
현재 실행되는 프로그램의 명령어와 데이터를 저장하는 부품으로,
프로그램이 실행되려면 반드시 메모리에 저장되어 있어야 한다.
컴퓨터가 빠르게 작동하기 위해서는 메모리 속 명령어와 데이터의 위치가 정돈되어있어야 하기 때문에, 효율적인 접근을 위해 [주소]의 개념이 사용된다.
(3)보조기억장치
메모리는 가격이 비싸 저장 용량이 적고, 전원이 꺼지면 저장된 데이터를 잃어버린다.
-> 메모리보다 크고, 저장된 내용을 잃지 않는 보조장치의 필요성과 함께 보조기억장치가 등장
( ex )
하드디스크, SSD, DVD, USB 등
(4)입출력장치
마이크, 스피커처럼 컴퓨터 외부에 연결되어 내부와 정보 교환하는 장치
버스
위 4가지 핵심 부품은 메인보드(마더보드)에 연결된다.
메인보드에 연결된 부품들이 서로 정보를 주고 받기 위해 버스(BUS)라는 통로를 이용한다.
시스템 버스가 핵심이며, 이는 주소 버스, 데이터 버스, 제어 버스로 구성되어 있다.
51P 3번 프로그램이 실행되려면 반드시 [메모리]에 저장되어 있어야 한다. |
[ 2장 ]
비트
0,1를 나타내는 가장 작은 정보의 단위
n비트는 (2^n)개의 정보를 표현할 수 있다.
단위
바이트 -> 8개 비트를 묶은 것 (2^8)
킬로바이트 -> 1바이트 1000개를 묶은 것 (2^8^1000)
메가바이트 -> 1킬로바이트 1000개를 묶은 것
기가바이트 -> 1메가바이트 1000개를 묶은 것
테라바이트 -> 1기가바이트를 1000개 묶은 것
이진법
0,1로 모든 수를 표현하는 방법
숫자가 1을 넘어갈 때 자리 올림
2의 보수
0,1로 음수를 표현하는 방법
어떤 수를 그보다 큰 2^n에서 뺀 값
(=모든 0,1 뒤집고, 거기에 1 더한다.)
플래그
양수, 음수 구분하기 위해 사용
십육진법
이진법이 0,1로 모든 수를 표현하다보니 길어져서, 15를 넘는 시점에 자리 올림을 하는 십육진법도 많이 사용
10~ 15까지 A~F 로 표기
1101의 음수를 2의 보수 표기법으로 구해보세요. (1) 1,0을 0,1로 변환 0010 (2) 1 더하기 0011 답 : 0011 |
0,1을 문자로 표현하는 방법
(1)문자집합, (2)인코딩, (3)디코딩
(1)문자집합
컴퓨터가 인식하고 표현할 수 있는 문자의 모음
컴퓨터는 문자 집합에 속해 있는 문자만을 이해할 수 있음
(2)인코딩
문자 집합에 속해 있는 문자를 0,1로 변환하는 과정
(3)디코딩
인코딩의 반대 과정
0,1 로 이루어진 문자 코드를 사람이 이해할 수 있는 문자로 변환하는 과정
아스키 코드
영어 알파벳과 아라비아 숫자, 일부 특수 문자를 포함한 문자 집합
각각 문자는 7비트로 표현되고, 2^7=128개의 문자를 표현할 수 있음
확장 아스키코드가 나왔으나 이도 한글을 표현하기엔 턱없이 부족.
유니코드
EUC-KR보다 훨씬 다양한 한글을 포함하며 대부분 나라의 문자, 특수문자, 화살표, 이모티콘까지 코드로 표현할 수 있는 통일된 문자 집합
[ 3장 ]
인간의 언어인 고급 언어를 컴퓨터가 알아들을 수 있는 저급 언어로 바꾸는 과정이 필요하다
저급 언어
기계어와 어셈블리어가 있다
기계어는 0,1의 명령어 비트로 이루어진 언어
어셈블리어는 기계어를 읽기 편한 형태로 변역한 언어
( ex )
0101 0101(기계어) -> push rbp(어셈블리어)
고급언어 -> 저급언어 변환하는 방식에는
(1)컴파일 언어 / (2)인터프리터 언어가 있음
(1) 컴파일 언어
컴파일러에 의해 소스 코드 전체가 저급 언어로 변환되어 실행되는 고급 언어
C언어가 그 예
컴파일러를 통해 저급 언어로 변환된 코드를 목적 코드라 함
(2) 인터프리터 언어
인터프리터에 의해 소스 코드가 한 줄씩 실행되는 고급 언어
PYTHON이 그 예
컴퓨터와 대화하듯 코드를 한 줄씩 실행하기 때문에 저급 언어로 변환하는 시간을 기다릴 필요가 없다.
속도가 느리다.
명령어
(1)연산 코드와 (2)오퍼랜드로 구성
명령어가 수행할 연산 -> 연산코드(연산자)
연산에 사용할 데이터, 연산에 사용할 데이터가 저장된 위치 -> 오퍼랜드(피연산자)
(1) 연산코드
명령어가 수행할 연산이 위치 (ex) 더해라~빼라~저장해라~)
연산 코드 유형은 데이터 전송 / 산술 및 논리 연산 / 제어 흐름 변경 / 입출력 제어 로 구성
유효 주소
연산의 대상이 되는 데이터가 저장된 위치
(2) 오퍼랜드 ( =주소코드 )
연산에 사용할 데이터나 연산에 사용할 데이터가 저장된 위치
필드에는 숫자와 문자 등을 나타내는 데이터 또는 메모리나 레지스터 주소가 옴
숫자나 문자와 같이 연산에 사용할 데이터를 직접 명시하진 않고, 데이터가 저장된 위치(즉 메모리 주소나 레지스터 이름)이 담김.
( ex )
오퍼랜드가 하나도 없으면 -> 0-주소명령어
오퍼랜드가 하나면 -> 1-주소명령어
오퍼랜드가 두 개면 -> 2-주소명령어
오퍼랜드가 세 개면 -> 3-주소명령어
주소 지정 방식
오퍼랜드 필드에 데이터가 저장된 위치를 명시할 때 연산에 사용할 데이터 위치를 찾는 방법
유효 주소를 찾는 방법을 말함
(1)즉시 주소 지정 방식 / (2)직접 주소 지정 방식 / (3)간접 주소 지정 방식 / (4)레지스터 주소 지정 방식 / (5)레지스터 간접 주소 지정 방식
(1) 즉시 주소 지정 방식
정의 : 연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시하는 방식
장점 : 가장 간단한 방식. 연산에 사용할 데이터를 메모리나 레지스터로부터 찾는 과정이 빠져 빠르다.
단점: 표현할 수 있는 데이터의 크기가 작아진다.
(2) 직접 주소 지정 방식
정의 : 오퍼랜드 필드에 유효 주소를 직접적으로 명시하는 방식
장점 : 표현할 수 있는 데이터 크기가 즉시 주소 지정 방식보다 크다.
단점 : 유효 주소를 표현할 수 있는 범위가 연산 코드의 비트 수만큼 줄어든다.
표현할 수 있는 오퍼랜드 필드의 길이가 연산 코드의 길이만큼 짧아져 표현할 수 있는 유효 주소에 제한이 생길 수 있다.
(3) 간접 주소 지정 방식
정의 : 유효 주소의 주소를 오퍼랜드 필드에 명시
장점 : 직접 주소 지정 방식보다 표현 가능한 유효 주소의 범위가 더 넓어짐.
단점 : 두 번의 메모리 접근이 필요해 속도가 느리다.
(4) 레지스터 주소 지정 방식
정의 : 직접 주소 지정 방식과 비슷하게 연산에 사용할 데이터를 저장한 레지스터를 오퍼랜드 필드에 직접 명시하는 방법
장점 : CPU 외부에 있는 메모리에 접근하는 것보다 CPU 내부에 있는 래지스터에 접근하는 것이 더 빠르므로, 직접 주소 지정 방식보다 빠르게 접근할 수 있다.
단점 : 표현할 수 있는 래지스터 크기에 제한이 생길 수 있다.
(5) 레지스터 간접 주소 지정 방식
정의 : 연산에 사용할 데이터를 메모리에 저장하고, 그 주소를 저장한 레지스터를 오퍼랜드 필드에 명시하는 방법
장점 : 유효 주소를 찾는 과정이 간접 주소 지정 방식과 비슷하지만, 메모리에 접근하는 횟수가 한 번으로 줄어든다는 장점
(+)
스택(STACK)
한쪽 끝이 막혀있는 통과 같은 저장 공간
저장한 자료를 빼낼 때 마지막으로 저장한 데이터부터 빼냄
LIFO (LAST IN FIRST OUT)
=후입선출
데이터 저장하는 게 = PUSH / 데이터 꺼내는 게 = POP
큐(QUEUE)
한 쪽으로 데이터를 저장하고 한 쪽으로 저장한 순서대로 데이터를 빼냄
FIFO(FIRST IN FIRST OUT)
=선입선출
예제도 풀어봤다
https://ff-tb02.tistory.com/81
[스택 예제] 백준 10773번
https://www.acmicpc.net/problem/10773 문제 : 첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000)이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는
ff-tb02.tistory.com
https://ff-tb02.tistory.com/82
[스택 예제] 백준 9012번
https://www.acmicpc.net/problem/9012 문제 : 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을
ff-tb02.tistory.com
https://ff-tb02.tistory.com/84
[스택 예제] 백준 10828번
https://www.acmicpc.net/problem/10828 문제 :정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.명령은 총 다섯 가지이다.push X: 정수 X를 스택에 넣는 연
ff-tb02.tistory.com