SlideShare une entreprise Scribd logo
1  sur  50
17 장. 혼자서 움직이는 컴퓨터
                          CODE
   The Hidden Language of Computer Hardware and Software




                                                                김지훈
                                                                아꿈사
                                                           2013. 02. 23.
우리가 이제까지 만든 것
누적 덧셈기     64Kx8 메모리




                       2
우리가 이제까지 만든 것
카운터




                3
합쳐봅시다
CODE




        4/50
5
제어판


      오실레이터         16비트 카운터     64K x 8 RAM
              Clk

              Clr               주소       값
                               0000h :   00h
                               0001h :   00h
                               0002h :   00h
                               0003h :   00h         A        B
                               0004h :   00h
                                                     8비트 덧셈기
                               …
                               FFFFh :   00h             S
V
    지우기
                                                         DI
                                               Clk   8비트 래치
                                               Clr
                                                         DO




    초기 상태
                                                         전구
                                                                  6
제어판


      오실레이터         16비트 카운터     64K x 8 RAM
              Clk
                      0000h                                       00h
              Clr               주소       값
                               0000h :   00h
                               0001h :   00h
                               0002h :   00h
                               0003h :   00h         A        B
                               0004h :   00h
                                                     8비트 덧셈기
                               …
                               FFFFh :   00h             S
V
    지우기
                                                         DI
                                               Clk   8비트 래치
                                               Clr     00h
                                                         DO




    지우기 스위치 입력
                                                         전구
                                                                        7
제어판


      오실레이터         16비트 카운터     64K x 8 RAM
              Clk
                      0000h                                       00h
              Clr               주소       값
                               0000h :   01h
                               0001h :   15h
                               0002h :   11h
                               0003h :   23h         A        B
                               0004h :   50h
                                                     8비트 덧셈기
                               …
                               FFFFh :   00h             S
V
    지우기
                                                         DI
                                               Clk   8비트 래치
                                               Clr     00h
                                                         DO




    제어판으로 RAM에 데이터 초기화
                                                         전구
                                                                        8
제어판


      오실레이터         16비트 카운터             64K x 8 RAM
              Clk
                      0000h    0000h                   01h                 00h
              Clr                       주소       값
                                       0000h :   01h
                                       0001h :   15h
                                       0002h :   11h
                                       0003h :   23h         A         B
                                       0004h :   50h
                                                             8비트 덧셈기
                                       …
                                       FFFFh :   00h              S
V
    지우기                                                          01h

                                                                 DI
                                                       Clk   8비트 래치
                                                       Clr     00h
                                                                 DO




    지우기 스위치 개방
                                                                 전구
                                                                                 9
제어판


       오실레이터              16비트 카운터             64K x 8 RAM
                    Clk

           0 -> 1           0000h    0000h                   01h                 01h
                    Clr                       주소       값
                                             0000h :   01h
                                             0001h :   15h
                                             0002h :   11h
                                             0003h :   23h         A         B
                                             0004h :   50h
                                                                   8비트 덧셈기
                                             …
                                             FFFFh :   00h              S
V
     지우기                                                               01h

                                                                       DI
                                                             Clk   8비트 래치
                                                             Clr     01h
                                                                       DO




    첫번째 클럭 발생시 1 단계
                                                                       전구
                                                                                       10
제어판


       오실레이터              16비트 카운터             64K x 8 RAM
                    Clk

           0 -> 1           0001h    0001h                   15h                 01h
                    Clr                       주소       값
                                             0000h :   01h
                                             0001h :   15h
                                             0002h :   11h
                                             0003h :   23h         A         B
                                             0004h :   50h
                                                                   8비트 덧셈기
                                             …
                                             FFFFh :   00h              S
V
     지우기                                                               16h

                                                                       DI
                                                             Clk   8비트 래치
                                                             Clr     01h
                                                                       DO




    첫번째 클럭 발생시 2 단계
                                                                       전구
                                                                                       11
제어판


      오실레이터              16비트 카운터             64K x 8 RAM
                   Clk

          0 -> 1           0002h    0002h                   11h                 16h
                   Clr                       주소       값
                                            0000h :   01h
                                            0001h :   15h
                                            0002h :   11h
                                            0003h :   23h         A         B
                                            0004h :   50h
                                                                  8비트 덧셈기
                                            …
                                            FFFFh :   00h              S
V
    지우기                                                               27h

                                                                      DI
                                                            Clk   8비트 래치
                                                            Clr     16h
                                                                      DO




    두번째 클럭 발생시
                                                                      전구
                                                                                      12
문제점

동작을 중지시킬 방법이 없음
   무한루프, FFFFh 번지 까지 진행후 처음부터 다시 계산

8비트 덧셈만 가능
   여러개를 붙이지 않고 확장할 수 없을까?

모든 수를 더해서 하나의 결과값만 구함
   50개의 쌍을 더해서 50의 결과값을 구하고 싶다면?



                                      13
개선해 봅시다
CODE




          14/50
출력 결과를 다시 RAM에 저장하기


            50 쌍의 수를 더했다면
            각 50쌍의 연산결과를 메모리에
            다시 저장 할 수 있음.




                                15
출력 결과를 다시 RAM에 저장하기
0000h: 27h                 0000h 주소에 있는 값을 로드해서 누산기에 저장

       A2h                 0001h 주소에 있는 값과 누산기의 값을 더함
                           0002h 주소에 있는 값과 누산기의 값을 더함
       18h
                           누산기에 있는 값을 0003h 주소에 저장
             첫 번째 합은 여기
                           0004h 주소에 있는 값을 로드해서 누산기에 저장
0004h: 1Fh
                           0005h 주소에 있는 값과 누산기의 값을 더함
       89h                 누산기에 있는 값을 0006h 주소에 저장
             두 번째 합은 여기    0007h 주소에 있는 값을 로드해서 누산기에 저장
0007h: 33h                 0008h 주소에 있는 값과 누산기의 값을 더함

       2Ah                 0009h 주소에 있는 값과 누산기의 값을 더함
                           누산기에 있는 값을 000Ah 주소에 저장
       55h
                           자동화된 덧셈기의 동작을 중지시킴
             세 번째 합은 여기


                                                           16
출력 결과를 다시 RAM에 저장하기
0000h: 27h                 0000h 주소에 있는 값을 로드해서 누산기에 저장

       A2h                 0001h 주소에 있는 값과 누산기의 값을 더함
                           0002h 주소에 있는 값과 누산기의 값을 더함
       18h
                           누산기에 있는 값을 0003h 주소에 저장        로드, 더함, 저장, 중지
             첫 번째 합은 여기
                           0004h 주소에 있는 값을 로드해서 누산기에 저장
0004h: 1Fh
                           0005h 주소에 있는 값과 누산기의 값을 더함     네가지 작업이 필요
       89h                 누산기에 있는 값을 0006h 주소에 저장
             두 번째 합은 여기    0007h 주소에 있는 값을 로드해서 누산기에 저장
                           0008h 주소에 있는 값과 누산기의 값을 더함
                                                               명령어
0007h: 33h
       2Ah                 0009h 주소에 있는 값과 누산기의 값을 더함
                           누산기에 있는 값을 000Ah 주소에 저장
       55h
                           자동화된 덧셈기의 동작을 중지시킴
             세 번째 합은 여기


                                                                    17
명령어 추가


  동작    부호
  로드    10h
  저장    11h
  더하기   20h
  중단    FFh




              18
명령어와 데이터 메모리 비교
       명령어 메모리           데이터 메모리

   0000h: 10h   로드    0000h: 27h
          20h   더하기            A2h
          20h   더하기            18h
          11h   저장                   첫 번째 합은 여기
   0004h: 10h   로드    0004h: 1Fh
          20h   더하기            89h
          11h   저장                   두 번째 합은 여기
   0007h: 10h   로드    0007h: 33h
          20h   더하기            2Ah
          20h   더하기            55h
          11h   저장                   세 번째 합은 여기
   000Bh: FFh   중단    000Bh:                      19
로드 명령어 처리

RAM의 출력을 8비트 래치의 입력과 연결
   2:1 선택기 추가


제어 신호는 생략
   로드명령에서는 2:1 선택기의 Select입력은 0
   저장 명령인경우는 RAM에 대한 쓰기 신호값이 1
   제어 신호는 논리게이트를 다양하게 조합해서 만들 수 있음.



                                      20
빼기 명령어 추가


 동작    부호         명령어 메모리             데이터 메모리
 로드    10h   0000h:   10h 로드     0000h:   56h
 저장    11h            20h 더하기             2Ah
 더하기   20h            21h 빼기              38h
 빼기    21h            11h 저장                    <- 결과는 여기에 적힘
 중단    FFh            FFh   중단




                                                          21
빼기 명령어 처리

1. 뺄셈시에 C0 은 1이 입력됨

2. 덧셈기의 입력은 인버터를 통해 1의 보수가 됨

3. 덧셈기의 CI에 1을 입력함으로서 2의 보수로 만듬




                                  22
16비트 계산하기

                           명령어 메모리           데이터 메모리
                        0000h: 10h   로드    0000h: ABh
                               20h   더하기         2Ch
  76ABh     76h   ABh
                               11h   저장                 <- 결과의 하위 바이트
+ 232Ch   + 23h + 2Ch          10h   로드          76h
 99D7h     99h   D7h           20h   더하기         23h
                               11h   저장                 <- 결과의 상위 바이트
                               FFh   중단




                                                                23
자리 올림과 빌림
                   1h   1 비트 자리 올림 래치 사용

  76ABh     ABh   76h   하위 8비트 덧셈
+ 236Ch   + 6Ch + 23h       일반적인 덧샘 수행 후 자리올림
                            값을 자리올림 래치에 저장
          117h   9Ah
                        상위 8비트 덧셈
                            덧셈기의 자리올림 입력에
                            자리올림 래치 값을 입력




                                            24
자리 올림과 빌림

          동작          부호
          로드          10h
          저장          11h
          더하기         20h
          빼기          21h
     자리올림을 이용하여 더하기   22h
      빌림을 이용하여 빼기     23h
          중단          FFh




                            25
32비트 덧셈
                      명령어 메모리            데이터 메모리
              0000h: 10h   로드         0000h: CDh
                     20h   더하기               FFh
                     11h   저장                      <- 결과의 최하위 바이트
                     10h   로드                2Bh
  7A892BCDh
                     22h   자리올림 더하기    Carry 72h
+ 65A872FFh
                     11h   저장                      <- 결과의 윗자리 바이트
                     10h   로드                89h
                     22h   자리올림 더하기    Carry A8h
                     11h   저장                      <- 결과의 윗자리 바이트
                     10h   로드                7Ah
                     22h   자리올림 더하기    Carry 65h
                     11h   저장                      <- 결과의 최상위 바이트
                     FFh   중단
                                                                    26
아직 남은 문제들
번거로운 입력
   가장 아래 바이트 부터 연속되지 않은 메모리에 나누어 넣어야함



연산의 결과를 뒤에서 재사용 불가능
   A 와 B 의 합에 C 를 더하고 싶다면?




    메모리를 0000h 번지부터 순차적으로만 접근 가능 하기 때문


                                         27
주소 지정 추가
명령어 길이를 3바이트로 변경
     1바이트 명령어와 2바이트 주소로 구성
                                                        3바이트 명령어 메모리
                                        0000h:   10h   0000h 번지의 한 바이트를 누산기로 로드함
   명령어 메모리           데이터 메모리                     00h
0000h: 10h   로드    0000h: 4Ah                    00h

       20h   더하기         B5h            0003h:   20h   0001h 번지의 한 바이트와 누산기의 값을 더함

       11h   저장                 <- 결과            00h

       FFh   중단                                  01h
                                        0006h:   11h   누산기의 값을 0002h 번지로 저장함
                                                 00h
                                                 02h
                                                 FFh   중단

                                                                               28
연속된 공간에 데이터 저장
  76ABh
+ 236Ch




                 29
명령어 패치
명령어를 가져오는 과정을 지칭


명령어 처리를 위한 3개의 1바이트 래치 추가


3번의 클럭이 필요
    1클럭 : 명령어 로드
    2클럭 : 상위 1바이트 주소 로드
    3클럭 : 하위 1바이트 주소 로드

기존 구조의 ¼ 속도




                            30
메모리 통합




         31
메모리 통합


          연산의 결과에
          추가로 값을
          더하고 싶다면?



            두 연산을
         어떻게 연결할 것인가?




                        32
분기

         동작        부호
         로드        10h
         저장        11h
                         000Ch: 30h   0020h 번지로 점프합니다.
        더하기        20h
                               00h
         빼기        21h
                               20h
 자리올림을 이용하여 더하기    22h
     빌림을 이용하여 빼기   23h
         분기        30h
         중단        FFh




                                                         33
분기 구현




        34
16비트 카운터 수정
16비트 카운터는 플립플롭 16개를 연결한 것임을 상기

A : 새로 지정할 비트 값

Set It 이 1 이면 A의 값이 플립플롭에 입력됨




                                 35
곱셈 구현

           1000h: 00h   16 비트 승수
                                         1단계 : 00A7h X 1
  00A7h
X 001Ch          A7h
           1002h: 00h   16비트 피승수
                 1Ch
           1004h: 00h   <- 16비트 곱은 여기와
                 00h    <- 여기에




     00A7h 를 001Ch 번 더하자.



                                                           36
곱셈 구현
2 단계 : 처음으로 되돌아가기

    0012h: 30h   0000h 번지로 분기
          00h
          00h




   언제까지??
   조건 분기 필요

                                37
조건 분기
Zero 래치
    덧셈기의 출력이 0인지 판별
    덧셈기의 출력 값이 0일때 1을 가짐




                           38
조건 분기
              동작         부호
              로드         10h
              저장         11h
             더하기         20h
              빼기         21h
        자리올림을 이용하여 더하기   22h
         빌림을 이용하여 빼기     23h
              분기         30h
            Zero면 분기     31h
          자리올림이면 분기      32h
          Zero가 아니면 분기   33h
         자리올림이 아니면 분기    34h
              중단         FFh
                               39
데이터


곱셈 구현
                                   1000h:    00h   16 비트 승수

                                             A7h
                                   1002h:    00h   16비트 피승수

                                             1Ch
                                                   <- 16비트 곱은 여기와
3단계 : 조건 분기
                                   1004h:    00h
                                             00h   <- 여기에

   001Ch가 0이 아닌 동안 0000h으로 돌아간다.




                                                   1Eh의 FFh를 더하는 이유는 -1을 더하기위한 트릭




                                                                           40
더 배워 봅시다
CODE




           41/50
컴퓨터의 구성
계산기와 컴퓨터를 구분하는 가장 중요한 요소는
   조건에 따라 반복가능한 루프가 있는지 여부
      조건 분기



기본 구성 요소
   프로세서, 메모리, 입력장치와 출력장치




                             42
우리가 만든 컴퓨터
8비트 프로세서
   8비트 데이터 폭의 누산기
   대부분의 데이터 패스가 8비트
   주소 생성 부분만 16비트
메모리
   64K x 8 RAM
입출력 장치
   RAM 제어판의 스위치 , 전구

                       43
기계어 (Machine Language)
프로세서의 동작에 대응하는 16진수로된 코드
   10 10 05 20 10 01 11 10 05


니모닉 : 16진수 기계어 코드에 이름을 붙임




                                44
니모닉
            동작         부호    니모닉
            로드         10h   LOD
            저장         11h   STO
           더하기         20h   ADD
            빼기         21h   SUB
      자리올림을 이용하여 더하기   22h   ADC
       빌림을 이용하여 빼기     23h   SBB
            분기         30h   JMP
          Zero면 분기     31h    JZ
        자리올림이면 분기      32h    JC
        Zero가 아니면 분기   33h   JNZ
       자리올림이 아니면 분기    34h   JNC
            중단         FFh   HLT
                                   45
니모닉
구성 :    명령 코드 목적지, 소스


“1003h에 있는 바이트 값을 누산기로 로드”
       LOD A, [1003h]
             A 는 누산기
             []는 주소에 있는 값을 참조
“누산기의 내용을 1003h 번지로 저장하라“
    STO [1003h], A

“만일 Zero 플래그 값이 1이 아니라면 0000h로 분기하라”
      JNZ 0000h

                                       46
곱셈 프로그램




          47
곱셈 프로그램
주소 변경에 대비해 레이블 사용




                    48
곱셈 프로그램
주석 추가

어셈블리어




          49
어셈블리어
기계어와 자연어의 중간방식

메모리 주소를 레이블로 표시

기계어와 1 대 1로 대응 함




                   50

Contenu connexe

Tendances

SPI introduction(Serial Peripheral Interface)
SPI introduction(Serial Peripheral Interface)SPI introduction(Serial Peripheral Interface)
SPI introduction(Serial Peripheral Interface)SUNODH GARLAPATI
 
ビットコインで使われている暗号の基礎を学ぶ
ビットコインで使われている暗号の基礎を学ぶビットコインで使われている暗号の基礎を学ぶ
ビットコインで使われている暗号の基礎を学ぶYuto Takei
 
Chapitre ii circuits combinatoires
Chapitre ii circuits combinatoiresChapitre ii circuits combinatoires
Chapitre ii circuits combinatoiresSana Aroussi
 
Arm architecture
Arm architectureArm architecture
Arm architectureMinYeop Na
 
AVR programming - BASICS
AVR programming - BASICSAVR programming - BASICS
AVR programming - BASICSRobotix 2011
 
Windows 10 Nt Heap Exploitation (Chinese version)
Windows 10 Nt Heap Exploitation (Chinese version)Windows 10 Nt Heap Exploitation (Chinese version)
Windows 10 Nt Heap Exploitation (Chinese version)Angel Boy
 
Quick Search algorithm and strstr
Quick Search algorithm and strstrQuick Search algorithm and strstr
Quick Search algorithm and strstrMITSUNARI Shigeo
 
History of microprocessors
History of microprocessorsHistory of microprocessors
History of microprocessorsEmrah Aptoula
 
オープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリオープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリ陽平 山口
 
Micro Controller lab basic experiments (1)
Micro Controller lab basic experiments (1)Micro Controller lab basic experiments (1)
Micro Controller lab basic experiments (1)Noor Tahasildar
 
2.3 sequantial logic circuit
2.3 sequantial logic circuit2.3 sequantial logic circuit
2.3 sequantial logic circuitWan Afirah
 
Ch4 circuitscombinatoires
Ch4 circuitscombinatoiresCh4 circuitscombinatoires
Ch4 circuitscombinatoiresmickel iron
 

Tendances (20)

Uart 16550
Uart 16550Uart 16550
Uart 16550
 
Ch07
Ch07Ch07
Ch07
 
Lpc1768
Lpc1768Lpc1768
Lpc1768
 
SPI introduction(Serial Peripheral Interface)
SPI introduction(Serial Peripheral Interface)SPI introduction(Serial Peripheral Interface)
SPI introduction(Serial Peripheral Interface)
 
ビットコインで使われている暗号の基礎を学ぶ
ビットコインで使われている暗号の基礎を学ぶビットコインで使われている暗号の基礎を学ぶ
ビットコインで使われている暗号の基礎を学ぶ
 
Chapitre ii circuits combinatoires
Chapitre ii circuits combinatoiresChapitre ii circuits combinatoires
Chapitre ii circuits combinatoires
 
8086 architecture By Er. Swapnil Kaware
8086 architecture By Er. Swapnil Kaware8086 architecture By Er. Swapnil Kaware
8086 architecture By Er. Swapnil Kaware
 
Arm architecture
Arm architectureArm architecture
Arm architecture
 
AVR programming - BASICS
AVR programming - BASICSAVR programming - BASICS
AVR programming - BASICS
 
Windows 10 Nt Heap Exploitation (Chinese version)
Windows 10 Nt Heap Exploitation (Chinese version)Windows 10 Nt Heap Exploitation (Chinese version)
Windows 10 Nt Heap Exploitation (Chinese version)
 
Quick Search algorithm and strstr
Quick Search algorithm and strstrQuick Search algorithm and strstr
Quick Search algorithm and strstr
 
History of microprocessors
History of microprocessorsHistory of microprocessors
History of microprocessors
 
I2C BUS PROTOCOL
I2C BUS PROTOCOLI2C BUS PROTOCOL
I2C BUS PROTOCOL
 
オープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリオープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリ
 
Micro Controller lab basic experiments (1)
Micro Controller lab basic experiments (1)Micro Controller lab basic experiments (1)
Micro Controller lab basic experiments (1)
 
2.3 sequantial logic circuit
2.3 sequantial logic circuit2.3 sequantial logic circuit
2.3 sequantial logic circuit
 
8085
80858085
8085
 
Ch4 circuitscombinatoires
Ch4 circuitscombinatoiresCh4 circuitscombinatoires
Ch4 circuitscombinatoires
 
暗認本読書会4
暗認本読書会4暗認本読書会4
暗認本読書会4
 
Les arbres en C/C++
Les arbres en C/C++Les arbres en C/C++
Les arbres en C/C++
 

Plus de Ji Hun Kim

Doing data science Chapter 9
Doing data science Chapter 9Doing data science Chapter 9
Doing data science Chapter 9Ji Hun Kim
 
Arduino 소개, RC카 만들기
Arduino 소개, RC카 만들기Arduino 소개, RC카 만들기
Arduino 소개, RC카 만들기Ji Hun Kim
 
Learning Node Book, Chapter 5
Learning Node Book, Chapter 5Learning Node Book, Chapter 5
Learning Node Book, Chapter 5Ji Hun Kim
 
High performance networking in chrome
High performance networking in chromeHigh performance networking in chrome
High performance networking in chromeJi Hun Kim
 
Api design for c++ 6장
Api design for c++ 6장Api design for c++ 6장
Api design for c++ 6장Ji Hun Kim
 
Windbg랑 친해지기
Windbg랑 친해지기Windbg랑 친해지기
Windbg랑 친해지기Ji Hun Kim
 
Python packaging
Python packagingPython packaging
Python packagingJi Hun Kim
 
읽기 좋은 코드가 좋은 코드다 Part one
읽기 좋은 코드가 좋은 코드다   Part one읽기 좋은 코드가 좋은 코드다   Part one
읽기 좋은 코드가 좋은 코드다 Part oneJi Hun Kim
 

Plus de Ji Hun Kim (10)

Doing data science Chapter 9
Doing data science Chapter 9Doing data science Chapter 9
Doing data science Chapter 9
 
Ninja
NinjaNinja
Ninja
 
Arduino 소개, RC카 만들기
Arduino 소개, RC카 만들기Arduino 소개, RC카 만들기
Arduino 소개, RC카 만들기
 
Learning Node Book, Chapter 5
Learning Node Book, Chapter 5Learning Node Book, Chapter 5
Learning Node Book, Chapter 5
 
High performance networking in chrome
High performance networking in chromeHigh performance networking in chrome
High performance networking in chrome
 
Api design for c++ 6장
Api design for c++ 6장Api design for c++ 6장
Api design for c++ 6장
 
Windbg랑 친해지기
Windbg랑 친해지기Windbg랑 친해지기
Windbg랑 친해지기
 
Code 10장
Code 10장Code 10장
Code 10장
 
Python packaging
Python packagingPython packaging
Python packaging
 
읽기 좋은 코드가 좋은 코드다 Part one
읽기 좋은 코드가 좋은 코드다   Part one읽기 좋은 코드가 좋은 코드다   Part one
읽기 좋은 코드가 좋은 코드다 Part one
 

Code 17장

  • 1. 17 장. 혼자서 움직이는 컴퓨터 CODE The Hidden Language of Computer Hardware and Software 김지훈 아꿈사 2013. 02. 23.
  • 2. 우리가 이제까지 만든 것 누적 덧셈기 64Kx8 메모리 2
  • 5. 5
  • 6. 제어판 오실레이터 16비트 카운터 64K x 8 RAM Clk Clr 주소 값 0000h : 00h 0001h : 00h 0002h : 00h 0003h : 00h A B 0004h : 00h 8비트 덧셈기 … FFFFh : 00h S V 지우기 DI Clk 8비트 래치 Clr DO 초기 상태 전구 6
  • 7. 제어판 오실레이터 16비트 카운터 64K x 8 RAM Clk 0000h 00h Clr 주소 값 0000h : 00h 0001h : 00h 0002h : 00h 0003h : 00h A B 0004h : 00h 8비트 덧셈기 … FFFFh : 00h S V 지우기 DI Clk 8비트 래치 Clr 00h DO 지우기 스위치 입력 전구 7
  • 8. 제어판 오실레이터 16비트 카운터 64K x 8 RAM Clk 0000h 00h Clr 주소 값 0000h : 01h 0001h : 15h 0002h : 11h 0003h : 23h A B 0004h : 50h 8비트 덧셈기 … FFFFh : 00h S V 지우기 DI Clk 8비트 래치 Clr 00h DO 제어판으로 RAM에 데이터 초기화 전구 8
  • 9. 제어판 오실레이터 16비트 카운터 64K x 8 RAM Clk 0000h 0000h 01h 00h Clr 주소 값 0000h : 01h 0001h : 15h 0002h : 11h 0003h : 23h A B 0004h : 50h 8비트 덧셈기 … FFFFh : 00h S V 지우기 01h DI Clk 8비트 래치 Clr 00h DO 지우기 스위치 개방 전구 9
  • 10. 제어판 오실레이터 16비트 카운터 64K x 8 RAM Clk 0 -> 1 0000h 0000h 01h 01h Clr 주소 값 0000h : 01h 0001h : 15h 0002h : 11h 0003h : 23h A B 0004h : 50h 8비트 덧셈기 … FFFFh : 00h S V 지우기 01h DI Clk 8비트 래치 Clr 01h DO 첫번째 클럭 발생시 1 단계 전구 10
  • 11. 제어판 오실레이터 16비트 카운터 64K x 8 RAM Clk 0 -> 1 0001h 0001h 15h 01h Clr 주소 값 0000h : 01h 0001h : 15h 0002h : 11h 0003h : 23h A B 0004h : 50h 8비트 덧셈기 … FFFFh : 00h S V 지우기 16h DI Clk 8비트 래치 Clr 01h DO 첫번째 클럭 발생시 2 단계 전구 11
  • 12. 제어판 오실레이터 16비트 카운터 64K x 8 RAM Clk 0 -> 1 0002h 0002h 11h 16h Clr 주소 값 0000h : 01h 0001h : 15h 0002h : 11h 0003h : 23h A B 0004h : 50h 8비트 덧셈기 … FFFFh : 00h S V 지우기 27h DI Clk 8비트 래치 Clr 16h DO 두번째 클럭 발생시 전구 12
  • 13. 문제점 동작을 중지시킬 방법이 없음 무한루프, FFFFh 번지 까지 진행후 처음부터 다시 계산 8비트 덧셈만 가능 여러개를 붙이지 않고 확장할 수 없을까? 모든 수를 더해서 하나의 결과값만 구함 50개의 쌍을 더해서 50의 결과값을 구하고 싶다면? 13
  • 15. 출력 결과를 다시 RAM에 저장하기 50 쌍의 수를 더했다면 각 50쌍의 연산결과를 메모리에 다시 저장 할 수 있음. 15
  • 16. 출력 결과를 다시 RAM에 저장하기 0000h: 27h  0000h 주소에 있는 값을 로드해서 누산기에 저장 A2h  0001h 주소에 있는 값과 누산기의 값을 더함  0002h 주소에 있는 값과 누산기의 값을 더함 18h  누산기에 있는 값을 0003h 주소에 저장 첫 번째 합은 여기  0004h 주소에 있는 값을 로드해서 누산기에 저장 0004h: 1Fh  0005h 주소에 있는 값과 누산기의 값을 더함 89h  누산기에 있는 값을 0006h 주소에 저장 두 번째 합은 여기  0007h 주소에 있는 값을 로드해서 누산기에 저장 0007h: 33h  0008h 주소에 있는 값과 누산기의 값을 더함 2Ah  0009h 주소에 있는 값과 누산기의 값을 더함  누산기에 있는 값을 000Ah 주소에 저장 55h  자동화된 덧셈기의 동작을 중지시킴 세 번째 합은 여기 16
  • 17. 출력 결과를 다시 RAM에 저장하기 0000h: 27h  0000h 주소에 있는 값을 로드해서 누산기에 저장 A2h  0001h 주소에 있는 값과 누산기의 값을 더함  0002h 주소에 있는 값과 누산기의 값을 더함 18h  누산기에 있는 값을 0003h 주소에 저장 로드, 더함, 저장, 중지 첫 번째 합은 여기  0004h 주소에 있는 값을 로드해서 누산기에 저장 0004h: 1Fh  0005h 주소에 있는 값과 누산기의 값을 더함 네가지 작업이 필요 89h  누산기에 있는 값을 0006h 주소에 저장 두 번째 합은 여기  0007h 주소에 있는 값을 로드해서 누산기에 저장  0008h 주소에 있는 값과 누산기의 값을 더함 명령어 0007h: 33h 2Ah  0009h 주소에 있는 값과 누산기의 값을 더함  누산기에 있는 값을 000Ah 주소에 저장 55h  자동화된 덧셈기의 동작을 중지시킴 세 번째 합은 여기 17
  • 18. 명령어 추가 동작 부호 로드 10h 저장 11h 더하기 20h 중단 FFh 18
  • 19. 명령어와 데이터 메모리 비교 명령어 메모리 데이터 메모리 0000h: 10h 로드 0000h: 27h 20h 더하기 A2h 20h 더하기 18h 11h 저장 첫 번째 합은 여기 0004h: 10h 로드 0004h: 1Fh 20h 더하기 89h 11h 저장 두 번째 합은 여기 0007h: 10h 로드 0007h: 33h 20h 더하기 2Ah 20h 더하기 55h 11h 저장 세 번째 합은 여기 000Bh: FFh 중단 000Bh: 19
  • 20. 로드 명령어 처리 RAM의 출력을 8비트 래치의 입력과 연결 2:1 선택기 추가 제어 신호는 생략 로드명령에서는 2:1 선택기의 Select입력은 0 저장 명령인경우는 RAM에 대한 쓰기 신호값이 1 제어 신호는 논리게이트를 다양하게 조합해서 만들 수 있음. 20
  • 21. 빼기 명령어 추가 동작 부호 명령어 메모리 데이터 메모리 로드 10h 0000h: 10h 로드 0000h: 56h 저장 11h 20h 더하기 2Ah 더하기 20h 21h 빼기 38h 빼기 21h 11h 저장 <- 결과는 여기에 적힘 중단 FFh FFh 중단 21
  • 22. 빼기 명령어 처리 1. 뺄셈시에 C0 은 1이 입력됨 2. 덧셈기의 입력은 인버터를 통해 1의 보수가 됨 3. 덧셈기의 CI에 1을 입력함으로서 2의 보수로 만듬 22
  • 23. 16비트 계산하기 명령어 메모리 데이터 메모리 0000h: 10h 로드 0000h: ABh 20h 더하기 2Ch 76ABh 76h ABh 11h 저장 <- 결과의 하위 바이트 + 232Ch + 23h + 2Ch 10h 로드 76h 99D7h 99h D7h 20h 더하기 23h 11h 저장 <- 결과의 상위 바이트 FFh 중단 23
  • 24. 자리 올림과 빌림 1h 1 비트 자리 올림 래치 사용 76ABh ABh 76h 하위 8비트 덧셈 + 236Ch + 6Ch + 23h 일반적인 덧샘 수행 후 자리올림 값을 자리올림 래치에 저장 117h 9Ah 상위 8비트 덧셈 덧셈기의 자리올림 입력에 자리올림 래치 값을 입력 24
  • 25. 자리 올림과 빌림 동작 부호 로드 10h 저장 11h 더하기 20h 빼기 21h 자리올림을 이용하여 더하기 22h 빌림을 이용하여 빼기 23h 중단 FFh 25
  • 26. 32비트 덧셈 명령어 메모리 데이터 메모리 0000h: 10h 로드 0000h: CDh 20h 더하기 FFh 11h 저장 <- 결과의 최하위 바이트 10h 로드 2Bh 7A892BCDh 22h 자리올림 더하기 Carry 72h + 65A872FFh 11h 저장 <- 결과의 윗자리 바이트 10h 로드 89h 22h 자리올림 더하기 Carry A8h 11h 저장 <- 결과의 윗자리 바이트 10h 로드 7Ah 22h 자리올림 더하기 Carry 65h 11h 저장 <- 결과의 최상위 바이트 FFh 중단 26
  • 27. 아직 남은 문제들 번거로운 입력 가장 아래 바이트 부터 연속되지 않은 메모리에 나누어 넣어야함 연산의 결과를 뒤에서 재사용 불가능 A 와 B 의 합에 C 를 더하고 싶다면? 메모리를 0000h 번지부터 순차적으로만 접근 가능 하기 때문 27
  • 28. 주소 지정 추가 명령어 길이를 3바이트로 변경 1바이트 명령어와 2바이트 주소로 구성 3바이트 명령어 메모리 0000h: 10h 0000h 번지의 한 바이트를 누산기로 로드함 명령어 메모리 데이터 메모리 00h 0000h: 10h 로드 0000h: 4Ah 00h 20h 더하기 B5h 0003h: 20h 0001h 번지의 한 바이트와 누산기의 값을 더함 11h 저장 <- 결과 00h FFh 중단 01h 0006h: 11h 누산기의 값을 0002h 번지로 저장함 00h 02h FFh 중단 28
  • 29. 연속된 공간에 데이터 저장 76ABh + 236Ch 29
  • 30. 명령어 패치 명령어를 가져오는 과정을 지칭 명령어 처리를 위한 3개의 1바이트 래치 추가 3번의 클럭이 필요 1클럭 : 명령어 로드 2클럭 : 상위 1바이트 주소 로드 3클럭 : 하위 1바이트 주소 로드 기존 구조의 ¼ 속도 30
  • 32. 메모리 통합 연산의 결과에 추가로 값을 더하고 싶다면? 두 연산을 어떻게 연결할 것인가? 32
  • 33. 분기 동작 부호 로드 10h 저장 11h 000Ch: 30h 0020h 번지로 점프합니다. 더하기 20h 00h 빼기 21h 20h 자리올림을 이용하여 더하기 22h 빌림을 이용하여 빼기 23h 분기 30h 중단 FFh 33
  • 35. 16비트 카운터 수정 16비트 카운터는 플립플롭 16개를 연결한 것임을 상기 A : 새로 지정할 비트 값 Set It 이 1 이면 A의 값이 플립플롭에 입력됨 35
  • 36. 곱셈 구현 1000h: 00h 16 비트 승수 1단계 : 00A7h X 1 00A7h X 001Ch A7h 1002h: 00h 16비트 피승수 1Ch 1004h: 00h <- 16비트 곱은 여기와 00h <- 여기에 00A7h 를 001Ch 번 더하자. 36
  • 37. 곱셈 구현 2 단계 : 처음으로 되돌아가기 0012h: 30h 0000h 번지로 분기 00h 00h 언제까지?? 조건 분기 필요 37
  • 38. 조건 분기 Zero 래치 덧셈기의 출력이 0인지 판별 덧셈기의 출력 값이 0일때 1을 가짐 38
  • 39. 조건 분기 동작 부호 로드 10h 저장 11h 더하기 20h 빼기 21h 자리올림을 이용하여 더하기 22h 빌림을 이용하여 빼기 23h 분기 30h Zero면 분기 31h 자리올림이면 분기 32h Zero가 아니면 분기 33h 자리올림이 아니면 분기 34h 중단 FFh 39
  • 40. 데이터 곱셈 구현 1000h: 00h 16 비트 승수 A7h 1002h: 00h 16비트 피승수 1Ch <- 16비트 곱은 여기와 3단계 : 조건 분기 1004h: 00h 00h <- 여기에 001Ch가 0이 아닌 동안 0000h으로 돌아간다. 1Eh의 FFh를 더하는 이유는 -1을 더하기위한 트릭 40
  • 42. 컴퓨터의 구성 계산기와 컴퓨터를 구분하는 가장 중요한 요소는 조건에 따라 반복가능한 루프가 있는지 여부 조건 분기 기본 구성 요소 프로세서, 메모리, 입력장치와 출력장치 42
  • 43. 우리가 만든 컴퓨터 8비트 프로세서 8비트 데이터 폭의 누산기 대부분의 데이터 패스가 8비트 주소 생성 부분만 16비트 메모리 64K x 8 RAM 입출력 장치 RAM 제어판의 스위치 , 전구 43
  • 44. 기계어 (Machine Language) 프로세서의 동작에 대응하는 16진수로된 코드 10 10 05 20 10 01 11 10 05 니모닉 : 16진수 기계어 코드에 이름을 붙임 44
  • 45. 니모닉 동작 부호 니모닉 로드 10h LOD 저장 11h STO 더하기 20h ADD 빼기 21h SUB 자리올림을 이용하여 더하기 22h ADC 빌림을 이용하여 빼기 23h SBB 분기 30h JMP Zero면 분기 31h JZ 자리올림이면 분기 32h JC Zero가 아니면 분기 33h JNZ 자리올림이 아니면 분기 34h JNC 중단 FFh HLT 45
  • 46. 니모닉 구성 : 명령 코드 목적지, 소스 “1003h에 있는 바이트 값을 누산기로 로드” LOD A, [1003h] A 는 누산기 []는 주소에 있는 값을 참조 “누산기의 내용을 1003h 번지로 저장하라“ STO [1003h], A “만일 Zero 플래그 값이 1이 아니라면 0000h로 분기하라” JNZ 0000h 46
  • 48. 곱셈 프로그램 주소 변경에 대비해 레이블 사용 48
  • 50. 어셈블리어 기계어와 자연어의 중간방식 메모리 주소를 레이블로 표시 기계어와 1 대 1로 대응 함 50

Notes de l'éditeur

  1. 제어판의 취득 스위치를 열고 더하려는 데이터 값을 입력
  2. 취득 스위치와 지우기 스위치 개방덧셈기의 출력은 아직 래치에 저장되지 않음(래치에 클럭이 없으므로)
  3. 클럭이 발생하면 두가지 일이 동시에 일어나는데첫번째로 래치에 값이 저장
  4. 두번째로 카운터가 변하면서 덧셈기가 새로운 덧셈결과 출력아직 새로운 결과는 래치에 저장되지 않음
  5. 두번째로 카운터가 변하면서 덧셈기가 새로운 덧셈결과 출력아직 새로운 결과는 래치에 저장되지 않음
  6. 뺼셈시에 누산기의 CI는 1이 입력되어야 함.C0은 뺄셈하라는 신호
  7. 더이상 명령어와 데이터메모리가 클럭마다 같은 번지수를 읽지 않음데이터 메모리는 16비트 카운터가 아니라명령어로 부터 주소 지정 받음
  8. -1 한 시점에 덧셈기 출력이 0이면 제로플래그는 1이 됨.
  9. 니모닉 기계어를 나타내는 기호
  10. 니모닉 기계어를 나타내는 기호
  11. JNZ 0000h : 값 자체를 참조하므로 대괄호가 없음
  12. 16진수로 된 기계어와 영어 문장으로 풀어 쓰는 자연어의 중간 방식