2011-12-15 11 views
7

Często słyszę ludzi wokół mnie, którzy lubią dyskusję na temat pisania w języku asemblerowym i który jest jednym z powodów, dla których chcę nauczyć się pisać. Obecnie uczę się montażu i C razem.Czy kiedykolwiek będziesz musiał napisać prawdziwy kod w języku asemblera?

Moje pytanie brzmi, kiedy trzeba napisać zespół w prawdziwym kodzie?
Czy warto się uczyć?
Czy istnieją rzeczywiste zastosowania podczas pisania kodu w C?

Wszelkie pomocne komentarze lub odpowiedzi zostaną docenione!

+1

Zgromadzenie nie jest już przydatne IMO, ale kiedy jest, czytanie go jest często bardziej przydatne niż jego pisanie. – zneak

+1

Będziesz go potrzebować za każdym razem, gdy kompilator naprawdę go nie obciąży. Takich jak kod zajmujący się danymi wideo, symulacja naukowa, niektóre rzeczy w grach, zwłaszcza jeśli masz naprawdę napięty budżet na cykl, rzeczy wspomniane przez Bashwork itp. Jest to mniej rzadkie, niż niektórzy ludzie to robią. Rzadko zdarza się to w nudnych aplikacjach firmowych, które wysysają z ciebie życie, gdy je piszesz. – harold

Odpowiedz

4

To rzadkie. Nigdy nie musiałam w ciągu 23 lat + kariery. Ale pracuję głównie w przestrzeni roboczej serwera klienta, istnieją zadania, w których będziesz go często używać lub przynajmniej będziesz musiał wiedzieć, jak działają procesory.

Jednak to była pierwsza rzecz, której się nauczyłem, nie licząc podstawowej cyfrowej elektroniki, i powiedziałbym, że nauka była wielką pomocą w mojej karierze i programowaniu hobby.

5

miałem zamiar napisać długi słupek, ale postanowiliśmy podsumować zamiast:

  1. osadzonego kodu bootloaderów, backendów kompilatora
  2. tak, to pomoże Ci zrozumieć i analizować kod skompilowany kod
  3. jedyny raz, kiedy go użyłem, to odczyt rejestru z zegarem czasu rzeczywistego
8

Pomimo faktu, że pisanie kodu w zestawie stawało się coraz rzadsze, wciąż dobrze jest słuchać n montaż po prostu, aby zrozumieć, jak działa pod maską. Nowoczesne kompilatory optymalizujące C/C++ umożliwiają pisanie kodu w języku C, co przekłada się na bardzo wysoką jakość instrukcji montażu, często przewyższając to, co można napisać ręcznie kosztem zmniejszenia czytelności wyniku (np. Poprzez wstawienie pustych instrukcji w celu optymalizacji użycia Potok procesora).

Jeśli napiszesz kompilator dla nowej architektury, biblioteki niskiego poziomu lub systemu wbudowanego ze ścisłymi ograniczeniami zasobów, może być konieczne użycie zespołu. Dla wszystkich pozostałych C i C++ będą działać lepiej lub lepiej.

2

Miałem wiele okazji, kiedy potrzebowałem napisać kod asm w pracy, gdzie w C albo nie można było wykonać pewnych rzeczy (np. Uzyskać dostęp do specjalnych rejestrów procesora lub użyć instrukcji systemu CPU), albo skompilowany kod C był zbyt wolne lub zbyt duże (kompilator nie był wystarczająco dobry).

Mimo to ułamek kodu asm lub czas spędzony na pisaniu go był całkiem nieistotny.

Uczenie się asm jest dobre. Sprawia, że ​​"widzisz" przez swój kod C, przewidujesz, jakie instrukcje i ile z nich się obraca, z grubsza szacuje prędkość części kodu. Podczas tego procesu poznasz szereg optymalizacji i innych sztuczek oraz kilka fajnych algorytmów/metod, które możesz następnie przenieść do swojego kodu C. Wystarczy spojrzeć na te liczne pytania dotyczące wskaźników C lub konwersji liczb między arytmetyką binarną i dziesiętną lub dowolną arytmetyką precyzyjną. Znając asm pomaga w tych i innych rzeczach.

3

Profesjonalne użycie języka asemblerowego jest dość powszechne w świecie osadzonym. Wokół nas jest wiele aplikacji, w których mikrokontrolery robią proste, ale użyteczne rzeczy. Na przykład spójrz na tinyAVR family of microcontrollers from Atmel, szczególnie ATtiny13 z jego śmiesznie małą pamięcią programową 1kB i bez pamięci RAM z wyjątkiem 32 8-bitowych rejestrów CPU. To niesamowite, co te żetony mają capable of.Ten chip kosztuje około jednego dolara przy zakupie w dużych ilościach. Więc kiedy produkuje się dużą ilość urządzenia, które potrzebuje prostej (lub nawet nie całkiem prostej) logiki, oszczędności w kosztach produkcji sprzętu znacznie przewyższają koszty ręcznego wytwarzania kodu w asemblerze, aby działał na bardzo ograniczonej platformie.

2

Do tej pory zrobiłem to dwa razy w 2011 roku, a ja głównie pracuję nad aplikacjami biznesowymi Java. Przydał się do bicia szybki plik setup.exe, aby owinąć JRE i zainstalować aplikację. Mógł to zrobić w C, ale szybciej jest chwycić i ustawić asembler niż kompilator, a dla tak prostej aplikacji czas zapisu jest porównywalny tak czy inaczej ... Używa się go również do pracy nad problemem z urządzeniem USB. Nie udało się z nieznanych przyczyn za pośrednictwem JNA, więc napisałem go w zespole, aby upewnić się, że wiem, co się dzieje i kiedy.

Powiązane problemy