Assembler - co na początek?

0

Witam
Postanowiłem zaząć zabawę z assemblerem. W internecie można znaleźć sporo o tym języku, nawet za dużo...
Więc mam kilka pytań:

  1. Zna ktoś jakiś dobry kurs asm na początek?
  2. Jakiego kompilatora najlepiej używać? Bo jest tego sporo, a widzę że każdy różni sie trochę składnią.
  3. Jak jest z przenośnością kodu? Czy kod skompilowany na moim komputerze odpali poprawnie tylko na kompie z identycznym procesorem? Czy ma to też związek z formatem skompilowanego pliku - słyszałem że .com są nieprzenośne w ogóle, ale .exe chyba powinny być, w końcu to ogólny windowsowski format. Ale że jest wiele odmian plików .exe - jaki powstaje z assemblera? PE czy jakiś inny?
0
olo16 napisał(a)
  1. Zna ktoś jakiś dobry kurs asm na początek?

Większość ludzi poleca http://rudy.mif.pg.gda.pl/~bogdro/ i dla Windows tutoriale Iczeliona. Ja skłaniam się ku samym manualom Intela i debuggerowi.

olo16 napisał(a)
  1. Jakiego kompilatora najlepiej używać? Bo jest tego sporo, a widzę że każdy różni sie trochę składnią.

W starych tutorialach poleca się MASMa, lepiej jednak sięgnąć po coś, co nie zatrzymało się w rozwoju, nie ma kupy bugów i jest przenośne - polski FASM. Całkiem niezła dokumentacja, spora społeczność, ciągły rozwój - to jego atuty. Chociaż ma otwarty kod to nie polecam tam zaglądać, ani to czytelne, ani efektowne/efektywne. Swoją drogą FASM 2.0 powstaje zupełnie jak Coyote Forever...

olo16 napisał(a)
  1. Jak jest z przenośnością kodu? Czy kod skompilowany na moim komputerze odpali poprawnie tylko na kompie z identycznym procesorem? Czy ma to też związek z formatem skompilowanego pliku - słyszałem że .com są nieprzenośne w ogóle, ale .exe chyba powinny być, w końcu to ogólny windowsowski format. Ale że jest wiele odmian plików .exe - jaki powstaje z assemblera? PE czy jakiś inny?

Słyszałeś o czymś takim jak x86? To ogólna architektura, do której kolejne generacje procesorów wprowadzają rozszerzenia - Pentium III wprowadził SSE, Pentium 4 SSE2 i potem 3 itd. Skoro programy pisane w C/C++ możesz przenosić pomiędzy komputerami to dlaczego z assemblerem miałoby się nie dać? Pamiętaj, że asm to tylko tekstowa reprezentacja kodu maszynowego, generalnie wspólnego dla całej rodziny procesorów. COM były przenośne w podobnym stopniu co PE. Exe (te Windowsowe) to obecnie wyłącznie pliki PE/PE32+ (tak jak dll, sys, ocx itd.), kiedyś jeszcze LE/LX był wspierany.

0

Co do 3: Rozumiem. Po prostu obiegowe opinie wprowadziły mnie w błąd. Niezbyt w to wierzyłem, ale przez argumenty o "rozwaleniu komuś kompa nieprzenośnym programem" raczej wolałem się upewnić. Rozumiem że w ramach rodziny x86 nie powinno być problrmów z przenośnością (pomijając oczywiście egzotyczne instrukje w stylu sprzętowa wirtualizacja i różnice między 32 i 64bit).

0

Ech, te legendy. Assemblerem nie da się 'rozwalić komuś kompa', nawet z poziomu sterownika. Assembler nie da Ci absolutnie nic więcej niż C pod względem możliwości, nie da dostępu do rzeczy normalnie niedostępnych.

0

Ja polecam początkującemu właśnie Masm32 (pliki nagłówkowe i makra) a biblioteki i asembler i linker "porzyczyć" z DDK/SDK/Visual 2k10.
Jak deus pisał w MASM32 biblioteki są stare, makra mają błędy a asembler jest z 2000 roku (po tamtym zabiegu pozostanie tylko problem makr ale na początku pewnie i tak nie będziesz z nich korzystać) mimo to imo jest on dużo łatwiejszy do zrozumienia i włatwy sposób możesz go sobie podłączyć pod IDE WinASM gdzie jest wbudowany prosty edytorem zasobów - Jak dla początkującego jest to chyba idealne rozwiązanie ;)

0

Tak się składa, że od MASM/TASM-a wszystko jest logiczniejsze. FasmW (specjalna wersja dla Windows) ma prosty edytor z kolorowaniem składni wbudowany, zasoby buduje się z kodu. Mało? Jest IDE RadASM, z którym FASM może współpracować. Generalnie FASM obywa się bez linkera, wspiera podstawowe biblioteki bez dodatkowych nagłówków itd.

0

Bardzo przydatne na początek narzędzie - emu8086
http://www.emu8086.com/
;)

0

Nie wiem czy takie przydatne, raczej nie ma sensu zaczynać od trybu rzeczywistego na 8086, który ma ledwo kilka instrukcji i wredne adresowanie. To się ma nijak do 'nowoczesnego' asma, na 32/64-bit. Assemblery i debuggery pozwalają na to samo pracując w trybie chronionym. W sumie tutaj jest lekka przewaga MASM-a - linker potrafi wypluć .pdb ułatwiający debugowanie. Z drugiej stron Fasm też potrafi wypluć COFFa, który można przez linker puścić.

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