[CS] 모형 컴퓨터로 더하기 프로그램 만들기 feat.15

lezsuuu·2022년 7월 25일
0

Computer Science

목록 보기
8/16

프로세서와 계산기

프로세서와 계산기는 비슷합니다.

1. 사칙연산을 할 수 있으며,
2. 데이터를 가져오거나 메모리에 저장할 수 있습니다.

계산기와 프로세서를 구분할 수 있는 차이점은 사람이 개입이 없어도 작동할 수 있는가? 입니다.

프로세서는 데이터를 비교하고, 그 결과에 따라 다음에 무슨 일을 해야 하는지 결정할 수 있습니다.

프로세서는 다음 동작을 결정할 수 있기 때문에 전기로 이어진 컴퓨터의 모든 부분을 운영할 수 있습니다.

예를 들어서 컴퓨터의 전원을 켜면 프로세서는 알아서 모니터를 켜고, 인터넷을 연결합니다.
프로세서 덕분에 매번 컴퓨터를 켜고, 끌 때 마다 다른 장치를 손 볼 필요가 없습니다.

모형 컴퓨터로 프로그램 만들기

아래는 프로세서의 작동 방식을 이해하기 위해 가상으로 만들어진 toy computer 입니다.
https://www.cs.princeton.edu/courses/archive/fall21/cos109/toysim.html

이 프로세서 메모리에는 다음 명령어 및 데이터가 저장되어 있습니다.

  • 부가적인 저장 영역인 누산기
  • 명령어
    • GET : 키보드에서 수를 입력받은 후 누산기에 넣는다.
    • PRINT : 누산기의 내용을 출력
    • STORE M : 누산기 내용의 복사본을 메모리 위치 M에 저장한다.
    • LOAD M : 메모리 위 M의 내용을 누산기에 덮어 씌운다.
    • ADD M : 메모리 위치 M의 내용을 누산기 내용에 더한다.
    • STOP : 실행 중지
    • GOTO L : L 위치로 가서 실행
    • IFZERO : 누산기의 값이 0이면 특정 명령어로 분기
      L(레이블)은 명령어를 실행하기 위한 임의의 이름(TOP, BOT)입니다.

작동을 시작하면 프로세서는 인출(메모리에서 정보를 가져오고), 해석, 실행 의 사이클을 반복합니다.

첫 번째 모형 프로그램

GET
PRINT
STOP
//키보드로 누산기에 입력 > 출력 > 정지

두 번째 모형 프로그램

GET
STORE FirstNum
GET
ADD FirstNum
PRINT
STOP
FirstNum:

FirstNum: 첫번째 GET에서 입력한 데이터를 따로 저장하는 위치입니다.
데이터 위치에 이름을 부여해서 처리합니다. 관례상 :을 붙여서 레이블임을 나타냅니다.

분기명령어 GOTO와 IFZERO

N개의 수를 더해야 할 때 분기명령어를 사용합니다.
조건을 검사하여 수행하는 명령어를 조건부 분기 또는 조건부 점프라고 합니다.(어셈블리어)
GOTO: 프로세서가 루프를 돌게 할 수 있습니다.
IFZERO: 무한루프에 빠지지 않도록 조건을 걸어줍니다.

TOP: GET
IFZERO Bot
PRINT
GOTO Top
Bot: STOP
//0이 아니면 GET 값 출력, 0이면 실행을 멈춤

GOTOIFZERO를 활용하면 0을 입력하기 전까지, 입력 값을 합산하는 더하기 프로그램을 만들 수 있습니다.

Top:GET			//수 입력
IFZERO Bot		//0이면 Bot으로
ADD Sum			//(0이 아니면)Sum에 더함
STORE Sum		//더해진 Sum을 저장
GOTO Top		//다시 GET 함
Bot:LOAD Sum	//STORE된 Sum을 불러옴 
PRINT			//출력
STOP			
Sum:0			//메모리 위치에 이름을 할당하고 Run 전에 0을 넣어라(유사명령어)

위 프로그램을 체계적으로 테스트 하는 방법
1. 0만 넣고 출력
2. 한 개의 값만 넣고 출력
3. 우리가 이미 답을 아는 식(1+2)을 넣어서 출력값과 비교
4. run 하기 전에 코드의 흐름을 읽어보기

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


(상황을 가정해서)
1. 저장하는 명령어는 메모리를 1칸 사용한다.
2. 참조하는 명령어는 메모리를 2칸 사용한다.
3. 데이터는 메모리를 1칸 사용한다.
4. 각각의 명령어는 숫자형 코드를 가진다.
5. 참조하는 명령어의 빈칸은 참조하는 명령어의 위치를 가리킨다.

profile
돌고 돌아 벨로그

0개의 댓글