이 글은 insight 출판사의 [밑바닥부터 만드는 컴퓨팅 시스템 / The Elements of Computing System]이라는 책에 있는 프로젝트(과제)를 수행하는 글입니다. 해외에서는 nand2tetris라는 이름의 프로젝트로 알려져 있습니다! 동일한 내용으로 구성되어 있으니, nand2tetris를 공부할 때 참고바랍니다 프로젝트 수행을 위한 언어로 C#을 사용하였습니다. Chapter 6의 프로젝트에 대한 글 보러가기 The Elements of Computing System - Ch.6 PJ (1) Ch. 6 Project - 1 이 글은 insight 출판사의 [밑바닥부터 만드는 컴퓨팅 시스템 / The Elements of Computing System]이라는 책에 있는 프로젝트(과제..
6장-12장은 컴퓨터의 SW적 측면에 초점을 맞춘다. 컴파일러, 간단한 객체 프로그래밍 언어, 기본적인 운영체제를 만들어보자. 여기에서 가장 기본이 되는것이 어셈블러 _assembler이다. 어셈블리어로 작성한 프로그램을 어셈블러를 이용해 2진 코드로 번역하는 과정을 배우고, Hack 어셈블러를 만들자. 기호로 된 어셈블리 명령 (ADD, JUMP)과 2진코드는 1대1 대응이므로 어셈블러 작성은 어렵지 않다. 기호를 이용해 메모리를 참조하도록 기능을 추가하는 것이 까다롭다. 기호테이블 _symbol table을 통해 사용자 정의 기호를 물리적 주소에 연결하고 관리한다. Hack의 어셈블러를 구현해보면서 다른 어셈블러를 만들 때 사용되는 핵심 소프트웨어 공학의 원리를 맛볼 수 있다. 배경 기계어는 기호형 ..
이 글은 insight 출판사의 [밑바닥부터 만드는 컴퓨팅 시스템 / The Elements of Computing System]이라는 책에 있는 프로젝트(과제) 를 수행하는 글입니다. 해외에서는 Nand2Tetris라는 이름의 프로젝트로 잘 알려져 있습니다. 내용은 동일하니, 공부할 때 참고하세요! Chapter 4 Project에 대한 글 보러가기 기계어 프로그램을 살펴보면 HW가 왜 그렇게 설계되었는지 알 수 있다. 기계어는 프로세서에서 산술/논리 연산을 하고, 메모리에서 값을 Save/Load하고, 레지스터끼리 데이터를 교환하고, 조건 검사를 하는 등의 여러가지 작업을 수행할 수 있다. 이는 HW에게 직접 명령을 내리는 것이므로, 기계어 역시 HW플랫폼의 구성요소라고 볼 수 있다. 배경 기계어 M..