여기서 만들 hack 어셈블러는 아무 고급 언어로 만들어도 된다고 한다. c나 자바같은 다른 언어는 공부한지 오래되서 다까먹엇다보니, 그냥 파이썬으로 구현해봐야될거 같고, 그러면 이런식(pyinstaller로 실행 파일로 만들지 않은 이상)으로 입력하면 기계어 파일을 만들도록 할거같다.

 

 >python myAssembler Mult.asm

하면 Mult.hack이라는 기계어 바이너리가 나오도록

 

 그런데 어떻게 어셈블러를 만드는게 좋을까?

 책에서 말하기를 처음부터 다 하기보다는 두 단계로 나누어서 처음에는 심볼릭 참조 처리(대치)하는걸 고려하지 않은 어셈블러를 만들고, 동작이 잘 되면 심볼릭 참조 처리가능한 어셈블러를 만들라고 한다. 테스트 스크립트도 심볼릭을 쓴것과 안쓴 버전이 있다.

 

 

 

 베이직 어셈블러 만들기

 일단 베이직 어셈블러는 심볼 테이블을 제외한 내용들 그러니까 주석, 스페이스바를 넘기고 기계어록 하는 정도를 할수 있으면 되는거같은데, 베이직 어셈블러 구성요소로 파서 모듈과 코드 모듈을 만드는걸 추천하고 있다. 파서.. 프로그래밍 하다보면 종종 마주치는 용어인데 사전 보면 분석하다라고 나와있다.  근데 보통 동작은 다른 형태로 변환시키는게 주인거 같았는데, 당장은 입력을 분석해서 어째 저째한다는 의미 정도로 이해하고 넘어가야 겠다.

 

 코드 모듈은 한글로 코드라 하면 늬앙스가 전달이 잘 안되는거 같고, 부호화라 하기에는 너무 딱딱하단 생각이 든다. 그냥 어셈블리어를 기계어로 부호화(변환) 시켜주는 부분이라 생각하자. 정리하면 파서는 어셈블리어 분석기, 코드는 어셈블리어 변환기 정도?

 

 

 

 파서 모듈 & 코드 모듈

 친절하게도 저자 분이 구현해야할 각 모듈별로 추천하는 함수와 매개변수, 반환값 동작들을 다 정리해주고 계신다. 근데 내가 정리하기는 싫어서 구현해놓고 그냥 동작하는지만 보고 코드나 올려야겠다. 

 

 

22.05.23

위 내용은 지난 금요일날 어셈블러 구현하면서 작성했었는데

 

기본어셈블러야 구현자체는 할수있겠는데, 책에서 요구하는 

 

함수, 매개변수 등을 어떻게 맞춰야할지 고민하다가 시간을 다보내버렸다.

 

구현하고 에러잡는데 너무 시간을 많이낭비해서 좀 고민해봤는데

 

구현은 2-3시간 정도만하고 안된건 기존 내용참고해서 하려고한다.

 

일단 기본 어셈블러 구현하다만게있는데 나중에 다시하고싶어지면하고

 

이론내용부터 정리해봐야겠다.

 

 

 

 

+ Recent posts