Zdecydowanie sugeruję ponowne przemyślenie celu i oto dlaczego:
Najpierw nauczyłem się 6502 asemblera na mikrokomputerze BBC (model B, 32K). Miał niesamowitą implementację BASIC, która zawierała asembler makr. Mieliśmy je w szkole, więc napisałem wszelkiego rodzaju złośliwe programy, które robią takie rzeczy, jak bezpośrednia manipulacja buforem ekranu, aby Lemming przechodził przez każdy ekran, dookoła pokoju (były połączone w sieć), jeśli maszyny nie były używane przez 10 minut . Spowodowało to napady chichotów wśród moich przyjaciół z Roku 7.
Kiedy dostałem Commodore 64 w domu, dowiedziałem się, że ma procesor 6510, który również obsługuje język asemblera 6502, ale z kilkoma interesującymi dodatkami. Musiałem kupić asembler (przyszedł na kartridż ) i wywoływać programy przez BASIC. Mając wielkie wizje pisania najlepiej sprzedającej się gry, w końcu udało mi się stworzyć kilka wersji demonstracyjnych, w których rejestracja bitów sprzętu wideo rejestruje się w przerwach, aby uzyskać ciekawe efekty w paskach kolorów, które animowały funkową muzykę chipową. Imponujące, ale niezbyt przydatne.
Następnie dostałem Acorn Archimedes A310, który miał procesor ARM2, więc użyłem tej samej niesamowitej implementacji BASIC z wbudowanym asemblerem makr jak BBC Micro (to samo dziedzictwo). Udało mi się zebrać kilka gier, do których znajomy artysta dostarczył grafikę, a także kilka trippy demo opartych na sinusoidach. Oba te programy były ciężkie do zaprogramowania, a zły kod mógł zepsuć maszynę (przypadkowo wyzerować rejestr resetowania sprzętu itp.), Tracąc wszystko, gdybym nie zapisał (do dyskietki!).
Na uniwersytecie zapoznałem się z C ++, a tym samym C. Mogłem używać go do programowania Sun / Solaris i innych dużych komputerów mainframe. Nie mam pojęcia, na jakich architekturach procesorów działały te maszyny - nigdy nie potrzebowałem używać asemblera ani czytać kodu maszynowego, ponieważ narzędzia C ++ dały mi moc potrzebną do tworzenia profesjonalnych aplikacji.
Po Uni pracowałem na Windowsie i kilku wersjach Uniksa. C i C ++ działały na wszystkich tych maszynach i ostatecznie Java też.
Następnie pracowałem w systemie Windows i Dreamcast przy użyciu C ++ z DirectX z kompleksowym łańcuchem narzędzi do debugowania.
Następnie podjąłem pracę z chipsetami opartymi na ARM dla telewizorów Smart TV (w 2000 r.). Chociaż moje doświadczenie z ARM2 mogło być tutaj istotne, praca była oparta na C. Przekonałem się, że całe szarpanie się sprzętem, który zrobiłem na Archimedesie, można również wykonać w C przy użyciu prostych operacji kruszenia bitów. Częścią mojej roli była migracja bazy kodu do Windows, Playstation 2, Linux, innych telewizorów i mikroukładów mobilnych. Wszystkie te platformy były dostępne zarówno z kompilatorem C (często GCC), jak i pewnym poziomem API do zapisu na maszynie bazowej - osadzony świat rzadko jest O / S jądra. Nigdy nie potrzebowałem znać pełnego kodu maszynowego dla żadnej konkretnej platformy poza napisaniem programu ładującego i mini-BIOS, które to przyskoczyły do kodu C przy pierwszej dostępnej okazji (po skonfigurowaniu wektorów pułapek,
Kolejnym zadaniem była praca z C ++, C # i JavaScript w systemie Windows. Brak kodu maszynowego.
Obecne zadanie polega na pracy z C ++, JavaScript, Python, LUA, HTML i innymi językami na różnych platformach. Nie mam pojęcia, jaki kod maszynowy obsługują te platformy, ani nie muszę wiedzieć - kompilator tłumaczy nasz kod na wszystko, co musi być. Jeśli ulega awarii, wychwytuję błąd w debuggerze lub poprzez diagnostykę środowiska wykonawczego (wyjątki, sygnały itp.).
Dla zabawy tworzę aplikacje na iOS w wolnym czasie, który mam w domu. Wykorzystuje Objective-C i API, które działa na wielu chipsetach. Najwyraźniej są oparte na ARM, ale nigdy nie widziałem żadnego kodu maszynowego w moim rozwoju.
Chociaż jest to „fascynujące ćwiczenie do nauki języka asemblera”, obecnie dostępne są narzędzia i języki wyższego poziomu, które pozwalają zwiększyć produktywność o rząd wielkości (lub dwa).
Liczba ofert pracy dostępnych dla niesamowitego programisty języka asemblera / kodu maszynowego jest znikoma w porównaniu do czegoś takiego jak JavaScript, Java, C #, C ++ lub ObjC.
Radziłbym, aby uczynić to hobby, a nie głównym celem.