프로세서와 계산기는 비슷합니다.
1. 사칙연산을 할 수 있으며,
2. 데이터를 가져오거나 메모리에 저장할 수 있습니다.
계산기와 프로세서를 구분할 수 있는 차이점은 사람이 개입이 없어도 작동할 수 있는가?
입니다.
프로세서는 다음 동작을 결정할 수 있기 때문에 전기로 이어진 컴퓨터의 모든 부분을 운영할 수 있습니다.
예를 들어서 컴퓨터의 전원을 켜면 프로세서는 알아서 모니터를 켜고, 인터넷을 연결합니다.
프로세서 덕분에 매번 컴퓨터를 켜고, 끌 때 마다 다른 장치를 손 볼 필요가 없습니다.
아래는 프로세서의 작동 방식
을 이해하기 위해 가상으로 만들어진 toy computer 입니다.
https://www.cs.princeton.edu/courses/archive/fall21/cos109/toysim.html
이 프로세서 메모리
에는 다음 명령어 및 데이터가 저장되어 있습니다.
입력받은 후 누산기에 넣는다
.출력
메모리 위치 M에 저장
한다.누산기에 덮어 씌운다.
누산기 내용에 더한다.
L(레이블)
은 명령어를 실행하기 위한 임의의 이름(TOP, BOT)입니다.작동을 시작하면 프로세서는 인출
(메모리에서 정보를 가져오고), 해석
, 실행
의 사이클을 반복합니다.
GET
PRINT
STOP
//키보드로 누산기에 입력 > 출력 > 정지
GET
STORE FirstNum
GET
ADD FirstNum
PRINT
STOP
FirstNum:
FirstNum:
첫번째 GET
에서 입력한 데이터를 따로 저장하는 위치입니다.
데이터 위치에 이름을 부여해서 처리합니다. 관례상 :
을 붙여서 레이블임을 나타냅니다.
N개의 수를 더해야 할 때 분기명령어를 사용합니다.
조건을 검사하여 수행하는 명령어를 조건부 분기
또는 조건부 점프
라고 합니다.(어셈블리어)
GOTO
: 프로세서가 루프를 돌게 할 수 있습니다.
IFZERO
: 무한루프에 빠지지 않도록 조건을 걸어줍니다.
TOP: GET
IFZERO Bot
PRINT
GOTO Top
Bot: STOP
//0이 아니면 GET 값 출력, 0이면 실행을 멈춤
GOTO
와IFZERO
를 활용하면 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. 참조하는 명령어의 빈칸은 참조하는 명령어의 위치를 가리킨다.