2012-07-04 9 views
5

Na uniwersytecie odbyłem obowiązkowy kurs z zakresu architektury komputerów i programowania języków programowania. Zauważyłem, że język asemblerowy jest dość czasochłonny i trudny do uchwycenia. Nadal nie rozumiem powodu, dla którego naucza się języka asemblerowego. Zadałem to samo pytanie mojemu instruktorowi, a on się uśmiechnął i powiedział, że dowiesz się w przyszłości. Ale mam naturę, na którą tak długo nie mogę czekać na odpowiedź, gdy drażni mnie moje pytanie. Pytam więc, dlaczego wciąż wymagamy języka asemblerowego, jeśli istnieją bardzo wydajne, szybkie i wydajne języki programowania, a ponadto takie języki oferują szeroką gamę narzędzi, które ułatwiają programowanie. Więc dlaczego?Dlaczego język asemblerowy jest nadal potrzebny, jeśli dysponujemy wysokopoziomowymi językami oferującymi zaawansowane narzędzia?

+4

języki wysokiego poziomu wiemy prawie nic o sprzęcie i często nie mają możliwości uzyskania dostępu do niego. Tam właśnie przybywa grupa ratownicza. Drugim zastosowaniem jest optymalizacja rozmiaru/prędkości kodu. –

+6

To pytanie brzmi, jakby pasowało lepiej na stronie http://programmers.stackexchange.com. W skrócie: ponieważ wszystkie wysokopoziomowe języki są automatycznie kompilowane do ASM. To nie daje żadnej kontroli nad końcowym wynikiem, nad tym, co komputer faktycznie robi. Podczas gdy kompilatory są dobre, nie mogą znać wszystkich drobnych sztuczek i optymalizować kod do perfekcji.Jeśli chcesz uzyskać maksymalną wydajność, potrzebujesz pełnej kontroli nad tym, co robi komputer w każdym najmniejszym szczególe, czego nie oferuje język wysokiego poziomu. – deceze

+0

Dzięki Alex i deceze –

Odpowiedz

5

Kod maszynowy jest nadal potrzebny do wykonywania kluczowych zadań, np. kod specyficzny

  • części składowe, takie jak sterowniki urządzeń
  • urządzeń wbudowanych, gdzie wielkość kod jest ważny
  • Kod niskiego poziomu, gdzie wydajność jest krytyczna itp

Często asemblera można mieszać w języki wyższego poziomu, takie jak C, gdzie montaż można dodać w linii z kodem C.

Mimo to dobrze jest zapoznać się z podstawową architekturą sprzętową, nawet jeśli będziesz programować w języku wysokiego poziomu, ponieważ da ci to wgląd w to, jak działają stosy, hałdy, wskaźniki itp.

11

Jednym dość dobrym powodem jest to, że wszystkie języki programowania są abstrakcją działania komputera. Teoretycznie dla języków wysokiego poziomu abstrakcja oznacza, że ​​programista nigdy nie musi się martwić szczegółami komputera.

Ale np. abstraction is always leaky, np. większość (jeśli nie wszystkie) języków wysokiego poziomu nie optymalizuje się automatycznie w przypadku pamięci podręcznych procesora (np. pamięci podręcznej i fałszywego współdzielenia), a wydajna wielowątkowość jest zawsze trudna. Oznacza to, że jeśli wydajność jest krytyczna, programista może inaczej napisać swój kod.

Najlepszym sposobem uzyskania wydajności jest zrozumienie działania maszyny, aby programista mógł wykonywać duże przekształcenia architektury, których kompilator nie może łatwo wykonać. Jako przykład, upewnij się, że wątki przetwarzają dane w wielokrotnościach 64 bajtów (w celu zmniejszenia fałszywego współdzielenia na liniach pamięci podręcznej) lub wykonują przekształcenie struktury tablic o strukturze ⇔.


montażu (i C do pewnego stopnia) jest bardzo dobrym sposobem uczenia się tych szczegółów z wydajnością, ponieważ to sprawia, że ​​naprawdę łatwo zrozumieć dokładnie, co komputer robi bo dokładnie kontrolować, co dzieje się na każdym kroku.

(Emisyjna punkt poboru odnosi się również do dostępu specyficzne/niestandardowych komponentów sprzętowych.)

+0

Dziękuję bardzo za odpowiedź. Teraz mój wyjaśnił mi potrzebę języka asemblerowego. –

Powiązane problemy