zwykle stawiany przez programistów języka C, którzy po udowodnieniu, jaki to język C jest wspaniały, wracają do pisania dokładnie w takim samym stopniu nie-przenośnych programów...
Nie ukrywajmy: bez zmian kodu to tylko programy niewiele przewyższające Witaj, świecie skompilują się i uruchomią pod różnymi systemami.
2. A nowoczesne kompilatory i tak produkują najlepszy kod...
Nieprawda, i to z kilku powodów:
♦ Kompilator używa zmiennych. No i co z tego, pytacie? A to, że pamięć RAM (o dyskach itp. nie wspominając) jest wiele, wiele razy wolniejsza niż pamięć procesora (czyli rejestry). Nawet pamięć podręczna (cache) jest sporo wolniejsza.
♦ Kompilator nie wie, co się znajduje np. w danym rejestrze procesora, więc pewnie wpisze tam tą samą wartość. Co innego z programistą asma.
♦ Kompilator nie jest w stanie przewidzieć, co będzie w danej chwili w innych rejestrach. Więc do rejestru, który chce zmienić i tak wpisze jakąś wartość zamiast użyć innego rejestru, co prawie zawsze jest szybsze a więc lepsze. Co innego zrobiłby programista asma.
♦ Kompilator może używać dłuższych lub wolniejszych instrukcji.
♦ Kompilator nie zawsze może poprzestawiać instrukcje, aby uzyskać lepszy kod. Programista asma widzi, co się w jego kodzie dzieje i może wybrać inne, lepsze rozwiązanie (np. zmniejszyć rozmiary pętli czy pozbyć się zależności między instrukcjami)
♦ Kompilator może nie być świadomy technologii zawartych w procesorze. Programista asma wie, jaki ma procesor i za darmo ściąga do niego pełną dokumentację.
3. Brak bibliotek standardowych.
I znowu nieprawda. Istnieje co najmniej kilka takich. Zawierają procedury wejścia, wyjścia, alokacji pamięci i wiele, wiele innych. Nawet sam taką jedną bibliotekę napisałem...
4. Kod wygląda dziwniej. Jest bardziej abstrakcyjny.
Dziwniej - tak, ale nie oszukujmy się. To właśnie języki wysokiego poziomu są abstrakcyjne! Asembler przecież operuje na tym, co fizycznie istnieje w procesorze - na jego własnych rejestrach przy użyciu jego własnych instrukcji.
5. Mniejsza czytelność kodu.
Kod w języku C można tak napisać, że nie zrozumie go nawet sam autor. Kod w asmie można tak napisać, że każdy go zrozumie. Wystarczy kilka słów wstępu i komentarze. W HLLach trzeba byłoby wszystkie struktury objaśniać.
A wygląd i czytelność kodu zależą tylko od tego, czy dany programista jest dobry, czy nie.
Dobry programista asemblera nie będzie miał większych kłopotów z odczytaniem kodu w asmie niż dobry programista C kodu napisanego w C.
6. Brak łatwych do zrozumienia instrukcji sterujących (if, while,...)
Przecież w procesorze nie ma nic takiego!
Programista asma ma 2 wyjścia: albo używać prawdziwych instrukcji albo napisać własne makra,