8085 Assembly ile Diziyi Tersten Yazdırmak

Batuhan Düzgün tarafından yayınlanmıştır 13. August 2010 02:15
 
Yine bir 8085 makalesiyle karşınızdayım.Bu seferki konumuz aslında gayet basit,belli bir bellek bölgesi aralığında bulunan ardışıl verileri (yani bir diziyi),yine başka bir bellek bölgesine (yani başka bir diziye) ters sırada kopyalayan programı yapacağım.Kaynak bellek bölgemiz C060 nolu bellek adresinden başlayıp,C06A adresine kadar devam etmektedir.Ters sırada kopyalacağımız bellek alanı ise C09A adresinden başlayıp,C090 adresinde bitmektedir.Programımızın kısaca algoritması şu şekilde; ilk önce LXI ile kaynağın başlangıç adresini veriyoruz,bunu H-L çiftine yüklüyoruz.Ters sırada yazdıracağımız bellek adresinide B-C çiftine yüklüyoruz.Dizi gibi indisli işlemlerde genellikle LXI kullanılır.ardından bir döngü kurarak MOV A,M ile H-L çiftinin gösterdiği yerdeki veriyi akümülatöre alıyoruz.Daha sonrasında ise B-C çiftinin gösterdiği bellek adresine STAX komutuyla yazıyoruz.Ardından DCX ile B-C çiftini bir azaltıyoruz.INX ile H-L çiftini bir arttırıyoruz.
 
Daha sonrasında ise artık dizi sınırını aşıp aşmadığımızı kontrole geldi.işte bunun için L kaydedicisindeki veriyi akümülatöre alıp,sabit değerle karşılaştıracağız.Bu değerde 6B değeri,yani H-L çifti C06B adresini gösterdiği anda program sonlanacaktır.Bu karşılaştırmayı yapmak için CPI komutu kullanılır.HLT komutuyla da program sonlandırılır.
 
LXI H,C060 ;kaynak dizinin başlangıç adresini veriyoruz.
LXI B,C09A ;ters yazdırılacak olan alanın bitiş adresini veriyoruz.

dongu: 
MOV A,M  ;MOV A,M ile H-L çiftinin gösterdiği bellek bölgesindeki veriyi akümülatöre alıyoruz. 
STAX B ;STAX komutuyla B-C kaydedici çiftinin gösterdiği bellek bölgesine veriyi kopyalıyoruz
DCX B ;DCX ile B-C kaydedici çiftini bir azaltıyoruz.
INX H ;H-L çiftinin içeriğini bir arttırıyoruz.
MOV A,L ;L kaydedicisindeki veriyi akümülatöre alıp dizi sınırını geçip geçmeyeceğimizi kontrol edeceğiz.
CPI 6B ; CPI komtuyla birlikte 6B sınırına ulaşıp ulaşmadığımıza bakıyoruz.
;6B ile karşılaştırmamızın sebebi düşük byte'ı  L kaydedicisinde tutmamızdır.
JNZ dongu ;eğer karşılaştırma sonucunda sıfır bayrağı set edilmemişse dongu etiketine dallanıyoruz

HLT ; eğer JNZ koşulu sağlanmazsa programı bitiriyoruz.
 
Programı adım adım çalıştır yaptıktan sonraki hali aşağıdaki gibidir.
 
 
 
C000'dan C010'a kadar olan aralıkta programın opcodeları yerleştirilmiştir.C060 ile C06A arasına ise kaynak dizimiz yerleştirildi.Adım adım çalıştırmadan sonra kaynak dizinin tersi C090'dan C09A'da dahil olmak üzere kopyalandı.Umarım zevkle okuyacağınız bir makale olmuştur,bir sonraki makalemde görüşmek dileğiyle ...
 
Batuhan Düzgün
 
Sakarya Üniversitesi
 
Bilgisayar Mühendisliği 

Currently rated 3.3 by 3 people

  • Currently 3.333333/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

<<  July 2018  >>
MoTuWeThFrSaSu
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

Yazıları geniş takvimde göster