CODE -Ch.17 혼자서 움직이는 컴퓨터

llama·2022년 3월 24일
0

CS

목록 보기
2/6

Intro

이번 챕터에서는 혼자서 덧셈 뺄셈을 하는 기계를 만드는 챕터 이고, 이장에서 나오는 모든 래치(누산기)는 플립플롭이라고 가정합니다.


용어

플립플롭(Flip-Flop, FF)

  • 1비트의 정보를 보관, 유지할 수 있는 회로로 순차회로의 기본 요소이며 이전 상태를 계속 유지하여 저장하는 장치이다. (누산기)
  • 오실레이터에서 클럭 신호가 들어올 때 입력을 출력에 반영한다.
    • 클럭 신호는 0과 1을 매우 빠르게 천이(변환)하는 신호라고 합니다.

현재 까지 만들어진 것

누적 덧셈기

  • 이름 그대로 입력값을 계속해서 누적하여 더해나가는 누산기
  • 치명적인 단점, 합을 누적해 나가는 도중에 입력이 잘못되었다면 처음부터 다시 숫자를 입력해야 한다.

64KB 메모리 (RAM)

  • RAM배열에 주소마다 입력값을 저장하여 누적 덧셈기의 단점을 해결해 줄 수 있다.

RAM 배열과 누적 덧셈기 연결

진행 순서

  1. 회로 이용전에 Clear 스위치를 닫아서 래치의 내용을 지우고 16bit 카운터 출력을 0000h로 만들어준다.
  2. 제어판의 취득 스위치를 닫고 메모리의 0000h부터 순서대로 초기 데이터를 넣어줍니다.
  3. 취득 스위치와 지우기 스위치를 개방하면 0000h에 저장된 8비트 데이터 값인 01h가 덧셈기의 입력이 된다.
    • 누산기가 0으로 초기화 되었기 때문에 다른 입력값은 00h가 된다.
  4. 오실레이터에서 0과 1사이를 매우 빠르게 변환하는 신호인 클럭 신호를 제공해주고, 클럭이 0에서 1로 바뀔때 다음 두가지 일이 동시에 발생하고, 전구가 반짝이는것을 확인 할 수 있다.
    • 4-1. 덧셈기에서 출력되는 결과가 누산기에 저장된다.
    • 4-2. 동시에 16비트 카운트가 증가되어 RAM배열에서 다음 값에 대한 주소 지정이 일어난다.
  5. 두번째 클럭 발생시 누산기(래치)에 첫번째 값과 두번째 값의 합이 저장되고, 16비트 카운터가 0002h로 올라간다.

문제점

  1. 회로의 동작을 중지 시킬 방법이 없다.
    • FFFFh번 까지 진행한뒤 다시 처음부터 계산한다.
  2. 8비트 (2의 8승=256)의 덧셈만 가능하고 덧셈만 이용할 수 있다.
    • RAM에 저장되어 있는 숫자가 255로 제한되고, 결과도 255를 넘어갈 수 없다.
    • RAM 배열, 덧셈기, 레치의 크기를 늘리는 방법도 있지만 투자비용이 너무 비싸져서 의미없다.
  3. 모든 수를 더해서 하나의 결과값만 구한다.
    • 다용도 덧셈기가 필요할 경우 의미가 없어진다.

전구를 없애고 출력 결과를 다시 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

profile
요리사에서 프론트엔드 개발자를 준비하는중 입니다.

0개의 댓글

관련 채용 정보