Czytam książkę The Elements of Computing Systems: Building a Modern Computer from First Principles , która zawiera projekty obejmujące budowę komputera, od bramek logicznych aż po aplikacje wysokiego poziomu (w tej kolejności). Obecny projekt, nad którym pracuję, polega na napisaniu asemblera przy użyciu wybranego przeze mnie języka wysokiego poziomu, w celu przetłumaczenia kodu asemblera hacka na kod maszynowy hacka (Hack to nazwa platformy sprzętowej zbudowanej w poprzednich rozdziałach). Chociaż cały sprzęt został zbudowany w symulatorze, próbowałem udawać, że naprawdę konstruuję każdy poziom, używając tylko narzędzi dostępnych mi w tym momencie w prawdziwym procesie.
To powiedziawszy, skłoniło mnie do myślenia. Używanie języka wysokiego poziomu do pisania mojego asemblera jest z pewnością wygodne, ale czy w przypadku pierwszego asemblera, jaki kiedykolwiek napisano (tj. W historii), nie trzeba go pisać w kodzie maszynowym, ponieważ to wszystko wtedy istniało?
I skorelowane pytanie ... a może dzisiaj? Jeśli pojawi się zupełnie nowa architektura procesora, nowy zestaw instrukcji i zupełnie nowa składnia asemblera, to w jaki sposób asembler zostanie zbudowany? Zakładam, że nadal możesz używać istniejącego języka wysokiego poziomu do generowania plików binarnych dla programu asemblera, ponieważ jeśli znasz składnię zarówno języka asemblera, jak i języka maszynowego dla nowej platformy, to zadanie pisania asemblera jest naprawdę zadanie analizy tekstu i nie jest nieodłącznie związane z tą platformą (tj. musi być napisane w języku maszynowym tej platformy) ... właśnie z tego powodu jestem w stanie „oszukać” pisząc mój asembler Hack w 2012 roku i skorzystać z wcześniej istniejącej język wysokiego poziomu, który mi pomoże.