Jaki kompilator assemblera wybrać??

0

Jeśli chodzi o assembler'a to jestem bardzo bardzo początkujący. Jeśli ktoś by mógł mi napisać jaki rodzaj kompilatora jest najpopularniejszy i ewentualnie podał linki do jakiś kursów pod niego, to byłbym bardzo wdzięczny

0

masm32 pod windoze. http://www.masm32.com/

0

FASM pod dos, win, lin, bsd http://www.flatassembler.net/ (dobra, może nie najpopularniejszy, ale z przejrzystą składnią i dobrym zapleczem w postaci ludzi na forum).

0

Ja pod DOSa używam tasm a pod Win masm :)
Fasma nie używałem, ale sporo dobrego o nim słyszałem.

0

proponuję fasma - chyba jedyny asembler zdolny do budowy plików wykonywalnych bez linkera... z fasmem sytuacja jest następująca - spróbujesz i przesiądziesz się. Moim zdaniem nawet lepszy od nasma i chyba jedyny aktualnie rozwijany.

//dop. - pod fasmem możesz zrobić absolutnie wszytko...

0

wszystkim: dzięki.
Chyba sie zdecyduje na fasma, ale o masm'ie przynajmniej poczytam

0

Podepnę się...

Chciałem zapytać czy pisanie pod kontrolą systemu operacyjnego Windows, a Linux w języku Assembler czyni jakąś różnicę?

Jaki polecalibyście kompilator pod Linuxa jeśli zalecenia z uczelni to używanie MASM (niestety tylko pod Windows). Może NASM?

0

Dosyć sporą, funkcje systemowe mocno się różnią... Oczywiście jeśli nie wywołujesz funkcji systemowych to kod będzie ten sam, jako że architektura jest ta sama.
Jaki asembler? Oczywiście, że FASM!

0

Okay, rozumiem, że FASM. Wcześniej jednak użyłem pewnego kodu i kompilowałem go NASM, oto kod:

        ;; kod źródłowy pierwszego programu asemblerowego
        ;; plik: pierwszy.asm
        ;; segment danych
        segment .data
        msg db "Pierwszy program w asemblerze : -)", 0xa ; napis do wyświetlenia
        ;; segment kodu
        segment .text
        global _start            ; zmienna musi być znana linkerowi
        ;; program rozpoczyna działanie od tej etykiety
_start:
        ;; wyświetlamy komunikat
        mov eax, 4               ; numer funkcji (sys_write)
        mov ebx, 1               ; uchwyt pliku (standardowe wyjście)
        mov ecx, msg             ; adres ciągu do wyświetlenia
        mov edx, 34              ; długość ciągu
        int 0x80                 ; wywołanie funkcji
        ;; wychodzimy z programu
        mov eax, 1               ; numer funkcji (sys_exit)
        mov ebx, 0               ; kod wyjścia
        int 0x80                 ; wywołanie funkcji

Kompilacja przebiegła bez problemu (utworzył plik z rozszerzeniem *.o):
nasm -f elf pierwszy.asm

Jednak linker:
ld -s -o pierwszy pierwszy.o

Zwrócił:
ld: i386 architecture of input file `pierwszy.o' is incompatible with i386:x86-64 output
Czyli rozumiem, że program był napisany (nie przeze mnie) pod architekturą i386, a że ja mam amd64 to mogę zapomnieć o jego uruchomieniu? I czy tak będzie z każdym programem? Windowsa mogę zainstalować, ale to nic nie da jeśli mam taki, a nie inny procesor?

0

Zmień format wyjściowy w linkerze na 32 bitowy. Procesory są kompatybilne wstecz więc na pewno program pójdzie na twoim sprzęcie.

Generalnie najlepiej jakbyś przerzucił się na FASM'a. Zachowuje on zasadę SSSO (do pewnego stopnia chyba bo niedawno autor wprowadził jakieś opcje łamiące zasadę) - Same Source Same Output. Dzięki temu nie trzeba się martwić o parametry do linkera czy asemblera, wszystko jest w kodzie źródłowym.

0

Ja zawsze używałem Tasm i Tlink. Uważam że Postać Linkera jest ważna przynajmniej dla poczatkujących - daje im to do myslenia ze Asembler to nie porgram budujacy aplikacje lecz tylko plik.obj - plik z kodem obiektowy a resztą zajmuje sie Linker :)

Nie uzywałem Fasm, ale duzo onim słyszałem na pewno równiez warty uwagi:)

0

FASM ma również możliwość generowania plików obj np COFF czy MS COFF. Pliki obj są po to żeby łączyć wyniki kompilacji z wielu kompilatorów i/ lub żeby nie kompilować wielu modułów za każdym razem. Stosowanie linkera gdy mamy tylko jeden plik obj mija się z celem. Linker jak sama nazwa wskazuje łączy wiele plików obj w końcowy plik wykonywalny.

0

Do programowania pod Windows polecam assembler MASM32 i środowisko WinAsm. Bardzo wysoki komfort programowania ;-)

0
D.F. napisał(a)

Do programowania pod Windows polecam assembler MASM32

Jak polecasz to powiedz w czym ma przewagę nad np. Fasmem.

0
sadfg napisał(a)
D.F. napisał(a)

Do programowania pod Windows polecam assembler MASM32

Jak polecasz to powiedz w czym ma przewagę nad np. Fasmem.

plusem masm-a jest w miarę bezproblemowa współpraca z libami/obj-tami wyplutymi z VC - a oznacza to 'wygodę' - możesz wszelkie 'nieprzyjemne' fragmenty kodu wrzucić sobie w funkcje C (np. obliczenia na floatach), a potem za jednym zamachem kompilować przez cl.exe pliki *.c , ml.exe pliki asm i linkować wszystko link.exe do kupy w działający exe.

Ja osobiście jednak preferuję odwrotne zestawienie - pisanie w VC i wrzucanie wstawek inline asm tam gdzie trzeba trochę przykręcić śrubę CPU.

0

A wiesz, że FASM obsługuje MS COFF? Argument totalnie z (.Y.) wzięty.

0

Akurat masm nigdy nie pozbył się całkowicie błędów w generowaniu kodu. Poza tym współpracuje jedynie z narzędziami VS i nie jest samodzielny.

0
sadfg napisał(a)
D.F. napisał(a)

Do programowania pod Windows polecam assembler MASM32

Jak polecasz to powiedz w czym ma przewagę nad np. Fasmem.

Większa ilość wysokopoziomowych instrukcji (nie tylko makra, ale i typy danych czy procedury), przez co wygodnie się pisze i jest łatwiejszy dla początkujących. Z czasem można przestać tego używać i pisać bardziej "niskopoziomowo".
Lepsza jakość dokumentacji. W MASM jest ona bardzo dobra, gdyż był on przez długi czas produktem komercyjnym, stąd wiele artykułów, pomocy i przykładów jest dla MASMa. Dokumentacja FASMa jest słabsza, dodatkowo językiem ojczystym twórcy FASMa nie jest angielski, stąd kiepska jakość dokumentacji.
Więcej materiałów edukacyjnych. Jest dużo książek dla DOS jak i Windows, do tego wiele kursów uczących programowania w tym języku od podstaw. Kompletnego kursu uczącego programowania w FASM nie znalazłem, jeżeli taki jest to przepraszam.
Mimo, że Microsoft zaprzestał sprzedaży tego produktu nadal jest on bardzo popularny. Dodatkowo paczka, którą stworzył Steve Hutchesson (Hutch) sprawiła, ze assembler ten urodził się na nowo. Dołączając do tego ogromny tutorial Iczeliona, który zawiera ponad 30 lekcji programowania w MASM pod Windows.
Szybkość. MASM posiada reputacje powolnego assemblera. Jednak aktualnie dla większych programów jest on lepszy od innych. To wszystko zależy jeszcze z jakich rzeczy będziemy korzystać pisząc program.

0

Ja to mogę polecić NASM. Wg. mnie jest on najlepszym assemblerem dla procesorów x86, x86_64 oraz kompatybilnych. Jest łatwy w użyciu, darmowy(wcześniej licencja GPL, obecnie BSD ) posiada przejrzystą składnię, obsługuje dodatkowe zestawy instrukcji(FPU, MMX, SSE-SSE4, 3DNov! itd.), dobre wsparcie dla makr(w zasadzie posiada dobry preprocesor podobny do tego z języka C), jest multiplatformowy(Windows, Linux, BSD, DOS, OS/2, Mac OS).
Dodatkowo potrafi tworzyć wiele rodzajów formatów wyjściowych tak, że w zasadzie "każdy" linker będzie współpracował z tym assemblerem. To wszystko czyni go w miarę uniwersalnym kompilatorem assemblera dla w/w procesorów.
Nawet posiada dobrą dokumentację.

A jeśli ktoś naprawdę nie może się obejść bez assemblera al'a TASM/MASM to polecam jWasm.

0
Fanael napisał(a)

A wiesz, że FASM obsługuje MS COFF? Argument totalnie z (.Y.) wzięty.

tak, a jak dostaniesz jakie dll z libem wygenerowanym w vs, to sekcję importu sobie będziesz sobie pisał z palca i dołączał do źródeł.

0

Fasma można używać z linkerem. Sam lib zaś to nie wszystko, bezsensowny argument.

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