2008-09-19 26 views
22

Moje pytanie: czy język programowania MIPS jest tym, o czym można wiedzieć?MIPS - czy to ważne?

Jestem studentem CS i biorę klasę montażu, która koncentruje się na MIPS. Bardzo dobrze piszę w językach wysokiego poziomu, ale Mips ma mnie trochę na głowie.

Czy MIPS jest czymś, na czym powinienem się skupić i starać się go całkowicie uchwycić? Czy pomoże mi to w przyszłości?

Odpowiedz

8

Wziąłem się na klasę montażową robiącą mips około dwa lata temu. Zaczynałem pisać gry GameBoy Advance w mega-podobnym języku ASM. Nie mogę powiedzieć, że mi się podobało.

Chociaż uważam, że dobrze jest mieć zrozumienie wewnętrznego działania złożonego kodu (od wysokiego poziomu do niskiego poziomu). Czuję, że pozwoliło mi to lepiej zrozumieć, jak komputer działa. Ponadto nie mogłem się oprzeć pokusie robienia kilku maszyn wirtualnych wkrótce, projektując własny język assemblera :)

32

W pewnym momencie (w latach 90.) procesory pochodne MIPS były najlepiej sprzedającymi się procesorami na świecie, Procesory Intel x86. Było tak ze względu na ich ogromną obecność na rynku wbudowanym. Wydaje mi się, że teraz procesory oparte na ARM mogły przejąć ten tytuł, ale wciąż jest mnóstwo systemów wbudowanych, korzystających z MIPS.

Nawet jeśli nigdy nie programujesz mikroukładu MIPS w asemblerze w swojej karierze, przydatny może być język asemblera. Może pomóc ci napisać bardziej efektywny kod wysokiego poziomu, jeśli masz pojęcie o tym, co kompilator będzie emitował. Inne obszary, w których nadal jest używany to kompilatory (pisanie własne), sterowniki urządzeń i programowanie multimedialne (gdzie kod wymagający MMX lub SSE jest zwykle nadal pisany ręcznie w asemblerze).

Każdy typ procesora ma inny zestaw instrukcji, ale jest wystarczająco dużo wspólności, że gdy nauczysz się jednego dialektu złożenia (MIPS w twoim przypadku), inne powinny być łatwe do odebrania.

6

Pomocne jest zrozumienie bardzo niskiego poziomu komputera. Na przykład są deweloperzy, którzy powiedzą, że CPU wykonuje jakąś instrukcję "nowego obiektu". Oczywiście nie ma takich instrukcji, zarządzanie obiektami odbywa się w kilku warstwach abstrakcji. Dobrze jest zrozumieć rozróżnienie, aby zrozumieć, dlaczego tworzenie obiektów może być kosztowne (lub nie) lub dlaczego przestrzenie chronione adresów mogą sprawić, że system będzie bardziej wytrzymały.

Kiedy byłem w szkole, kurs montażu był prowadzony na komputerze mainframe IBM przy użyciu zestawu instrukcji System/360. Nigdy, w żadnym momencie mojej kariery, nie zbliżyłem się do pracy nad taką maszyną, ale wiedza o tym, jak wygląda procesor, była cenna.

Obecnie pracuję na systemach wbudowanych z wykorzystaniem procesorów MIPS. Właściwie spędzam rozsądny czas na przeglądaniu zestawów montażowych MIPS i piszę zbiór MIPS dla wektorów rozruchowych i prymitywów synchronizacji. Jednak nawet jeśli nigdy nie piszesz niczego w zespole, zrozumienie działania procesora jest nadal cenne.

3

Przez "język programowania mips" zakładam, że masz na myśli Język Zgromadzenia MIPS.

Nauka języka asemblerowego jest przydatna, ponieważ pomaga w odwzorowywaniu kodu, który napiszesz, w jaki sposób będzie działać na sprzęcie. Może to pomóc ci narazić cię na bardziej niskie problemy, takie jak chybienie w pamięci podręcznej, rozgałęzianie, wykonywanie zleceń poza kolejnością i inne rzeczy, o których nie myślałbyś o pisaniu kodu wysokiego poziomu.

Nauka o pogodzie Przydatny dla Ciebie zestaw MIPS zależy od tego, jaką karierę planujesz przestrzegać.Osobiście myślę, że x86/x64 (popularny w komputerach PC, bezpośrednio stosowany, jeśli piszesz C++ lub C# na PC), PPC (zdobywa popularność, używany w konsolach do gier, a także naraża cię na RISC) lub ARM (używane w wielu urządzeniach wbudowanych takie jak telefony komórkowe) mogą być lepszym wyborem do nauki.

2

Mipy wydają się wracać w systemach wbudowanych. @ [sk] podał lepsze podsumowanie niż ja, ale mam ostatnio przykład:

Broadcom wydaje się teraz tworzyć karty Wifi z chipami MIPS lub ARM (nie jestem pewien, który z nich, dokumentacja mówi jeden, oprogramowanie układowe mówi drugi). Jednak na nowszych układach oczekujemy na obsługę Linuksa z włączonymi wszystkimi funkcjami, więc cieszę się, że się uczysz. (Teraz zdobądź i napisz mi kilka sterowników: P)

2

Języki montażu są zawsze warte poznania. Prawdopodobnie nie uczą cię ani nie widzą, w jaki sposób kompilator zamienia wysokopoziomowy kod językowy na kod zespołu, ale powiedziałbym, że wiedza jest najważniejszą korzyścią płynącą ze znajomości języka asemblerowego. To otrzeźwiające, jak nieefektywne wiele kompilatorów jest nawet na najwyższym poziomie optymalizacji. (Większość kompilatorów zrzuci kod dla ciebie na żądanie, zamiast przechodzić na kod maszynowy i linkowanie).

Mimo to, MIPS asm jest prawdopodobnie bezużyteczny, ponieważ prawie nikt nie używa MIPS. (SGI kiedyś, ale teraz ich maszyny są wszystkie na chipach x86/IA-64.) Jeśli uważasz, że język asembler jest atrakcyjny i chcesz dalej pracować przy montażu, poznaj zestaw instrukcji ARM. ARM jest tylko trochę bardziej skomplikowany niż MIPS, a praktycznie wszystkie telefony komórkowe, smartfony i urządzenia PDA używają obecnie chipów ARM (wyprodukowanych przez kilkudziesięciu producentów). IPod używa ARM, tak jak robi (myślę) Zune.

2

MIPS to świetny język, w którym można się uczyć. Masz wiele rejestrów ogólnego przeznaczenia, dzięki którym pisanie twoich programów jest mniej uciążliwe i jest to architektura RISC, więc jest mniej instrukcji, których musisz zapamiętać.

Niektóre z popularnych zastosowań, o których nie wspomina wiele osób, to że N64, Playstation 1, Playstation 2 i PSP wykorzystywały wszystkie procesory MIPS.

+3

Jestem prawie pewien, że N64 również miał procesor MIPS. – Ibrahim

2

W twoim przypadku myślę, że MIPS służy jako pomoc nauczyciela. To jest klasa informatyczna, a zamiast narzędzi do pisania małymi kodami, próbują uczyć cię ogólnych pojęć, które są łatwiejsze na przykładzie prostszej architektury, takiej jak MIPS, niż na x86.

Nie oczekuj, że wejdzie do "skrzynki narzędziowej programisty". W praktycznym celu pisania kodu niskiego poziomu lepiej nauczyć się języka asemblerowego x86.

0

W zeszłym roku studiowałem MIPS. MIPS jest ważnym językiem, ale niestety, nigdy nie użyjesz MIPS. Nauczysz się podstaw, ale nie marnuj czasu, próbując nauczyć się więcej, niż potrzebujesz, ponieważ w MIPS nie ma zbyt wielu zadań, w porównaniu do innych języków.

0

Myślę, że to zależy od tego, w jakim obszarze CS chcesz strzelać w kierunku po ukończeniu szkoły. Jeśli architektura komputera jest tym, co chcesz zrobić, to moim zdaniem tak jest. Wydaje mi się, że dobry inżynier oprogramowania odchodzi od ogólnej koncepcji tego, jak działa język asemblerowy, pomijając i przekazując, a na koniec, w jaki sposób można zoptymalizować kod dla wydajności pamięci podręcznej. (Lokalizacja przestrzenna/lokalizacja czasowa)

1

Oto 3 dobre powody, dla których warto nauczyć się montażu.

  1. Niektóre małe fragmenty programów są lepiej napisane w zespole niż w języku wysokiego poziomu.
  2. Stare programy montażowe mogą wymagać debugowania lub ulepszania.
  3. Nauka programowania w zespole pomoże ci opracować precyzyjne modele tego, co robi procesor i co robi kompilator.

Trzeci powód jest zdecydowanie najważniejszy. Wiedza o tym, jak działa twój sprzęt, znacznie pogłębi twoje zrozumienie informatyki, a z kolei pomoże ci stać się lepszym programistą.

Powiązane problemy