Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Czy warto i po co uczyć się Assemblera?

Ostatnio zmodyfikowano 2017-05-31 01:02
Autor Wiadomość
latajacaryba
Temat założony przez niniejszego użytkownika
Czy warto i po co uczyć się Assemblera?
» 2017-05-30 22:50:08
Witam. Na wstępie chce zaznaczyć, że moja wiedza o assemblerze jest niska, tak więc za błędy przepraszam.

Tak jak w temacie, czy warto uczyć się assemblera? To pytanie bardzo ogólne, więc uściślijmy - po co uczyć się assemblera?
Czy faktycznie do czegoś by mi się przydało? Do pytania skłoniło mnie wiele tematów (np. ten http://cpp0x.pl/forum/temat/?id=20476, dokładnie cytat
W jaki sposób można wydać procesorowi te polecenia ? Za pomocą kodu maszynowego - jest to zestaw rozkazów dla procesora w postaci zapisu binarnego. W pliku wykonywalnym są zapisane właśnie polecenia w postaci kodu maszynowego. Skoro chcesz programować niskopoziomowo to możesz użyć Asemblera
. No właśnie. czy warto? )
Po prostu czy jest to coś, co każdy programista powinien znać przynajmniej w podstawowym stopniu? W końcu C++ chyba wszystkiego nie może (a przynajmniej nie tak dużo jak assembler - grzebać w procesorze. Jeśli się myle, przepraszam)

Generalnie do założenia tematu skłoniło mnie jeszcze jedno pytanie; mianowicie skąd Wy, czerpaliście wiedzę o takich na przykład sprawach: http://cpp0x.pl/forum/temat/?id=25361

Dziękuję :)
P-161827
Kinexity
» 2017-05-30 23:02:46
Według mnie warto, ale w określonych przypadkach. Jeżeli:
- Potrzebujesz/Chcesz mieć mocno zoptymalizowane pod względem wydajności
- Chciałbyś się dowiedzieć/nauczyć jak to jest pisać program w czymś nieco niższego poziomu
Więcej przypadków, szczerze mówiąc, to nie widzę.
P-161829
latajacaryba
Temat założony przez niniejszego użytkownika
» 2017-05-30 23:12:32
Kinexity
Potrzebujesz/Chcesz mieć mocno zoptymalizowane pod względem wydajności
A jak połączyć C++ z assemblerem?
P-161830
Kinexity
» 2017-05-30 23:16:35
Wrzucasz tak zwane wstawki - ale tutaj, by dowiedzieć się więcej o tym jak itd., to już musisz sam poszukać, bo już natrafiłem na takie konstrukcje:
-
__asm { }

-
asm { }

-
asm()

I chyba każdy kompilator robi to nieco inaczej.
P-161831
jankowalski25
» 2017-05-30 23:39:13
Kolejne powody:
  • Gdy nie da się zrobić tego inaczej (lub łatwiej użyć asemblera).
  • Gdy piszesz program pod konkretny sprzęt i musisz się do niego dopasować.
  • Jeśli podczas debugowania potrzebujesz więcej informacji, ponieważ pojedyncze instrukcje w języku wysokiego poziomu są zbyt ogólne, aby zobaczyć, co poszło nie tak.

A co do wstawek, to szukaj "nazwa_kompilatora inline assembly", na przykład https://ibiblio.org/gferg/ldp​/GCC-Inline-Assembly-HOWTO.html.
P-161833
latajacaryba
Temat założony przez niniejszego użytkownika
» 2017-05-30 23:48:08
Gdy piszesz program pod konkretny sprzęt i musisz się do niego dopasować
Dlaczego kod assemblera nie jest przenośny? Pod konkretny procesor (zależy to od jego budowy)? I jak pisano w nim wszystko inne, skoro każdy komputer wymagał odmiennego kodu?
P-161834
Kinexity
» 2017-05-30 23:58:26
Kod nie jest przenośny, ponieważ każdy producent procesorów stosował swój własny (jak się nie mylę o to chodziło). Jeżeli moje pierwsze zdanie jest prawidłowe, to odpowiedź na ostatnie pytanie brzmi - pod każdy zestaw procesorów oddzielnie. Zauważ, że taki np. Intel ma bardzo duże udziały na rynku, więc gdy napisałeś pod niego program w asemblerze, to już w dużym stopniu załatwiało sprawę.
P-161835
latajacaryba
Temat założony przez niniejszego użytkownika
» 2017-05-31 00:17:22
Dziękuję za odpowiedzi Kinexity i JanKowalski
temat zostawię otwarty, może ktoś będzie chciał coś dodać :)
P-161837
« 1 » 2
  Strona 1 z 2 Następna strona