이 장의 목표는 객체지향 고수준 언어의 컴파일러_compiler를 만드는 것을 준비하는 것이다! 고수준의 프로그램을 중간 코드(10-11장)로 만들고, 중간 코드를 기계어로 번역(7-8장)한다. 이는 70s에 등장한 오래된 개념이지만, C#과 Java같은 언어에 채택되어 현재까지도 사용되고 있다. 기본개념 플랫폼이 아닌 가상머신(VM)에서 실행가능한 중간코드를 만드는 것이다. VM은 컴퓨터상에서 구현가능한 추상적인 컴퓨터이다. 이를 통해 코드 이동성_code transportability를 확보할 수 있다. (동일한 코드를 수정하지 않거나, 약간의 수정만으로도 여러 플랫폼이나 환경에서 이용이 가능한 상태) VM구현에는 SW인터프리터, 특수목적 HW, VM프로그램으로 특정 플랫폼 기계어로 번역 등이 있다...
이 글은 insight 출판사의 [밑바닥부터 만드는 컴퓨팅 시스템 / The Elements of Computing System]이라는 책에 있는 프로젝트(과제) 를 수행하는 글입니다. 해외에서는 Nand2Tetris라는 이름으로 잘 알려져있는 프로젝트입니다. 내용은 동일하니 참고해주세요! Chapter 2의 Project 글 보러가기 목표는 ALU 완성하기 - CPU에 대한 이해 2진코드 불연산으로 더하기 → 가산기 칩에 대한 이해 (Adder) → 구현해보기 배경 2진수 컴퓨터는 수를 2진수로 다룬다. 19라는 수를 나타내고자 하면 10011(2진수) = 2^4×1 + 2^3×0 + 2^2×0 + 2^1×1 + 2^0×1 으로 나타날 것이다. 더 정확히, 64비트 컴퓨터의 레지스터에는 00000000..
공군 특기학교에서 시간을 보내면서 공부나 하려고 책을 고르려 시내 서점에 갔습니당. 재미있어보이면서 코드를 짜지 않아도 공부할 수 있는 컴퓨터 책을 찾다가 아래 책을 발견할 수 있었습니다. 「The Elements of Computing systems - 밑바닥부터 만드는 컴퓨팅 시스템」 고려대학교에서 컴퓨터 시스템 설계 과목을 들으면서 공부를 해보니 컴퓨터가 어떻게 돌아가는지를 알 수 있어서 되게 재미있고 저랑 잘 맞더라고요. 그래서 한번 더 공부해보려고 이 책을 골랐습니다. 실제로 읽어보니까 되게 프로젝트도 재미있게 구성되어있어요. 불 논리에서 게이트를 배우고, ALU랑 CPU를 디자인해보고, 어셈블리어를 기계어로 바꾸기, VM언어를 어셈블리어로 바꾸기, 객체지향 언어를 VM언어로 바꾸기, 운영체제 ..