2009-08-20 13 views
8

Jestem nowicjuszem w zakresie pisania asemblera, a nawet po przeczytaniu dużej ilości materiału wciąż mam problemy z zawijaniem głowy wokół kilku koncepcji.Pisanie asemblera Z80 - testowanie ASM i budowanie drzewa parsowania za pomocą kompozycji?

  1. Co to jest proces dzielenia pliku źródłowego na tokeny? Wierzę, że ten proces nazywa się lexing, a ja przeszukałem wysokie i niskie w poszukiwaniu prawdziwych przykładów kodu, które mają sens, ale nie mogę znaleźć rzeczy tak prostych przykładów kodu bardzo pożądanych;)

  2. Podczas analizowania, czy Czy kiedykolwiek trzeba przekazywać informacje w górę lub w dół drzewa? Pytam się w następujący sposób, podejmują:

    LD BC, nn

To musi być przekształcony następującym parsowania drzewa raz tokenized (???)

___ LD ___ 
    |  | 
BC  nn 

teraz , kiedy drzewo jest przemieszczane, musi wygenerować następujący kod maszynowy:

01 n n 

Jeśli instrukcja była:

LD DE,nn 

Następnie wyjście musiałyby być:

11 n n 

ten sposób, że nasuwa się pytanie, czy LD powrotną węzeł coś innego na podstawie argumentu, czy jest to coś argumentu, że wraca? Jak to osiągnąć? Bardziej proste przykłady kodu będą doskonałe, jeśli pozwoli na to czas.

Jestem najbardziej zainteresowany poznawaniem niektórych surowych procesów w tym miejscu, zamiast przyglądać się zaawansowanym istniejącym narzędziom, więc proszę o tym pamiętać przed wysłaniem mnie do Yacc lub Flex.

Odpowiedz

8

Dobrze, struktura drzewa naprawdę chcesz do dyspozycję, która działa w rejestrze i pamięci adresowania trybie involing offsetowej przemieszczeń i indeksie zarejestrować będzie wyglądać następująco:

INSTRUCTION-----+ 
    |  |  | 
    OPCODE REG  OPERAND 
        |  | 
       OFFSET INDEXREG 

I tak, chcesz chcieć przekazywać wartości w górę iw dół drzewa. Metoda formalnego określania takich wartości jest nazywana "gramaturą atrybutów" , a ty dekorujesz gramatykę dla swojego języka (w twoim przypadku, twoja składnia asemblera) z wartością przekazującą i obliczeniami dla tych wartości. Więcej tła, patrz Wikipedia on attribute grammars.

W related question you asked, ja omówiła narzędzie, DMS, który obsługuje gramatyk ekspresja i budowanie drzew.Jako narzędzie do manipulacji językiem, DMS ma dokładnie te same problemy związane z przepływem informacji drzewa. Nie powinno Cię to dziwić, że jako wysokiej klasy narzędzie do manipulacji językami może obsłużyć bezpośrednio obliczenia gramatyczne atrybutów .

+1

Miało to być ilustracją drzew, które musi zbudować, zamiast dopasowywania konkretnego modelu Z80. Kodowałem DUŻO asemblera Z80 w latach 80 .; Mogę wiedzieć o tym więcej, niż myślisz. –

+0

Następnie pokaż swoją wiedzę. Napisałeś już asembler Z80? Nie, ale napisałem asemblery 8080 i 6809, a twoja rada wydaje mi się martwa. –

+0

Twoje wrażenia są prawdopodobnie inne niż moje. Zakodowałem asemblery dla Collinsa 8311 (około 1968), 12- i 16-bitowych maszyn, które nie zrobiły tego komercyjnie, więc nie słyszałeś o nich, asemblerze mikrokodu i 6809 asemblera, który widziałeś w drugiej wiadomości. Zbudowałem także wiele frontów kompilatora (sprawdź moje informacje o biologii i stronę internetową). Moje wczesne asemblery zostały zbudowane w sposób ad hoc i zadziałały. Rzeczy od lat 80-tych, które stworzyłem przy użyciu lexerów i analizatorów składni, ponieważ znacznie łatwiej jest je określić, zachować, rozszerzyć, nazwać. –

5

Nie trzeba budować drzewa parsowania. Kody op Z80 są bardzo proste. Składają się z kodu operacyjnego i 0, 1 lub 2 operandów, oddzielonych przecinkami. Trzeba tylko podzielić kod op w górę na (maksymalnie 3) komponenty za pomocą bardzo prostego parsera - żadne drzewo nie jest potrzebne.

+0

Co ze względnymi adresami pamięci> z pewnością potrzebne jest do tego jakieś symboliczne drzewo? może nawet stół – Darknight

+0

Pytający pytał o parsowanie kodów OP. Na pewno potrzebujesz tabeli symboli, aby pomóc w tworzeniu rzeczywistego kodu asemblera, ale jest to zupełnie inny problem. –

+0

@Darknight: Czy nadal nie będzie prawidłowego punktu tworzenia drzewa parse. Na przykład inne wystąpienia mogą odgrywać rolę, np. Niektóre ciągi kodu ASM, które mają różne warianty składni: Etykiety, komentarze, nawiasy, zmienne globalne, .DB, .DS, .DW Czy te nie stałyby się również bardziej uproszczone, jeśli użyto drzewa parse? @Neil: Czy możesz opracować? Pozdrawiam, GP –

3

W rzeczywistości kody opcyjne nie mają bazy bajtów, ale podstawy ósemkowej. Najlepszy opis, jaki znam, to DECODING Z80 OPCODES.

+0

Tak, zaraz. Octal umożliwia tłumaczenie bezpośrednio, a rekurencyjne wywołanie może obsłużyć rejestry offsetowe. Nie trzeba w ogóle budować drzewa składni. Każda instrukcja i bezpośrednio mapowane. – EvilTeach

Powiązane problemy