Czy istnieje książka kanoniczna na temat zestawu x86? [Zamknięte]

25

Istnieje wiele książek na temat montażu. Zwykle jednak mają do czynienia z ISA, o które mnie to nie obchodzi, takie jak MIPS lub ARM. Nie mam do czynienia z tymi architekturami; nie ma powodu, abym próbował się ich nauczyć.

Ale książki z x86 wydają się ... nieistniejące.

Powiedzmy na przykład, że próbuję zbudować zabawkowy kompilator generujący pliki Windows Portable Executable.

Czy istnieje książka, która jest de facto standardem opisującym najlepsze praktyki, metodologie projektowania i inne pomocne informacje na temat montażu x86? Co z tą książką czyni ją wyjątkową?

Billy ONeal
źródło
Ile masz doświadczenia w montażu? Czy kiedykolwiek próbowałeś używać GCC bez optymalizacji do kompilacji prostych programów C w asemblerze, a następnie odwrócić inżynierię kodu z powrotem do programu C?
Brian
10
@Brian: Musiałbym znać zgromadzenie, zanim będę mógł to zrobić.
Billy ONeal,
Widziałem kopię zestawu instrukcji x86. To 2 tomy i prawdopodobnie największa książka, jaką kiedykolwiek widziałem. Baw się dobrze :)
AngryBird
2
Billy, jeśli nie znasz żadnego zgromadzenia, to każdy z nich byłby całkiem dobry, aby zacząć od ogólnych pomysłów. Montaż jest bardzo zbliżony do architektury, więc instrukcje montażu w dużym stopniu odzwierciedlają projekty specyficzne dla architektury. Zacząłem od złożenia x86 i przeczytałem „Język asemblera dla komputerów z procesorami Intela” Kipa Irvine'a. Książka faktycznie została jednak sparowana z klasą online na uniwersytecie. Nie jestem pewien, jakiego rodzaju uczniem jesteś, ale uważam, że instruktaż najlepiej sprawdza się w nauce.
Brian
@Brian: Co rozumiesz przez „którekolwiek z nich”? Nie rozumiem, co to „oni” - jakaś książka? Każdy asembler? Jakieś ISA? Grałem już w asemblerze MIPS; Nie mogę jednak znaleźć niczego na x86.
Billy ONeal

Odpowiedzi:

18

Kiedy byłem na studiach, użyłem asemblera dla procesorów x86 jako podręcznika i bardzo łatwo było go zrozumieć. Mam starszą czwartą edycję i porównałem ją z szóstą edycją i nie zauważyłem dużych zmian, więc prawdopodobnie możesz tanio kupić starszą kopię. Ludzie narzekają na to, że korzysta z własnej biblioteki na potrzeby operacji we / wy, ale w kolejnych rozdziałach mówi ci, jak to zrobić „twardo”.

dboss
źródło
1
Bardzo dobra książka!
Koder
Przeczytałem piąte wydanie książki Irvine zatytułowanej „Język asemblera dla komputerów z procesorami Intel”. :)
Brian
1
Myślę, że jest to dość zła sugestia, ponieważ większość drugiego wydania jest specyficzna dla własnego ezoterycznego systemu High Level Assembly, który jest zasadniczo dranią wersją C. Nigdy nie czytałem pierwszego wydania. Wersja dos, którą można znaleźć na jego stronie za darmo i nigdy nie została opublikowana, jest jednak świetną lekturą. Jest także o około 50% dłuższy i nie ma nic w HLA (co jest całkowitą stratą czasu).
Evan Carroll,
1
@EvanCarroll Jestem zdezorientowany. Zmieniłeś link do niewłaściwej książki, a następnie skrytykowałeś książkę, na którą zmieniłeś link. Czy to było niezamierzone?
Merlyn Morgan-Graham
1
całkowicie mój błąd. @ MerlynMorgan-Graham jest dla ciebie dobry zarówno dla złapania go, jak i poprawienia.
Evan Carroll,
9

Programowanie Art of Assembly jest doskonałym zasobem, który ma sporo na temat programowania x86.

Przydatna jest również dokumentacja x64 ABI . Próbowałem znaleźć link do wersji, która była na stronie AMD, ale wydaje się, że już nie mogę go znaleźć, więc chyba będzie musiał to zrobić.

Coś, co może pomóc [trochę] podczas nauki, to zamiast pisać kompletną aplikację od zera w asemblerze, zamiast tego napisz większość w C (lub jakimkolwiek innym skompilowanym języku), a następnie wywołaj fragment kodu asemblera z że. Gdy to zrobisz, odwróć to, napisz program asemblera i wywołaj z niego niektóre funkcje C.

Edycja: Naprawiono literówkę.

Orclev
źródło
1
Inna sugestia: Napisz prosty program w C, skompiluj go do asemblera, oczyść go, aby asembler mógł go złożyć, a następnie ulepsz wersję asemblera. To dobry sposób, aby szybko uzyskać minimalną funkcjonalność (odczyt z klawiatury, napisanie do konsoli).
TMN
4

Bardzo dobrą książką do nauki montażu w x86 są narzędzia optymalizujące procesor Pentium . Chociaż głównym celem tej książki jest optymalizacja kodu asemblera, uczy ona całego procesu Pentium i jest także dobrą książką referencyjną.

Jest on wyczerpany, ale nie jest trudny do znalezienia.

Jest wyposażony w dyskietkę zawierającą „optymalizator kodu asemblera”. W rzeczywistości nie optymalizuje kodu, ale zamiast tego tworzy komentowaną listę, która wskazuje, gdzie leżą nieefektywności, takie jak przeciągnięcia rurociągu.

Narzędzie dostarczane z książką jest ograniczoną wersją bardziej charakterystycznego produktu, który firma autora sprzedała, ale z powodów, które nie są mi znane, już dawno nie działają. Nie wiem dlaczego - sądzę, że takie narzędzie sprzedawałoby się jak ciepłe bułeczki.

Ogólnie x86 jest bardzo złożonym tematem, ponieważ istnieje wiele wariantów obsługiwanych przez różne modele mikroprocesorów. Po zapoznaniu się z podstawami warto zapoznać się z książkami danych Intela lub AMD w celu uzyskania dokładnego układu docelowego. Niestety kod, który działa szybko na jednym modelu procesora, może nie być tak szybki na innym układzie.

Mike Crawford
źródło
Tak naprawdę nie chodzi o wydajność; po prostu chcę być w stanie generować pliki binarne. Nadal się rozejrzy :)
Billy ONeal
2
Musisz także nauczyć się korzystać z określonego asemblera, a nie tylko z kodów asemblera. Każdy asembler robi rzeczy zupełnie inaczej. Jeśli zamierzasz napisać dużo kodu asemblera, użyj masm, ponieważ został opracowany z myślą o ludzkich koderach. Jeśli masz zamiar napisać małe fragmenty zestawu wbudowanego, możesz użyć gcc z GNU jako (również nazywanego gazem) zestaw wbudowany. Składnia GNU as 'jest całkowicie różna od składni masm. Jak napisano przede wszystkim do użytku jako zaplecze dla gcc, do generowania kodu wykonywalnego, a zatem nie zapewnia wielu funkcji, których oczekują ludzie kodujący.
Mike Crawford
1

Dlaczego nie spróbować Wikibook - http://en.wikibooks.org/wiki/X86_Assembly . Daje dobry wstęp do języka asemblera.

Najważniejsze w montażu jest uświadomienie sobie, jakie to proste, i że musisz pozostać przy tej prostocie.

Philip Oakley
źródło