목록프로젝트/Nand2Tetris (9)
cyphen156
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/nOJOz/btsnIKBvhZO/kL2KDMX00UfWfkAZQKlxgK/img.jpg)
임시발행글 //모든 자료들은 Nand2Tetris홈페이지에서 찾을 수 있습니다 또는 cyphen156/Work-space: Studying (github.com)에서 찾으실 수 있습니다.
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bnpUkZ/btsnIKVO1A7/ZdnVGgNXKDjGNkhkLjKWSk/img.jpg)
기계어와 프로그래밍 언어 프로그래밍 언어가 플랫폼간 호환성과 프로그래머의 편의에 맞춰 강력한 표현력을 갖도록 설계하여 코딩을 편하게 만들어주는 것이 목표라면 기계어는 프로그래밍언어로 작성된 프로그램을 대상 하드웨어에서 직접 명령을 실행하고, 하드웨어를 완전히 제어하는 것이 설계 목표다. 다시 말해서 2장과 3장에서 만든 연산기와 메모리를 직접 제어하는 언어이다. 그렇기 때문에 기계어는 하드웨어가 명령을 수행할 수 있도록 2진 버전으로 구성되어 있고 약간의 프로그래머의 편의를 위한 기호 버전으로 나타낼 수 있다. 예를 들어 R1 + R2라는 명령이 있을 때 2진 기계어로 표현한다면 R1 = 00001, R2 = 00010, + = 101011일 때, 이 코드들을 조합(assemble)하면 101011(+)..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/cltj0r/btsm82AVOkB/cj2t8oSWQk5ybEnRCYQgc0/img.jpg)
앞서 장에서 가산기라는 논리 연산 장치를 만들었다. 이제 필요한것은 계산한 결과를 저장해 놓을 기억장치다. "임시로 저장하던, 반영구적으로 저장하던 모든것은 결국 Memory라는 기억장치로 귀결된다. 연산하는 방법 조차도 어딘가에 기록해놓아야 나중에 가져다 쓸것 아닌가?" "사람도 뇌속 어딘가에 저장해 놓았다가 기억을 되새기면서 회상하지 않는가?" 다만 여기서 만들 메모리 칩은 앞서 만든 연산기와는 다르게 시간(Timeline)에 영향을 받는다. 과거의 기록이 현재의 기록에 영향을 미친다는 것이다. 이것을 조합(Combination)과 순차(Sequential)이라고 한다. 그럼 시간의 흐름을 어떻게 알까? Tick-Tock이라는 이진 신호 주기(Clock)을 사용해 판단한다. Tick(입력)의 시작과 ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bxku70/btsmKVw4vRs/bKB55tKcsDIBV8ZaoW3rZ0/img.jpg)
1장에서 논리 게이트를 만들었으니 2장에서는 만들어진 논리게이트들을 조합해 산술논리연산장치(Arithmetic Logical Unit)를 만들 것이다. ALU는 CPU에서 연산을 담당하는 핵심 부품이다. 먼저 컴퓨터는 항상 모든 연산을 2진수의 덧셈을 통해 처리한다.때문에 우리는 맨 처음 덧셈 연산을 수행해주는 가산기(Adder)를 만들어야 한다. 2진수의 덧셈 연산 예를 들어 10진법 수 2개 15, 6을 덧셈연산한다고 생각해보자 10진수 체계에서의 두 자리 수 덧셈은 한 자리 수 5+6은 1의 올림수가 발생하고, 결과가 1이고, 두 자리 수 1+0은 한 자리 수 덧셈연산에서 발생한 올림 수 1을 추가로 더해 2라는 결과를 출력하고, 최종적으로 21이라는 결과를 출력한다. 코드로 표시하면 이렇게 된다...
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/b65N0C/btsmHF1r4Pl/pJKQwhuOKtzAqaez5gBRJ1/img.jpg)
Boolean : Base of Computer 불리언이란 뭘까? 간단히 말하면 On/Off기능을 가지고 있는 스위치다. 디지털 기기는 참과 거짓이라는 2진 논리로 모든 것들을 처리하는데 이 2진 논리를 응용해서 만든게 불리언(부울 논)다. 이 챕터에서는 부울 논리에 대해 공부하고, NAND 논리 게이트를 이용해 16비트 AND, OR, NOT, XOR 게이트와 멀티플렉서, 디멀티플렉서를 만들어 보고, 32비트 체계로 확장하는 것을 할 것이다. 부울 대수(Boolean algebra) 0/1로 표현되는 2진수 논리 기본 부울 연산자 AND : A * B, A ∧ B OR : A + B, A ∨ B NOT : !A, ~A, ¬A 복합 부울 연산자 NAND(NOT AND) : !(A ∧ B), 유니버셜 게이..