8085 Assembly İle Bir Dizideki Tek ve Çift Sayıları Bulmak

Batuhan Düzgün tarafından yayınlanmıştır 27. July 2010 11:57

 

Merhaba  arkadaşlar  bu  yazımızda sizlerle   8085  mikroişlemci  assembly’sinde  bir  dizideki  tek  ve   çift  sayıları    bulan  programı  yapmaya   çalışacağız. İlk   önce normal olarak   her şeyde  olduğu  gibi   işin   algoritmasını   çıkaracağız. Şimdi    bir sayının   tek mi yoksa   çift  mi olduğunu anlamak   için   en sondaki   birler  basamağına   bakılır  birler basamağı   tek ise  sayı tektir, değilse    demek ki  sayımız  çift  bunu ikili  tabanda  ayırt  etmek  oldukça basittir.

Örnek:

0000 0111  sayını incelediğimizde  onluk tabanda   7’ye  denk gelmektedir.Şimdi  bu bit dizisini   sağa  doğru   bir kaydırma  yaptığımızda   değişimi inceleyelim.Ama burada  kaydırma   yaparken   elde biti üzerinden   kaydırma yapacağız   C=0 olarak düşünüyoruz.Elde bitimiz  sıfır   kabul edelim.

Sağa  kaydırma işlemi:
 


 C=0       0000 0011     C=1    olur.  Şimdi   biz  elde   bitini kontrol   ederek   sayının tek mi  yoksa  çift mi  olduğuna   karar   verebiliriz. Diyelim  ki karar verdik   şimdi   bunu belleğe  yazıcaz  ama   bir sıkıntı var  umarım  sizlerde fark etmişsinizdir. Ben    bunu  mikroişlemci  sınavında   fark edemediğim  için   40  puanım  gitti. Aman  dikkat  eğer  veriyi   RAR’lanmış  haliyle  kaydederseniz. Gerçek   sayıyı kaydetmemiş  olursunuz  çünkü  sizin sayınız   0000 0111  iken RAR  işlemi  sonucunda   0000  0011 olmuş   olur   o  yüzden   aynı  şekilde  akümülatörü    RAL  ile  eski  haline  getirmek  lazım , RAL   işleminden sonra   yine   bit  dizimiz   0000 0111   haline   gelir. 
 
C Kodu  Karşılığı:
 
int i=0; 
    int TekDizi[15];
    int CiftDizi[15];
    int Teksayac=0;
    int Ciftsayac=0;
    int KaynakDizi={10,11,45,12,76,13,89,1,5,4,2,56,12,13,34};
    for(i=0; i<15; i++)
    {
             if(KaynakDizi[i]%2==0)
             {
                 CiftDizi[Ciftsayac]=KaynakDizi[i];
                 Ciftsayac++;
             }
             else
             {
                 TekDizi[Teksayac]=KaynakDizi[i];
                 Teksayac++;
             }
    } 
 

Şimdi  kodumuzu  8085 assembler’ında yazıyoruz.Aşağıdaki  gibi   8085 kodunu  yazıyoruz.

LXI  H,C050  ;okuyacağımız dizinin başlangıç adresini veriyoruz

LXI  B,C070  ;tek sayıları yazacağımız dizinin başlangıç adresini veriyoruz

LXI  D,C080  ;çift sayıların başlangıç adresini veriyoruz

dongu:

MOV  A,M    ;H-L kaydedicisinin gösterdiği bellek gözündeki değeri akümülatöre alıyoruz.

RAR             ;içeriği bitsel olarak bir sağa kaydırıyoruz ve eldeye bakıyoruz eğer elde içinde

JC cift          ; 1 varsa demekki tek sayı o zaman atlama yapmayıp aşağıdan devam ediyoruz

RAL             ; RAR ile bozduğumuz bilgiyi  tekrar RAL ile geri çekip düzeltiyoruz.

STAX B       ;STAX komutuyla B-C kaydedici çiftinin  gösterdiği bellek gözüne akümülatördeki değeri yazıyoruz

INX B          ;B-C kaydedici çiftini bir arttırıyoruz.

INX H         ;Kaynak dizimizin indisini bir  arttırıyoruz.

MOV A,L    ;bu kısımda kaynak dizinin sınırını geçip  geçmediğimize bakacağız.

CPI 58      ;eğer L kaydedicisi 58 değerine ulaşmışsa döngüyü sonladır diyeceğiz.

JNZ dongu  ;Eğer zero bayrağı 1 değilse döngüye devam et,sıfır çekilmişse demekki döngü bitti.

JZ cikis       ; zero bayrağı sıfırsa cikis etiketine  git diyoruz.aslında çıkış etiketi HLT komutunun bellek adresi programı oraya zıplatacaz.

cift:

RAL           ; bu kısımda ise çift sayı bulunduğu zaman işletilecek. cift  etiketi aslında RAL komutunun saklandığı bellek adresinin değeridir.

STAX D     ;Bulduğumuz çift sayıyı ilgili bellek gözüne kaydediyoruz.

INX D        ;Çift dizileri tutan bellek gözünü bir arttıyoruz.yani indis arttırma işlemi.

INX H        ;kaynak dizi adresinin bir arttırdık.

MOV A,L   ; kaynak dizi sınırı geçtimi kontrol ediyoruz.

CPI 58      ; eğer 58 değerine geldiyse dizi sonlancak demektir.

JNZ dongu  ;değilse döngüye devam.

cikis:     ; yoksa cikis etiketine git.

HLT      ; programın bittiği nokta HLT ile belirtilir.

 

Şimdi  yukarıdaki   kodumuzu  yapıştırıp çalıştırırsak.Aşağıdaki   ekran görüntüsünü  elde ederiz.
 
 


 
 

Yukarıda resimde dikkat ederseniz  hem  akümülatörde hangi  değerin  geldiğini hemde  kaydedicilerin  içerdiği değerleri  görebiliriz.Ayrıca   elde  bayrağı , zero   bayrağı gibi   bayrakların  ne durumda olduğunu  adım  adım  inceleyebilirsiniz. Ekran çıktısına  dikkat  ederseniz  çift   sayıları   C070   adresinden  itibaren   aktaran, tek  sayıları  aynı  şekilde    aktarmaktadır.Bu  değişimi  step by step  tuşuyla    takip edebilirsiniz.Görüldüğü  üzere 8085  assembly  ile  tek ve çift  sayıları  bulan programı  yapmış bulunuyoruz.

Umarım zevkle okuyacağınız  ve bilginize  bilgi katabileceğiniz   bir  yazı olmuştur.Bir sonraki  makalemde  görüşmek  dileğiyle …

 

Batuhan  Düzgün

Sakarya Üniversitesi

BilgisayarMühendisliği 

Currently rated 3.2 by 5 people

  • Currently 3.2/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Etiketler:

8085 Assembly Dili

Comments

Add comment


(Will show your Gravatar icon)  

  Country flag

biuquote
  • Comment
  • Preview
Loading





Bu site BlogEngine.NET 1.4.5.0 ile oluşturulmuştur. Türkçe çevirisi BlogEngine TR ekibi tarafından yapılmıştır.

Batuhan Düzgün

Sakarya Üniversitesi 

Bilgisayar Mühendisi

Endüstri Mühendisi

Yeditepe Üniversitesi

Bilgisayar Mühendisliği Yüksek Lisans 

 sahibinden.com

   Kıdemli Uzman Yazılım Mühendisi  

E-Mail 

   batuhan.duzgun@sahibinden.com

   batuhan.duzgun@windowslive.com

  github.com/batux

 

Sayfalar

Calendar

<<  September 2018  >>
MoTuWeThFrSaSu
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

Yazıları geniş takvimde göster