2010-08-05 14 views
8

Piszę asembler 8086 dla projektu uczelnianego. Przeszedłem trochę materiału na temat projektowania kompilatorów w Internecie i czytam "smoczą książkę" kompilatorów. Ale problem polega na tym, że nie mogłem znaleźć tu wiele informacji na temat montażu (generowania kodu obiektowego). Czy są jakieś dobre książki lub linki do projektowania asemblera. Od czego zacząć? Przeszedłem przez analizę leksykalną, analizę parsowania i generowanie kodu pośredniego.Pisanie asemblera, potrzebuję pomocy

Odpowiedz

7

Czy możesz po prostu puntować i wygenerować plik COM? Jest on ładowany do segmentu kodu o wartości: 0100 i wykonywany za pomocą CS, DS, ES i SS, wszystkie wskazano na ten segment.

Jeśli można to zrobić, to generowanie kodu staje się łatwiejsze.

Program testowy byłoby proste

mov dx, 110 
mov ah,9 
int 21h 
mov ax,4c00 
int 21 

at address 110: 
"Hello, World!" 0d 0a 24 
+4

Hmm. Wspomnienia z przeszłości właśnie minęły mi w głowie podczas czytania twojego kodu. To był długi czas ... –

+0

@ Yves: To samo tutaj, napisany ten sam program w 80886, z80, 6301, 6502 i 1802 przez lata, ale żaden w ostatniej dekadzie. –

+3

Świetna odpowiedź, ale może powinieneś zauważyć, że powyższy przykład wymaga MS-DOS lub powłoki MS-DOS w systemie Windows. Bóg tylko wie, gdzie int 21 zabrałoby cię w prawo innego systemu operacyjnego –

1

Trzeba mapowanie pomiędzy mnemotechnicznych instrukcje jak MOV i rozkazy zobaczyć OpcodeMap. Poza tym potrzebujesz informacji, ile argumentów (i szerokości operatorów) wymaga instrukcja (zakodowane w polach bitowych, które zaoszczędzą ci dużo czasu, jeśli to zrobisz).

Wątpię, że książka o smoczku pomoże ci bardzo.

The Art of ASSEMBLY LANGUAGE PROGRAMMING to dobre referencje.

+0

Link wydaje się być uszkodzony. Jest to ten sam: http://cs.smith.edu/~thiebaut/ArtOfAssembly/artofasm.html –

3

Smocza książka jest całkowicie złym źródłem, ponieważ asembler nie jest kompilatorem. "Grammer" linii asemblera jest wyjątkowo prosty (zwykły gramatyk - nie kontekstowy).

Część generująca kod dla asemblera jest prawie nieistniejąca. Zdobądź dobrą książkę informacyjną o opkodes docelowego procesora i po prostu wygeneruj bajty, jak wyjaśniono.

Jest kilka fajnych prostych asemblerów i powinieneś na nie patrzeć. Nauka poprzez czytanie kodu jest bardzo skutecznym sposobem na projekt uczelni. Będziesz go potrzebował, ponieważ kod Asemblera Intela jest wyjątkowo brzydki, przynajmniej jeśli chcesz również ukierunkować niektóre z rozszerzeń.

Powiązane problemy