Android veya Arm işlemciler için yazılım geliştiren arkadaşlar VS içerisindeki “General->Project Defaults” altındaki “Thumb Mode” ayarı sizlerin de merakınızı cezbetti mi?
Bu çok kısa yazımda bu ayardan çok kısaca bahsedeceğim. Bu konu hakkında daha detaylı bilgi için aşağıdaki referansları karıştırabilirsiniz. Bu yazımda da Stackoverflow’daki cevaplardan faydalandım.
ARM işlemciler iki temel komut seti sunuyorlar:
- ARM: Buradaki bütün komutlar 32-Bit uzunluğunda,
- Thumb: Burada ise çoğu komut 16-Bit olmak ile birlikte bazı 32-Bit komutlar da sunulmakta.
Hangisini kullanacağınızı VS de olduğu gibi yazılımı oluştururken belirliyorsunuz ve bunlardan çalışma zamanında sadece biri aktif olmakta (Thumb ise komutlar Thumb komut setine göre ayrıştırılır, ARM ise ARM komut satırına göre).
Her ne kadar bunlar farklı komut satırları olarak da görünseler, aslında aynı kabiliyetlerı sunarlar ve aynı Assembly kodları ile ifade edilirler.
Ör:
1 |
ADDS R0, R1, R2 |
kodu
1 2 3 4 5 |
ARM durumunda E0910002 / 11100000 10010001 00000000 00000010 Thumb durumunda ise 1888 / 00011000 10001000 |
olarak ifade ediliyor. Elbette bu iki komutta aynı işlevi yerine getiriyorlar sadece kodlama türleri ve uzunlukları farklı. Thumb’ta bulunan her komutun ARM’da da bir karşılığı bulunmaktadır.
Gelelim Android durumuna. Varsayılan olarak Android Thumb setini kullanıyor, çünkü bu daha kompak kod üretiyor ve kod biraz daha küçülüyor (tabi burada da anlatıldığı üzere bu küçülme öle yarıya inme kadar olmuyor).
Kısaca söylemek gerekirse Thumb ile oluşturulan kodlar biraz daha yavaş olsa da, ARM ile oluşturulan kodlara göre daha kompak oluyorlar. Hikayenin özeti bu 🙂
Bir sonraki paylaşımda görüşmek üzere.