Intro
이번 챕터에서는 혼자서 덧셈 뺄셈을 하는 기계를 만드는 챕터 이고, 이장에서 나오는 모든 래치(누산기)는 플립플롭이라고 가정합니다.
용어
플립플롭(Flip-Flop, FF)
- 1비트의 정보를 보관, 유지할 수 있는 회로로 순차회로의 기본 요소이며 이전 상태를 계속 유지하여 저장하는 장치이다. (누산기)
- 오실레이터에서 클럭 신호가 들어올 때 입력을 출력에 반영한다.
- 클럭 신호는 0과 1을 매우 빠르게 천이(변환)하는 신호라고 합니다.
현재 까지 만들어진 것

누적 덧셈기
- 이름 그대로 입력값을 계속해서 누적하여 더해나가는 누산기
- 치명적인 단점, 합을 누적해 나가는 도중에 입력이 잘못되었다면 처음부터 다시 숫자를 입력해야 한다.
64KB 메모리 (RAM)
- RAM배열에 주소마다 입력값을 저장하여 누적 덧셈기의 단점을 해결해 줄 수 있다.
RAM 배열과 누적 덧셈기 연결
진행 순서
- 회로 이용전에 Clear 스위치를 닫아서 래치의 내용을 지우고 16bit 카운터 출력을 0000h로 만들어준다.
- 제어판의 취득 스위치를 닫고 메모리의 0000h부터 순서대로 초기 데이터를 넣어줍니다.
- 취득 스위치와 지우기 스위치를 개방하면 0000h에 저장된 8비트 데이터 값인 01h가 덧셈기의 입력이 된다.
- 누산기가 0으로 초기화 되었기 때문에 다른 입력값은 00h가 된다.
- 오실레이터에서 0과 1사이를 매우 빠르게 변환하는 신호인 클럭 신호를 제공해주고, 클럭이 0에서 1로 바뀔때 다음 두가지 일이 동시에 발생하고, 전구가 반짝이는것을 확인 할 수 있다.
- 4-1. 덧셈기에서 출력되는 결과가 누산기에 저장된다.
- 4-2. 동시에 16비트 카운트가 증가되어 RAM배열에서 다음 값에 대한 주소 지정이 일어난다.
- 두번째 클럭 발생시 누산기(래치)에 첫번째 값과 두번째 값의 합이 저장되고, 16비트 카운터가 0002h로 올라간다.
문제점
- 회로의 동작을 중지 시킬 방법이 없다.
- FFFFh번 까지 진행한뒤 다시 처음부터 계산한다.
- 8비트 (2의 8승=256)의 덧셈만 가능하고 덧셈만 이용할 수 있다.
- RAM에 저장되어 있는 숫자가 255로 제한되고, 결과도 255를 넘어갈 수 없다.
- RAM 배열, 덧셈기, 레치의 크기를 늘리는 방법도 있지만 투자비용이 너무 비싸져서 의미없다.
- 모든 수를 더해서 하나의 결과값만 구한다.
- 다용도 덧셈기가 필요할 경우 의미가 없어진다.
전구를 없애고 출력 결과를 다시 RAM에 저장하여 다용도 덧셈기로 만들기
- 명령어 RAM이 추가로 필요하다.
- 필요한 동작 (명령어)
- 로드 - 메모리에서 누산기로 데이터 받기
- 더하기 - 받아온 데이터와 누산기에 있는 내용 더하기
- 저장 - 누산기에 들어있는 합을 메모리에 저장하기
- 중단 - 적절한 시점에 자동화된 덧셈기를 정지시키기
세 쌍의 덧셈을 기준으로 명령어와 데이터 메모리 비교
- 제어판을 이용해서 명령어 RAM에 다음과 같은 값을 넣어서 진행한다.
- 명령어 RAM의 각 명령어는 데이터 RAM의 같은 주소에 있는 값이 어떤 동작을 할지 지시한다.
- 이러한 형태로 사용된 숫자 부호를 명령어부호, 동작부호, 동작코드라고 부른다.
2:1 선택기 추가
- 데이터 RAM의 출력을 8비트 래치(누산기) 입력과 연결하기 위해 추가 되었다.
- 보통은 누산기의 출력은 덧셈기의 입력으로 되돌아 가지만, 저장명령어를 위해서 데이터 RAM의 입력으로 사용되는 것이다.
- 16비트 카운터는 두 RAM에 주소를 제공하는 역할을 합니다.
- 아래 사진에는 각각의 구성요소를 제어하기 위한 제어신호는 빠져있다.
- 지우기 입력, 16비트 카운터에 대한 클럭, 2:1선택기의 선택 입력 등
- 제어 신호들은 논리 게이트를 다양하게 조합해서 만들 수 있다.
빼기 명령어 추가 - 부호 21h
- 더하기와 빼기의 차이는 명령어 부호의 최하위 비트인 C0의 값이 다르다.
- 뺄셈시에는 데이터 RAM의 출력이 덧셈기로 들어가기전에 인버터로 C0에 1이 입력되고, 덧셈기의 자리올림 입력이 1로 설정된다.
이후 추가 명령어
- 자리올림을 이용한 더하기
- 빌림을 이용하여 빼기
- 분기
- 명령어 주소를 지정하는 16비트 카운터에 영향을 주어 특정 조건에서만 특정 주소로 이동할 수 있게 만들어 준다. => 조건에 따른 제어가 가능하다.
- 조건 분기 4종
- Zero면 분기
- 자리올림이면 분기
- Zero가 아니면 분기
- 자리올림이 아니면 분기
최종적으로 아래와 같은 명령어표가 있고, 니모닉은 16진수 기계어 코드에 이름을 붙인것이라고 합니다.
아래 작업이 잘 수행된다면 컴퓨터라고 부를수 있을만한 아주 기초적인 하드웨어가 만들어 진것이고, 계산기와 컴퓨터를 구분하는 가장 중요한 요소는 바로 제로 플래그를 이용해 피승수가 0이 될 때까지 반복하는 조건 분기 명령의 포함이라고 합니다.
곱셈 프로그램 - 어셈블리어
- 아래의 소스코드가 프로그래밍 언어의 한 종류인 어셈블리어 라는 컴퓨터 언어이다.
- 0000h등 숫자로 메모리 위치를 적지 않고, 위치를 참조할 수 있는 레이블을 이용한것이다.
=> 간단한 단어나 단어와 비슷한 문자열을 사용한다. BEGIN, RESULT 등
- 주석처리도 할 수 있다.

Reference
https://www.slideshare.net/devgrapher?utm_campaign=profiletracking&utm_medium=sssite&utm_source=ssslideview