본문 바로가기

TIL & WIL

CS 스터디_1일 1로그 100일 완성_12, 13챕터

Chapter 12.

#프로세서(CPU, 컴퓨터의 두뇌) 의 특징

1. 산술 연산을 할 수 있어서 계산기처럼 수를 더하고(+) 빼고(-) 곱하고(x) 나눌(/) 수 있다.

2. 메모리에서 연산을 수행할 데이터를 가져오거나 연산 결과를 메모리에 저장할 수 있다.

3. 컴퓨터의 나머지 부분(마우스, 키보드, 디스플레이 등의 장치)을 제어할 수 있다.

 

#프로세서와 계산기의 다른 점

: 프로세서가 비록 단순하긴 하나, 결정을 내릴 수 있다는 것이다.

이 수(number)가 저 수보다 큰지 작은지, 이 정보(information)가 저 정보와 동일한지 아닌지 등의

비교를 수행할 수 있고 그 결과를 기반으로 다음에 무슨 일을 할 지 결정할 수 있다.

"사람의 개입 없이도 작동할 수 있음을 뜻한다."

 


Chapter 13.

# 모형 컴퓨터(Toy Computer)로 더하기 프로그램 만들기

<가정 사항>

- 해당 모형 컴퓨터에는 '명령어'와 '데이터'를 저장하기 위한 메모리(Memory)가 있다.

- 한 개의 수를 담을 만한 용량의 부가적인 저장 영역인 누산기(accumulator)가 있다.

- 기본 연산을 수행하기 위한 약 10개의 명령어 레퍼토리가 있다.

 

<10개 명령어 중 6가지 예시>

GET 키보드에서 수를 입력받아 누산기에 넣는다.
(기존 내용 덮어 씀)
PRINT 누산기의 내용을 출력한다.
STORE M 누산기 내용 복사본을 메모리 위치 M에 저장한다.
LOAD M 메모리 위치 M의 내용을 누산기에 적재한다.
ADD M 메모리 위치 M의 내용을 누산기의 내용에 더한다.
STOP 실행을 중지한다.

 

# 첫번째 모형 프로그램

1) GET : 사용자에게 수를 입력받아 누산기에 넣음

2) PRINT : 입력받은 수를 출력

3) STOP : 프로세서에 중지하라고 명령

 

>> 엄청나게 단조롭긴 하지만, 프로그램이 어떻게 동작하는지 보여주는 데는 충분하다.

 

# 두번째 모형 프로그램

1) GET : 사용자에게 첫 번째 수를 입력받아 누산기에 넣음

2) STORE FirstNum : FirstNum이라는 메모리 위치에 입력받은 첫 번째 값을 저장

3) GET : 사용자에게 두 번째 수를 입력받아 누산기에 넣음(*기존 내용 덮어씀)

4) ADD FirstNum : 메모리에 저장됐던 첫 번째 수를 현재 누산기에 있는 값(두 번째 수)에 더함

5) PRINT : 결과 합계 값을 출력

6) STOP : 프로그램 실행을 중지

 

 

# 분기 명령어

: Idea... 만약 많은 수를 입력받고 더하도록 하려면 어떻게 해야할지?

>> 명령어를 재사용하게 하는 GOTO(분기 또는 점프라고 불림) 명령어를 추가하는 것이 좋겠다.

 

이것은 일종의 While 반복문이라고 볼 수 있다.

 

<끝 없이 실행되는 데이터 출력 프로그램>

1) (TOP) GET : 사용자에게 수를 입력받아 누산기에 넣음

2)          PRINT : 수를 출력

3)          GOTO TOP : TOP으로 돌아가서 다른 수를 입력받음

 

 

: Idea... 그렇다면 이 무한루프를 멈추려면 어떻게 해야 할지?

>> 조건을 검사하여 다음에 수행할 작업을 결정하는 명령어인 IFZERO(조건부 분기, 또는 조건부 점프라고 불림)을 추가

 

이것은 일종의 IF 조건문이라고 볼 수 있다.

 

<0이 입력되면 실행을 멈추는 데이터 출력 프로그램>

1) (TOP) GET : 사용자에게 수를 입력받아 누산기에 넣음

2)          IFZERO Bot : 누산기 값이 0이면 Bot 레이블이 붙은 명령어로 이동

3)          PRINT : 누산기 값이 0이 아니므로 그 값을 출력

4)          GOTO TOP : TOP으로 돌아가서 다른 수를 입력받음

5) (BOT) STOP 

 

 

<일련의 수를 합산하는 모형 컴퓨터 프로그램>

1) (TOP) GET : 사용자에게 수를 입력받아 누산기에 넣음

2)          IFZERO BOT : 입력된 수가 0이면 BOT으로 감

3)          ADD Sum : 가장 최근 입력받은 값(누산기)에 메모리 위치 Sum에 있는 값을 더함

4)          STORE Sum : 그 결과를 메모리 위치 Sum에 새로운 누적 합계로 저장

5)          GOTO TOP : TOP으로 돌아가서 다른 수를 입력받음

6) (BOT) LOAD Sum : 누적 합계를 누산기에 적재함

7)          PRINT : 출력

8)          STOP

9) (SUM) 0 : 누적 합계를 담을 메모리 위치(프로그램 시작 시 0으로 초기화)

 

어떤 디지털 컴퓨터든 가장 작은 단계로 나누면 기본 명령어만으로 작업을 수행할 수 있다.


# 체계적인 테스트

: 무작위 입력값을 프로그램에 던져주는 것은 효과적이지 않다.

 

그렇다면 어떤 것이 효과적이고 체계적인 테스트일까?

1) 아무런 수도 입력되지 않은 경우

2) 한 개의 수를 입력해보는 경우

3) 이미 합을 아는 두개의 수를 입력하는 경우(1+2 = 3)

 

# 메모리 내부 표현

<가정 사항>

- 각 명령어가 숫자형 코드를 저장하는 데는 메모리 위치를 한 개 사용
     ex) GET같은 명령어는 메모리를 한 칸만 차지한다.

- 명령어가 메모리를 참조하거나 데이터 값을 사용하면 메모리 위치를 두 개 사용

     ex) IFZERO, ADD같은 명령어는 메모리를 두 칸 차지하며 두 번째 칸은 참조하는 위치에 해당

- 어떤 데이터든 한 개의 메모리 위치에 들어간다고 가정

- 명령어들의 숫자 값은 다음과 같이 정의

: GET = 1, PRINT = 2, STORE = 3, LOAD = 4, ADD = 5, STOP = 6, GOTO = 7, IFZERO = 8

 

<수 합산하기 프로그램의 메모리 표현>

위치 메모리 레이블 명령어
1 1 TOP GET
2 8   IFZERO BOT
3 10    
4 5   ADD SUM
5 14    
6 3   STORE SUM
7 14    
8 7   GOTO TOP
9 1    
10 4 BOT LOAD SUM
11 14    
12 2   PRINT
13 6   STOP
14 0 SUM 0(초기화)