Bilgisayar Mimarisi

ARM ve x86 Assembly Arasındaki Temel Farklar

01 Ara 20236 dk okuma

Bir gün önümde bir ARM binary'si vardı ve alışkanlıktan x86 gözlüklerimle bakmaya çalıştığımda ilk birkaç dakika başım döndü. Her iki mimari de aynı işi yapar—komutları çalıştırır—ancak bunu tamamen farklı felsefelerle yaparlar.

CISC ve RISC: İki Radikal Farklı Yaklaşım

x86 klasik bir CISC (Karmaşık Komut Seti Hesaplama) mimarisidir. Tek bir komut aynı anda birden fazla işlemi gerçekleştirebilir (bellekten oku, aritmetik yap, sonucu yaz). Bu kodu daha kompakt hale getirir, ancak komutların değişken yürütme süreleri vardır ve donanımda daha karmaşık bir çözme (decode) mekanizması gerektirir.

ARM ise RISC (İndirgenmiş Komut Seti Hesaplama) felsefesiyle tasarlanmıştır. Komutlar sabit uzunluktadır (genellikle 32-bit) ve her komut tipik olarak tek bir iş yapar. Bellek erişimi yalnızca LDR (load) ve STR (store) komutları aracılığıyla gerçekleşir; aritmetik işlemler doğrudan bellek üzerinde yapılmaz, önce bir yazmaca (register) yüklenmeleri gerekir.

; x86 — read from memory, add, write back, all in one instruction
ADD [ebx], eax

; ARM — first load, then compute, then store
LDR r1, [r0]
ADD r1, r1, r2
STR r1, [r0]

Yazmaç Sayısı ve Çağrı Sözleşmeleri (Calling Conventions)

x86-64'te 16 adet genel amaçlı yazmacınız (RAX, RBX, RCX…) vardır. ARM çok daha fazlasına sahiptir: 32-bit ARM 16 tane sunarken, ARM64 (AArch64) size 31 adet genel amaçlı yazmaç verir. Daha fazla yazmaç, derleyicinin değerleri belleğe döküp geri okumak yerine yazmaçlarda tutabilmesi anlamına gelir ve bu da performansı doğrudan etkiler.

Çağrı sözleşmeleri de farklıdır. x86-64 Linux'ta argümanlar sırasıyla RDI, RSI, RDX, RCX, R8, R9'a yerleştirilir. ARM64'te bu iş X0 ile X7 arasındaki yazmaçlarla yapılır. Bir binary'de hata ayıklarken bu detayı bilmemek, argümanları yanlış yazmaçlarda aramanıza ve saatlerce kafanızın karışmasına neden olabilir—tecrübeyle sabittir.

Bu Neden Önemli?

Eğer mobil uygulama analizi yapıyorsanız (Android/iOS büyük ölçüde ARM'dir), IoT cihazlarıyla çalışıyorsanız veya masaüstü/sunucu alanında giderek yaygınlaşan Apple Silicon ve ARM sunucularıyla (AWS Graviton gibi) uğraşıyorsanız, yalnızca x86 bilgisi yeterli değildir. Her iki mimarinin de mantığını anlamak, size hangi platformdan gelirse gelsin bir binary dosyasını okuma özgürlüğü verir.

Sonuç Yerine

ARM ve x86, aynı sorunu—komutları verimli bir şekilde yürütmeyi—farklı varsayımlarla çözen iki mimaridir. Birini öğrenip diğerini atlamak, günümüzün donanım çeşitliliğinde giderek büyüyen bir kör nokta yaratır.

F
Ferivonus
Sistemleri İnşa Ediyor.
ARMx86AssemblyBilgisayar Mimarisi