AVR Assembly -3- Mikroişlemci Durum Yazmacı (SREG)

AVR Assembly öğrenirken genel maksatlı yazmaçlar ve hafıza birimlerinden başka en önemli konulardan biri de durum yazmacıdır.

Aritmetik mantık ünitesinde (ALU) yapılan işlemler her zaman aynı sonucu vermez. Bu işlemlerin verdiği sonuçlar ise sadece 8 bitlik bir çıkıştan anlaşılamaz. Ayrıca bazen özel durumlarda kullanılmak üzere ayrı bir kontrol yolu gereklidir. Sadece veri üzerinden işlem yapmamız bizim için oldukça yorucu ve verimsiz olacaktur. ALU’nun iki değeri alıp sonuç olarak verdiğini tekrar hatırlatalım. Bir toplama işlemi yaparsak aldığımız değerlerin ikisi de 8-bit olacaktır. Bu 8-bit değerler toplandığında da 8-bit sonuç verecektir. Peki negatif, elde, sıfırlama gibi durumlardan nasıl haberimiz olabilir ?

Bunun için ayrı bir yazmaç ALU tarafından denetlenir ve bizim erişimimize açılır. Böylelikle elde edilen çıkış verisinin yanında verinin niteliğini öğrendiğimiz bir yazmacımız olur. Bu yazmacın her biri farklı bir durumu ifade etmektedir. Şimdi mikroişlemcinin blok diyagramını verelim ve durum yazmacının konumunu görelim.

Görüldüğü üzere ALU tarafından denetlenen bu yazmacın komutlara göre farklı bitleri değişir. Her komut bütün bitlerini değiştirmez. Şimdi yazmacın yapısına bakalım.

Burada gördüğünüz harflerle adlandırılmış bitlerin hepsi birer bayrak bitidir. Bayrak bitleri sadece tek bir bitten meydana gelen durum göstergeleridir. Bir lambanın açık ya da kapalı olması gibi düşünebiliriz. Bu bitlerin görevleri aşağıda listelenmiştir.

C  (Carry) Elde Bayrağı : Örneğin toplama işleminde eldeli bir sonuç elde edilirse bu bir (1) olur. Sonuçtan anlayamayız.

Z (Zero) Sıfır Bayrağı : Sonuç sıfır olursa bir (1) olur.

N (Negative) Negatif Bayrağı  : Binary sayılarda negatif yoktur. Negatifi temsil etmek amacıyla yazmacın D7 biti bir (1) yapılır. Bu durumda bu bayrak bir (1) konumunda olur. N ve V bayrakları işaretli sayı işlemlerinde kullanılır.

V (Overflow) Taşma Bayrağı  : İşaretli sayı sonucu çok büyük olduğunda bu taşma bayrağı bir (1) olur.

S (Sign) İşaret Bayrağı : Bu bayrak N ve V bayraklarının XOR işlemine tabi tutulmasından meydana gelir.

H (Half Carry) Yarım Elde Bayrağı: Bu bayrak BCD (Binary Coded Decimal) aritmetiğinde kullanılır. Eğer D3’den D4’e bir kayarsa bu bayrak biti bir (1) konumuna geçer.

T (Copy Storage) Bit Kopyalama Bayrağı : Bu bayrak biti BLD (Bit LoaD) ve BST (Bit STore) komutları için kullanılır. Bitin kaynak ya da hedef olup olmadığını belirler.

I (Global Interrupt Enable) : Bu bit bir (1) olduğunda kesmeler etkinleştirilir sıfır (0) olduğunda ise kesmeler kapatılır. C ile AVR progamlama derslerinde de çokça bahsettiğimiz üzere oldukça fazla kullanılan bir bittir.

Assembly dilinde programlama yapmak için bu yazmacın çok iyi bilinmesi ve kullanılması gereklidir. Görüldüğü gibi doğrudan ALU tarafından kontrol edilen ve bilgisine muhtaç olduğumuz bir yazmaçtır. O yüzden Assembly dilinde programlama yapmaya başlamadan öğrenmemiz gereklidir.

Bizi Facebook grubumuzda takip etmeyi unutmayın. Bilgili ve öğrenmeye hevesli bir topluluk oluşturmak istiyoruz.

https://www.facebook.com/groups/1233336523490761/

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.