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
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
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.
Link wydaje się być uszkodzony. Jest to ten sam: http://cs.smith.edu/~thiebaut/ArtOfAssembly/artofasm.html –
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ń.
spróbuj użyć infrastruktury kompilatora LLVM.
- 1. Pisanie pomocy dla skryptu Pythona
- 2. Potrzebuję pomocy w dopasowaniu/zamianie Regexa
- 3. BASH: potrzebuję pomocy z wielowymiarowymi tablicami asocjacyjnymi
- 4. jQuery - wtyczka bpopup, potrzebuję pomocy w odtwarzaniu
- 5. Nie można zrozumieć transformacji układu współrzędnych grafiki iOS, potrzebuję pomocy
- 6. Potrzebuję pomocy w zrozumieniu, jak znaleźć Big-Oh segmentu kodu
- 7. Potrzebuję pomocy w znalezieniu kompleksowych samouczków tworzenia wtyczek netbeans
- 8. Potrzebuję pomocy w łączeniu starego jQuery roboczej z nowym webformem
- 9. Potrzebuję pomocy, próbując skompilować prosty przykład dla GLFW z MinGW
- 10. Potrzebuję pomocy przy zmianie nazwy pakietu w eclipse
- 11. Potrzebuję pomocy w znalezieniu wycieku pamięci przy użyciu MAT
- 12. Potrzebuję pomocy podejmowania if z wieloma operatorami logicznymi łatwiejszych
- 13. Potrzebuję pomocy przy konfigurowaniu ruby na szynach Środowisko wykonawcze javascript
- 14. Potrzebuję pomocy w dostępie do przycisku wewnątrz elementu
- 15. Potrzebuję pomocy w pustym polu tekstowym na konkretnych warunkach
- 16. Potrzebuję pomocy w formatowaniu powiązania danych przy użyciu nokautu
- 17. Komentarze asemblera GNU
- 18. Programowanie DSP TI - czy C jest wystarczająco szybki, czy potrzebuję asemblera?
- 19. Pisanie asemblera Z80 - testowanie ASM i budowanie drzewa parsowania za pomocą kompozycji?
- 20. Wybór odpowiedniego asemblera do kompilatora
- 21. Potrzebuję array_keys_recursive()
- 22. Jak zrobić pętlę w języku asemblera x86?
- 23. Jak sprawdzić wartość EIP przy użyciu asemblera?
- 24. Osadzanie asemblera w C++ jest dopuszczalne?
- 25. Skok asemblera w trybie chronionym z GDT
- 26. Podkreślanie składni gedit dla plików asemblera (* .asm)
- 27. Pisanie sterowników w C#
- 28. Pisanie prostego analizatora składni
- 29. node.js - potrzebuję pomocy przy wyborze silnika szablonowego, zarówno po stronie klienta, jak i serwera, z ekspresowym
- 30. Potrzebuję pomocy przy konfigurowaniu SQLite na eclipse z Javą po raz pierwszy
Hmm. Wspomnienia z przeszłości właśnie minęły mi w głowie podczas czytania twojego kodu. To był długi czas ... –
@ Yves: To samo tutaj, napisany ten sam program w 80886, z80, 6301, 6502 i 1802 przez lata, ale żaden w ostatniej dekadzie. –
Ś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 –