4.1) 개요
이전에 필자가 C와 어셈블리 언어의 중간 언어인 Handy CIL을 소개한 바 있다. 여기서도 같은 일이 일어난다. NASM 어셈블리 언어는 완전한 어셈블리 언어지만, 사실 우리는 NASM의 명령어를 몇 개 알고 있을 뿐 NASM 어셈블리 언어 전체(specification)를 알고 있다고 말할 수는 없다. 강조하지만 우리가 공부한 건 NASM의 정말 일부분일 뿐이다. 우리의 목표는 C 컴파일러고, C 컴파일러는 C 코드를 기계어로 번역하기 위해 어셈블리 언어로 변환해야 한다. 그런데 우리가 온전히 알지 못하는 언어로 변환을 시도한다는 건 어딘가 마음 한 구석이 찜찜해지는 것이다. 내부 구현을 모른 채로 STL의 스택과 같은 자료구조를 꺼내서 쓴 다음, 버그가 발생하면 STL의 스택이 버그인지, 자신의 코드가 버그인지 판단할 수 없는 상황이 올 수 있다는 것이다(물론 이 경우 99.9%는 자기 잘못이지만).
필자가 HASM이라는 언어를 새롭게 고안했던 건 인트라넷 컴퓨터에 어셈블러가 없어서 이것도 스스로 개발해야 했던 탓이지만, 여기서는 자신의 코드에 신뢰감을 더하기 위한 것이라고 말하겠다. 우리는 HASM이라는 언어에 필요한 명령을, 필요할 때 추가하고 구현할 것이다. 이 과정은 꽤 재밌다. 지금 당장 무엇을 하는지 이해하지 못하더라도 프로젝트를 진행하다보면 자연히 알게 되는 것이니 고민하지 않아도 좋다.