첫 번째 조언은 주제에 대한 높은 수준의 책을 읽는 것입니다. 즉, 아직하지 않은 것으로 가정하고 일부 온라인 자습서 또는 기타 작업을 계획하고 있습니다. 적어도 나를 위해, 나는 을 좋아한다.가 첫번째로 이것과 같은 물건에 머리를 급강하시키고 싶어한다, 그렇지만 나는 나의 머리 위를 급하게 느끼고, 그 다음 단지 프로젝트를 포기한다. 프로젝트를 시작하기 전에 프로젝트에 대한 높은 수준의 이해가 있는지 확인하면 대단히 도움이됩니다.
하나의 시리즈는 Write Great Code 장이 좋습니다. 나는 모든 것을 다 읽지 않았기 때문에 전체 시리즈를 보증 할 수는 없지만 직장에있는 사무실은 내가 가지고있는 것들에 대해 꽤 잘 이해하기 위해 여러 번 사용했다. 예를 들어, 당신의 계획과 직접적으로 관련이있을 수있는 한 가지 예제는 GCC 컴파일러가 생성하는 ELF 바이너리, 각 섹션의 정의, 그리고 그곳에 저장된 내용을 GCC 컴파일러가 어떻게 구성했는지 이해해야 할 필요가있었습니다. (이것은 임베디드 시스템을위한 것이었고 우리는 RAM을 확장하여 일부 재구성해야했습니다 ...)
당신은 "너무 힘들지 않습니다"라고 말했습니다. 제 의견으로는 당신의 단계가 이미 상당히 어려워 진 것 같습니다. 특히 최종 목표가 컴파일러와 운영 체제에 대해 배우는 것이면 더욱 그렇습니다.나는 적어도이 가상 머신을 건너 뛸 것이다. 실제로 프로세서는 매우 단순하며 '기계어'만 처리한다는 것을 이미 알고 있다는 사실에 기반하여 이미 좋은 시작 파악을 할 수 있습니다.
대신에 3 단계부터 시작하여 자신 만의 컴파일러를 작성합니다. 나는 대학에서 컴파일러 수업을 들었고 학기 말까지, 나는 처음부터 을 사용하여 만든 파스칼 컴파일러를 사용했다. 그것은 아주 계몽적이었습니다. 또한 Bison을 yacc와 함께 사용하는 것으로 볼 수 있습니다. 나는 그것을 결코 사용하지 않았다.
또한 자유 시간에 약간의 연습 만하면 GCC를 조작하여 hello world를 X 바이트보다 작게 컴파일하는 방법을 생각하는 것보다 더 많은 것을 가르쳐 줄 것입니다. (웹상에 꽤 많은 예제가 있습니다.)
재미 있습니다!
감사합니다. 나는 꽤 많이 렉싱/파싱을 해왔다. 나의 도전은 이제 AST를 만들고 코드 생성을 수행하는 것이다 (나는 x86 어셈블리를 배우고 싶지 않았기 때문에 내 자신의 VM을 내 자신의 커스텀으로 작성하려고했다. 내가 익숙한 지시.) – ouiliame
당신은 내가 그때 깨달았 던 것보다 더 멀다! 네, 코드 생성이 가장 어렵다는 것을 기억합니다. 분명히 알 수있는 것보다 x86 어셈블리가 적다는 것을 기억합니다.하지만 운좋게도 명령어의 서브셋을 알아야만합니다. – Lncn