Po co uczyć się assemblera?

0

Czy mi się zdaje, czy można napisać i skompilować problem, a potem go zdeassemblować? Wychodzi program w assemblerze. Dobrze rozumuje?

0

Tak.

0

Aha. To po co ludzie się go uczą?

1

Chociażby reverse engineering czy osdev.
No, i móc zaszpanować jak deus w tym temacie: http://4programmers.net/Forum/Spolecznosc/Perelki/130601-Hakerzy.NET_AntiVirus_2009_-_Najlepszy_darmowy_antywirus?start=50
:D

0

Jak napiszesz program np. w Pascalu i go skompilujesz otrzymasz np. 100kb kodu w assemblerze.
Ten sam program napisany w czystym assemblerze będzie kilka razy mniejszy i kilka razy szybszy.

0

Żeby zanalizować listing, który powstanie przez desasemblację. Żeby móc efektywnie debugować i rozumieć to, co się z programem dzieje. Ze znajomością asemblera idzie znajomość całej architektury komputera, są dziedziny, w których trzeba z tego bezpośrednio skorzystać.

0

-- Żeby móc przeanalizować kod skompilowanego programu.
-- Żeby móc dokonać bardziej zaawansowanych optymalizacji.
-- Żeby lepiej zrozumieć inne języki programowania i co instrukcje w nich rzeczywiście robią.
-- Dla przyjemności.

0

Nie chciałbyś wiedzieć jak to działa?
Niektórym, to się nie przyda za bardzo, bo nie mam pojęcia po co to webmasterowi, oprócz poszerzenia horyzontów itd. ale jak ktoś siedzi trosze "bliżej" komputera, to i owszem..
Dla większości studentów assembler to raczej taka ciekawostka, coś jak całki, które trzeba swego czasu umieć:D

0

Piszesz w C++ to dostajesz kod maszynowy. Piszesz w asmie i też dostajesz kod maszynowy. Tak? To po co się uczyć C++?
:D

3

Żeby wyrywać lachony.

0

Ponieważ tylko za pomocą ASM zrozumiesz jak działa komputer. Języki wyższego poziomu nie dają już takiego podejścia.

0

Z tej hipotezy wynika, że np. ja nie rozumiem jak działa komputer. No może i tak jest.

Ale, żeby zrozumieć jak działa komputer nie potrzeba żadnego języka programowania, wystarczy fizyka, elektronika i technika cyfrowa.

0

@somekind, zrozumienie na poziomie logiki działania, a nie elektroniki.

0

Jak piszesz w natywnym języku (np. C czy C++) znajomość assemblera to obowiązek - chociażby po to, żeby zobaczyć czy kompilator wygenerował optymalny kod maszynowy. Jak nie wygenerował to możesz tak zmodyfikować program, aby kod maszynowy stał się bardziej optymalny albo samemu napisać wstawkę w assemblerze.
Do tego dochodzi debugowanie programu gdy nie masz symboli lub masz "niepełne" symbole (np. wersja release programu).

0

@Koziołek, do zrozumienia logiki działania wystarczy poczytać trochę o ASK.

0x200x20 napisał(a)

Jak piszesz w natywnym języku (np. C czy C++) znajomość assemblera to obowiązek - chociażby po to, żeby zobaczyć czy kompilator wygenerował optymalny kod maszynowy.

Jaki odsetek programistów C/C++ tak robi?
Ilu z nich faktycznie potrafi napisać kod lepszy niż ten z kompilatora?

0

zawsze wystarczy wiara w magię,
powiedzmy dobry mechanik samochodowy
czy musi znać się na metalurgii albo polimerach?

0
somekind napisał(a)

Jaki odsetek programistów C/C++ tak robi?
Ilu z nich faktycznie potrafi napisać kod lepszy niż ten z kompilatora?

Statystyk nie prowadzę, ale w firmie w której pracuje chyba wszyscy. Wbrew pozorom kompilator nie generuje aż takiego zajebistego kodu. Mały przykład:

short global_a = 0;
...
//Kod wykonywany wielokrotnie
if(global_a < MAX_SHORT) global_a++;

Ten kod spokojnie da się przekształcić tak, żeby kompilator nie generował instrukcji warunkowej, chociaż w teorii kompilator sam to powinien wyczaić. No niestety VC++2008 nie wyczaił.

0

Po pierwsze - obecnie odchodzi się od wstawek asemblerowych na rzecz intrinsics. Intrinsic to generalnie funkcja biblioteczna (?) opakowująca pojedynczą instrukcję procesora, a więc reguły programowania są podobne jak przy asemblerze. Jak pokazałem na: http://encode.ru/threads/1285-Random-reads-vs-random-writes użycie jednej niskopoziomowej funkcji (a w zasadzie to pojedynczej instrukcji procesora) do prefetchingu pamięci przyspieszyło odczyt komórek z pamięci o losowych adresach ponad dwukrotnie. GCC nie poradził sobie z automatycznym wstawieniem tej instrukcji nawet w tak banalnej pętli. A więc mimo wszystko należy się nauczyć chociaż trochę asemblera, żeby wycisnąć jak najwyższą wydajność.

Poza tym znajomość zasady działania pamięci podręcznej w procesorach pozwoli na zrozumienie czemu czasem ustalanie wymiarów tablic na potęgi dwójki daje mocnego kopa, a czasem spowalnia wielokrotnie. Te i inne rzeczy są omówione np na: http://agner.org/optimize/

3

Podczas pisania programu dla uC. Jeśli masz słaby uC, przykład: attiny13, to dużo z językiem C nie wyciągniesz.
No i assembler to absolutna władza nad procesorem.

0

A kto ten kompilator C++ napisze?

1 użytkowników online, w tym zalogowanych: 0, gości: 1