logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Assembler - Assembler, technikum informatyczne i jego brak :(

qweasd 01 Paź 2012 00:10 2673 6
REKLAMA
  • #1 11365029
    qweasd
    Poziom 2  
    Posty: 3
    Witam
    Przeglądając sobie google trafiłem na elektrodę, szukałem czegoś o asemblerze bo bym chciał się go uczyć. Powaliło mnie jedno, a mianowicie to że ludzie piszą : "jak nie znasz innego języka jak c/c++ to zacznij od nich..." Nie chcę nikogo obrażać ani podważać jego wiedzy ale co ma asembler do c/c++?? Wg mnie nic, jeden (asembler) jest niskiego poziomu, drugi wysokiego. To tak jak by tłumaczyć tekst z niemieckiego na polski a ktoś ci wylatuje że pierw musisz angielski znać. Kiedyś przecież za czasów c64 albo Amigi500 właśnie w asemblerze się pisało programy. Te komputery (domowe) nie miały nawet 1mb ram i inaczej się nie dało. Dziś gry/programy powstają zazwyczaj w c/c++ nie licząc sterowników, ale wyobraźcie sobie gdyby dalej się pisało w asemblerach, to by było cudownie.

    Więc jak się tego uczyć, jak psychicznie do tego podejść. Bym bardzo chciał pisać wydajne i niezasobożerne programy.
    Pozdrawiam wszystkich forumowiczów!
  • REKLAMA
  • #2 11365059
    farrix
    Poziom 17  
    Posty: 260
    Pomógł: 7
    Ocena: 12
    Zastanów sie po co?

    Może za czasów 51-ki miało to sens ale dzisiaj - nie ma.
    W czasach kiedy MHz-ów mamy aż nadto lepiej nauczyć się pisać dobre programy w C/C++ niż uczyć się asm - jednak warto go znać aby wiedzieć jak coś działa (przynajmniej kilka instrukcjii) aby kiedy będziemy krytyczni z czasem, tych kilka instrukcji umieć napisać.

    Jest to przynajmniej moje zdanie.
  • REKLAMA
  • #3 11365092
    skalny7
    Poziom 17  
    Posty: 109
    Pomógł: 24
    Ocena: 4
    Napiszę słówko jako człowiek, który pisze programy na mikrokontrolery od kilkunastu lat.

    Taka prawdziwa nauka assemblera w tym momencie nie ma najmniejszego sensu. Dlaczego? Bo niby, którego asemblera uczyć się. Każda rodzina procesorów ma inną listę rozkazową. Jeżeli nauczysz się asemblera, powiedzmy na AVR-y 8 bitowe (seria ATmega), napiszesz tam fajny program, i w pewnym momencie stwierdzisz, że chciałbyś zmienić procesor np. na coś z serii PIC18, to nic z tym programem nie da się zrobić oprócz napisania go od nowa. Po prostu nie da się go tak wprost przenieść.

    Natomiast pisanie w C/C++ powoduje, że jak jeżeli umiejętnie napiszesz program, to podmieniając tylko np. odwołania do pinów lub peryferiów jesteś w stanie przenieść program pomiędzy architekturami.

    W przemyśle stosuje się tylko i wyłącznie "wstawki" asemblerowe w kodzie w miejscach, gdzie wykonywane są fragmenty programu krytyczne czasowo, lub gdy umiejętne napisanie kodu w asemblerze powoduje znaczne przyspieszenie pracy programu, bo niestety kompilatory są "niedoskonałe" i czasem produkują bardzo nieoptymalny kod maszynowy.

    Dużo można by tu pisać o asemblerze i o C/C++, ale całość i tak sprowadza się do pieniędzy według równania czas=pieniądz, tj. lepiej raz dobrze napisać kod w C/C++ i mieć możliwość przenoszenia go między różnymi architekturami (mimo, że będzie on nieoptymalny), niż wielokrotnie pisać tą samą funkcję w asemblerze i podczas przenoszenia programu z jednej architektury na drugą przepisywać ją za każdym razem ucząc się jednocześnie "nowego" asemblera.

    Swoją drogą nie wyobrażam sobie tego, ponieważ piszę programy na co najmniej kilkanaście różnych architektur.

    Jeżeli jednak chciałbyś się zapoznać z asemblerem to polecam na początek zabawę z AVR'ami (procesory ATmega). Nie polecam natomiast na początek zabaw z assemblerem jakichkolwiek architektur 32-bitowych (np. PIC32, ARM).

    Pozdrawiam,
    skalny7
  • REKLAMA
  • #4 11365172
    gaskoin
    Poziom 38  
    Posty: 4159
    Pomógł: 436
    Ocena: 102
    qweasd napisał:
    Dziś gry/programy powstają zazwyczaj w c/c++ nie licząc sterowników, ale wyobraźcie sobie gdyby dalej się pisało w asemblerach, to by było cudownie.


    Sterowniki teraz też się pisze w języku C, zarówno na platformy unixowe jak i windowsy. Być może na pozostałe systemy operacyjne jest to assembler, albo jeszcze coś innego, ale od dawien dawna na linuksie i windowsie jest to język C.

    Kompilatory języków wysokiego poziomu są w tej chwili na tyle rozwinięte, że narzut czasowy jest bardzo niewielki, na komputerach PC odważyłbym się powiedzieć pomijalnie mały. W dużej części przypadków jest wręcz odwrotnie - kompilator wymyśli szybszy kod niż by to zrobił programista, kosztem zwiększonej nieczytelności assemblera.
  • #5 11366051
    aligatormp
    Poziom 14  
    Posty: 99
    Pomógł: 10
    Ocena: 7
    Obecnie asembler ma same wady: zależny od architektury procesora, jest nie ekonomiczny programy pisze się długo a jeszcze dłużej uruchamia, wprawdzie może służyć do optymalizacji kodu ale są to specyficzne warunki reżimu czasu.

    Pomimo minusów, jeśli masz czas warto poznać asembler dla np. 8086, 51 i AVR, pozwoli ci to spojrzeć na każdy program z perspektywy architektury procesora i podzespołów współpracujących z nim.
  • REKLAMA
  • #6 11367213
    krru
    Poziom 33  
    Posty: 1819
    Pomógł: 230
    Ocena: 214
    Nawet przyspieszenie kodu, jakie daje pisanie w asm jest mocno wątpliwe. Dzisiejsze procesory posiadają rózne cache, potoki, rdzenie itp. Natomiast kompilatory C posiadają optymalizację. Naprawdę trzeba znać na wylot daną architerkturę by napisać w asmie kod lepszy niż wygeneruje kompilator z włączoną optymalizacją.
    A i tak w gre wchodzi przyspieszenie o kilka-kilkanaście procent. Zawsze należy po prostu dobrze wybrać i zaimplementować algorytm, ewentualnie napisać coś swojego.
    Drobne wstawki w asm są niezbędne głównie w kodzie startowym, gdy procesor jest niezainicjowany i należy poustawiać różne rzeczy, czasami specjalnymi rozkazami, niedostępnymi w C.
  • #7 11368185
    dondu
    VIP Zasłużony dla elektroda
    Posty: 13906
    Pomógł: 1292
    Ocena: 809
    Ilość czasu pracy nad programem w assemblerze jest niewspółmierna do jego odpowiednika w C.

    Niemniej jednak w przypadkach szczególnych warto czas poświecić.

    Pierwszym z nich jest szybkość działania kodu.

    Drugim przypadkiem jest wciskanie w np. 256B pamięci programu jak największej funkcjonalności - ale to tylko w baaaardzo komercyjnych projektach, w których zwraca się uwagę na koszt mikrokontrolera liczony w centach, no i ewentualnie dla własnej satysfakcji, że potrafię. :-)

Podsumowanie tematu

✨ W dyskusji poruszono temat nauki asemblera w kontekście programowania, zwłaszcza w odniesieniu do języków wysokiego poziomu, takich jak C/C++. Uczestnicy podkreślają, że nauka asemblera może być niepraktyczna w dzisiejszych czasach, gdyż różne architektury procesorów mają swoje unikalne zestawy instrukcji, co utrudnia przenoszenie kodu. Wskazano, że programowanie w C/C++ jest bardziej efektywne, a kompilatory potrafią generować optymalny kod. Asembler może być użyteczny w specyficznych przypadkach, takich jak optymalizacja krytycznych fragmentów kodu lub w sytuacjach, gdzie wymagana jest maksymalna wydajność przy ograniczonej pamięci. Warto jednak znać podstawy asemblera, aby lepiej rozumieć działanie procesorów i architektur.
Wygenerowane przez model językowy.
REKLAMA