Po co nam assembler?
Czy znajomość asemblera jest potrzebna?
- Dzisiejsze kompilatory optymalizują kod tak dobrze, że przeważnie działa on tak szybko jak ręcznie optymalizowany,
- Złożoność dzisiejszych procesorów i różnych poziomów pamięci jest tak wielka, że ręczna optymalizacja jest trudna,
- Procesory są tak szybkie, że większość czasu są bezczynne czekając na odczyt lub zapis danych do pamięci, urządzeń I/O.
- Kod asemblerowy jest trudny w utrzymaniu, nie przenośny
Zalety assemblera
- Mały rozmiar kodu
- Programista panuje nad wszystkim, pozwala to wyeliminować niektóre zmienne czy instrukcje.
- Do kodu nie są dołączane zbędne biblioteki "standardowe".
- Można wybrać instrukcje, które są krótsze lub szybsze.
- Duża szybkość działania
- Wiedza o tym jak naprawdę działa program. Przydaje się także przy programowaniu w językach wysokiego poziomu (HLL).
- Wstawki asemblerowe.
Zastosowania asemblera
- małe programy dla systemów wbudowanych: oprogramowanie dla telefonów, lodówek, samochodów itp.
- sterowniki urządzeń,
- wykonywanie poleceń procesora nie dostępnych w językach wysokiego poziomu, np. rotacja bitów dla kodowania,
- obliczenia wektorowe: MMX, SIMD,
- oprogramowanie które wymaga ekstremalnej wydajności: gry, pakiety algebry liniowej,
- oprogramowanie dla komputerów dla których nie istnieja języki wysokiego poziomu
- pisanie kompilatorów
- pisanie wirusów komputerowych i bootloaderów
- reverse-enginering, modyfikowanie plików wykonywalnych, łamanie zabezpieczeń
- kod samo modyfikujący się
Myśleć niskopoziomowo, pisać wysokopoziomowo.
Literatura
- Randall Hyde, Profesjonalne programowanie. Część 1. Zrozumieć komputer,
- Randall Hyde,Profesjonalne programowanie. Część 2. Myśl niskopoziomowo, pisz wysokopoziomowo
- Randall Hyde, Asembler. Sztuka programowania. Wydanie II,
- Software optimization resources, Agner Fog
- NASM asembler
- Dokumentacja Intela
- Dokumentacja AMD
Tomasz Kapela, Kraków 2011-2020