Hedefinizi tekrar gözden geçirmenizi şiddetle tavsiye ediyorum ve işte neden:
Önce BBC Mikrobilgisayarında 6502 Assembly Language (Model B, 32K) öğrendim. Makro birleştirici içeren harika bir BASIC uygulaması vardı. Onları okulda okuduk, böylece makineler 10 dakika boyunca kullanılmasaydı, her ekran boyunca, odanın etrafında (ağlar halinde) bir Lemming yürüyüşü yapmak için doğrudan ekran tamponu manipülasyonu gibi şeyler yapan her türlü yaramaz programı yazdım. . 7. Sınıf arkadaşlarım arasında kıkırdama uyuşmalarına neden oldu.
Bir Commodore 64'ü evdeyken, bunun yanında 6502 assembly dili olan 6510 işlemciye sahip olduğunu ve bazı ilginç ekstralar olduğunu öğrendim. Bir montajcı satın aldım ( kartuşla geldi ) ve programları BASIC aracılığıyla çağırdım. En çok satan oyun yazma vizyonuyla nihayetinde, bit-twiddled video görüntüleme donanımının korkak çip müziğine animasyonlu ilginç renk çubuğu efektleri yapmak için ara verdiğini kaydeden birkaç demo oluşturmayı başardım. Etkileyici, ama bu yararlı değil.
Daha sonra bir ARM2 işlemciye sahip olan bir Acorn Arşimet'i A310 aldım, bu yüzden BBC Micro (aynı miras) olarak yerleşik makro montajcısıyla aynı harika BASIC uygulamasını kullandım. Bir arty dostunun grafik sağladığı bir kaç oyun, ayrıca bazı sinüzoit tabanlı trippy demolarını bir araya getirmeyi başardım. Bunların ikisi de programlanması zor bir işti ve hatalı kod makineyi indirebilirdi (yanlışlıkla açma donanımı sıfırlama kaydı vb.), Kaydetmediysem her şeyi kaybediyor (diskete!).
Üniversitede C ++ ve böylece C. ile tanışmıştım. Sun / Solaris ve diğer bazı büyük ana bilgisayarları programlamak için kullanabildim. Bu makinelerin hangi CPU mimarisinde çalıştığı hakkında hiçbir fikrim yok - C ++ araçları bana profesyonel uygulamalar üretmek için ihtiyaç duyduğum gücü verdiğinden hiçbir zaman assembler kullanmamalı ya da makine kodu okumam gerekmedi.
Uni'den sonra Windows ve Unix'in çeşitli lezzetlerinde çalıştım. C ve C ++ tüm bu makinelerde çalıştı ve sonunda Java da yaptı.
Sonra hata ayıklama için kapsamlı bir araç zinciri ile DirectX ile C ++ kullanarak Windows ve Dreamcast üzerinde çalıştı.
Daha sonra Smart TV'ler için ARM tabanlı yonga setleri ile çalışmak üzere işe başladım (2000'de). Her ne kadar ARM2 ile olan deneyimim burada ilgili olsa da, iş C tabanlıdır. Arşimet'te yaptığım donanımlarla ilgili tüm dürtmelerin, basit bit titreyen işlemleri kullanarak C de yapılabileceğini öğrendim. Görevimin bir kısmı, kod tabanını Windows, Playstation 2, Linux, diğer TV ve mobil yonga setlerine geçirmek oldu. Bu platformların tümü hem C derleyicisi (genellikle GCC) hem de temel makineye yazmak için bir miktar API ile mevcuttu - gömülü dünya nadiren bir çekirdek O / S'dir. Bir önyükleyici ve mini BIOS yazmanın ötesinde herhangi bir platform için tam makine kodunu bilmeme hiç gerek yoktu, ikisi de mevcut ilk fırsatta C koduna atladı (tuzak vektörleri ayarladıktan sonra,
Bir sonraki iş Windows'ta C ++, C # ve JavaScript ile çalışıyordu. Makine kodu yok.
Şu anki iş çeşitli platformlarda C ++, JavaScript, Python, LUA, HTML ve diğer dillerle çalışıyor. Bu platformların hangi makine kodunu çalıştırdığı hakkında hiçbir fikrim yok, ne de bilmem gerek - derleyici kodumuzu olması gereken şeye çevirir. Eğer çökerse, hatayı hata ayıklayıcıda veya çalışma zamanı teşhisi sırasında (istisnalar, sinyaller, vb.) Yakalarım.
Eğlence için iOS uygulamalarını evde geçirdiğim az miktarda boş zamanlarında geliştiriyorum. Objective-C ve birden fazla yonga setinde çalışan bir API kullanır. Görünüşe göre onlar ARM tabanlı, ama gelişimimde hiçbir makine kodu görmedim.
Assembly dilini öğrenmek için büyüleyici bir alıştırma olsa da, şimdi daha büyük bir düzen (veya iki) daha üretken olmanıza izin veren daha yüksek seviyeli araçlar ve diller var.
Müthiş bir montaj dili / makine kodu programcısı için mevcut olan iş fırsatlarının sayısı, JavaScript, Java, C #, C ++ veya ObjC gibi bir şeye kıyasla küçüktür.
Bunu asıl amaçtan ziyade hobi / taraf ilgisi yapmanızı tavsiye ederim.