MENU

Mikroişlemci Tekn. Ve Assembly

Cep Telefonları İçin Tek Tip Şarj Aleti

24 Temmuz 2009 Yorumlar (2) Okunma: 1009 Teknoloji, Yazılım

Mikroişlemci Teknolojileri ve Assembly Uygulamaları

Bugün 2. kez merhaba:) Bugün yazdığım ilk yazımda da söylediğim gibi şimdi sizlere bu makalede bir kaç basit ve kısa Assembly uygulamaları(soruları) yazmak istiyorum. Her ne kadar basit de olsa sanıyorum neyin ne olduğu konusunda biraz yardımcı olur ilgilenenlere. Giriş seviyesindeki bu sorular sadece kodlamanın nasıl olduğu ve algoritmanın nasıl kullanıldığı hakkındabir fikir vermek için. Bu makalem, Mikro İşlemci Tekn. Ve Assembly yazımın devamı olarak kabul edilebilir.
______

Mikroişlemci Tekn. ve Assembly Dersi Basit Uygulama Örnekleri:

Algoritmayı anlayabilmeniz için öncelikle bilmenizi isterim ki sistem basitçe şöyle çalışıyor;
İşlemcimizin 1 index registry olmak üzere toplamda bizim kullanabildiğimiz 3 registry(kayıtçı) var. Bu kaçıtçıları direkt olarak RAM ile kullanamıyoruz. Aracı olarak index kayıtçısını kullanıyoruz. Burada sadece RAM adresleri tutulabilir. Yani buraya yazdığınız rakamlar bir RAM adresi olarak algılanıp işlenir! Genel olarak kullanılan; indisli, doğrudan, anında ve anlaşılır adresleme modları ile bu kayıtçılar ve RAM ile çalışabiliriz. Bu kayıtçımız 2bayt diğerleri ise 1 bayttır. Yani index kayıtçısı 4 hane saklayabilirken diğerleri 2 hane saklayabilir. Tıpkı RAM gibi.

1.Örnek;
1-300 arasındaki sayıları toplayarak sonucu FF01 adresine yazan Assembly programını yazınız.
—>(Soruda 300’e kadar gidilmekte, 300 sayısı 1bayt’dan fazla olmasına rağmen ÖRNEK amaçlı olarak normal kayıtçılarda saklanmıştır. Bu sayede daha az karmaşık bir kodlama yapabiliriz. Pratikte tam olarak doğru bir cevap değildir.)

ETİKET KOD ADRESLEME MODU AÇIKLAMA

CLR A (A kayıtçısını temizle)
CLR B (B kayıtçısını temizle)
LDA A #$0001 (A kyıtçısına 0001 sayısını yükle)
LDA B #$0002 (B kayıtçısına 0002 sayısını yükle)

KEMAL:

ABA (A kyıtçısı ile B kayıtçısını topla A’ya yaz)
INC B
(B kayıtçısını 1 arttır)
CMP B #$0300 (B kayıtçısını 300 ile karşılaştır)
BEQ ONUR (Bir önceki sonuç sıfıra eşit ise ONUR’a git(dallan))
BRA KEMAL (Koşulsuz olarak KEMAL’e git(dallan)) => Bak bu hoşuma gitti:p

ONUR:

STA A $F001 (A kayıtçısındaki bilgiyi F001 adresine yaz)
SWI (Programı bitir)=> Bu komutu hiç sevmiyorum :/

Eveet… Gördüğünüz üzere basit bir programın kodlamasını yaptık. Programımızdaki “KEMAL” ve “ONUR” kelimeleri birer etikettir. Yani program çalışırken anlık sonuçlara göre herhangi bir kod kısmına ileri ya da geri yollanarak bir döngü oluşturulur. Bu döngü istenen sonuç sağlanana kadar dallanma komutları sayesinde tekrarlanır ya da durdurulur. Bu kodlama bir Assebler da anlamlı olsa da mikroişlemcinin anmayacağı şeyler olduğu kesin. Peki mikroişlemci neyi anlar? Tabii ki OP-CODE dediğimiz kodlamadan. Açılımı; iişemin operasyonel kodu’dur.Bu kodlarınkarşılığı olan OP-CODE‘ları ise Motorola MC6802 işlemcisinin föyünden bakabiliriz. Ki zaten bende öyle yapıyorum:) Şimdi yukarıdaki sorumuzun OP-CODE‘unu çıkaralım.
OP-CODE AÇIKLAMA
4F (A kayıtçısını temizle “CLR A”)
5F (B kayıtçısını temizle “CLR B”)

86 (A kayıtçısına 0001 sayısını yükle “LDA A #$0001”)
00
01
=> Sayı olarak kullandıımız veriler bu şekilde uygun koddan sonra hemen alta yazılır.

C6 (B kayıtçısına 0002 sayısını yükle “LDA B #$0002”)
00
02

1B (A kyıtçısı ile B kayıtçısını topla A’ya yaz “ABA”)
5C
(B kayıtçısını 1 arttır)

C1 (B kayıtçısını 300 ile karşılaştır “CMP B #$0300”)
30
00

27 (Bir önceki sonuç sıfır’a eşit ise “ONUR” ‘a git)
?

20 (Koşulsuz olarak “KEMAL”‘e git)
??

97 (A kayıtçısındaki bilgiyi F001 adresine yaz)
F0
01

3F (Programı bitir)

Peki iyi güzel de; bu “?” ve “??” ne oluyor? Bunlar; dallanma komutlarından sonraki basamak sayıları. Yani dallamanın kaç basamak ilerideki ya da geride ki koda olacağını bildirir. Peki bu basamakları nasıl belirleriz?

OP-CODE da İleri veya Geri Dallanma(soru işaretlerinin değerleri):

Assembly de tüm sayıları mikroişlemcimiz 16’lık (Hexadecimal) tabanda hesaplar. Bu yüzden sayı tabanlarınıda birazcık bilmek gerekiyor:) Ama üzülecek bir şey yok, basit bir kaç şeyi bilmek yeterli:) Mesela;
16’lık tabanda 0-15 arasındaki sayılar kullanılır. 09 sayısından sonra ise 15’e kadar sayı yerine harfler kullanılır. Sıralama şu şekilde;
1-2-3-4-5-6-7-8-9-A(10)-B(11)-C(12)-D(13)-E(14)-F(15) dir.

Eğer program sıralamasına baktığımızda dallanacağımız kod kısmı geride ise kaç basamak geri olduğunu sayarız ve FF sayısından çıkarırız. Sonucu dallanma komutundan sonra yazarsak mikroişlemci bunun FF’den çıkarıldığını anlayarak asıl sayımızı bulur ve o sayı miktarınca geri basamağa gider ve çalışmasına devam eder:) Örnek olarak, yazdığımız Assembler programının OP-CODE’nda “BEQ ONUR” yazmaktadır. Bu kodun yerini belirler ve olduğumuz yerden OP-CODE adımlarını sayarız. BEQ ONUR komutundan ONUR etiketine kadar tam olarak 3 basamak var. 09’dan büyük olmadığı için normal rakamlarla yazılır ve dallanılacak kısım ileride olduğu için doğrudan yazılır. Yani OP-CODE’umuzda “?” yazan kısma “3” yazarız ve programımız 3 adım ileri giderek devam eder. Ama geriye dallanacak olsaydık bulduğumuz basamak miktarını FF sayısından çıkarıcaktık ve sonucu OP-CODE’a yazacaktık:) Örenk;
OP-Code’u 20 olan kodumuz bize başında KEMAL etiketi bulunan kod kısmına gitmemizi söylüyor. Peki kaç adım ileride veya geride bu kısım? Malumunuz mikroişlemci o kadar zeki değil, anlayamaz:) Bizim ona bildirmemiz gerekiyor. Dallanacağımız yer(KEMAL etiketinin olduğu kısım) ABA kodu. Op-CODE’u 1B olan kısım. 20 kodundan 1B koduna sayarsak, 8 adım çıkar. Bunun 16’lık tabandaki değeri aynıdır. Ama geriye dallandığımızdan dolayı bu değeri FF’den çıkarırız. FF-08=F7 sonucunu buluruz ve bunu da ??” işaretinin yerine yazarız. Aslında hiç de zor değil;) Hmm… Biraz oyalandım makalemi yazarken. Saatte geç oldu. Zaten yeterince uzadı:/ Okurken kimsenin sıkılmasını istemem bu yüzden başka bir zaman 2. makaleyi yazarak kısaca bir kaç soru ve cevabını sizlerle paylaşmayı düşündüm.

İyi akşamlar efendim…  🙂

DİĞER YAZILAR:
==> Mikroişlemci Tekn. ve Assembly

Etiketler:, , , , ,

2 Responses to Mikroişlemci Teknolojileri ve Assembly Uygulamaları

  1. ADem dedi ki:

    Hocam ben birşey sourcaktım CLR A ile A’nın içeriğini sıfırlıyoruz peki indis kayıtçımız X bu adresteki değeri silmek için ne yapıyoruz.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir