Assembly nasıl öğrenilir?

İşlemciler, transistörlerin birbirine bağlanarak oluşturulduğu devrelerin bütünüdür, bu devrelerin belli şekilde bağlanması da talimatları oluşturur. İşlemcinin hangi talimatlara sahip olduğunu mimarisi belirler, her özgün mimarinin ASM'si farklıdır. Normalde siz kod yazarsınız ve derleyici insanın rahat okuyabileceği fonksiyonları ve mantığı o mimarinin assembly koduna çevirir, gelişmiş derleyiciler kod üzerinde optimizasyon yapar, en son assembler denilen bir programla işlemcinin yürütebileceği makine koduna çevrilir.

ASM, sadece kritik performans veya kaynak gerektiren işlerde kullanılan bir sistem haline gelmiştir. Günümüzdeki anlaşılması kolaylaşsın diye soyutlaştırılmış programlama dillerinin aksine tamamen somut yani bilgisayar kafasıyla düşünmek gereklidir. Öncelikle hangi mimariye ASM yazacağınızı belirlemeniz lazım. Her mimarinin ASM'si farklıdır. x86_64 veya Aarch64 ile başlanabilir. Daha basit olacaksa RISC-V veya armv7 gibi mimariler daha az talimatla daha kolay olabilir ama kullanım alanları az olduğu için doküman veya pratik örnek az olacaktır.
 
x86_64 x86 ve arm arasındaki farklar tam olarak nedir?
 
x86 ve ARM arasındaki farklar tam olarak nedir?
x86, piyasadaki tek CISC mimarisidir. Çok karmaşık ve çok spesifik ihtiyaçlara özel talimatlar barındırır. Bunun haricinde SIMD kabiliyetleri çok geniştir. Sayı yoğun işlemlerde geniş yazmaçlar kullanılırsa GPU'nun yapabildiği tarzda işler daha da hızlandırılabilir. Tabii çok niş talimatlar transistörleri harcadığı için mükemmel değildir.

ARM, RISC mimarisini temel alır. CISC'in aksine çok daha az talimata sahiptir ancak talimatlar verimli ve hızlıdır. Bu sebeple performans ve enerji verimliliği daha yüksektir. Günümüzdeki işlemcilerin gittiği yön daha çok RISC şeklindedir.

İki mimari de çok uzun zamandır vardır bir çok hedef oluşmuştur. x86_64''ün içinde dört farklı seviye, ARM64'ün altında 9 farklı ana seviye ve o seviyelerin ara seviyeleri vardır. Her hedefte bu mimariler daha fazla talimat ve SIMD kabiliyeti kazanmıştır.
 
O zaman ARM daha mantıklı gibi. Peki bunun için kaynak falan var mı öğrenmek için? Biliyorum assembly biraz karışık.
 
Mimari komutlarını öğrenmen lazım. Herbir mimariye göre aynı komutlar ve farklı komutlar vardır.

Temel öğrenmen gerekenler;
Yazmaçlar (Registers),
Adresler (Adress modes),
Temel komutlar (Instructions),
Bayraklar (Flags),
Mimary özgü söz dizimi (Syntax)


Risc mimarisi komutları;

Intel 8086 mimarisi komutları;

Arm mimarisi komutları;
 
Her programlama konseptinde zordan baslamanin kolaydan baslamaktan daha iyi oldugunu soylerim fakat is assembly'e gelince oyle degil. Assembly'i ogrenmeyi zorlastiran aslinda "learning curve" dedigimiz olay; iyice ogrenmek icin oncelikle assembly'si derleyiciden ziyade insana gore gelistirilmis bir mimarinin assembly'sini ogrenmek lazim. Ornegin 6502 bu tanima cok guzel uyuyor.

90'li yillarda performans artisinin ve paralelizasyonun getirdigi mimari secimlerden oturu x86 islemciler artik cok karmasik ve derleyicilerin insanlardan daha iyi assembly urettigi bir hale geldi. O yuzden, insana uygun bir assembly ile baslamak cok daha onemli bence.
 
Arkadaşların dediği gibi daha kolay programlama dillerine bakın. FFmpeg gibi performans odaklı programlar yapmıyorsanız tabii.
 
İfadeler: 199
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…