AVR Assembly -1- Giriş

C dilinde AVR programlama derslerimizde teorik olarak AVR Assembly dilini anlatacağımızı söylemiştik. AVR Assembly çok zor bir konu olmadığı için bu dilde programlama yapmasanız dahi mikrodenetleyici mimarisini ve bilgisayar bilimini anlamanız için bile olsa faydası dokunacaktır. Bir de bu işlerin nerd’i olmak için en azından bir mimarinin Assembly dilinin bilinmesi gerektiği düşüncesindeyim. İleride anlatacağımız dijital elektronik ve bilgisayar mimarisi derslerinde de faydası dokunacağı için hızlıca AVR Assembly diline bir giriş yapalım. Bu seviyede uygulama yapmaktan ziyade teorik bilgileri ön plana koymak mikrodenetleyicileri ve mikroişlemcileri anlamanız için daha faydalı olacaktır.

Assembly dilinden önceden bahsetmiştik. Bu dil tek başına bir dil olmayıp her mimariye özgü bir Assembly dili bulunmaktadır. Assembly ise makine kodunun alfanümerik sembollerle yazılmasından meydana gelir. Yazdığımız programlardaki bazı unsurlar makine kodundan sayılmasa da temel komutlar instruction set (komut kümesi) adı verilen mimariye özgü işlemci komutlarıdır. Program yazarken işlemci komutları, bellek adresleri, yazmaçları ve verileri kullanmaktayız. C diline ait pek çok yapının olmaması  yazılımsal olarak bizi zayıf bıraksa da donanım yönünden tam bir hakimiyet sağladığımızdan o eksikliği donanım yönünden telafi etmekteyiz. Assembly ile daha performanslı, kritik ve küçük boyutlu program yazmamız mümkündür. AVR mimarisi C diline uyumlu tasarlanıp derleyiciler de oldukça performanslı kod üretse de Assembly dilini bilmek en azından kritik noktalarda işimize yarayacaktır. Burada bunu öğrenmekteki temel amacımızın ise mikrodenetleyicileri anlamak olduğunu tekrarlayalım.

AVR Assembly bilmekle mikrodenetleyici donanımını tam anlamıyla öğrenmiş olacağız. Böylelikle avcumuzun içi gibi bildiğimiz bir mikrodenetleyici üzerinde program yazmamız çok daha kolay olacak. AVR Assembly sanıldığı gibi zor bir dil değildir. Burada ayrı bir programlama dilini değil donanımı ve mimariyi öğrenmekteyiz. C dilinde programlama yapmak için ayrıca C dilini öğrenmemiz gerektiğini ve kütüphaneleri kullanmak zorunda olduğumuzu hatırlatalım. AVR komut kümesini incelediğimizde komutların çok karmaşık işler yapmadığını görürüz. AVR yapısı itibariyle oldukça basittir. Ayrıca donanım olarak da kullanıcı dostu olarak tasarlanmıştır. 35 yerine 135 komut olması bunu zorlaştırmaz. Komutların fazla olması kullanım kolaylığını artırmaktadır. Üstelik AVR Assembly, x86 ve diğer genel Assembly dillerine benzerlik gösterdiği için diğerlerini öğrenmenizde kolaylık sağlayacaktır.

AVR derslerini yazmaçlar ve donanım üzerinden anlattığım için zaten uygulamada çok da fazla fark görmeyeceksiniz. Örneğin PORTB |= (1<<1) komutu yerine sbi PORTB, 1 komutu kullanacaksınız. Yalnız veri yazmaçları ve adresleriyle biraz sıkıntımız olacaktır. Bunun gibi toplama, çıkarma, çarpma, okuma, yazma gibi basit fonksiyonları biraz tafsilatıyla yapmak durumundayız. AVR Komut Setini aşağıdaki dosyadan görebilirsiniz.

http://ww1.microchip.com/downloads/en/devicedoc/atmel-0856-avr-instruction-set-manual.pdf

İşlemci komutlarını şu kategorilere ayırmak mümkündür.

  • Aritmetik (Dört İşlem) ve Mantık Komutları
  • Dallandırma Komutları (C’deki Fonksiyonlara Benzer)
  • Bit Komutları (Bitwise Operatörlerine Benzer)
  • Veri Transfer Komutları
  • Mikrodenetleyici Kontrol Komutları (Sleep gibi)

Bunların hepsini zaten C ile programladığımızda farkında olmasak da yapıyoruz. Bir değişken tanımlıyoruz ve ona değer atıyoruz, bir yazmaca değer yazıyoruz, bir biti bir veya sıfır yapıyoruz… Bunları şimdi donanımı bilerek yapacağız.

Hangi durumlarda Assembly kullanılması gerektiğini de madde madde şöyle açıklamak mümkündür,

  • Eğer bugların incelenmesi gerekiyorsa
  • Eğer program yazılandan ve beklenenden farklı çalışıyorsa
  • Eğer yüksek seviye dil donanım özelliklerinden birini desteklemiyorsa
  • Eğer zamanlama yönünden kritik kodlar yazılacaksa

Önceden de söylediğimiz gibi Assembly komutları kısa ve kolay aynı zamanda da hızlıdır. AVR mikrodenetleyiciler Assembly öğrenmek için ideal mimariye sahiptir ve kolaylıkla Assembly öğrenmemiz mümkündür. Bunca zaman Assembly’in zor olduğu gibi bir ön yargımız vardı. Bunu hep beraber kıracağız.

UYARI!!

Gökhan Dökmetaş

"Arduino Eğitim Kitabı" ve "Arduino ve Raspberry PI ile Nesnelerin İnterneti" kitaplarının yazarı. Başkent Teknoloji ve Dedektör Merkezi'nde Ar-ge Sorumlusu. Araştırmacı-Yazar.

You may also like...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.